summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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