From dc91892bd1c4567013bbaf11dcb0c6064899a357 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 10 Jul 2004 13:21:51 +0000 Subject: [PATCH 1/1] fix FS::Record::qsearch to (hopefully) work as before and cluck loudly when the FS::tablename class isn't loaded, rather than throw exceptions --- FS/FS/Record.pm | 18 +++++++++++++++--- 1 file 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, ". -- 2.11.0