public static boolean isIndexableOperator(EvalNode expr) { return expr.getType() == EvalType.EQUAL || expr.getType() == EvalType.LEQ || expr.getType() == EvalType.LTH || expr.getType() == EvalType.GEQ || expr.getType() == EvalType.GTH || expr.getType() == EvalType.BETWEEN || expr.getType() == EvalType.IN || (expr.getType() == EvalType.LIKE && !((LikePredicateEval)expr).isLeadingWildCard()); }
public static boolean isIndexableOperator(EvalNode expr) { return expr.getType() == EvalType.EQUAL || expr.getType() == EvalType.LEQ || expr.getType() == EvalType.LTH || expr.getType() == EvalType.GEQ || expr.getType() == EvalType.GTH || expr.getType() == EvalType.BETWEEN || expr.getType() == EvalType.IN || (expr.getType() == EvalType.LIKE && !((LikePredicateEval)expr).isLeadingWildCard()); }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.AGG_FUNCTION) { field = (AggregationFunctionCallEval) node; aggFucntions.add(field); } }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.FIELD) { field = (FieldEval) node; columnSet.add(field.getColumnRef()); } }
@Override public JsonElement serialize(EvalNode evalNode, Type type, JsonSerializationContext ctx) { JsonObject json = new JsonObject(); json.addProperty("type", evalNode.getType().name()); json.add("body", ctx.serialize(evalNode)); return json; } }
static List<InEval> extractInSubquery(EvalNode qual) { List<InEval> inSubqueries = new ArrayList<>(); for (EvalNode eachQual : EvalTreeUtil.findEvalsByType(qual, EvalType.IN)) { InEval inEval = (InEval) eachQual; if (inEval.getRightExpr().getType() == EvalType.SUBQUERY) { inSubqueries.add(inEval); } } return inSubqueries; }
@Override protected EvalNode visitUnaryEval(Object context, UnaryEval unaryEval, Stack<EvalNode> stack) { stack.push(unaryEval); EvalNode child = unaryEval.getChild(); visit(context, child, stack); if (child.getType() == EvalType.AND || child.getType() == EvalType.OR) { unaryEval.setChild(rewrite((BinaryEval) child)); } stack.pop(); return unaryEval; }
@Override public EvalNode visitUnaryEval(Object context, UnaryEval unaryEval, Stack<EvalNode> stack) { stack.push(unaryEval); EvalNode child = visit(context, unaryEval.getChild(), stack); stack.pop(); if (child.getType() == EvalType.CONST) { return new ConstEval(unaryEval.bind(null, null).eval(null)); } return unaryEval; }
@Override public EvalNode visitUnaryEval(Object context, UnaryEval unaryEval, Stack<EvalNode> stack) { stack.push(unaryEval); EvalNode child = visit(context, unaryEval.getChild(), stack); stack.pop(); if (child.getType() == EvalType.CONST) { return new ConstEval(unaryEval.bind(null, null).eval(null)); } return unaryEval; }
private static void toDisjunctiveNormalFormArrayRecursive(EvalNode node, List<EvalNode> found) { if (node.getType() == EvalType.OR) { toDisjunctiveNormalFormArrayRecursive(((BinaryEval)node).getLeftExpr(), found); toDisjunctiveNormalFormArrayRecursive(((BinaryEval)node).getRightExpr(), found); } else { found.add(node); } }
private static void toConjunctiveNormalFormArrayRecursive(EvalNode node, List<EvalNode> found) { if (node.getType() == EvalType.AND) { toConjunctiveNormalFormArrayRecursive(((BinaryEval)node).getLeftExpr(), found); toConjunctiveNormalFormArrayRecursive(((BinaryEval)node).getRightExpr(), found); } else { found.add(node); } }
private static boolean isNonEquiThetaJoinQual(final LogicalPlan.QueryBlock block, final JoinNode joinNode, final EvalNode evalNode) { if (EvalTreeUtil.isJoinQual(block, joinNode.getLeftChild().getOutSchema(), joinNode.getRightChild().getOutSchema(), evalNode, true) && evalNode.getType() != EvalType.EQUAL) { return true; } else { return false; } }
public static boolean isNonEquiThetaJoinQual(final LogicalPlan.QueryBlock block, final JoinNode joinNode, final EvalNode evalNode) { if (EvalTreeUtil.isJoinQual(block, joinNode.getLeftChild().getOutSchema(), joinNode.getRightChild().getOutSchema(), evalNode, true) && evalNode.getType() != EvalType.EQUAL) { return true; } else { return false; } }
private static int getSwitchIndex(EvalNode predicate) { Preconditions.checkArgument(checkIfSimplePredicate(predicate), "This expression cannot be used for switch table: " + predicate); BinaryEval bin = (BinaryEval) predicate; if (bin.getLeftExpr().getType() == EvalType.CONST) { return bin.getLeftExpr().eval(null).asInt4(); } else { return bin.getRightExpr().eval(null).asInt4(); } } }
private static int getSwitchIndex(EvalNode predicate) { Preconditions.checkArgument(checkIfSimplePredicate(predicate), "This expression cannot be used for switch table: " + predicate); BinaryEval bin = (BinaryEval) predicate; if (bin.getLeftExpr().getType() == EvalType.CONST) { return bin.getLeftExpr().eval(null).asInt4(); } else { return bin.getRightExpr().eval(null).asInt4(); } } }
private static void checkDivisionByZero(VerificationState state, BinaryEval evalNode) { if (evalNode.getRightExpr().getType() == EvalType.CONST) { ConstEval constEval = evalNode.getRightExpr(); if (constEval.getValue().asFloat8() == 0) { state.addVerification(new TajoException(Errors.ResultCode.DIVISION_BY_ZERO, evalNode.toString())); } } }
private static void checkDivisionByZero(VerificationState state, BinaryEval evalNode) { if (evalNode.getRightExpr().getType() == EvalType.CONST) { ConstEval constEval = evalNode.getRightExpr(); if (constEval.getValue().asFloat8() == 0) { state.addVerification(new TajoException(Errors.ResultCode.DIVISION_BY_ZERO, evalNode.toString())); } } }