summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2004-07-10 13:21:51 +0000
committerivan <ivan>2004-07-10 13:21:51 +0000
commitdc91892bd1c4567013bbaf11dcb0c6064899a357 (patch)
tree22660c26b9c3bb3f0d80b7b41b8e1953280df056
parent66b8da15a118480aef1330c2b336705d45f2d7cb (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
-rw-r--r--FS/FS/Record.pm18
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, ".