/** * Implicit coercions are added when mapping an expression to symbol in {@link TranslationMap}. Coercions * for expression are obtained from {@link Analysis} by identity comparison. Create a copy of subquery * in order to get a subquery expression that does not have any coercion assigned to it {@link Analysis}. */ private SubqueryExpression uncoercedSubquery(SubqueryExpression subquery) { return new SubqueryExpression(subquery.getQuery()); }
/** * Implicit coercions are added when mapping an expression to symbol in {@link TranslationMap}. Coercions * for expression are obtained from {@link Analysis} by identity comparison. Create a copy of subquery * in order to get a subquery expression that does not have any coercion assigned to it {@link Analysis}. */ private SubqueryExpression uncoercedSubquery(SubqueryExpression subquery) { return new SubqueryExpression(subquery.getQuery()); }
private static ExistsPredicate exists(Query query) { return new ExistsPredicate(new SubqueryExpression(query)); }
@Override public Node visitExists(SqlBaseParser.ExistsContext context) { return new ExistsPredicate(getLocation(context), new SubqueryExpression(getLocation(context), (Query) visit(context.query()))); }
@Override public Node visitExists(SqlBaseParser.ExistsContext context) { return new ExistsPredicate(getLocation(context), new SubqueryExpression(getLocation(context), (Query) visit(context.query()))); }
@Override public Node visitSubqueryExpression(SqlBaseParser.SubqueryExpressionContext context) { return new SubqueryExpression(getLocation(context), (Query) visit(context.query())); }
@Override public Node visitSubqueryExpression(SqlBaseParser.SubqueryExpressionContext context) { return new SubqueryExpression(getLocation(context), (Query) visit(context.query())); }
@Override public Node visitInSubquery(SqlBaseParser.InSubqueryContext context) { Expression result = new InPredicate( getLocation(context), (Expression) visit(context.value), new SubqueryExpression(getLocation(context), (Query) visit(context.query()))); if (context.NOT() != null) { result = new NotExpression(getLocation(context), result); } return result; }
@Override public Node visitInSubquery(SqlBaseParser.InSubqueryContext context) { Expression result = new InPredicate( getLocation(context), (Expression) visit(context.value), new SubqueryExpression(getLocation(context), (Query) visit(context.query()))); if (context.NOT() != null) { result = new NotExpression(getLocation(context), result); } return result; }
@Override public Node visitQuantifiedComparison(SqlBaseParser.QuantifiedComparisonContext context) { return new QuantifiedComparisonExpression( getLocation(context.comparisonOperator()), getComparisonOperator(((TerminalNode) context.comparisonOperator().getChild(0)).getSymbol()), getComparisonQuantifier(((TerminalNode) context.comparisonQuantifier().getChild(0)).getSymbol()), (Expression) visit(context.value), new SubqueryExpression(getLocation(context.query()), (Query) visit(context.query()))); }
@Override public Node visitQuantifiedComparison(SqlBaseParser.QuantifiedComparisonContext context) { return new QuantifiedComparisonExpression( getLocation(context.comparisonOperator()), getComparisonOperator(((TerminalNode) context.comparisonOperator().getChild(0)).getSymbol()), getComparisonQuantifier(((TerminalNode) context.comparisonQuantifier().getChild(0)).getSymbol()), (Expression) visit(context.value), new SubqueryExpression(getLocation(context.query()), (Query) visit(context.query()))); }
@Test public void testQuantifiedComparison() { assertExpression("col1 < ANY (SELECT col2 FROM table1)", new QuantifiedComparisonExpression( LESS_THAN, QuantifiedComparisonExpression.Quantifier.ANY, identifier("col1"), new SubqueryExpression(simpleQuery(selectList(new SingleColumn(identifier("col2"))), table(QualifiedName.of("table1")))))); assertExpression("col1 = ALL (VALUES ROW(1), ROW(2))", new QuantifiedComparisonExpression( ComparisonExpression.Operator.EQUAL, QuantifiedComparisonExpression.Quantifier.ALL, identifier("col1"), new SubqueryExpression(query(values(row(new LongLiteral("1")), row(new LongLiteral("2"))))))); assertExpression("col1 >= SOME (SELECT 10)", new QuantifiedComparisonExpression( ComparisonExpression.Operator.GREATER_THAN_OR_EQUAL, QuantifiedComparisonExpression.Quantifier.SOME, identifier("col1"), new SubqueryExpression(simpleQuery(selectList(new LongLiteral("10")))))); }