[jboss-svn-commits] JBL Code SVN: r16192 - in labs/jbossrules/trunk/drools-analytics/src: main/java/org/drools/analytics/components and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 31 06:30:50 EDT 2007
Author: Rikkola
Date: 2007-10-31 06:30:50 -0400 (Wed, 31 Oct 2007)
New Revision: 16192
Added:
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/PatternOrderTest.java
labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/optimisation/OptimisationPatternOrderTest.drl
Modified:
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsEvalDescr.java
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Pattern.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java
Log:
Added Eval order check to patterns.
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -246,6 +246,8 @@
AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
AnalyticsEvalDescr eval = new AnalyticsEvalDescr();
+ eval.setRuleId(currentRule.getId());
+ eval.setRuleName(currentRule.getRuleName());
eval.setContent(descr.getContent().toString());
eval.setClassMethodName(descr.getClassMethodName());
eval.setOrderNumber(orderNumber);
@@ -431,6 +433,7 @@
pattern.setRuleId(currentRule.getId());
pattern.setRuleName(currentRule.getRuleName());
pattern.setClassId(clazz.getId());
+ pattern.setName(clazz.getName());
pattern.setPatternNot(solvers.getRuleSolver().isChildNot());
pattern.setPatternExists(solvers.getRuleSolver().isExists());
pattern.setPatternForall(solvers.getRuleSolver().isForall());
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -59,6 +59,8 @@
.getResourceAsStream("Consequence.drl")));
list.add(new InputStreamReader(RuleLoader.class
.getResourceAsStream("optimisation/RestrictionOrder.drl")));
+ list.add(new InputStreamReader(RuleLoader.class
+ .getResourceAsStream("optimisation/PatternOrder.drl")));
// list.add(new InputStreamReader(RuleLoader.class
// .getResourceAsStream("redundancy/Possibilities.drl")));
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsEvalDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsEvalDescr.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsEvalDescr.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -41,4 +41,9 @@
public void setContent(String content) {
this.content = content;
}
+
+ @Override
+ public String toString() {
+ return "Eval, content: " + content;
+ }
}
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Pattern.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Pattern.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Pattern.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -14,6 +14,7 @@
private int ruleId;
private int classId;
+ private String name;
private AnalyticsComponentType sourceType = AnalyticsComponentType.NOTHING;
private int sourceId = -1;
@@ -90,11 +91,20 @@
this.sourceType = sourceType;
}
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
@Override
public Object clone() {
Pattern clone = new Pattern();
clone.setRuleId(ruleId);
clone.setClassId(classId);
+ clone.setName(name);
clone.setSourceType(sourceType);
clone.setSourceId(sourceId);
clone.setPatternNot(isPatternNot);
@@ -106,6 +116,6 @@
@Override
public String toString() {
- return "Pattern, id: " + id + " from rule '" + ruleName + "'";
+ return "Pattern, name: " + name;
}
}
Added: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl 2007-10-31 10:30:50 UTC (rev 16192)
@@ -0,0 +1,56 @@
+#created on: 27.10.2007
+package org.drools.analytics.optimisation
+
+#list any import classes here.
+import java.util.Collection;
+import java.util.ArrayList;
+
+import org.drools.analytics.components.Pattern;
+import org.drools.analytics.components.AnalyticsRule;
+import org.drools.analytics.components.OperatorDescr;
+import org.drools.analytics.components.AnalyticsEvalDescr;
+import org.drools.analytics.components.AnalyticsComponent;
+import org.drools.analytics.components.AnalyticsComponentType;
+import org.drools.analytics.report.components.AnalyticsMessage;
+import org.drools.analytics.dao.AnalyticsResult;
+
+
+#declare any global variables here
+global AnalyticsResult result;
+
+
+
+
+rule "Optimise evals inside pattern"
+ when
+ $operator :OperatorDescr()
+
+ $eval :AnalyticsEvalDescr(
+ parent == $operator
+ )
+
+ # Any other AnalyticsComponent that is not predicate or operator
+ $other :AnalyticsComponent(
+ parent == $operator,
+ orderNumber > $eval.orderNumber,
+ ( componentType != AnalyticsComponentType.OPERATOR && != AnalyticsComponentType.EVAL )
+ )
+
+ $rule :AnalyticsRule(
+ id == $eval.ruleId
+ )
+ then
+ Collection list = new ArrayList();
+ list.add( $eval );
+ list.add( $other );
+ result.save( new AnalyticsMessage(
+ AnalyticsMessage.Severity.NOTE,
+ AnalyticsMessage.MessageType.OPTIMISATION,
+ $rule,
+ "Rule \"" + $eval.getRuleName() +
+ "\" would be more effective if the less expensive component, (" +
+ $other +
+ "), could be before (" +
+ $eval + ").",
+ list ) );
+end
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/AnalyticsTestStandalone.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -39,6 +39,10 @@
.parse(new InputStreamReader(
Analyzer.class
.getResourceAsStream("optimisation/OptimisationRestrictionOrderTest.drl")));
+ PackageDescr descr10 = new DrlParser()
+ .parse(new InputStreamReader(
+ Analyzer.class
+ .getResourceAsStream("optimisation/OptimisationPatternOrderTest.drl")));
Analyzer a = new Analyzer();
// a.addPackageDescr(descr);
@@ -50,6 +54,8 @@
a.addPackageDescr(descr7);
a.addPackageDescr(descr8);
a.addPackageDescr(descr9);
+ a.addPackageDescr(descr10);
+
a.fireAnalysis();
// System.out.print(a.getResultAsPlainText());
// System.out.print(a.getResultAsXML());
Added: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/PatternOrderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/PatternOrderTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/PatternOrderTest.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -0,0 +1,59 @@
+package org.drools.analytics.optimisation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.analytics.TestBase;
+import org.drools.analytics.components.AnalyticsComponent;
+import org.drools.analytics.dao.AnalyticsDataFactory;
+import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.report.components.AnalyticsMessage;
+import org.drools.analytics.report.components.AnalyticsMessageBase;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+
+public class PatternOrderTest extends TestBase {
+
+ public void testEvalOrderInsideOperator() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("PatternOrder.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Optimise evals inside pattern"));
+
+ // Clear data so that test data doesn't mix.
+ AnalyticsDataFactory.clearAnalyticsData();
+ Collection<? extends Object> testData = getTestData(this.getClass()
+ .getResourceAsStream("OptimisationPatternOrderTest.drl"));
+
+ // Clear result so that test data doesn't mix.
+ AnalyticsDataFactory.clearAnalyticsResult();
+ AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
+ session.setGlobal("result", result);
+
+ session.executeWithResults(testData);
+
+ Iterator<AnalyticsMessageBase> iter = result.getBySeverity(
+ AnalyticsMessageBase.Severity.NOTE).iterator();
+
+ Collection<String> ruleNames = new ArrayList<String>();
+ while (iter.hasNext()) {
+ Object o = (Object) iter.next();
+ if (o instanceof AnalyticsMessage) {
+ String name = ((AnalyticsMessage) o).getCauses().toArray(
+ new AnalyticsComponent[2])[0].getRuleName();
+
+ ruleNames.add(name);
+ }
+ }
+
+ assertTrue(ruleNames.remove("Wrong eval order 1"));
+
+ if (!ruleNames.isEmpty()) {
+ for (String string : ruleNames) {
+ fail("Rule " + string + " caused an error.");
+ }
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java 2007-10-31 06:55:18 UTC (rev 16191)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java 2007-10-31 10:30:50 UTC (rev 16192)
@@ -166,7 +166,7 @@
assertEquals(2, pairs.size());
}
- public void testEvalOrderInsideOperator() throws Exception {
+ public void testPredicateOrderInsideOperator() throws Exception {
StatelessSession session = getStatelessSession(this.getClass()
.getResourceAsStream("RestrictionOrder.drl"));
Added: labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/optimisation/OptimisationPatternOrderTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/optimisation/OptimisationPatternOrderTest.drl (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/optimisation/OptimisationPatternOrderTest.drl 2007-10-31 10:30:50 UTC (rev 16192)
@@ -0,0 +1,19 @@
+package com.misc.someData
+
+import com.sample.DroolsTest.Message;
+
+rule "Correct eval order 1"
+ when
+ Foo( )
+ eval( func(1, 2) )
+ then
+ // Something
+end
+
+rule "Wrong eval order 1"
+ when
+ eval( func(1, 2) )
+ Foo( )
+ then
+ // Something
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list