|
@@ -44,12 +44,21 @@ import org.elasticsearch.xpack.ql.tree.Source;
|
|
|
import org.elasticsearch.xpack.ql.type.DataType;
|
|
|
import org.elasticsearch.xpack.ql.type.EsField;
|
|
|
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
import static java.util.Collections.emptyMap;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.equalsOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.greaterThanOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.greaterThanOrEqualOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.lessThanOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.lessThanOrEqualOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.notEqualsOf;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.nullEqualsOf;
|
|
|
import static org.elasticsearch.xpack.ql.TestUtils.of;
|
|
|
+import static org.elasticsearch.xpack.ql.TestUtils.rangeOf;
|
|
|
import static org.elasticsearch.xpack.ql.expression.Literal.FALSE;
|
|
|
import static org.elasticsearch.xpack.ql.expression.Literal.NULL;
|
|
|
import static org.elasticsearch.xpack.ql.expression.Literal.TRUE;
|
|
@@ -144,21 +153,21 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testConstantFoldingBinaryComparison() {
|
|
|
- assertEquals(FALSE, new ConstantFolding().rule(new GreaterThan(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(FALSE, new ConstantFolding().rule(new GreaterThanOrEqual(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(FALSE, new ConstantFolding().rule(new Equals(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(FALSE, new ConstantFolding().rule(new NullEquals(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(FALSE, new ConstantFolding().rule(new NullEquals(EMPTY, TWO, NULL)).canonical());
|
|
|
- assertEquals(TRUE, new ConstantFolding().rule(new NotEquals(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(TRUE, new ConstantFolding().rule(new LessThanOrEqual(EMPTY, TWO, THREE)).canonical());
|
|
|
- assertEquals(TRUE, new ConstantFolding().rule(new LessThan(EMPTY, TWO, THREE)).canonical());
|
|
|
+ assertEquals(FALSE, new ConstantFolding().rule(greaterThanOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(FALSE, new ConstantFolding().rule(greaterThanOrEqualOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(FALSE, new ConstantFolding().rule(equalsOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(FALSE, new ConstantFolding().rule(nullEqualsOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(FALSE, new ConstantFolding().rule(nullEqualsOf(TWO, NULL)).canonical());
|
|
|
+ assertEquals(TRUE, new ConstantFolding().rule(notEqualsOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(TRUE, new ConstantFolding().rule(lessThanOrEqualOf(TWO, THREE)).canonical());
|
|
|
+ assertEquals(TRUE, new ConstantFolding().rule(lessThanOf(TWO, THREE)).canonical());
|
|
|
}
|
|
|
|
|
|
public void testConstantFoldingBinaryLogic() {
|
|
|
assertEquals(FALSE,
|
|
|
- new ConstantFolding().rule(new And(EMPTY, new GreaterThan(EMPTY, TWO, THREE), TRUE)).canonical());
|
|
|
+ new ConstantFolding().rule(new And(EMPTY, greaterThanOf(TWO, THREE), TRUE)).canonical());
|
|
|
assertEquals(TRUE,
|
|
|
- new ConstantFolding().rule(new Or(EMPTY, new GreaterThanOrEqual(EMPTY, TWO, THREE), TRUE)).canonical());
|
|
|
+ new ConstantFolding().rule(new Or(EMPTY, greaterThanOrEqualOf(TWO, THREE), TRUE)).canonical());
|
|
|
}
|
|
|
|
|
|
public void testConstantFoldingBinaryLogic_WithNullHandling() {
|
|
@@ -176,8 +185,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testConstantFoldingRange() {
|
|
|
- assertEquals(true, new ConstantFolding().rule(new Range(EMPTY, FIVE, FIVE, true, L(10), false)).fold());
|
|
|
- assertEquals(false, new ConstantFolding().rule(new Range(EMPTY, FIVE, FIVE, false, L(10), false)).fold());
|
|
|
+ assertEquals(true, new ConstantFolding().rule(rangeOf(FIVE, FIVE, true, L(10), false)).fold());
|
|
|
+ assertEquals(false, new ConstantFolding().rule(rangeOf(FIVE, FIVE, false, L(10), false)).fold());
|
|
|
}
|
|
|
|
|
|
public void testConstantNot() {
|
|
@@ -211,14 +220,14 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
|
|
|
public void testLiteralsOnTheRight() {
|
|
|
Alias a = new Alias(EMPTY, "a", L(10));
|
|
|
- Expression result = new BooleanLiteralsOnTheRight().rule(new Equals(EMPTY, FIVE, a));
|
|
|
+ Expression result = new BooleanLiteralsOnTheRight().rule(equalsOf(FIVE, a));
|
|
|
assertTrue(result instanceof Equals);
|
|
|
Equals eq = (Equals) result;
|
|
|
assertEquals(a, eq.left());
|
|
|
assertEquals(FIVE, eq.right());
|
|
|
|
|
|
a = new Alias(EMPTY, "a", L(10));
|
|
|
- result = new BooleanLiteralsOnTheRight().rule(new NullEquals(EMPTY, FIVE, a));
|
|
|
+ result = new BooleanLiteralsOnTheRight().rule(nullEqualsOf(FIVE, a));
|
|
|
assertTrue(result instanceof NullEquals);
|
|
|
NullEquals nullEquals= (NullEquals) result;
|
|
|
assertEquals(a, nullEquals.left());
|
|
@@ -271,7 +280,7 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testFoldExcludingRangeToFalse() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r = new Range(EMPTY, fa, SIX, false, FIVE, true);
|
|
|
+ Range r = rangeOf(fa, SIX, false, FIVE, true);
|
|
|
assertTrue(r.foldable());
|
|
|
assertEquals(Boolean.FALSE, r.fold());
|
|
|
}
|
|
@@ -280,7 +289,7 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testFoldExcludingRangeWithDifferentTypesToFalse() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r = new Range(EMPTY, fa, SIX, false, L(5.5d), true);
|
|
|
+ Range r = rangeOf(fa, SIX, false, L(5.5d), true);
|
|
|
assertTrue(r.foldable());
|
|
|
assertEquals(Boolean.FALSE, r.fold());
|
|
|
}
|
|
@@ -289,8 +298,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
|
|
|
public void testCombineBinaryComparisonsNotComparable() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, SIX);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, FALSE);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, SIX);
|
|
|
+ LessThan lt = lessThanOf(fa, FALSE);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
And and = new And(EMPTY, lte, lt);
|
|
@@ -301,8 +310,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a <= 6 AND a < 5 -> a < 5
|
|
|
public void testCombineBinaryComparisonsUpper() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, SIX);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, FIVE);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, SIX);
|
|
|
+ LessThan lt = lessThanOf(fa, FIVE);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
|
|
@@ -315,8 +324,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 6 <= a AND 5 < a -> 6 <= a
|
|
|
public void testCombineBinaryComparisonsLower() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, SIX);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, FIVE);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, SIX);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, FIVE);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
|
|
@@ -329,8 +338,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 5 <= a AND 5 < a -> 5 < a
|
|
|
public void testCombineBinaryComparisonsInclude() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, FIVE);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, FIVE);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, FIVE);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, FIVE);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
|
|
@@ -344,8 +353,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsAndRangeLower() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, TWO, true, THREE, false);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, TWO, true, THREE, false);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
Expression exp = rule.rule(new And(EMPTY, gt, range));
|
|
@@ -361,8 +370,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsAndRangeUpper() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, FOUR);
|
|
|
- Range range = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ LessThan lt = lessThanOf(fa, FOUR);
|
|
|
+ Range range = rangeOf(fa, ONE, false, THREE, false);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
Expression exp = rule.rule(new And(EMPTY, range, lt));
|
|
@@ -378,8 +387,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsAndRangeUpperEqual() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, ONE, false, THREE, false);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
Expression exp = rule.rule(new And(EMPTY, lte, range));
|
|
@@ -394,10 +403,10 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 3 <= a AND 4 < a AND a <= 7 AND a < 6 -> 4 < a < 6
|
|
|
public void testCombineMultipleBinaryComparisons() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, THREE);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, FOUR);
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, L(7));
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, SIX);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, THREE);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, FOUR);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, L(7));
|
|
|
+ LessThan lt = lessThanOf(fa, SIX);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
|
|
@@ -413,10 +422,10 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 3 <= a AND TRUE AND 4 < a AND a != 5 AND a <= 7 -> 4 < a <= 7 AND a != 5 AND TRUE
|
|
|
public void testCombineMixedMultipleBinaryComparisons() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, THREE);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, FOUR);
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, L(7));
|
|
|
- Expression ne = new Not(EMPTY, new Equals(EMPTY, fa, FIVE));
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, THREE);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, FOUR);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, L(7));
|
|
|
+ Expression ne = new Not(EMPTY, equalsOf(fa, FIVE));
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
|
|
@@ -435,8 +444,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 1 <= a AND a < 5 -> 1 <= a < 5
|
|
|
public void testCombineComparisonsIntoRange() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, ONE);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, FIVE);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, ONE);
|
|
|
+ LessThan lt = lessThanOf(fa, FIVE);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
Expression exp = rule.rule(new And(EMPTY, gte, lt));
|
|
@@ -455,19 +464,20 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
FieldAttribute fb = getFieldAttribute("b");
|
|
|
FieldAttribute fc = getFieldAttribute("c");
|
|
|
|
|
|
- GreaterThan agt1 = new GreaterThan(EMPTY, fa, ONE);
|
|
|
- LessThan alt3 = new LessThan(EMPTY, fa, THREE);
|
|
|
- GreaterThan bgt2 = new GreaterThan(EMPTY, fb, TWO);
|
|
|
- LessThan blt4 = new LessThan(EMPTY, fb, FOUR);
|
|
|
- LessThan clt4 = new LessThan(EMPTY, fc, FOUR);
|
|
|
+ ZoneId zoneId = randomZone();
|
|
|
+ GreaterThan agt1 = new GreaterThan(EMPTY, fa, ONE, zoneId);
|
|
|
+ LessThan alt3 = new LessThan(EMPTY, fa, THREE, zoneId);
|
|
|
+ GreaterThan bgt2 = new GreaterThan(EMPTY, fb, TWO, zoneId);
|
|
|
+ LessThan blt4 = new LessThan(EMPTY, fb, FOUR, zoneId);
|
|
|
+ LessThan clt4 = new LessThan(EMPTY, fc, FOUR, zoneId);
|
|
|
|
|
|
Expression inputAnd = Predicates.combineAnd(Arrays.asList(agt1, alt3, bgt2, blt4, clt4));
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
|
Expression outputAnd = rule.rule(inputAnd);
|
|
|
|
|
|
- Range agt1lt3 = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
- Range bgt2lt4 = new Range(EMPTY, fb, TWO, false, FOUR, false);
|
|
|
+ Range agt1lt3 = new Range(EMPTY, fa, ONE, false, THREE, false, zoneId);
|
|
|
+ Range bgt2lt4 = new Range(EMPTY, fb, TWO, false, FOUR, false, zoneId);
|
|
|
|
|
|
// The actual outcome is (c < 4) AND (1 < a < 3) AND (2 < b < 4), due to the way the Expression types are combined in the Optimizer
|
|
|
Expression expectedAnd = Predicates.combineAnd(Arrays.asList(clt4, agt1lt3, bgt2lt4));
|
|
@@ -479,8 +489,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunctionOfIncludedRange() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, ONE, false, FOUR, false);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, ONE, false, FOUR, false);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -493,8 +503,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunctionOfNonOverlappingBoundaries() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, ONE, false, TWO, false);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, ONE, false, TWO, false);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -513,8 +523,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunctionOfUpperEqualsOverlappingBoundaries() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, true);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, true);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -527,8 +537,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunctionOverlappingUpperBoundary() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r1 = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r1 = rangeOf(fa, ONE, false, THREE, false);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -541,8 +551,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunctionWithDifferentUpperLimitInclusion() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, true);
|
|
|
+ Range r1 = rangeOf(fa, ONE, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, true);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -560,8 +570,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testRangesOverlappingConjunctionNoLowerBoundary() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, L(0), false, ONE, true);
|
|
|
- Range r2 = new Range(EMPTY, fa, L(0), true, TWO, false);
|
|
|
+ Range r1 = rangeOf(fa, L(0), false, ONE, true);
|
|
|
+ Range r2 = rangeOf(fa, L(0), true, TWO, false);
|
|
|
|
|
|
And and = new And(EMPTY, r1, r2);
|
|
|
|
|
@@ -574,8 +584,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndRangeGt3Lt5() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, THREE, false, FIVE, false);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, THREE, false, FIVE, false);
|
|
|
And and = new And(EMPTY, range, neq);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -592,8 +602,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndRangeGt0Lt1() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, L(0), false, ONE, false);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, L(0), false, ONE, false);
|
|
|
And and = new And(EMPTY, neq, range);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -610,8 +620,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndRangeGte2Lt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, TWO, true, THREE, false);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, TWO, true, THREE, false);
|
|
|
And and = new And(EMPTY, neq, range);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -628,8 +638,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq3AndRangeGt2Lte3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, THREE);
|
|
|
- Range range = new Range(EMPTY, fa, TWO, false, THREE, true);
|
|
|
+ NotEquals neq = notEqualsOf(fa, THREE);
|
|
|
+ Range range = rangeOf(fa, TWO, false, THREE, true);
|
|
|
And and = new And(EMPTY, neq, range);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -646,8 +656,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndRangeGt1Lt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, ONE, false, THREE, false);
|
|
|
And and = new And(EMPTY, neq, range);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -659,8 +669,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndGt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, THREE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, THREE);
|
|
|
And and = new And(EMPTY, neq, gt);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -672,8 +682,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndGte2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, TWO);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, TWO);
|
|
|
And and = new And(EMPTY, neq, gte);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -687,8 +697,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndGte1() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, ONE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, ONE);
|
|
|
And and = new And(EMPTY, neq, gte);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -700,8 +710,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndLte3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, THREE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, THREE);
|
|
|
And and = new And(EMPTY, neq, lte);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -713,8 +723,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndLte2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, TWO);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, TWO);
|
|
|
And and = new And(EMPTY, neq, lte);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -728,8 +738,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsConjunction_Neq2AndLte1() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lte = new LessThanOrEqual(EMPTY, fa, ONE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
+ LessThanOrEqual lte = lessThanOrEqualOf(fa, ONE);
|
|
|
And and = new And(EMPTY, neq, lte);
|
|
|
|
|
|
CombineBinaryComparisons rule = new CombineBinaryComparisons();
|
|
@@ -742,8 +752,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionNotComparable() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- GreaterThan gt1 = new GreaterThan(EMPTY, fa, ONE);
|
|
|
- GreaterThan gt2 = new GreaterThan(EMPTY, fa, FALSE);
|
|
|
+ GreaterThan gt1 = greaterThanOf(fa, ONE);
|
|
|
+ GreaterThan gt2 = greaterThanOf(fa, FALSE);
|
|
|
|
|
|
Or or = new Or(EMPTY, gt1, gt2);
|
|
|
|
|
@@ -757,9 +767,9 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionLowerBound() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- GreaterThan gt1 = new GreaterThan(EMPTY, fa, ONE);
|
|
|
- GreaterThan gt2 = new GreaterThan(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt3 = new GreaterThan(EMPTY, fa, THREE);
|
|
|
+ GreaterThan gt1 = greaterThanOf(fa, ONE);
|
|
|
+ GreaterThan gt2 = greaterThanOf(fa, TWO);
|
|
|
+ GreaterThan gt3 = greaterThanOf(fa, THREE);
|
|
|
|
|
|
Or or = new Or(EMPTY, gt1, new Or(EMPTY, gt2, gt3));
|
|
|
|
|
@@ -775,9 +785,9 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionIncludeLowerBounds() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- GreaterThan gt1 = new GreaterThan(EMPTY, fa, ONE);
|
|
|
- GreaterThan gt2 = new GreaterThan(EMPTY, fa, TWO);
|
|
|
- GreaterThanOrEqual gte3 = new GreaterThanOrEqual(EMPTY, fa, THREE);
|
|
|
+ GreaterThan gt1 = greaterThanOf(fa, ONE);
|
|
|
+ GreaterThan gt2 = greaterThanOf(fa, TWO);
|
|
|
+ GreaterThanOrEqual gte3 = greaterThanOrEqualOf(fa, THREE);
|
|
|
|
|
|
Or or = new Or(EMPTY, new Or(EMPTY, gt1, gt2), gte3);
|
|
|
|
|
@@ -793,9 +803,9 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionUpperBound() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- LessThan lt1 = new LessThan(EMPTY, fa, ONE);
|
|
|
- LessThan lt2 = new LessThan(EMPTY, fa, TWO);
|
|
|
- LessThan lt3 = new LessThan(EMPTY, fa, THREE);
|
|
|
+ LessThan lt1 = lessThanOf(fa, ONE);
|
|
|
+ LessThan lt2 = lessThanOf(fa, TWO);
|
|
|
+ LessThan lt3 = lessThanOf(fa, THREE);
|
|
|
|
|
|
Or or = new Or(EMPTY, new Or(EMPTY, lt1, lt2), lt3);
|
|
|
|
|
@@ -811,9 +821,9 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionIncludeUpperBounds() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- LessThan lt1 = new LessThan(EMPTY, fa, ONE);
|
|
|
- LessThan lt2 = new LessThan(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lte2 = new LessThanOrEqual(EMPTY, fa, TWO);
|
|
|
+ LessThan lt1 = lessThanOf(fa, ONE);
|
|
|
+ LessThan lt2 = lessThanOf(fa, TWO);
|
|
|
+ LessThanOrEqual lte2 = lessThanOrEqualOf(fa, TWO);
|
|
|
|
|
|
Or or = new Or(EMPTY, lt2, new Or(EMPTY, lte2, lt1));
|
|
|
|
|
@@ -829,11 +839,11 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionOfLowerAndUpperBounds() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- LessThan lt1 = new LessThan(EMPTY, fa, ONE);
|
|
|
- LessThan lt2 = new LessThan(EMPTY, fa, TWO);
|
|
|
+ LessThan lt1 = lessThanOf(fa, ONE);
|
|
|
+ LessThan lt2 = lessThanOf(fa, TWO);
|
|
|
|
|
|
- GreaterThan gt3 = new GreaterThan(EMPTY, fa, THREE);
|
|
|
- GreaterThan gt4 = new GreaterThan(EMPTY, fa, FOUR);
|
|
|
+ GreaterThan gt3 = greaterThanOf(fa, THREE);
|
|
|
+ GreaterThan gt4 = greaterThanOf(fa, FOUR);
|
|
|
|
|
|
Or or = new Or(EMPTY, new Or(EMPTY, lt2, gt3), new Or(EMPTY, lt1, gt4));
|
|
|
|
|
@@ -855,8 +865,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionOfIncludedRangeNotComparable() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, ONE, false, FALSE, false);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, ONE, false, FALSE, false);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -870,8 +880,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, ONE, false, FOUR, false);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, ONE, false, FOUR, false);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -890,8 +900,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionOfNonOverlappingBoundaries() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, ONE, false, TWO, false);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, ONE, false, TWO, false);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -904,8 +914,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsDisjunctionOfUpperEqualsOverlappingBoundaries() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, true);
|
|
|
+ Range r1 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, true);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -918,8 +928,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsOverlappingUpperBoundary() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
- Range r1 = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, false);
|
|
|
+ Range r1 = rangeOf(fa, ONE, false, THREE, false);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -932,8 +942,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testCombineBinaryComparisonsWithDifferentUpperLimitInclusion() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r1 = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
- Range r2 = new Range(EMPTY, fa, TWO, false, THREE, true);
|
|
|
+ Range r1 = rangeOf(fa, ONE, false, THREE, false);
|
|
|
+ Range r2 = rangeOf(fa, TWO, false, THREE, true);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -948,9 +958,9 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
FieldAttribute fb = getFieldAttribute("b");
|
|
|
FieldAttribute fc = getFieldAttribute("c");
|
|
|
|
|
|
- Expression a1 = new Equals(EMPTY, fa, ONE);
|
|
|
- Expression a2 = new Equals(EMPTY, fa, TWO);
|
|
|
- And common = new And(EMPTY, new Equals(EMPTY, fb, THREE), new Equals(EMPTY, fc, FOUR));
|
|
|
+ Expression a1 = equalsOf(fa, ONE);
|
|
|
+ Expression a2 = equalsOf(fa, TWO);
|
|
|
+ And common = new And(EMPTY, equalsOf(fb, THREE), equalsOf(fc, FOUR));
|
|
|
And left = new And(EMPTY, a1, common);
|
|
|
And right = new And(EMPTY, a2, common);
|
|
|
Or or = new Or(EMPTY, left, right);
|
|
@@ -963,8 +973,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
public void testRangesOverlappingNoLowerBoundary() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
|
|
|
- Range r2 = new Range(EMPTY, fa, L(0), false, TWO, false);
|
|
|
- Range r1 = new Range(EMPTY, fa, L(0), false, ONE, true);
|
|
|
+ Range r2 = rangeOf(fa, L(0), false, TWO, false);
|
|
|
+ Range r1 = rangeOf(fa, L(0), false, ONE, true);
|
|
|
|
|
|
Or or = new Or(EMPTY, r1, r2);
|
|
|
|
|
@@ -979,8 +989,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 1 <= a < 10 AND a == 1 -> a == 1
|
|
|
public void testEliminateRangeByEqualsInInterval() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq1 = new Equals(EMPTY, fa, ONE);
|
|
|
- Range r = new Range(EMPTY, fa, ONE, true, L(10), false);
|
|
|
+ Equals eq1 = equalsOf(fa, ONE);
|
|
|
+ Range r = rangeOf(fa, ONE, true, L(10), false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, r));
|
|
@@ -990,8 +1000,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 1 <= a < 10 AND a <=> 1 -> a <=> 1
|
|
|
public void testEliminateRangeByNullEqualsInInterval() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- NullEquals eq1 = new NullEquals(EMPTY, fa, ONE);
|
|
|
- Range r = new Range(EMPTY, fa, ONE, true, L(10), false);
|
|
|
+ NullEquals eq1 = nullEqualsOf(fa, ONE);
|
|
|
+ Range r = rangeOf(fa, ONE, true, L(10), false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, r));
|
|
@@ -1006,8 +1016,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a == 1 AND a == 2 -> FALSE
|
|
|
public void testDualEqualsConjunction() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq1 = new Equals(EMPTY, fa, ONE);
|
|
|
- Equals eq2 = new Equals(EMPTY, fa, TWO);
|
|
|
+ Equals eq1 = equalsOf(fa, ONE);
|
|
|
+ Equals eq2 = equalsOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, eq2));
|
|
@@ -1017,8 +1027,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a <=> 1 AND a <=> 2 -> FALSE
|
|
|
public void testDualNullEqualsConjunction() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- NullEquals eq1 = new NullEquals(EMPTY, fa, ONE);
|
|
|
- NullEquals eq2 = new NullEquals(EMPTY, fa, TWO);
|
|
|
+ NullEquals eq1 = nullEqualsOf(fa, ONE);
|
|
|
+ NullEquals eq2 = nullEqualsOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, eq2));
|
|
@@ -1028,8 +1038,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 1 < a < 10 AND a == 10 -> FALSE
|
|
|
public void testEliminateRangeByEqualsOutsideInterval() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq1 = new Equals(EMPTY, fa, L(10));
|
|
|
- Range r = new Range(EMPTY, fa, ONE, false, L(10), false);
|
|
|
+ Equals eq1 = equalsOf(fa, L(10));
|
|
|
+ Range r = rangeOf(fa, ONE, false, L(10), false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, r));
|
|
@@ -1039,8 +1049,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// 1 < a < 10 AND a <=> 10 -> FALSE
|
|
|
public void testEliminateRangeByNullEqualsOutsideInterval() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- NullEquals eq1 = new NullEquals(EMPTY, fa, L(10));
|
|
|
- Range r = new Range(EMPTY, fa, ONE, false, L(10), false);
|
|
|
+ NullEquals eq1 = nullEqualsOf(fa, L(10));
|
|
|
+ Range r = rangeOf(fa, ONE, false, L(10), false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq1, r));
|
|
@@ -1050,8 +1060,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a != 3 AND a = 3 -> FALSE
|
|
|
public void testPropagateEquals_VarNeq3AndVarEq3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, THREE);
|
|
|
- Equals eq = new Equals(EMPTY, fa, THREE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, THREE);
|
|
|
+ Equals eq = equalsOf(fa, THREE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, neq, eq));
|
|
@@ -1061,8 +1071,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a != 4 AND a = 3 -> a = 3
|
|
|
public void testPropagateEquals_VarNeq4AndVarEq3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, FOUR);
|
|
|
- Equals eq = new Equals(EMPTY, fa, THREE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, FOUR);
|
|
|
+ Equals eq = equalsOf(fa, THREE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, neq, eq));
|
|
@@ -1073,8 +1083,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a < 2 -> FALSE
|
|
|
public void testPropagateEquals_VarEq2AndVarLt2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ LessThan lt = lessThanOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, lt));
|
|
@@ -1084,8 +1094,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a <= 2 -> a = 2
|
|
|
public void testPropagateEquals_VarEq2AndVarLte2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lt = new LessThanOrEqual(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ LessThanOrEqual lt = lessThanOrEqualOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, lt));
|
|
@@ -1095,8 +1105,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a <= 1 -> FALSE
|
|
|
public void testPropagateEquals_VarEq2AndVarLte1() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- LessThanOrEqual lt = new LessThanOrEqual(EMPTY, fa, ONE);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ LessThanOrEqual lt = lessThanOrEqualOf(fa, ONE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, lt));
|
|
@@ -1106,8 +1116,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a > 2 -> FALSE
|
|
|
public void testPropagateEquals_VarEq2AndVarGt2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, gt));
|
|
@@ -1117,8 +1127,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a >= 2 -> a = 2
|
|
|
public void testPropagateEquals_VarEq2AndVarGte2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- GreaterThanOrEqual gte = new GreaterThanOrEqual(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ GreaterThanOrEqual gte = greaterThanOrEqualOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, gte));
|
|
@@ -1128,8 +1138,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a > 3 -> FALSE
|
|
|
public void testPropagateEquals_VarEq2AndVarLt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, THREE);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, THREE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new And(EMPTY, eq, gt));
|
|
@@ -1139,10 +1149,10 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND a < 3 AND a > 1 AND a != 4 -> a = 2
|
|
|
public void testPropagateEquals_VarEq2AndVarLt3AndVarGt1AndVarNeq4() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, THREE);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, ONE);
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, FOUR);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ LessThan lt = lessThanOf(fa, THREE);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, ONE);
|
|
|
+ NotEquals neq = notEqualsOf(fa, FOUR);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression and = Predicates.combineAnd(Arrays.asList(eq, lt, gt, neq));
|
|
@@ -1153,10 +1163,10 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 AND 1 < a < 3 AND a > 0 AND a != 4 -> a = 2
|
|
|
public void testPropagateEquals_VarEq2AndVarRangeGt1Lt3AndVarGt0AndVarNeq4() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, L(0));
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, FOUR);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, ONE, false, THREE, false);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, L(0));
|
|
|
+ NotEquals neq = notEqualsOf(fa, FOUR);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression and = Predicates.combineAnd(Arrays.asList(eq, range, gt, neq));
|
|
@@ -1167,8 +1177,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR a > 1 -> a > 1
|
|
|
public void testPropagateEquals_VarEq2OrVarGt1() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, ONE);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, ONE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, gt));
|
|
@@ -1178,8 +1188,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR a > 2 -> a >= 2
|
|
|
public void testPropagateEquals_VarEq2OrVarGte2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, gt));
|
|
@@ -1191,8 +1201,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR a < 3 -> a < 3
|
|
|
public void testPropagateEquals_VarEq2OrVarLt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, THREE);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ LessThan lt = lessThanOf(fa, THREE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, lt));
|
|
@@ -1202,8 +1212,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 3 OR a < 3 -> a <= 3
|
|
|
public void testPropagateEquals_VarEq3OrVarLt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, THREE);
|
|
|
- LessThan lt = new LessThan(EMPTY, fa, THREE);
|
|
|
+ Equals eq = equalsOf(fa, THREE);
|
|
|
+ LessThan lt = lessThanOf(fa, THREE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, lt));
|
|
@@ -1215,8 +1225,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR 1 < a < 3 -> 1 < a < 3
|
|
|
public void testPropagateEquals_VarEq2OrVarRangeGt1Lt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, ONE, false, THREE, false);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, ONE, false, THREE, false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, range));
|
|
@@ -1226,8 +1236,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR 2 < a < 3 -> 2 <= a < 3
|
|
|
public void testPropagateEquals_VarEq2OrVarRangeGt2Lt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, TWO, false, THREE, false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, range));
|
|
@@ -1242,8 +1252,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 3 OR 2 < a < 3 -> 2 < a <= 3
|
|
|
public void testPropagateEquals_VarEq3OrVarRangeGt2Lt3() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, THREE);
|
|
|
- Range range = new Range(EMPTY, fa, TWO, false, THREE, false);
|
|
|
+ Equals eq = equalsOf(fa, THREE);
|
|
|
+ Range range = rangeOf(fa, TWO, false, THREE, false);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, range));
|
|
@@ -1258,8 +1268,8 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR a != 2 -> TRUE
|
|
|
public void testPropagateEquals_VarEq2OrVarNeq2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, neq));
|
|
@@ -1269,23 +1279,23 @@ public class OptimizerRulesTests extends ESTestCase {
|
|
|
// a = 2 OR a != 5 -> a != 5
|
|
|
public void testPropagateEquals_VarEq2OrVarNeq5() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, FIVE);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ NotEquals neq = notEqualsOf(fa, FIVE);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(new Or(EMPTY, eq, neq));
|
|
|
assertEquals(NotEquals.class, exp.getClass());
|
|
|
NotEquals ne = (NotEquals) exp;
|
|
|
- assertEquals(ne.right(), FIVE);
|
|
|
+ assertEquals(FIVE, ne.right());
|
|
|
}
|
|
|
|
|
|
// a = 2 OR 3 < a < 4 OR a > 2 OR a!= 2 -> TRUE
|
|
|
public void testPropagateEquals_VarEq2OrVarRangeGt3Lt4OrVarGt2OrVarNe2() {
|
|
|
FieldAttribute fa = getFieldAttribute();
|
|
|
- Equals eq = new Equals(EMPTY, fa, TWO);
|
|
|
- Range range = new Range(EMPTY, fa, THREE, false, FOUR, false);
|
|
|
- GreaterThan gt = new GreaterThan(EMPTY, fa, TWO);
|
|
|
- NotEquals neq = new NotEquals(EMPTY, fa, TWO);
|
|
|
+ Equals eq = equalsOf(fa, TWO);
|
|
|
+ Range range = rangeOf(fa, THREE, false, FOUR, false);
|
|
|
+ GreaterThan gt = greaterThanOf(fa, TWO);
|
|
|
+ NotEquals neq = notEqualsOf(fa, TWO);
|
|
|
|
|
|
PropagateEquals rule = new PropagateEquals();
|
|
|
Expression exp = rule.rule(Predicates.combineOr(Arrays.asList(eq, range, neq, gt)));
|