|
From: <jbo...@li...> - 2006-06-24 22:21:41
|
Author: tirelli
Date: 2006-06-24 18:21:31 -0400 (Sat, 24 Jun 2006)
New Revision: 4815
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
Log:
JBRULES-319:
* Fixing bindings for OR
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-06-24 18:53:00 UTC (rev 4814)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-06-24 22:21:31 UTC (rev 4815)
@@ -223,8 +223,8 @@
build( this.rule,
(ConditionalElementDescr) object,
and,
- false,
- false );
+ false, // do not decrement offset
+ false ); // do not decrement first offset
this.rule.addPattern( and );
} else if ( object instanceof OrDescr ) {
final Or or = new Or();
@@ -232,8 +232,8 @@
build( this.rule,
(ConditionalElementDescr) object,
or,
- false,
- false );
+ true, // when OR is used, offset MUST be decremented
+ false ); // do not decrement first offset
this.rule.addPattern( or );
} else if ( object instanceof NotDescr ) {
// We cannot have declarations created inside a not visible outside it, so track no declarations so they can be removed
@@ -243,8 +243,8 @@
build( this.rule,
(ConditionalElementDescr) object,
not,
- true,
- true );
+ true, // when NOT is used, offset MUST be decremented
+ true ); // when NOT is used, offset MUST be decremented for first column
this.rule.addPattern( not );
// remove declarations bound inside not node
@@ -261,8 +261,8 @@
build( this.rule,
(ConditionalElementDescr) object,
exists,
- true,
- true );
+ true, // when EXIST is used, offset MUST be decremented
+ true ); // when EXIST is used, offset MUST be decremented for first column
// remove declarations bound inside not node
for ( final Iterator notIt = this.notDeclarations.keySet().iterator(); notIt.hasNext(); ) {
this.declarations.remove( notIt.next() );
@@ -307,8 +307,8 @@
build( rule,
(ConditionalElementDescr) object,
and,
- false,
- false );
+ false, // do not decrement offset
+ false ); // do not decrement first offset
ce.addChild( and );
} else if ( object instanceof OrDescr ) {
final Or or = new Or();
@@ -316,8 +316,8 @@
build( rule,
(ConditionalElementDescr) object,
or,
- false,
- false );
+ true, // when OR is used, offset MUST be decremented
+ false ); // do not decrement first offset
ce.addChild( or );
} else if ( object instanceof NotDescr ) {
final Not not = new Not();
@@ -325,8 +325,8 @@
build( rule,
(ConditionalElementDescr) object,
not,
- true,
- true );
+ true, // when NOT is used, offset MUST be decremented
+ true ); // when NOT is used, offset MUST be decremented for first column
ce.addChild( not );
} else if ( object instanceof ExistsDescr ) {
final Exists exists = new Exists();
@@ -334,8 +334,8 @@
build( rule,
(ConditionalElementDescr) object,
exists,
- true,
- true );
+ true, // when EXIST is used, offset MUST be decremented
+ true ); // when EXIST is used, offset MUST be decremented for first column
ce.addChild( exists );
} else if ( object instanceof EvalDescr ) {
final EvalCondition eval = build( (EvalDescr) object );
@@ -983,26 +983,14 @@
// we start with -1 so that we can ++this.value - otherwise the first element has a lower value than the second in an 'or'
private int value = -1;
- private boolean orCheck;
-
private GroupElement ge;
public void setParent(final GroupElement ge) {
this.ge = ge;
- this.orCheck = false;
}
public int getNext() {
- if ( this.ge != null && this.ge.getClass() == Or.class ) {
- if ( !this.orCheck ) {
- this.orCheck = true;
- return ++this.value;
- } else {
- return this.value;
- }
- } else {
- return ++this.value;
- }
+ return ++this.value;
}
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-06-24 18:53:00 UTC (rev 4814)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-06-24 22:21:31 UTC (rev 4815)
@@ -37,6 +37,7 @@
import org.drools.CheeseEqual;
import org.drools.Cheesery;
import org.drools.FactHandle;
+import org.drools.IndexedNumber;
import org.drools.Person;
import org.drools.PersonInterface;
import org.drools.QueryResults;
@@ -45,7 +46,7 @@
import org.drools.State;
import org.drools.TestParam;
import org.drools.WorkingMemory;
-import org.drools.common.ObjectInputStreamWithLoader;
+import org.drools.audit.WorkingMemoryFileLogger;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
@@ -57,6 +58,8 @@
import org.drools.event.AfterActivationFiredEvent;
import org.drools.event.AgendaEventListener;
import org.drools.event.BeforeActivationFiredEvent;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.event.DefaultAgendaEventListener;
import org.drools.integrationtests.helloworld.Message;
import org.drools.lang.descr.PackageDescr;
@@ -64,7 +67,6 @@
import org.drools.rule.Rule;
import org.drools.spi.ActivationGroup;
import org.drools.spi.AgendaGroup;
-import org.drools.util.PrimitiveLongMap;
/**
* This contains the test cases for each engines implementation to execute.
@@ -2331,7 +2333,7 @@
assertTrue( list.contains( "fired3" ) );
}
- public void FIXME_testOrWithBinding() throws Exception {
+ public void testOrWithBinding() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader(
@@ -2375,4 +2377,40 @@
return bytes;
}
+ public void FIXME_testEval2() throws Exception {
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Eval.drl" ) );
+
+ WorkingMemoryFileLogger logger = null;
+ try {
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg1 = builder.getPackage();
+
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg1 );
+ final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+
+// logger = new WorkingMemoryFileLogger(workingMemory);
+// logger.setFileName( "logger.log" );
+// DebugWorkingMemoryEventListener l1 = new DebugWorkingMemoryEventListener();
+// workingMemory.addEventListener( l1 );
+// DebugAgendaEventListener l2 = new DebugAgendaEventListener();
+// workingMemory.addEventListener( l2 );
+
+ final int MAX = 3;
+ for (int i=1 ; i<=MAX; i++) {
+ IndexedNumber n = new IndexedNumber(i, MAX - i + 1);
+ workingMemory.assertObject(n);
+ }
+ workingMemory.fireAllRules();
+
+ } catch ( RuntimeException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+// logger.writeToDisk();
+ }
+
+ }
+
}
|