[jboss-svn-commits] JBL Code SVN: r19407 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/reteoo and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 3 19:54:32 EDT 2008


Author: tirelli
Date: 2008-04-03 19:54:32 -0400 (Thu, 03 Apr 2008)
New Revision: 19407

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
Log:
JBRULES-1520: fixing updateSink for NotNode

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2008-04-03 23:46:54 UTC (rev 19406)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java	2008-04-03 23:54:32 UTC (rev 19407)
@@ -762,6 +762,7 @@
         builder1.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRulesWithSubnetwork.drl" ) ) );
         ruleBaseWM.addPackage( SerializationHelper.serializeObject( builder1.getPackage() ) );
         workingMemory.fireAllRules();
+        results = (List) workingMemory.getGlobal( "results" );
         assertEquals( 1, results.size() );
         assertEquals( 3, ((List) results.get(0)).size() );
         results.clear();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-04-03 23:46:54 UTC (rev 19406)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2008-04-03 23:54:32 UTC (rev 19407)
@@ -91,6 +91,11 @@
             memory.betaMemory.getLeftTupleMemory().add( leftTuple );
         }
         
+        if ( this.sink.size() == 0 ) {
+            // nothing to do
+            return;
+        }
+        
         this.betaConstraints.updateFromTuple( memory.betaMemory.getContext(),
                                               workingMemory,
                                               leftTuple );
@@ -202,20 +207,26 @@
 
         final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
         for ( LeftTuple leftTuple = (LeftTuple) tupleIter.next(); leftTuple != null; leftTuple = (LeftTuple) tupleIter.next() ) {
-            LeftTuple child = leftTuple.getBetaChildren();
-            RightTuple match = null;
-            while( child != null ) {
-                if( match != child.getRightParent() ) {
-                    match = child.getRightParent();
-                    sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                                         match,
-                                                         sink,
-                                                         this.tupleMemoryEnabled ),
-                                          context,
-                                          workingMemory );
-                    
+            if( this.sink.size() == 1 ) { 
+                // means we had no sink before, so no calculated matches
+                assertLeftTuple( leftTuple, context, workingMemory );
+            } else {
+                // we previously calculated matches, so, just re-use them
+                LeftTuple child = leftTuple.getBetaChildren();
+                RightTuple match = null;
+                while( child != null ) {
+                    if( match != child.getRightParent() ) {
+                        match = child.getRightParent();
+                        sink.assertLeftTuple( new LeftTuple( leftTuple,
+                                                             match,
+                                                             sink,
+                                                             this.tupleMemoryEnabled ),
+                                              context,
+                                              workingMemory );
+                        
+                    }
+                    child = child.getLeftParentNext();
                 }
-                child = child.getLeftParentNext();
             }
         }
     }




More information about the jboss-svn-commits mailing list