@Override protected EvalNode visitBetween(Object o, BetweenPredicateEval evalNode, Stack<EvalNode> stack) { stack.push(evalNode); visit(o, evalNode.getPredicand(), stack); Expr predicand = exprs.pop(); visit(o, evalNode.getBegin(), stack); Expr begin = exprs.pop(); visit(o, evalNode.getEnd(), stack); Expr end = exprs.pop(); Expr expr = new BetweenPredicate(evalNode.isNot(), evalNode.isSymmetric(), predicand, begin, end); exprs.push(expr); stack.pop(); return null; }
@Override public EvalNode visitBetween(EvalTreeProtoBuilderContext context, BetweenPredicateEval between, Stack<EvalNode> stack) { // visiting and registering childs super.visitBetween(context, between, stack); int [] childIds = registerGetChildIds(context, between); Preconditions.checkState(childIds.length == 3, "Between must have three childs, but there are " + childIds.length + " child nodes"); // building itself PlanProto.BetweenEval.Builder betweenBuilder = PlanProto.BetweenEval.newBuilder(); betweenBuilder.setNegative(between.isNot()); betweenBuilder.setSymmetric(between.isSymmetric()); betweenBuilder.setPredicand(childIds[0]); betweenBuilder.setBegin(childIds[1]); betweenBuilder.setEnd(childIds[2]); // registering itself and building EvalNode PlanProto.EvalNode.Builder builder = createEvalBuilder(context, between); builder.setBetween(betweenBuilder); context.treeBuilder.addNodes(builder); return between; }
@Override public EvalNode visitBetween(EvalTreeProtoBuilderContext context, BetweenPredicateEval between, Stack<EvalNode> stack) { // visiting and registering childs super.visitBetween(context, between, stack); int [] childIds = registerGetChildIds(context, between); Preconditions.checkState(childIds.length == 3, "Between must have three childs, but there are " + childIds.length + " child nodes"); // building itself PlanProto.BetweenEval.Builder betweenBuilder = PlanProto.BetweenEval.newBuilder(); betweenBuilder.setNegative(between.isNot()); betweenBuilder.setSymmetric(between.isSymmetric()); betweenBuilder.setPredicand(childIds[0]); betweenBuilder.setBegin(childIds[1]); betweenBuilder.setEnd(childIds[2]); // registering itself and building EvalNode PlanProto.EvalNode.Builder builder = createEvalBuilder(context, between); builder.setBetween(betweenBuilder); context.treeBuilder.addNodes(builder); return between; }