[jboss-svn-commits] JBL Code SVN: r7488 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo test/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Nov 8 17:03:50 EST 2006
Author: tirelli
Date: 2006-11-08 17:03:34 -0500 (Wed, 08 Nov 2006)
New Revision: 7488
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/ReteooWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
Log:
JBRULES-544: improving query results to return empty list when no results where found. Unit test updated
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-08 22:02:46 UTC (rev 7487)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2006-11-08 22:03:34 UTC (rev 7488)
@@ -111,6 +111,7 @@
public void retractTuple(final ReteTuple tuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+ // following code is needed because of queries that eventually uses "exists"
final LinkedList list = (LinkedList) workingMemory.getNodeMemory( this );
list.remove( tuple );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2006-11-08 22:02:46 UTC (rev 7487)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2006-11-08 22:03:34 UTC (rev 7488)
@@ -81,19 +81,35 @@
public QueryResults getQueryResults(final String query) {
final FactHandle handle = assertObject( new DroolsQuery( query ) );
final QueryTerminalNode node = (QueryTerminalNode) this.queryResults.remove( query );
+ Query queryObj = null;
+ List list = null;
+
if ( node == null ) {
+ org.drools.rule.Package[] pkgs = this.ruleBase.getPackages();
+ for( int i = 0; i < pkgs.length; i++ ) {
+ Rule rule = pkgs[i].getRule( query );
+ if( ( rule != null ) && ( rule instanceof Query ) ) {
+ queryObj = (Query) rule;
+ break;
+ }
+ }
retractObject( handle );
- return null;
+ if( queryObj == null ) {
+ throw new IllegalArgumentException("Query '"+query+"' does not exist");
+ }
+ list = Collections.EMPTY_LIST;
+ } else {
+ list = (List) this.nodeMemories.remove( node.getId() );
+
+ retractObject( handle );
+ if ( list == null ) {
+ list = Collections.EMPTY_LIST;
+ }
+ queryObj = (Query) node.getRule();
}
- final List list = (List) this.nodeMemories.remove( node.getId() );
-
- retractObject( handle );
- if ( list == null ) {
- return null;
- }
return new QueryResults( list,
- (Query) node.getRule(),
+ queryObj,
this );
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-11-08 22:02:46 UTC (rev 7487)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-11-08 22:03:34 UTC (rev 7488)
@@ -16,8 +16,11 @@
* limitations under the License.
*/
+import java.lang.reflect.Field;
import java.util.Iterator;
+import java.util.Map;
+import junit.framework.Assert;
import junit.framework.TestCase;
import org.drools.FactHandle;
@@ -39,6 +42,7 @@
public class QueryTerminalNodeTest extends TestCase {
public void testQueryTerminalNode() {
final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+
final Rete rete = ruleBase.getRete();
final ClassObjectType queryObjectType = new ClassObjectType( DroolsQuery.class );
@@ -101,10 +105,23 @@
queryNode.attach();
+ final org.drools.rule.Package pkg = new org.drools.rule.Package("com.drools.test");
+ pkg.addRule( query );
+
+ try {
+ Field pkgField = ruleBase.getClass().getSuperclass().getDeclaredField( "pkgs" );
+ pkgField.setAccessible( true );
+ Map pkgs = (Map) pkgField.get( ruleBase );
+ pkgs.put( pkg.getName(), pkg );
+ } catch ( Exception e ) {
+ Assert.fail("Should not throw any exception: "+e.getMessage());
+ }
+
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
QueryResults results = workingMemory.getQueryResults( "query-1" );
- assertNull( results );
+ assertEquals( 0,
+ results.size() );
final Cheese stilton1 = new Cheese( "stilton",
100 );
@@ -170,7 +187,8 @@
workingMemory.retractObject( handle2 );
results = workingMemory.getQueryResults( "query-1" );
- assertNull( results );
+ assertEquals( 0,
+ results.size() );
}
More information about the jboss-svn-commits
mailing list