summaryrefslogtreecommitdiff
path: root/FS/FS/Record.pm
diff options
context:
space:
mode:
authorC.J. Adams-Collier <cjac@colliertech.org>2014-09-08 13:25:10 -0700
committerC.J. Adams-Collier <cjac@colliertech.org>2014-09-08 13:25:37 -0700
commitb853ec09fb19df91fe0188c5dde9d759333a2503 (patch)
treea20f9bf720149b171d1054b7e767667a8f0026c6 /FS/FS/Record.pm
parent61c4e7640f905d326b36e61ad3ce81d22a9a663a (diff)
ensuring that WHERE or AND is correctly used in "$extra_sql" snippit - FS RT #884
Diffstat (limited to 'FS/FS/Record.pm')
-rw-r--r--FS/FS/Record.pm22
1 files changed, 20 insertions, 2 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 8f75734..1b7ac8a 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