[jboss-svn-commits] JBL Code SVN: r7442 - 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
Tue Nov 7 14:20:37 EST 2006


Author: tirelli
Date: 2006-11-07 14:20:25 -0500 (Tue, 07 Nov 2006)
New Revision: 7442

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
Log:
JBRULES-539: fixing QueryTerminalNode.retractTuple method

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-11-07 19:18:19 UTC (rev 7441)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-11-07 19:20:25 UTC (rev 7442)
@@ -3383,4 +3383,88 @@
         }
     }
 
+    public void testDoubleQueryWithExists() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DoubleQueryWithExists.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+
+        Person p1 = new Person( "p1",
+                                "stilton",
+                                20 );
+        p1.setStatus( "europe" );
+        FactHandle c1FactHandle = workingMemory.assertObject( p1 );
+        Person p2 = new Person( "p2",
+                                "stilton",
+                                30 );
+        p2.setStatus( "europe" );
+        FactHandle c2FactHandle = workingMemory.assertObject( p2 );
+        Person p3 = new Person( "p3",
+                                "stilton",
+                                40 );
+        p3.setStatus( "europe" );
+        FactHandle c3FactHandle = workingMemory.assertObject( p3 );
+        workingMemory.fireAllRules();
+
+        QueryResults queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 2,
+                      queryResults.size() );
+
+        // europe=[ 1, 2 ], america=[ 3 ]
+        p3.setStatus( "america" );
+        workingMemory.modifyObject( c3FactHandle,
+                                    p3 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 1,
+                      queryResults.size() );
+
+        // europe=[ 1 ], america=[ 2, 3 ]
+        p2.setStatus( "america" );
+        workingMemory.modifyObject( c2FactHandle,
+                                    p2 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 1,
+                      queryResults.size() );
+
+        // europe=[ ], america=[ 1, 2, 3 ]
+        p1.setStatus( "america" );
+        workingMemory.modifyObject( c1FactHandle,
+                                    p1 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 2,
+                      queryResults.size() );
+
+        // europe=[ 2 ], america=[ 1, 3 ]
+        p2.setStatus( "europe" );
+        workingMemory.modifyObject( c2FactHandle,
+                                    p2 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 1,
+                      queryResults.size() );
+
+        // europe=[ 1, 2 ], america=[ 3 ]
+        p1.setStatus( "europe" );
+        workingMemory.modifyObject( c1FactHandle,
+                                    p1 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 1,
+                      queryResults.size() );
+
+        // europe=[ 1, 2, 3 ], america=[ ]
+        p3.setStatus( "europe" );
+        workingMemory.modifyObject( c3FactHandle,
+                                    p3 );
+        workingMemory.fireAllRules();
+        queryResults = workingMemory.getQueryResults("2 persons with the same status");
+        assertEquals( 2,
+                      queryResults.size() );
+    }
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl	2006-11-07 19:18:19 UTC (rev 7441)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl	2006-11-07 19:20:25 UTC (rev 7442)
@@ -0,0 +1,6 @@
+package org.drools
+
+query "2 persons with the same status"
+		p : Person($status : status, $age : age)
+		exists Person(status == $status, age > $age);
+end
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2006-11-07 19:18:19 UTC (rev 7441)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java	2006-11-07 19:20:25 UTC (rev 7442)
@@ -111,14 +111,10 @@
     public void retractTuple(final ReteTuple tuple,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
+        final LinkedList list = (LinkedList) workingMemory.getNodeMemory( this );
+        list.remove( tuple );
     }
 
-    public void modifyTuple(final ReteTuple tuple,
-                            final PropagationContext context,
-                            final InternalWorkingMemory workingMemory) {
-
-    }
-
     public String toString() {
         return "[QueryTerminalNode: rule=" + this.rule.getName() + "]";
     }




More information about the jboss-svn-commits mailing list