[jboss-svn-commits] JBL Code SVN: r7486 - in labs/jbossrules/branches/3.0.x/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 16:57:05 EST 2006
Author: tirelli
Date: 2006-11-08 16:56:53 -0500 (Wed, 08 Nov 2006)
New Revision: 7486
Modified:
labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/branches/3.0.x/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/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2006-11-08 20:56:23 UTC (rev 7485)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2006-11-08 21:56:53 UTC (rev 7486)
@@ -109,6 +109,7 @@
public void retractTuple(final ReteTuple tuple,
final PropagationContext context,
final ReteooWorkingMemory workingMemory) {
+ // following code is needed because of queries that eventually uses "exists"
final LinkedList list = (LinkedList) workingMemory.getNodeMemory( this );
list.remove( tuple );
}
@@ -116,8 +117,6 @@
public void modifyTuple(final ReteTuple tuple,
final PropagationContext context,
final ReteooWorkingMemory workingMemory) {
- // mark: nothing to do here?
-
}
public String toString() {
Modified: labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2006-11-08 20:56:23 UTC (rev 7485)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2006-11-08 21:56:53 UTC (rev 7486)
@@ -27,7 +27,6 @@
import org.drools.base.DroolsQuery;
import org.drools.common.AbstractWorkingMemory;
import org.drools.common.DefaultAgenda;
-import org.drools.common.DefaultFactHandle;
import org.drools.common.EqualityKey;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalRuleBase;
@@ -155,19 +154,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/branches/3.0.x/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-11-08 20:56:23 UTC (rev 7485)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-11-08 21:56:53 UTC (rev 7486)
@@ -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;
@@ -37,6 +40,7 @@
public class QueryTerminalNodeTest extends TestCase {
public void testQueryTerminalNode() {
final ReteooRuleBase ruleBase = new ReteooRuleBase();
+
final Rete rete = ruleBase.getRete();
final ClassObjectType queryObjectType = new ClassObjectType( DroolsQuery.class );
@@ -98,10 +102,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 );
@@ -167,7 +184,8 @@
workingMemory.retractObject( handle2 );
results = workingMemory.getQueryResults( "query-1" );
- assertNull( results );
+ assertEquals( 0,
+ results.size() );
}
More information about the jboss-svn-commits
mailing list