diff options
author | ivan <ivan> | 2002-02-23 11:56:55 +0000 |
---|---|---|
committer | ivan <ivan> | 2002-02-23 11:56:55 +0000 |
commit | 903b22b3da3e3ee493bb322854c6bc0b0085e0dd (patch) | |
tree | f718d5b44a0d1205f663a094021fd00efc6e2de9 /FS | |
parent | a41efaf444c779d415fa3e443254bd13b6edf925 (diff) |
case-insensitive and substring searching
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 020d14d8f..f30223351 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -180,7 +180,7 @@ sub create { } } -=item qsearch TABLE, HASHREF, SELECT, EXTRA_SQL +=item qsearch TABLE, HASHREF, SELECT, EXTRA_SQL, CACHE_OBJ Searches the database for all records matching (at least) the key/value pairs in HASHREF. Returns all the records found as `FS::TABLE' objects if that @@ -214,6 +214,14 @@ sub qsearch { my $statement = "SELECT $select FROM $stable"; if ( @fields ) { $statement .= ' WHERE '. join(' AND ', map { + + my $op = '='; + if ( ref($record->{$_}) ) { + $op = $record->{$_}{'op'} if $record->{$_}{'op'}; + $op = 'LIKE' if $op =~ /^ILIKE$/i && driver_name !~ /^Pg$/i; + $record->{$_} = $record->{$_}{'value'} + } + if ( ! defined( $record->{$_} ) || $record->{$_} eq '' ) { if ( driver_name =~ /^Pg$/i ) { qq-( $_ IS NULL OR $_ = '' )-; @@ -221,7 +229,7 @@ sub qsearch { qq-( $_ IS NULL OR $_ = "" )-; } } else { - "$_ = ?"; + "$_ $op ?"; } } @fields ); } |