[Jifty-commit] r5878 - in Jifty-DBI/trunk: lib/Jifty/DBI

Jifty commits jifty-commit at lists.jifty.org
Fri Sep 19 19:21:54 EDT 2008


Author: ruz
Date: Fri Sep 19 19:21:53 2008
New Revision: 5878

Modified:
   Jifty-DBI/trunk/   (props changed)
   Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm

Log:
 r5898 at cubic-pc:  cubic | 2008-09-20 02:48:16 +0400
 * cache load attempts in local static cache
 * move all code related inside a block


Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	Fri Sep 19 19:21:53 2008
@@ -1555,6 +1555,7 @@
     return (shift)->_apply_filters( direction => 'output', @_ );
 }
 
+{ my %cache = ();
 sub _apply_filters {
     my $self = shift;
     my %args = (
@@ -1567,14 +1568,20 @@
     my @filters = $self->_filters(%args);
     my $action = $args{'direction'} eq 'output' ? 'decode' : 'encode';
     foreach my $filter_class (@filters) {
-        local $UNIVERSAL::require::ERROR;
-        $filter_class->require()
-            unless $INC{ join( '/', split( /::/, $filter_class ) ) . ".pm" };
-
-        if ($UNIVERSAL::require::ERROR) {
-            warn $UNIVERSAL::require::ERROR;
+        unless ( exists $cache{ $filter_class } ) {
+            local $UNIVERSAL::require::ERROR;
+            $filter_class->require;
+            if ($UNIVERSAL::require::ERROR) {
+                warn $UNIVERSAL::require::ERROR;
+                $cache{ $filter_class } = 0;
+                next;
+            }
+            $cache{ $filter_class } = 1;
+        }
+        elsif ( !$cache{ $filter_class } ) {
             next;
         }
+
         my $filter = $filter_class->new(
             record    => $self,
             column    => $args{'column'},
@@ -1585,7 +1592,7 @@
         # XXX TODO error proof this
         $filter->$action();
     }
-}
+} }
 
 =head2 is_distinct COLUMN_NAME, VALUE
 


More information about the Jifty-commit mailing list