[jboss-svn-commits] JBL Code SVN: r13512 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jul 14 17:22:36 EDT 2007


Author: tirelli
Date: 2007-07-14 17:22:36 -0400 (Sat, 14 Jul 2007)
New Revision: 13512

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
Log:
JBRULES-1006: fixing bug on pattern offset calculation

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-14 19:47:36 UTC (rev 13511)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-07-14 21:22:36 UTC (rev 13512)
@@ -3357,6 +3357,33 @@
                       results.get(1) );
     }
 
-    
+    public void testMultipleFroms() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_multipleFroms.drl" ) ) );
+        final Package pkg = builder.getPackage();
 
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+        
+        final Cheesery cheesery = new Cheesery();
+        cheesery.addCheese( new Cheese( "stilton", 15 ) );
+        cheesery.addCheese( new Cheese( "brie", 10 ) );
+
+        workingMemory.setGlobal( "cheesery", cheesery );
+
+        workingMemory.fireAllRules();
+
+        assertEquals( 2,
+                      results.size() );
+        assertEquals( 2,
+                      ((List)results.get(0)).size() );
+        assertEquals( 2,
+                      ((List)results.get(1)).size() );
+    }
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_multipleFroms.drl	2007-07-14 21:22:36 UTC (rev 13512)
@@ -0,0 +1,16 @@
+package org.drools
+
+import java.util.ArrayList;
+
+global org.drools.Cheesery cheesery;
+global java.util.List results;
+
+rule MyRule
+    dialect "java"
+when
+	$i : ArrayList() from collect(Cheese() from cheesery.getCheeses())
+    $k : ArrayList() from collect(Cheese() from cheesery.getCheeses())
+then
+    results.add( $i );
+    results.add( $k );
+end

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-07-14 19:47:36 UTC (rev 13511)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-07-14 21:22:36 UTC (rev 13512)
@@ -58,8 +58,9 @@
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
-        // save tuple source for later if needed
+        // save tuple source and current pattern offset for later if needed
         final TupleSource tupleSource = context.getTupleSource();
+        final int currentPatternIndex = context.getCurrentPatternOffset();
         
         // builds the source pattern
         builder.build( context,
@@ -103,6 +104,7 @@
                                                                                     existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
+        context.setCurrentPatternOffset( currentPatternIndex );
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-07-14 19:47:36 UTC (rev 13511)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-07-14 21:22:36 UTC (rev 13512)
@@ -56,8 +56,9 @@
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
-        // save tuple source for later if needed
+        // save tuple source and pattern offset for later if needed
         final TupleSource tupleSource = context.getTupleSource();
+        final int currentPatternIndex = context.getCurrentPatternOffset();
         
         // builds the source pattern
         builder.build( context,
@@ -97,6 +98,7 @@
                                                                                  existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
+        context.setCurrentPatternOffset( currentPatternIndex );
     }
 
     /**




More information about the jboss-svn-commits mailing list