diff options
author | C.J. Adams-Collier <cjac@colliertech.org> | 2014-09-08 13:25:10 -0700 |
---|---|---|
committer | C.J. Adams-Collier <cjac@colliertech.org> | 2014-09-08 13:25:37 -0700 |
commit | b853ec09fb19df91fe0188c5dde9d759333a2503 (patch) | |
tree | a20f9bf720149b171d1054b7e767667a8f0026c6 /FS | |
parent | 61c4e7640f905d326b36e61ad3ce81d22a9a663a (diff) |
ensuring that WHERE or AND is correctly used in "$extra_sql" snippit - FS RT #884
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 8f7573443..1b7ac8a7c 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -402,13 +402,31 @@ sub qsearch { get_real_fields($table, $record, \@real_fields)); } - $statement .= " $extra_sql" if defined($extra_sql); + if( defined($extra_sql) ){ + if( $statement =~ /\sWHERE\s/i ){ + if( $extra_sql =~ /^\s*AND /i ){ + # correct format + }elsif($extra_sql =~ /^\s*WHERE /i ){ + $extra_sql =~ s/WHERE /AND /i; + }else{ + $extra_sql = " AND $extra_sql"; + } + }else{ + if( $extra_sql =~ /^\s*AND /i ){ + $extra_sql =~ s/AND /WHERE /i; + }elsif($extra_sql =~ /^\s*WHERE /i ){ + # correct format + }else{ + $extra_sql = " WHERE $extra_sql"; + } + } + $statement .= " $extra_sql"; + } $statement .= " $order_by" if defined($order_by); push @statement, $statement; warn "[debug]$me $statement\n" if $DEBUG > 1 || $debug; - foreach my $field ( grep defined( $record->{$_} ) && $record->{$_} ne '', @real_fields |