X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FRecord.pm;h=2517d18412adda88ebd0be8a1dc73c77c537e6e2;hb=57be672860c23f6c856328941fb37f2a9038620a;hp=63128d1b1a0af89234cf4fa91577153e6fbe216b;hpb=a3b660670b6c553563cd6095fe2d14754af56341;p=freeside.git diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 63128d1b1..2517d1841 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -2,7 +2,7 @@ package FS::Record; use strict; use vars qw( $dbdef_file $dbdef $setup_hack $AUTOLOAD @ISA @EXPORT_OK $DEBUG - $me %dbdef_cache ); + $me %dbdef_cache %virtual_fields_cache ); use subs qw(reload_dbdef); use Exporter; use Carp qw(carp cluck croak confess); @@ -313,9 +313,9 @@ sub qsearch { if ( $record->{$field} =~ /^\d+(\.\d+)?$/ && $dbdef->table($table)->column($field)->type =~ /(int|serial)/i ) { - $sth->bind_param($bind++, $record->{$field}, SQL_INTEGER ); + $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_INTEGER } ); } else { - $sth->bind_param($bind++, $record->{$field}, SQL_VARCHAR ); + $sth->bind_param($bind++, $record->{$field}, { TYPE => SQL_VARCHAR } ); } } @@ -1379,14 +1379,17 @@ sub virtual_fields { return () unless $self->dbdef->table('part_virtual_field'); - # This should be smart enough to cache results. + unless ( $virtual_fields_cache{$table} ) { + my $query = 'SELECT name from part_virtual_field ' . + "WHERE dbtable = '$table'"; + my $dbh = dbh; + my $result = $dbh->selectcol_arrayref($query); + confess $dbh->errstr if $dbh->err; + $virtual_fields_cache{$table} = $result; + } + + @{$virtual_fields_cache{$table}}; - my $query = 'SELECT name from part_virtual_field ' . - "WHERE dbtable = '$table'"; - my $dbh = dbh; - my $result = $dbh->selectcol_arrayref($query); - confess $dbh->errstr if $dbh->err; - return @$result; }