[jboss-svn-commits] JBL Code SVN: r5052 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests drools-compiler/src/test/resources/org/drools/integrationtests drools-core/src/main/java/org/drools/reteoo

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 12 17:17:41 EDT 2006


Author: tirelli
Date: 2006-07-12 17:17:29 -0400 (Wed, 12 Jul 2006)
New Revision: 5052

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyObject.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
Log:
Fixing JBRULES-318

   * Fixing JoinNode.modifyObject()
   * Updating test cases



Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-07-12 19:40:12 UTC (rev 5051)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-07-12 21:17:29 UTC (rev 5052)
@@ -49,6 +49,7 @@
 import org.drools.TestParam;
 import org.drools.WorkingMemory;
 import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.audit.WorkingMemoryLogger;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyObject.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyObject.drl	2006-07-12 19:40:12 UTC (rev 5051)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_JoinNodeModifyObject.drl	2006-07-12 21:17:29 UTC (rev 5052)
@@ -7,18 +7,29 @@
 global java.util.List orderedNumbers;
 global java.util.List errors;
  
-rule "Order"
-salience 200
+rule "Order1"
+salience 210
 	when
-		#Doesnt work
+	    # testing join node + eval
 		n1 : IndexedNumber($nb1 : number);
 		n2 : IndexedNumber(number < $nb1);
 		eval(n1.getIndex() < n2.getIndex());
-		
 	then
 		if ( ! (n1.getIndex() < n2.getIndex())) {
-		    errors.add("Shouldn't fire for: " + n1 + " " + n2);
+		    errors.add("{1} Shouldn't fire for: " + n1 + " " + n2);
         }
+end		
+
+rule "Order2"
+salience 200
+	when
+	    #testing pure join nodes
+		n1 : IndexedNumber($nb1 : number, $index : index);
+		n2 : IndexedNumber(number < $nb1, index > $index );
+	then
+		if ( ! (n1.getIndex() < n2.getIndex())) {
+		    errors.add("{2} Shouldn't fire for: " + n1 + " " + n2);
+        }
 		swap(n1, n2);
 		modify(n1);
 		modify(n2);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-07-12 19:40:12 UTC (rev 5051)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-07-12 21:17:29 UTC (rev 5052)
@@ -308,7 +308,7 @@
                              final PropagationContext context,
                              final ReteooWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-
+        
         // Remove and re-add the FactHandle from memory, ensures that its the latest on the list
         final ObjectMatches objectMatches = memory.remove( workingMemory,
                                                            handle );
@@ -323,7 +323,11 @@
             final ReteTuple leftTuple = (ReteTuple) it.next();
             if ( tupleMatch != null && tupleMatch.getTuple() == leftTuple ) {
                 // has previous match so need to decide whether to continue
-                // modify or retract                
+                // modify or retract    
+
+                // Need to get the "next" tuple match before messing with references 
+                // using objectMatches.remove( tupleMatch ); for instance.
+                TupleMatch nextTupleMatch = (TupleMatch) tupleMatch.getNext();
                 if ( binder.isAllowed( handle,
                                        leftTuple,
                                        workingMemory ) ) {
@@ -337,7 +341,7 @@
                                            context,
                                            workingMemory );
                 }
-                tupleMatch = (TupleMatch) tupleMatch.getNext();
+                tupleMatch = nextTupleMatch;
             } else {
                 // no previous join, so attempt join now
                 final TupleMatch newTupleMatch = attemptJoin( leftTuple,




More information about the jboss-svn-commits mailing list