in tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java [26:139]
public RESULT visitChild(CONTEXT context, EvalNode evalNode, Stack<EvalNode> stack) {
RESULT result;
switch (evalNode.getType()) {
// Column and Value reference expressions
case CONST:
result = visitConst(context, (ConstEval) evalNode, stack);
break;
case ROW_CONSTANT:
result = visitRowConstant(context, (RowConstantEval) evalNode, stack);
break;
case FIELD:
result = visitField(context, stack, (FieldEval) evalNode);
break;
// Arithmetic expression
case PLUS:
result = visitPlus(context, (BinaryEval) evalNode, stack);
break;
case MINUS:
result = visitMinus(context, (BinaryEval) evalNode, stack);
break;
case MULTIPLY:
result = visitMultiply(context, (BinaryEval) evalNode, stack);
break;
case DIVIDE:
result = visitDivide(context, (BinaryEval) evalNode, stack);
break;
case MODULAR:
result = visitModular(context, (BinaryEval) evalNode, stack);
break;
// Logical Predicates
case AND:
result = visitAnd(context, (BinaryEval) evalNode, stack);
break;
case OR:
result = visitOr(context, (BinaryEval) evalNode, stack);
break;
case NOT:
result = visitNot(context, (NotEval) evalNode, stack);
break;
// Comparison Predicates
case EQUAL:
result = visitEqual(context, (BinaryEval) evalNode, stack);
break;
case NOT_EQUAL:
result = visitNotEqual(context, (BinaryEval) evalNode, stack);
break;
case LTH:
result = visitLessThan(context, (BinaryEval) evalNode, stack);
break;
case LEQ:
result = visitLessThanOrEqual(context, (BinaryEval) evalNode, stack);
break;
case GTH:
result = visitGreaterThan(context, (BinaryEval) evalNode, stack);
break;
case GEQ:
result = visitGreaterThanOrEqual(context, (BinaryEval) evalNode, stack);
break;
// SQL standard predicates
case IS_NULL:
result = visitIsNull(context, (IsNullEval) evalNode, stack);
break;
case BETWEEN:
result = visitBetween(context, (BetweenPredicateEval) evalNode, stack);
break;
case CASE:
result = visitCaseWhen(context, (CaseWhenEval) evalNode, stack);
break;
case IF_THEN:
result = visitIfThen(context, (CaseWhenEval.IfThenEval) evalNode, stack);
break;
case IN:
result = visitInPredicate(context, (InEval) evalNode, stack);
break;
// String operators and Pattern match predicates
case LIKE:
result = visitLike(context, (LikePredicateEval) evalNode, stack);
break;
case SIMILAR_TO:
result = visitSimilarTo(context, (SimilarToPredicateEval) evalNode, stack);
break;
case REGEX:
result = visitRegex(context, (RegexPredicateEval) evalNode, stack);
break;
case CONCATENATE:
result = visitConcatenate(context, (BinaryEval) evalNode, stack);
break;
// Functions
case FUNCTION:
result = visitFuncCall(context, (GeneralFunctionEval) evalNode, stack);
break;
case AGG_FUNCTION:
result = visitAggrFuncCall(context, (AggregationFunctionCallEval) evalNode, stack);
break;
case SIGNED:
result = visitSigned(context, (SignedEval) evalNode, stack);
break;
case CAST:
result = visitCast(context, (CastEval) evalNode, stack);
break;
default:
throw new InvalidEvalException("Unknown EvalNode: " + evalNode);
}
return result;
}