Index: drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java (revision 7289) +++ drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java (working copy) @@ -2763,6 +2763,91 @@ cheeseList.size() ); } + 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() ); + } + public void testLLR() throws Exception { //read in the source Index: drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl =================================================================== --- drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl (revision 0) +++ drools-compiler/src/test/resources/org/drools/integrationtests/test_DoubleQueryWithExists.drl (revision 0) @@ -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