summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2003-12-21 23:13:41 +0000
committerivan <ivan>2003-12-21 23:13:41 +0000
commit3dc9375300fa2b9706e2b5707694022962f65b4d (patch)
treeeb6cb88eb6baea816d2893db45b823e551e7f39c
parentcfebba4f8a73501b86d7a14037de88c0c87c758e (diff)
cache virtual_fields method results to help performance
-rw-r--r--FS/FS/Record.pm19
1 files changed, 11 insertions, 8 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 14dfca2cb..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);
@@ -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;
}