avoid retreiving/searching a linked object, when there is no object to retrieve ...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 6 Oct 2010 15:01:38 +0000 (15:01 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 6 Oct 2010 15:01:38 +0000 (15:01 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@18205 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Trigger/Event.pm

index 154bce9..1e534b5 100644 (file)
@@ -514,23 +514,26 @@ sub _object_by_path {
 
     if (!ref $obj) {
 
-        if ($self->standalone) {
-            $ed->xact_begin || return undef;
-        }
+        my $lval = $context->$lfield();
 
-        $obj = $_object_by_path_cache{$self->event->event_def->id}{join('.',@$path)}{$step}{$ffield}{$context->$lfield()} ||
-            $ed->$meth( 
-                ($multi) ?
-                    { $ffield => $context->$lfield() } :
-                    $context->$lfield()
-            );
+        if(defined $lval) {
 
-        $_object_by_path_cache{$self->event->event_def->id}{join('.',@$path)}{$step}{$ffield}{$context->$lfield()} ||= $obj;
+            my $def_id = $self->event->event_def->id;
+            my $str_path = join('.', @$path);
 
-        if ($self->standalone) {
-            $ed->xact_rollback || return undef;
-        }
+            if ($self->standalone) {
+                $ed->xact_begin || return undef;
+            }
 
+            $obj = $_object_by_path_cache{$def_id}{$str_path}{$step}{$ffield}{$lval} ||
+                $ed->$meth( ($multi) ? { $ffield => $lval } : $lval);
+
+            $_object_by_path_cache{$def_id}{$str_path}{$step}{$ffield}{$lval} ||= $obj;
+
+            if ($self->standalone) {
+                $ed->xact_rollback || return undef;
+            }
+        }
     }
 
     if (@$path) {