public static Expression logicalAnd(Expression left, Expression right) { return new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, left, right); }
public static LogicalBinaryExpression and(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Operator.AND, left, right); }
public static LogicalBinaryExpression or(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Operator.OR, left, right); }
private LogicalBinaryExpression and(Expression left, Expression right) { return new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, left, right); } }
buffer.add(new LogicalBinaryExpression(operator, queue.remove(), queue.remove()));
@Override public Node visitLogicalBinary(SqlBaseParser.LogicalBinaryContext context) { return new LogicalBinaryExpression( getLocation(context.operator), getLogicalBinaryOperator(context.operator), (Expression) visit(context.left), (Expression) visit(context.right)); }
return new LogicalBinaryExpression(node.getOperator(), toExpression(left, type(node.getLeft())), toExpression(right, type(node.getRight())));
@Test public void testShowStatsForQuery() { final String[] tableNames = {"t", "s.t", "c.s.t"}; for (String fullName : tableNames) { QualifiedName qualifiedName = QualifiedName.of(Arrays.asList(fullName.split("\\."))); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.empty())); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s WHERE field > 0)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.of( new ComparisonExpression(GREATER_THAN, new Identifier("field"), new LongLiteral("0"))))); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s WHERE field > 0 or field < 0)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.of( new LogicalBinaryExpression(LogicalBinaryExpression.Operator.OR, new ComparisonExpression(GREATER_THAN, new Identifier("field"), new LongLiteral("0")), new ComparisonExpression(LESS_THAN, new Identifier("field"), new LongLiteral("0")))))); } }
@Test public void testPrecedenceAndAssociativity() assertExpression("1 AND 2 OR 3", new LogicalBinaryExpression(LogicalBinaryExpression.Operator.OR, new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, new LongLiteral("1"), new LongLiteral("2")), new LongLiteral("3"))); assertExpression("1 OR 2 AND 3", new LogicalBinaryExpression(LogicalBinaryExpression.Operator.OR, new LongLiteral("1"), new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, new LongLiteral("2"), new LongLiteral("3")))); assertExpression("NOT 1 AND 2", new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, new NotExpression(new LongLiteral("1")), new LongLiteral("2"))); assertExpression("NOT 1 OR 2", new LogicalBinaryExpression(LogicalBinaryExpression.Operator.OR, new NotExpression(new LongLiteral("1")), new LongLiteral("2")));
public static Expression logicalAnd(Expression left, Expression right) { return new LogicalBinaryExpression(LogicalBinaryExpression.Operator.AND, left, right); }
public static Expression logicalAnd(Expression left, Expression right) { return new LogicalBinaryExpression(LogicalBinaryExpression.Type.AND, left, right); }
public static LogicalBinaryExpression or(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Type.OR, left, right); }
public static LogicalBinaryExpression and(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Operator.AND, left, right); }
public static LogicalBinaryExpression or(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Operator.OR, left, right); }
public static LogicalBinaryExpression and(Expression left, Expression right) { return new LogicalBinaryExpression(Optional.empty(), Type.AND, left, right); }
public static Expression binaryExpression(LogicalBinaryExpression.Type type, Iterable<Expression> expressions) { requireNonNull(type, "type is null"); requireNonNull(expressions, "expressions is null"); Preconditions.checkArgument(!Iterables.isEmpty(expressions), "expressions is empty"); // build balanced tree for efficient recursive processing Queue<Expression> queue = new ArrayDeque<>(newArrayList(expressions)); while (queue.size() > 1) { queue.add(new LogicalBinaryExpression(type, queue.remove(), queue.remove())); } return queue.remove(); }
/** * Assembles the ComparisonExpressions into a single Expression combined * using the specified Binary Operators, in order. * @param whereClauses * @param binaryOps * @param i * @return */ private static Expression logicallyCombineWhereClauses( List<Expression> whereClauses, List<Optional<LogicalBinaryExpression.Type>> binaryOps, int i) { if (whereClauses.isEmpty()) { return null; } if (i >= binaryOps.size()) { return whereClauses.get(i); } return new LogicalBinaryExpression( binaryOps.get(i).get(), whereClauses.get(i), logicallyCombineWhereClauses(whereClauses, binaryOps, i + 1)); } }
@Override public Node visitLogicalBinary(SqlBaseParser.LogicalBinaryContext context) { return new LogicalBinaryExpression( getLocation(context.operator), getLogicalBinaryOperator(context.operator), (Expression) visit(context.left), (Expression) visit(context.right)); }
@Override public Node visitLogicalBinary(SqlBaseParser.LogicalBinaryContext context) { return new LogicalBinaryExpression( getLocation(context.operator), getLogicalBinaryOperator(context.operator), (Expression) visit(context.left), (Expression) visit(context.right)); }
@Test public void testShowStatsForQuery() { final String[] tableNames = {"t", "s.t", "c.s.t"}; for (String fullName : tableNames) { QualifiedName qualifiedName = QualifiedName.of(Arrays.asList(fullName.split("\\."))); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.empty())); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s WHERE field > 0)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.of( new ComparisonExpression(GREATER_THAN, new Identifier("field"), new LongLiteral("0"))))); assertStatement(format("SHOW STATS FOR (SELECT * FROM %s WHERE field > 0 or field < 0)", qualifiedName), createShowStats(qualifiedName, ImmutableList.of(new AllColumns()), Optional.of( new LogicalBinaryExpression(LogicalBinaryExpression.Operator.OR, new ComparisonExpression(GREATER_THAN, new Identifier("field"), new LongLiteral("0")), new ComparisonExpression(LESS_THAN, new Identifier("field"), new LongLiteral("0")))))); } }