diff options
author | ivan <ivan> | 2008-07-03 04:12:24 +0000 |
---|---|---|
committer | ivan <ivan> | 2008-07-03 04:12:24 +0000 |
commit | 72bd7aaecbb9bad5d6e0038997423ff2be7e93b2 (patch) | |
tree | 1dddcc57be2c840d192a483f4fbeeeb90a382e99 /FS | |
parent | 71186e09c298831fab69243c0459aef5b086951c (diff) |
this should non-"=" searches on fields that require SQL type binding...
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 932c63426..d3b5e183e 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -376,10 +376,17 @@ sub qsearch { foreach my $field ( grep defined( $record->{$_} ) && $record->{$_} ne '', @real_fields ) { - if ( $record->{$field} =~ /^\d+(\.\d+)?$/ - && dbdef->table($table)->column($field)->type =~ /(int|(big)?serial)/i - ) { + my $value = $record->{$field}; + $value = $value->{'value'} if ref($value); + my $type = dbdef->table($table)->column($field)->type; + if ( $type =~ /(int|(big)?serial)/i && $value =~ /^\d+(\.\d+)?$/ ) { $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_INTEGER } ); + } elsif ( ( $type =~ /(numeric)/i && $value =~ /^[+-]?\d+(\.\d+)?$/) + || ( $type =~ /(real|float4)/i + && $value =~ /[-+]?\d*\.?\d+([eE][-+]?\d+)?/ + ) + ) { + $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_FLOAT } ); } else { $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_VARCHAR } ); } |