ensuring that WHERE or AND is correctly used in "$extra_sql" snippit - FS RT #884
authorC.J. Adams-Collier <cjac@colliertech.org>
Mon, 8 Sep 2014 20:25:10 +0000 (13:25 -0700)
committerC.J. Adams-Collier <cjac@colliertech.org>
Mon, 8 Sep 2014 20:25:37 +0000 (13:25 -0700)
FS/FS/Record.pm

index 8f75734..1b7ac8a 100644 (file)
@@ -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