[jboss-svn-commits] JBL Code SVN: r14325 - 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
Thu Aug 16 16:21:20 EDT 2007


Author: tirelli
Date: 2007-08-16 16:21:20 -0400 (Thu, 16 Aug 2007)
New Revision: 14325

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromInsideNotAndExists.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
Log:
JBRULES-1096: fixing nasty regression of 'from' nested inside 'not' and 'exists'

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-08-16 20:03:28 UTC (rev 14324)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-08-16 20:21:20 UTC (rev 14325)
@@ -707,4 +707,42 @@
         assertEquals( 0,
                       list4.size() );
     }
+
+    public void testFromInsideNotAndExists() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ExistsWithFrom.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List list = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 list );
+
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           7 );
+        final Cheese provolone = new Cheese( "provolone",
+                                             5 );
+        final Cheesery cheesery = new Cheesery();
+        
+        cheesery.addCheese( cheddar );
+        cheesery.addCheese( provolone );
+        
+        FactHandle handle = workingMemory.insert( cheesery );
+        workingMemory.fireAllRules();
+        assertEquals( 0,
+                      list.size() );
+
+        cheesery.addCheese( new Cheese( "stilton", 10 ) );
+        cheesery.removeCheese( cheddar );
+        workingMemory.update( handle, cheesery );
+        workingMemory.fireAllRules();
+        assertEquals( 2,
+                      list.size() );
+
+    }
+
+
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromInsideNotAndExists.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromInsideNotAndExists.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_FromInsideNotAndExists.drl	2007-08-16 20:21:20 UTC (rev 14325)
@@ -0,0 +1,19 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "exists with from"
+	when
+		Cheesery( $cheeses : cheeses ) 
+		exists( Cheese( type == "stilton" ) from $cheeses )
+	then
+		results.add( "1" );
+end
+
+rule "not with from"
+	when
+		Cheesery( $cheeses : cheeses ) 
+		not( Cheese( type == "cheddar" ) from $cheeses )
+	then
+		results.add( "2" );
+end

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java	2007-08-16 20:03:28 UTC (rev 14324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java	2007-08-16 20:21:20 UTC (rev 14325)
@@ -16,6 +16,8 @@
 
 package org.drools.reteoo.builder;
 
+import java.util.Collections;
+
 import org.drools.common.BetaConstraints;
 import org.drools.reteoo.FromNode;
 import org.drools.reteoo.TupleSource;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java	2007-08-16 20:03:28 UTC (rev 14324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java	2007-08-16 20:21:20 UTC (rev 14325)
@@ -32,7 +32,6 @@
 import org.drools.reteoo.ObjectSource;
 import org.drools.reteoo.RightInputAdapterNode;
 import org.drools.reteoo.TupleSource;
-import org.drools.rule.Pattern;
 import org.drools.rule.GroupElement;
 import org.drools.rule.RuleConditionElement;
 
@@ -209,8 +208,8 @@
                            utils,
                            child );
 
-            // if child is not a pattern adapt it into a subnetwork
-            if ( !(child instanceof Pattern) ) {
+            // if it is a subnetwork
+            if ( context.getObjectSource() == null && context.getTupleSource() != null ) {
 
                 // attach right input adapter node to convert tuple source into an object source
                 context.setObjectSource( (ObjectSource) utils.attachNode( context,
@@ -284,8 +283,8 @@
                            utils,
                            child );
 
-            // if child is not a pattern adapt it into a subnetwork
-            if ( !(child instanceof Pattern) ) {
+            // if it is a subnetwork
+            if ( context.getObjectSource() == null && context.getTupleSource() != null ) {
 
                 // attach right input adapter node to convert tuple source into an object source
                 context.setObjectSource( (ObjectSource) utils.attachNode( context,




More information about the jboss-svn-commits mailing list