finish treating serials as ints!
[freeside.git] / FS / FS / Record.pm
index 1fe51e0..14dfca2 100644 (file)
@@ -21,7 +21,7 @@ use Tie::IxHash;
 @ISA = qw(Exporter);
 @EXPORT_OK = qw(dbh fields hfields qsearch qsearchs dbdef jsearch);
 
-$DEBUG = 2;
+$DEBUG = 0;
 $me = '[FS::Record]';
 
 #ask FS::UID to run this stuff for us later
@@ -230,7 +230,8 @@ sub qsearch {
       if ( ! defined( $record->{$_} ) || $record->{$_} eq '' ) {
         if ( $op eq '=' ) {
           if ( driver_name eq 'Pg' ) {
-            if ( $dbdef->table($table)->column($column)->type =~ /(int)/i ) {
+            my $type = $dbdef->table($table)->column($column)->type;
+            if ( $type =~ /(int|serial)/i ) {
               qq-( $column IS NULL )-;
             } else {
               qq-( $column IS NULL OR $column = '' )-;
@@ -240,7 +241,8 @@ sub qsearch {
           }
         } elsif ( $op eq '!=' ) {
           if ( driver_name eq 'Pg' ) {
-            if ( $dbdef->table($table)->column($column)->type =~ /(int)/i ) {
+            my $type = $dbdef->table($table)->column($column)->type;
+            if ( $type =~ /(int|serial)/i ) {
               qq-( $column IS NOT NULL )-;
             } else {
               qq-( $column IS NOT NULL AND $column != '' )-;
@@ -309,7 +311,7 @@ sub qsearch {
     grep defined( $record->{$_} ) && $record->{$_} ne '', @real_fields
   ) {
     if ( $record->{$field} =~ /^\d+(\.\d+)?$/
-         && $dbdef->table($table)->column($field)->type =~ /(int)/i
+         && $dbdef->table($table)->column($field)->type =~ /(int|serial)/i
     ) {
       $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_INTEGER } );
     } else {
@@ -664,7 +666,7 @@ sub insert {
   if (@virtual_fields) {
     my %v_values = map { $_, $self->getfield($_) } @virtual_fields;
 
-    my $vfieldpart = vfieldpart_hashref($table);
+    my $vfieldpart = $self->vfieldpart_hashref;
 
     my $v_statement = "INSERT INTO virtual_field(recnum, vfieldpart, value) ".
                     "VALUES (?, ?, ?)";
@@ -753,7 +755,7 @@ sub delete {
   my $primary_key = $self->dbdef_table->primary_key;
   my $v_sth;
   my @del_vfields;
-  my $vfp = vfieldpart_hashref($self->table);
+  my $vfp = $self->vfieldpart_hashref;
   foreach($self->virtual_fields) {
     next if $self->getfield($_) eq '';
     unless(@del_vfields) {
@@ -870,7 +872,7 @@ sub replace {
   my $v_rep_sth;
   my $v_del_sth;
   my (@add_vfields, @rep_vfields, @del_vfields);
-  my $vfp = vfieldpart_hashref($old->table);
+  my $vfp = $old->vfieldpart_hashref;
   foreach(grep { exists($diff{$_}) } $new->virtual_fields) {
     if($diff{$_} eq '') {
       # Delete
@@ -1511,9 +1513,11 @@ TABLE.
 =cut
 
 sub vfieldpart_hashref {
-  my ($table) = @_;
+  my $self = shift;
+  my $table = $self->table;
+
+  return {} unless $self->dbdef->table('part_virtual_field');
 
-  return () unless $table;
   my $dbh = dbh;
   my $statement = "SELECT vfieldpart, name FROM part_virtual_field WHERE ".
                   "dbtable = '$table'";