diff options
author | ivan <ivan> | 2004-07-10 13:21:51 +0000 |
---|---|---|
committer | ivan <ivan> | 2004-07-10 13:21:51 +0000 |
commit | dc91892bd1c4567013bbaf11dcb0c6064899a357 (patch) | |
tree | 22660c26b9c3bb3f0d80b7b41b8e1953280df056 /FS | |
parent | 66b8da15a118480aef1330c2b336705d45f2d7cb (diff) |
fix FS::Record::qsearch to (hopefully) work as before and cluck loudly when the FS::tablename class isn't loaded, rather than throw exceptions
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index c3d783232..4e5e18a84 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -210,7 +210,13 @@ sub qsearch { my $pkey = $dbdef_table->primary_key; my @real_fields = grep exists($record->{$_}), real_fields($table); - my @virtual_fields = grep exists($record->{$_}), "FS::$table"->virtual_fields; + my @virtual_fields; + if ( eval 'scalar(@FS::'. $table. '::ISA);' ) { + @virtual_fields = grep exists($record->{$_}), "FS::$table"->virtual_fields; + } else { + cluck "warning: FS::$table not loaded; virtual fields not searchable"; + @virtual_fields = (); + } my $statement = "SELECT $select FROM $stable"; if ( @real_fields or @virtual_fields ) { @@ -328,10 +334,15 @@ sub qsearch { $sth->execute or croak "Error executing \"$statement\": ". $sth->errstr; + if ( eval 'scalar(@FS::'. $table. '::ISA);' ) { + @virtual_fields = "FS::$table"->virtual_fields; + } else { + cluck "warning: FS::$table not loaded; virtual fields not returned either"; + @virtual_fields = (); + } + my %result; tie %result, "Tie::IxHash"; - @virtual_fields = "FS::$table"->virtual_fields; - my @stuff = @{ $sth->fetchall_arrayref( {} ) }; if($pkey) { %result = map { $_->{$pkey}, $_ } @stuff; @@ -340,6 +351,7 @@ sub qsearch { } $sth->finish; + if ( keys(%result) and @virtual_fields ) { $statement = "SELECT virtual_field.recnum, part_virtual_field.name, ". |