qsearch gets sames "IS NULL" semantics as other WHERE clauses
[freeside.git] / site_perl / Record.pm
index 111bb82..7c2980b 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw($dbdef_file $dbdef $setup_hack $AUTOLOAD @ISA @EXPORT_OK);
 use subs qw(reload_dbdef);
 use Exporter;
 use vars qw($dbdef_file $dbdef $setup_hack $AUTOLOAD @ISA @EXPORT_OK);
 use subs qw(reload_dbdef);
 use Exporter;
-use Carp;
+use Carp qw(carp cluck croak confess);
 use File::CounterFile;
 use FS::UID qw(dbh checkruid swapuid getotaker datasrc);
 use FS::dbdef;
 use File::CounterFile;
 use FS::UID qw(dbh checkruid swapuid getotaker datasrc);
 use FS::dbdef;
@@ -14,7 +14,7 @@ use FS::dbdef;
 
 #ask FS::UID to run this stuff for us later
 $FS::UID::callback{'FS::Record'} = sub { 
 
 #ask FS::UID to run this stuff for us later
 $FS::UID::callback{'FS::Record'} = sub { 
-  $File::CounterFile::DEFAULT_DIR = "/usr/local/etc/freeside/counters". datasrc;
+  $File::CounterFile::DEFAULT_DIR = "/usr/local/etc/freeside/counters.". datasrc;
   $dbdef_file = "/usr/local/etc/freeside/dbdef.". datasrc;
   &reload_dbdef unless $setup_hack; #$setup_hack needed now?
 };
   $dbdef_file = "/usr/local/etc/freeside/dbdef.". datasrc;
   &reload_dbdef unless $setup_hack; #$setup_hack needed now?
 };
@@ -169,9 +169,12 @@ sub qsearch {
   my($sth);
   my($statement) = "SELECT * FROM $table". ( @fields
     ? " WHERE ". join(' AND ',
   my($sth);
   my($statement) = "SELECT * FROM $table". ( @fields
     ? " WHERE ". join(' AND ',
-        map("$_ = ". _quote($record->{$_},$table,$_), @fields)
-      )
-    : ''
+      map {
+        $self->getfield($_) eq ''
+          ? "$_ IS NULL"
+          : "$_ = ". _quote($self->getfield($_),$table,$_)
+      } @fields)
+    ) : ''
   );
   $sth=$dbh->prepare($statement)
     or croak $dbh->errstr; #is that a little too harsh?  hmm.
   );
   $sth=$dbh->prepare($statement)
     or croak $dbh->errstr; #is that a little too harsh?  hmm.
@@ -181,7 +184,7 @@ sub qsearch {
       eval 'create FS::'. $table. ' ( $sth->fetchrow_hashref );';
     } ( 1 .. $sth->execute );
   } else {
       eval 'create FS::'. $table. ' ( $sth->fetchrow_hashref );';
     } ( 1 .. $sth->execute );
   } else {
-    carp "qsearch: warning: FS::$table not loaded; returning generic FS::Record objects";
+    cluck "qsearch: warning: FS::$table not loaded; returning generic FS::Record objects";
     map {
       new FS::Record ($table,$sth->fetchrow_hashref);
     } ( 1 .. $sth->execute );
     map {
       new FS::Record ($table,$sth->fetchrow_hashref);
     } ( 1 .. $sth->execute );
@@ -754,6 +757,10 @@ sub fields {
 
 =back
 
 
 =back
 
+=head1 VERSION
+
+$Id: Record.pm,v 1.7 1998-11-15 10:56:31 ivan Exp $
+
 =head1 BUGS
 
 This module should probably be renamed, since much of the functionality is
 =head1 BUGS
 
 This module should probably be renamed, since much of the functionality is
@@ -871,7 +878,13 @@ added pod documentation ivan@sisd.com 98-sep-6
 ut_phonen got ''; at the end ivan@sisd.com 98-sep-27
 
 $Log: Record.pm,v $
 ut_phonen got ''; at the end ivan@sisd.com 98-sep-27
 
 $Log: Record.pm,v $
-Revision 1.5  1998-11-13 09:56:51  ivan
+Revision 1.7  1998-11-15 10:56:31  ivan
+qsearch gets sames "IS NULL" semantics as other WHERE clauses
+
+Revision 1.6  1998/11/15 05:31:03  ivan
+bugfix for new config layout
+
+Revision 1.5  1998/11/13 09:56:51  ivan
 change configuration file layout to support multiple distinct databases (with
 own set of config files, export, etc.)
 
 change configuration file layout to support multiple distinct databases (with
 own set of config files, export, etc.)