public boolean isEmpty() { return size() == 0; }
public boolean isEmpty() { return size() == 0; }
@Override public Result apply(ApplyNode parent, Captures captures, Context context) { if (parent.getSubqueryAssignments().size() != 1) { return Result.empty(); } Expression expression = getOnlyElement(parent.getSubqueryAssignments().getExpressions()); if (!(expression instanceof ExistsPredicate)) { return Result.empty(); } Optional<PlanNode> nonDefaultAggregation = rewriteToNonDefaultAggregation(parent, context); return nonDefaultAggregation .map(Result::ofPlanNode) .orElseGet(() -> Result.ofPlanNode(rewriteToDefaultAggregation(parent, context))); }
@Override public PlanNode visitApply(ApplyNode node, RewriteContext<PlanNode> context) { if (node.getSubqueryAssignments().size() != 1) { return context.defaultRewrite(node); } Expression expression = getOnlyElement(node.getSubqueryAssignments().getExpressions()); if (!(expression instanceof QuantifiedComparisonExpression)) { return context.defaultRewrite(node); } QuantifiedComparisonExpression quantifiedComparison = (QuantifiedComparisonExpression) expression; return rewriteQuantifiedApplyNode(node, quantifiedComparison, context); }
@Override public Result apply(ApplyNode parent, Captures captures, Context context) { if (parent.getSubqueryAssignments().size() != 1) { return Result.empty(); } Expression expression = getOnlyElement(parent.getSubqueryAssignments().getExpressions()); if (!(expression instanceof ExistsPredicate)) { return Result.empty(); } Optional<PlanNode> nonDefaultAggregation = rewriteToNonDefaultAggregation(parent, context); return nonDefaultAggregation .map(Result::ofPlanNode) .orElseGet(() -> Result.ofPlanNode(rewriteToDefaultAggregation(parent, context))); }
@Override public PlanNode visitApply(ApplyNode node, RewriteContext<PlanNode> context) { if (node.getSubqueryAssignments().size() != 1) { return context.defaultRewrite(node); } Expression expression = getOnlyElement(node.getSubqueryAssignments().getExpressions()); if (!(expression instanceof QuantifiedComparisonExpression)) { return context.defaultRewrite(node); } QuantifiedComparisonExpression quantifiedComparison = (QuantifiedComparisonExpression) expression; return rewriteQuantifiedApplyNode(node, quantifiedComparison, context); }
@Override public Result apply(ApplyNode apply, Captures captures, Context context) { Assignments subqueryAssignments = apply.getSubqueryAssignments(); if (subqueryAssignments.size() != 1) { return Result.empty(); } Expression assignmentExpression = getOnlyElement(subqueryAssignments.getExpressions()); if (!(assignmentExpression instanceof InPredicate)) { return Result.empty(); } InPredicate inPredicate = (InPredicate) assignmentExpression; Symbol inPredicateOutputSymbol = getOnlyElement(subqueryAssignments.getSymbols()); return apply(apply, inPredicate, inPredicateOutputSymbol, context.getLookup(), context.getIdAllocator(), context.getSymbolAllocator()); }
@Override public Result apply(ApplyNode apply, Captures captures, Context context) { Assignments subqueryAssignments = apply.getSubqueryAssignments(); if (subqueryAssignments.size() != 1) { return Result.empty(); } Expression assignmentExpression = getOnlyElement(subqueryAssignments.getExpressions()); if (!(assignmentExpression instanceof InPredicate)) { return Result.empty(); } InPredicate inPredicate = (InPredicate) assignmentExpression; Symbol inPredicateOutputSymbol = getOnlyElement(subqueryAssignments.getSymbols()); return apply(apply, inPredicate, inPredicateOutputSymbol, context.getLookup(), context.getIdAllocator(), context.getSymbolAllocator()); }
@Override public Result apply(ApplyNode applyNode, Captures captures, Context context) { if (applyNode.getSubqueryAssignments().size() != 1) { return Result.empty(); } Expression expression = getOnlyElement(applyNode.getSubqueryAssignments().getExpressions()); if (!(expression instanceof InPredicate)) { return Result.empty(); } InPredicate inPredicate = (InPredicate) expression; Symbol semiJoinSymbol = getOnlyElement(applyNode.getSubqueryAssignments().getSymbols()); SemiJoinNode replacement = new SemiJoinNode(context.getIdAllocator().getNextId(), applyNode.getInput(), applyNode.getSubquery(), Symbol.from(inPredicate.getValue()), Symbol.from(inPredicate.getValueList()), semiJoinSymbol, Optional.empty(), Optional.empty(), Optional.empty()); return Result.ofPlanNode(replacement); } }
@Override public Result apply(ApplyNode applyNode, Captures captures, Context context) { if (applyNode.getSubqueryAssignments().size() != 1) { return Result.empty(); } Expression expression = getOnlyElement(applyNode.getSubqueryAssignments().getExpressions()); if (!(expression instanceof InPredicate)) { return Result.empty(); } InPredicate inPredicate = (InPredicate) expression; Symbol semiJoinSymbol = getOnlyElement(applyNode.getSubqueryAssignments().getSymbols()); SemiJoinNode replacement = new SemiJoinNode(context.getIdAllocator().getNextId(), applyNode.getInput(), applyNode.getSubquery(), Symbol.from(inPredicate.getValue()), Symbol.from(inPredicate.getValueList()), semiJoinSymbol, Optional.empty(), Optional.empty(), Optional.empty()); return Result.ofPlanNode(replacement); } }