consistent toString functions for expressions, parentasis are added if neccessary
This commit is contained in:
@@ -20,10 +20,15 @@ public class AndExpression implements Expression {
|
|||||||
return Type.AND;
|
return Type.AND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.LOGIC_AND;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return exprs.stream().map(e -> {
|
return exprs.stream().map(e -> {
|
||||||
if (e instanceof OrExpression) {
|
if (e.getPriority().getValue() < getPriority().getValue()) {
|
||||||
return "(" + e + ")";
|
return "(" + e + ")";
|
||||||
} else {
|
} else {
|
||||||
return e.toString();
|
return e.toString();
|
||||||
|
|||||||
@@ -17,9 +17,31 @@ public class BinaryExpression implements Expression {
|
|||||||
return Type.BINARY;
|
return Type.BINARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return switch (operator) {
|
||||||
|
case EQ, NE, IS -> Priority.EQUALITY;
|
||||||
|
case LT, LE, GT, GE -> Priority.RELATIONAL;
|
||||||
|
case IN -> Priority.RELATIONAL; //or equality?
|
||||||
|
default -> throw new IllegalStateException();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return left + " " + operator + " " + right;
|
String ret = "";
|
||||||
|
if (left.getPriority().getValue() < getPriority().getValue()) {
|
||||||
|
ret += "(" + left + ")";
|
||||||
|
} else {
|
||||||
|
ret += left.toString();
|
||||||
|
}
|
||||||
|
ret += " " + operator + " ";
|
||||||
|
if (right.getPriority().getValue() < getPriority().getValue()) {
|
||||||
|
ret += "(" + right + ")";
|
||||||
|
} else {
|
||||||
|
ret += right.toString();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -30,8 +52,10 @@ public class BinaryExpression implements Expression {
|
|||||||
LE("<="),
|
LE("<="),
|
||||||
GT(">"),
|
GT(">"),
|
||||||
GE(">="),
|
GE(">="),
|
||||||
// OR("OR"),
|
//
|
||||||
// AND("AND"),
|
// ADD("+"),
|
||||||
|
// SUB("-"),
|
||||||
|
|
||||||
IN("IN"),
|
IN("IN"),
|
||||||
IS("IS"),
|
IS("IS"),
|
||||||
;
|
;
|
||||||
@@ -48,7 +72,11 @@ public class BinaryExpression implements Expression {
|
|||||||
LT, GE,
|
LT, GE,
|
||||||
GE, LT,
|
GE, LT,
|
||||||
LE, GT,
|
LE, GT,
|
||||||
GT, LE);
|
GT, LE
|
||||||
|
|
||||||
|
// ADD, SUB,
|
||||||
|
// SUB, ADD
|
||||||
|
);
|
||||||
|
|
||||||
public Operator invert() {
|
public Operator invert() {
|
||||||
return INVERSION.get(this);
|
return INVERSION.get(this);
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ public class ConstantExpression implements Expression {
|
|||||||
return Type.CONSTANT;
|
return Type.CONSTANT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.CONSTANT;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return value.toString();
|
return value.toString();
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package jef.expressions;
|
package jef.expressions;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
public interface Expression {
|
public interface Expression {
|
||||||
Type getType();
|
Type getType();
|
||||||
|
|
||||||
|
Priority getPriority();
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
AND,
|
AND,
|
||||||
BINARY,
|
BINARY,
|
||||||
@@ -17,4 +22,28 @@ public interface Expression {
|
|||||||
UNARY,
|
UNARY,
|
||||||
WHERE,
|
WHERE,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum Priority {
|
||||||
|
UNDEFINED(0),
|
||||||
|
ASSIGNMENT(1), // =, +=, -=, *=, /=
|
||||||
|
TERNARY(2), // ? :
|
||||||
|
LOGIC_OR(3), // ||
|
||||||
|
LOGIC_AND(4), // &&
|
||||||
|
BITWISE_OR(5), // |
|
||||||
|
BITWISE_XOR(6), // ^
|
||||||
|
BITWISE_AND(7), // &
|
||||||
|
EQUALITY(8), // ==, !=
|
||||||
|
RELATIONAL(9), // <, <=, =>, >
|
||||||
|
BIT_SHIFT(10), // <<, >>
|
||||||
|
ADD_SUB(13), // +, -
|
||||||
|
MUL_DIV_MOD(14), // *, /, %
|
||||||
|
UNARY_PRE(15), // +, -, !, ~, --i, ++i
|
||||||
|
UNARY_POST(16), // i++, i--
|
||||||
|
CONSTANT(17), // constant values
|
||||||
|
;
|
||||||
|
|
||||||
|
private final int value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,19 @@ public class OrExpression implements Expression {
|
|||||||
return Type.OR;
|
return Type.OR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.LOGIC_OR;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return exprs.stream().map(Expression::toString).collect(Collectors.joining(" OR "));
|
return exprs.stream().map(e -> {
|
||||||
|
if (e.getPriority().getValue() < getPriority().getValue()) {
|
||||||
|
return "(" + e + ")";
|
||||||
|
} else {
|
||||||
|
return e.toString();
|
||||||
|
}
|
||||||
|
}).collect(Collectors.joining(" OR "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class ParameterExpression extends ConstantExpression implements Expressio
|
|||||||
} else if (this.value == null) {
|
} else if (this.value == null) {
|
||||||
return "null";
|
return "null";
|
||||||
} else if (this.value instanceof Collection) {
|
} else if (this.value instanceof Collection) {
|
||||||
return "(" + ((Collection<?>) this.value).stream().map(Objects::toString).collect(Collectors.joining(", ")) + ")";
|
return "(" + ((Collection<?>) this.value).stream().map(e -> e == null ? "NULL" : Objects.toString(e)).collect(Collectors.joining(", ")) + ")";
|
||||||
}
|
}
|
||||||
return value.toString();
|
return value.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ public class SelectExpression implements Expression {
|
|||||||
return Type.SELECT;
|
return Type.SELECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SELECT " + fields.stream().map(e -> e.equals("*") ? e : "`" + e + "`").collect(Collectors.joining(", ")) + " FROM "
|
return "SELECT " + fields.stream().map(e -> e.equals("*") ? e : "`" + e + "`").collect(Collectors.joining(", ")) + " FROM "
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ public class TernaryExpression implements Expression {
|
|||||||
return Type.TERNARY;
|
return Type.TERNARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.TERNARY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "IF(" + cond + ", " + whenTrue + ", " + whenFalse + ")";
|
return "IF(" + cond + ", " + whenTrue + ", " + whenFalse + ")";
|
||||||
|
|||||||
@@ -14,12 +14,17 @@ public class UnaryExpression implements Expression {
|
|||||||
return Type.UNARY;
|
return Type.UNARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.UNARY_PRE;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
if (expr instanceof ConstantExpression) {
|
if (expr.getPriority().getValue() < getPriority().getValue()) {
|
||||||
return operator + " " + expr;
|
|
||||||
} else {
|
|
||||||
return operator + " (" + expr + ")";
|
return operator + " (" + expr + ")";
|
||||||
|
} else {
|
||||||
|
return operator + " " + expr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ public class WhereExpression implements Expression {
|
|||||||
return Type.WHERE;
|
return Type.WHERE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Priority getPriority() {
|
||||||
|
return Priority.UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return queryable + " WHERE " + where;
|
return queryable + " WHERE " + where;
|
||||||
|
|||||||
@@ -101,6 +101,11 @@ public class ExpressionOptimizerBottomUp extends ExpressionModifier {
|
|||||||
&& b.getOperator().isInvertible()) {
|
&& b.getOperator().isInvertible()) {
|
||||||
//!(a < b) -> a >= b
|
//!(a < b) -> a >= b
|
||||||
return new BinaryExpression(b.getLeft(), b.getRight(), b.getOperator().invert());
|
return new BinaryExpression(b.getLeft(), b.getRight(), b.getOperator().invert());
|
||||||
|
} else if (inner instanceof BinaryExpression b
|
||||||
|
&& expr.getOperator() == UnaryExpression.Operator.NOT
|
||||||
|
&& b.getOperator() == BinaryExpression.Operator.IS) {
|
||||||
|
//!(a < b) -> a >= b
|
||||||
|
return new BinaryExpression(b.getLeft(), new UnaryExpression(b.getRight(), UnaryExpression.Operator.NOT), b.getOperator());
|
||||||
} else {
|
} else {
|
||||||
return super.modifyUnary(expr);
|
return super.modifyUnary(expr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import jef.expressions.UnaryExpression;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ExpressionOptimizer extends ExpressionModifier {
|
public class ExpressionOptimizerTopDown extends ExpressionModifier {
|
||||||
@Override
|
@Override
|
||||||
public Expression modifyAnd(AndExpression expr) {
|
public Expression modifyAnd(AndExpression expr) {
|
||||||
var ands = new ArrayList<Expression>(expr.getExprs().size() * 2);
|
var ands = new ArrayList<Expression>(expr.getExprs().size() * 2);
|
||||||
@@ -6,7 +6,6 @@ import jef.asm.PredicateParser;
|
|||||||
import jef.expressions.Expression;
|
import jef.expressions.Expression;
|
||||||
import jef.expressions.SelectExpression;
|
import jef.expressions.SelectExpression;
|
||||||
import jef.expressions.WhereExpression;
|
import jef.expressions.WhereExpression;
|
||||||
import jef.expressions.modifier.ExpressionOptimizer;
|
|
||||||
import jef.expressions.modifier.ExpressionOptimizerBottomUp;
|
import jef.expressions.modifier.ExpressionOptimizerBottomUp;
|
||||||
import jef.expressions.modifier.TableAliasInjector;
|
import jef.expressions.modifier.TableAliasInjector;
|
||||||
import jef.expressions.modifier.TernaryRewriter;
|
import jef.expressions.modifier.TernaryRewriter;
|
||||||
|
|||||||
@@ -6,201 +6,202 @@ import org.junit.jupiter.api.Test;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class FilterOpTest {
|
public class FilterOpTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTrue() {
|
public void testTrue() {
|
||||||
// String act;
|
String act;
|
||||||
// act = new DBSet<TestClass>("table1")
|
act = new DBSet<TestClass>("table1")
|
||||||
// .filter(e -> true)
|
.filter(e -> true)
|
||||||
// .toString();
|
.toString();
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE 1", act);
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE 1", act);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Test
|
@Test
|
||||||
// public void testCompareWithEntityMember() {
|
public void testCompareWithEntityMember() {
|
||||||
// String act;
|
String act;
|
||||||
// act = new DBSet<TestClass>("table1")
|
act = new DBSet<TestClass>("table1")
|
||||||
// .filter(e -> e.b == 1)
|
.filter(e -> e.i == 1)
|
||||||
// .toString();
|
.toString();
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1", act);
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1", act);
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b != 1)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i <> 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b < 1)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i < 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b > 1)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i > 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b <= 1)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i <= 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b >= 1)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i >= 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b == 1337)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337", act);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Test
|
|
||||||
// public void testContainsWithEntityMember() {
|
|
||||||
// var s = List.of(1, 3);
|
|
||||||
// String act;
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> s.contains(e.b))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1,3)", act);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Test
|
|
||||||
// public void testMultipleFilter() {
|
|
||||||
// String act;
|
|
||||||
// var s = List.of(1, 3);
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> s.contains(e.b))
|
|
||||||
// .filter(e -> e.b == 1337)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1,3)) b WHERE b.b = 1337", act);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Test
|
|
||||||
// public void testComplexExpression() {
|
|
||||||
// String act;
|
|
||||||
// var s = List.of(1, 3);
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> s.contains(e.b) && e.b == 1337)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1,3) AND a.i = 1337", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> s.contains(e.b) && e.b == 1337 && e.b == 420)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1,3) AND a.i = 1337 AND a.i = 420", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b == 1337 || e.b != 420 || s.contains(e.b))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i <> 420 OR a.i IN (1,3)", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b == 1337 || e.b == 420 || s.contains(e.b))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i = 420 OR a.i IN (1,3)", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.b == 1337 || s.contains(e.b) || e.b == 420)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i IN (1,3) OR a.i = 420", act);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Test
|
|
||||||
// public void testComplexExpressionMixedAndOr() {
|
|
||||||
// String act;
|
|
||||||
// var s = List.of(1, 3);
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> s.contains(e.b) && (e.b == 1337 || e.b == 420))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1,3) AND (a.i = 1337 OR a.i = 420)", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> (e.b == 1337 || e.b == 420) && s.contains(e.b))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE (a.i = 1337 OR a.i = 420) AND a.i IN (1,3)", act);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Test
|
|
||||||
// public void testObject() {
|
|
||||||
// String act;
|
|
||||||
// var s = Arrays.asList(null, new Object());
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.o == null)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NULL", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.o != null)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NOT NULL", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.o != null || s.contains(e.o))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NOT NULL OR a.o IN (NULL)", act);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// public void testFloatingPoint() {
|
act = new DBSet<TestClass>("table1")
|
||||||
// String act;
|
.filter(e -> e.i != 1)
|
||||||
// var s = Arrays.asList(null, 2);
|
.toString();
|
||||||
// act = new DBSet<TestClass>("table1")
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i <> 1", act);
|
||||||
// .filter(e -> e.d == 3.14d)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d = 3.14", act);
|
act = new DBSet<TestClass>("table1")
|
||||||
//
|
.filter(e -> e.i < 1)
|
||||||
//
|
.toString();
|
||||||
// act = new DBSet<TestClass>("table1")
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i < 1", act);
|
||||||
// .filter(e -> e.f == 3.14f)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.f = 3.14", act);
|
act = new DBSet<TestClass>("table1")
|
||||||
//
|
.filter(e -> e.i > 1)
|
||||||
//
|
.toString();
|
||||||
// act = new DBSet<TestClass>("table1")
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i > 1", act);
|
||||||
// .filter(e -> e.d != 1d || e.f != 1 || s.contains(e.d))
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d <> 1 OR a.f <> 1 OR a.d IN (NULL, 2)", act);
|
act = new DBSet<TestClass>("table1")
|
||||||
// }
|
.filter(e -> e.i <= 1)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i <= 1", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.i >= 1)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i >= 1", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.i == 1337)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testContainsWithEntityMember() {
|
||||||
|
var s = List.of(1, 3);
|
||||||
|
String act;
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> s.contains(e.i))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1, 3)", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMultipleFilter() {
|
||||||
|
String act;
|
||||||
|
var s = List.of(1, 3);
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> s.contains(e.i))
|
||||||
|
.filter(e -> e.i == 1337)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1, 3)) b WHERE b.i = 1337", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComplexExpression() {
|
||||||
|
String act;
|
||||||
|
var s = List.of(1, 3);
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> s.contains(e.i) && e.i == 1337)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1, 3) AND a.i = 1337", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> s.contains(e.i) && e.i == 1337 && e.i == 420)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1, 3) AND a.i = 1337 AND a.i = 420", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.i == 1337 || e.i != 420 || s.contains(e.i))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i <> 420 OR a.i IN (1, 3)", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.i == 1337 || e.i == 420 || s.contains(e.i))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i = 420 OR a.i IN (1, 3)", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.i == 1337 || s.contains(e.i) || e.i == 420)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 1337 OR a.i IN (1, 3) OR a.i = 420", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComplexExpressionMixedAndOr() {
|
||||||
|
String act;
|
||||||
|
var s = List.of(1, 3);
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> s.contains(e.i) && (e.i == 1337 || e.i == 420))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i IN (1, 3) AND (a.i = 1337 OR a.i = 420)", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> (e.i == 1337 || e.i == 420) && s.contains(e.i))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE (a.i = 1337 OR a.i = 420) AND a.i IN (1, 3)", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testObject() {
|
||||||
|
String act;
|
||||||
|
var s = Arrays.asList(null, 4);
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.o == null)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NULL", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.o != null)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NOT NULL", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.o != null || s.contains(e.o))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.o IS NOT NULL OR a.o IN (NULL, 4)", act);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFloatingPoint() {
|
||||||
|
String act;
|
||||||
|
var s = Arrays.asList(null, 2);
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.d == 3.14d)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d = 3.14", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.f == 3.14f)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.f = 3.14", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.d != 1d || e.f != 1 || s.contains(e.d))
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d <> 1 OR a.f <> 1 OR a.d IN (NULL, 2)", act);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIDFLConst() {
|
public void testIDFLConst() {
|
||||||
String act;
|
String act;
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.i == 0 || e.i == 1 || e.i == 2 || e.i == 3 || e.i == 4 || e.i == 5)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 0 OR a.i = 1 OR a.i = 2 OR a.i = 3 OR a.i = 4 OR a.i = 5", act);
|
|
||||||
|
|
||||||
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.d == 0d || e.d == 1d)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d = 0 OR a.d = 1", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// act = new DBSet<TestClass>("table1")
|
|
||||||
// .filter(e -> e.f == 0f || e.f == 1f || e.f == 2f)
|
|
||||||
// .toString();
|
|
||||||
// Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.f = 0 OR a.f = 1 OR a.f = 2", act);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
act = new DBSet<TestClass>("table1")
|
act = new DBSet<TestClass>("table1")
|
||||||
.filter(e -> e.l == 0l || e.l == 1l)
|
.filter(e -> e.i == 0 || e.i == 1 || e.i == 2 || e.i == 3 || e.i == 4 || e.i == 5)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.i = 0 OR a.i = 1 OR a.i = 2 OR a.i = 3 OR a.i = 4 OR a.i = 5", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.d == 0D || e.d == 1D)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.d = 0 OR a.d = 1", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.f == 0F || e.f == 1F || e.f == 2F)
|
||||||
|
.toString();
|
||||||
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.f = 0 OR a.f = 1 OR a.f = 2", act);
|
||||||
|
|
||||||
|
|
||||||
|
act = new DBSet<TestClass>("table1")
|
||||||
|
.filter(e -> e.l == 0L || e.l == 1L)
|
||||||
.toString();
|
.toString();
|
||||||
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.l = 0 OR a.l = 1", act);
|
Assertions.assertEquals("SELECT * FROM (SELECT * FROM `table1`) a WHERE a.l = 0 OR a.l = 1", act);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user