[teiid-commits] teiid SVN: r4551 - in branches/7.7.x/engine/src: test/java/org/teiid/query/rewriter and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Tue Feb 5 15:21:35 EST 2013
Author: jolee
Date: 2013-02-05 15:21:35 -0500 (Tue, 05 Feb 2013)
New Revision: 4551
Modified:
branches/7.7.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
branches/7.7.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
Log:
TEIID-2366: If where clause contains both equal and greater then conditions then query may return no results
Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2013-02-05 20:09:09 UTC (rev 4550)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2013-02-05 20:21:35 UTC (rev 4551)
@@ -1231,8 +1231,14 @@
if (cc.getOperator() == CompareCriteria.EQ) {
exprMap.put(cc.getLeftExpression(), cc);
} else if (modified) {
- newCrits.add(sc);
- exprMap.put(sc.getExpression(), sc);
+ if (sc.getNumberOfValues() == 1) {
+ CompareCriteria comp = new CompareCriteria(sc.getExpression(), CompareCriteria.EQ, (Expression)sc.getValues().iterator().next());
+ newCrits.add(comp);
+ exprMap.put(sc.getExpression(), comp);
+ } else {
+ newCrits.add(sc);
+ exprMap.put(sc.getExpression(), sc);
+ }
return null;
}
} else {
@@ -1240,7 +1246,7 @@
if (cc1.getOperator() == CompareCriteria.NE) {
exprMap.put(cc.getLeftExpression(), cc);
} else if (cc1.getOperator() == CompareCriteria.EQ) {
- if (!Evaluator.compare(cc1, ((Constant)cc1.getRightExpression()).getValue(), ((Constant)cc.getRightExpression()).getValue())) {
+ if (!Evaluator.compare(cc, ((Constant)cc1.getRightExpression()).getValue(), ((Constant)cc.getRightExpression()).getValue())) {
return FALSE_CRITERIA;
}
return null;
Modified: branches/7.7.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
===================================================================
--- branches/7.7.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2013-02-05 20:09:09 UTC (rev 4550)
+++ branches/7.7.x/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2013-02-05 20:21:35 UTC (rev 4551)
@@ -2410,6 +2410,18 @@
helpTestRewriteCriteria("pm1.g1.e2 > 5 and pm1.g1.e2 < 2", "1 = 0");
}
+ @Test public void testRewritePredicateOptimization8() throws Exception {
+ helpTestRewriteCriteria("pm1.g1.e2 = 2 and pm1.g1.e2 > 1", "pm1.g1.e2 = 2");
+ }
+
+ @Test public void testRewritePredicateOptimization8a() throws Exception {
+ helpTestRewriteCriteria("pm1.g1.e2 in (0, 2) and pm1.g1.e2 > 1", "pm1.g1.e2 = 2");
+ }
+
+ @Test public void testRewritePredicateOptimization9() throws Exception {
+ helpTestRewriteCriteria("not(pm1.g1.e2 = 2 and pm1.g1.e2 = 3)", "(pm1.g1.e2 <> 2) OR (pm1.g1.e2 <> 3)");
+ }
+
@Test public void testRewritePredicateOptimizationOr() throws Exception {
helpTestRewriteCriteria("pm1.g1.e2 in (5, 6) or pm1.g1.e2 = 2", "pm1.g1.e2 IN (2, 5, 6)");
}
More information about the teiid-commits
mailing list