summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2002-02-23 11:56:55 +0000
committerivan <ivan>2002-02-23 11:56:55 +0000
commit903b22b3da3e3ee493bb322854c6bc0b0085e0dd (patch)
treef718d5b44a0d1205f663a094021fd00efc6e2de9 /FS
parenta41efaf444c779d415fa3e443254bd13b6edf925 (diff)
case-insensitive and substring searching
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Record.pm12
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 );
}