X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FSQL.pm;h=22def2688a9a4f44308f1fc7f04f116d06f5ea8f;hp=b5782b140ea9f76c134fc3ede9380546a24a7705;hb=43a06151e47d2c59b833cbd8c26d97865ee850b6;hpb=6587f6ba7d047ddc1686c080090afe7d53365bd4 diff --git a/rt/lib/RT/SQL.pm b/rt/lib/RT/SQL.pm index b5782b140..22def2688 100644 --- a/rt/lib/RT/SQL.pm +++ b/rt/lib/RT/SQL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -51,6 +51,7 @@ package RT::SQL; use strict; use warnings; + use constant HAS_BOOLEAN_PARSER => do { local $@; eval { require Parse::BooleanLogic; 1 } @@ -70,7 +71,7 @@ my $re_aggreg = qr[(?i:AND|OR)]; my $re_delim = qr[$RE{delimited}{-delim=>qq{\'\"}}]; my $re_value = qr[[+-]?\d+|NULL|$re_delim]; my $re_keyword = qr[[{}\w\.]+|$re_delim]; -my $re_op = qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)]; # long to short +my $re_op = qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)|(?i:NOT STARTSWITH)|(?i:STARTSWITH)|(?i:NOT ENDSWITH)|(?i:ENDSWITH)]; # long to short my $re_open_paren = qr[\(]; my $re_close_paren = qr[\)]; @@ -92,6 +93,7 @@ sub ParseToArray { sub Parse { my ($string, $cb) = @_; + my $loc = sub {HTML::Mason::Commands::loc(@_)}; $string = '' unless defined $string; my $want = KEYWORD | OPEN_PAREN; @@ -128,7 +130,7 @@ sub Parse { unless ($current && $want & $current) { my $tmp = substr($string, 0, pos($string)- length($match)); $tmp .= '>'. $match .'<--here'. substr($string, pos($string)); - my $msg = "Wrong query, expecting a ". _BitmaskToString($want) ." in '$tmp'"; + my $msg = $loc->("Wrong query, expecting a [_1] in '[_2]'", _BitmaskToString($want), $tmp); return $cb->{'Error'}->( $msg ) if $cb->{'Error'}; die $msg; } @@ -178,7 +180,7 @@ sub Parse { $want = AGGREG; $want |= CLOSE_PAREN if $depth; } else { - my $msg = "Query parser is lost"; + my $msg = $loc->("Query parser is lost"); return $cb->{'Error'}->( $msg ) if $cb->{'Error'}; die $msg; } @@ -187,15 +189,15 @@ sub Parse { } # while unless( !$last || $last & (CLOSE_PAREN | VALUE) ) { - my $msg = "Incomplete query, last element (" - . _BitmaskToString($last) - . ") is not CLOSE_PAREN or VALUE in '$string'"; + my $msg = $loc->("Incomplete query, last element ([_1]) is not close paren or value in '[_2]'", + _BitmaskToString($last), + $string); return $cb->{'Error'}->( $msg ) if $cb->{'Error'}; die $msg; } if( $depth ) { - my $msg = "Incomplete query, $depth paren(s) isn't closed in '$string'"; + my $msg = $loc->("Incomplete query, [quant,_1,unclosed paren] in '[_2]'", $depth, $string); return $cb->{'Error'}->( $msg ) if $cb->{'Error'}; die $msg; }