@Test
public void testDoubleQueryWithExists() throws Exception {
KnowledgeBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_DoubleQueryWithExists.drl"));
StatefulKnowledgeSession session = createKnowledgeSession( kbase );
final Person p1 = new Person( "p1",
"stilton",
20 );
p1.setStatus( "europe" );
final FactHandle c1FactHandle = session.insert( p1 );
final Person p2 = new Person( "p2",
"stilton",
30 );
p2.setStatus( "europe" );
final FactHandle c2FactHandle = session.insert( p2 );
final Person p3 = new Person( "p3",
"stilton",
40 );
p3.setStatus( "europe" );
final FactHandle c3FactHandle = session.insert( p3 );
session.fireAllRules();
QueryResults results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 2,
results.size() );
// europe=[ 1, 2 ], america=[ 3 ]
p3.setStatus( "america" );
session.update( c3FactHandle,
p3 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 1,
results.size() );
// europe=[ 1 ], america=[ 2, 3 ]
p2.setStatus( "america" );
session.update( c2FactHandle,
p2 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 1,
results.size() );
// europe=[ ], america=[ 1, 2, 3 ]
p1.setStatus( "america" );
session.update( c1FactHandle,
p1 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 2,
results.size() );
// europe=[ 2 ], america=[ 1, 3 ]
p2.setStatus( "europe" );
session.update( c2FactHandle,
p2 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 1,
results.size() );
// europe=[ 1, 2 ], america=[ 3 ]
p1.setStatus( "europe" );
session.update( c1FactHandle,
p1 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 1,
results.size() );
// europe=[ 1, 2, 3 ], america=[ ]
p3.setStatus( "europe" );
session.update( c3FactHandle,
p3 );
session.fireAllRules();
results = session.getQueryResults( "2 persons with the same status" );
assertEquals( 2,