[jboss-svn-commits] JBL Code SVN: r34840 - in labs/jbossrules/branches/5.1.x: drools-core/src/main/java/org/drools/runtime/rule/impl and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Aug 23 17:47:12 EDT 2010
Author: tirelli
Date: 2010-08-23 17:47:12 -0400 (Mon, 23 Aug 2010)
New Revision: 34840
Modified:
labs/jbossrules/branches/5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java
labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
Log:
JBRULES-2607: merging changes from revision #34465 into 5.1.x branch
Modified: labs/jbossrules/branches/5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java 2010-08-23 21:43:01 UTC (rev 34839)
+++ labs/jbossrules/branches/5.1.x/drools-compiler/src/test/java/org/drools/integrationtests/QueryTest.java 2010-08-23 21:47:12 UTC (rev 34840)
@@ -625,8 +625,8 @@
str += "package org.drools.test \n";
str += "import org.drools.Cheese \n";
str += "query cheeses(String $type1, String $type2) \n";
- str += " stilton : Cheese(type == $type1, $price : price) \n";
- str += " cheddar : Cheese(type == $type2, price == stilton.price) \n";
+ str += " stilton : Cheese(type == $type1, $sprice : price) \n";
+ str += " cheddar : Cheese(type == $type2, $cprice : price == stilton.price) \n";
str += "end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -663,36 +663,65 @@
ksession.insert( cheddar2 );
org.drools.runtime.rule.FactHandle c3Fh = ksession.insert( cheddar3 );
- final List updated = new ArrayList();
- final List removed = new ArrayList();
- final List added = new ArrayList();
+ final List<Object[]> updated = new ArrayList<Object[]>();
+ final List<Object[]> removed = new ArrayList<Object[]>();
+ final List<Object[]> added = new ArrayList<Object[]>();
ViewChangedEventListener listener = new ViewChangedEventListener() {
public void rowUpdated(Row row) {
- updated.add( row.get( "$price" ) );
+ Object[] array = new Object[6];
+ array[0] = row.get("stilton");
+ array[1] = row.get("cheddar");
+ array[2] = row.get("$sprice");
+ array[3] = row.get("$cprice");
+ array[4] = row.get("$type1");
+ array[5] = row.get("$type2");
+ updated.add( array );
}
public void rowRemoved(Row row) {
- removed.add( row.get( "$price" ) );
+ Object[] array = new Object[6];
+ array[0] = row.get("stilton");
+ array[1] = row.get("cheddar");
+ array[2] = row.get("$sprice");
+ array[3] = row.get("$cprice");
+ array[4] = row.get("$type1");
+ array[5] = row.get("$type2");
+ removed.add( array );
}
public void rowAdded(Row row) {
- added.add( row.get( "$price" ) );
+ Object[] array = new Object[6];
+ array[0] = row.get("stilton");
+ array[1] = row.get("cheddar");
+ array[2] = row.get("$sprice");
+ array[3] = row.get("$cprice");
+ array[4] = row.get("$type1");
+ array[5] = row.get("$type2");
+ added.add( array );
}
};
// Open the LiveQuery
- LiveQuery query = ksession.openLiveQuery( "cheeses", new Object[] { "cheddar", "stilton" } , listener );
+ LiveQuery query = ksession.openLiveQuery( "cheeses", new Object[] { "stilton", "cheddar" } , listener );
// Assert that on opening we have three rows added
assertEquals( 3, added.size() );
assertEquals( 0, removed.size() );
assertEquals( 0, updated.size() );
+ // Assert that the identifiers where retrievable
+ assertSame(stilton1, added.get( 0 )[0] );
+ assertSame(cheddar1, added.get( 0 )[1] );
+ assertEquals(1, added.get( 0 )[2] );
+ assertEquals(1, added.get( 0 )[3] );
+ assertEquals("stilton", added.get( 0 )[4] );
+ assertEquals("cheddar", added.get( 0 )[5] );
+
// And that we have correct values from those rows
- assertEquals( 1, added.get( 0 ) );
- assertEquals( 2, added.get( 1 ) );
- assertEquals( 3, added.get( 2 ) );
+ assertEquals( 1, added.get( 0 )[3] );
+ assertEquals( 2, added.get( 1 )[3] );
+ assertEquals( 3, added.get( 2 )[3] );
// Do an update that causes a match to become untrue, thus triggering a removed
cheddar3.setPrice( 4 );
@@ -702,7 +731,7 @@
assertEquals( 1, removed.size() );
assertEquals( 0, updated.size() );
- assertEquals( 4, removed.get( 0 ) );
+ assertEquals( 4, removed.get( 0 )[3] );
// Now make that partial true again, and thus another added
cheddar3.setPrice( 3 );
@@ -713,7 +742,7 @@
assertEquals( 1, removed.size() );
assertEquals( 0, updated.size() );
- assertEquals( 3, added.get( 3 ) );
+ assertEquals( 3, added.get( 3 )[3] );
// check a standard update
cheddar3.setOldPrice( 0 );
@@ -723,7 +752,7 @@
assertEquals( 1, removed.size() );
assertEquals( 1, updated.size() );
- assertEquals( 3, updated.get( 0 ) );
+ assertEquals( 3, updated.get( 0 )[3] );
// Check a standard retract
ksession.retract( s1Fh );
@@ -732,7 +761,7 @@
assertEquals( 2, removed.size() );
assertEquals( 1, updated.size() );
- assertEquals( 1, removed.get( 1 ) );
+ assertEquals( 1, removed.get( 1 )[3] );
// Close the query, we should get removed events for each row
query.close();
@@ -741,8 +770,8 @@
assertEquals( 4, removed.size() );
assertEquals( 1, updated.size() );
- assertEquals( 2, removed.get( 2 ) );
- assertEquals( 3, removed.get( 3 ) );
+ assertEquals( 2, removed.get( 2 )[3] );
+ assertEquals( 3, removed.get( 3 )[3] );
// Check that updates no longer have any impact.
ksession.update( c3Fh, cheddar3 );
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java 2010-08-23 21:43:01 UTC (rev 34839)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/runtime/rule/impl/RowAdapter.java 2010-08-23 21:47:12 UTC (rev 34840)
@@ -36,43 +36,43 @@
}
private InternalFactHandle getFactHandle(Declaration declr) {
- return this.factHandles[ declr.getPattern().getOffset() ]; // -1 because we shifted the array left
- // when removing the query object
+ return this.factHandles[ declr.getPattern().getOffset() ];
}
public Object get(String identifier) {
if ( factHandles == null ) {
- this.factHandles = this.leftTuple.getFactHandles();
+ this.factHandles = this.leftTuple.toFactHandles();
}
Declaration declr = this.rule.getDeclaration( identifier );
+ if ( declr == null ) {
+ throw new RuntimeException("The identifier '" + identifier + "' does not exist as a bound varirable for this query" );
+ }
InternalFactHandle factHandle = getFactHandle( declr );
return declr.getValue( null, factHandle.getObject() );
}
- public Object get(int i) {
- if ( factHandles == null ) {
- this.factHandles = this.leftTuple.getFactHandles();
- }
- return this.factHandles[ i + 1].getObject();
- }
-
public FactHandle getFactHandle(String identifier) {
if ( factHandles == null ) {
- this.factHandles = this.leftTuple.getFactHandles();
+ this.factHandles = this.leftTuple.toFactHandles();
}
- return null;
+ Declaration declr = this.rule.getDeclaration( identifier );
+ if ( declr == null ) {
+ throw new RuntimeException("The identifier '" + identifier + "' does not exist as a bound varirable for this query" );
+ }
+ InternalFactHandle factHandle = getFactHandle( declr );
+ return factHandle;
}
public FactHandle getFactHandle(int i) {
if ( factHandles == null ) {
- this.factHandles = this.leftTuple.getFactHandles();
+ this.factHandles = this.leftTuple.toFactHandles();
}
return null;
}
public int size() {
if ( factHandles == null ) {
- this.factHandles = this.leftTuple.getFactHandles();
+ this.factHandles = this.leftTuple.toFactHandles();
}
return 0;
}
More information about the jboss-svn-commits
mailing list