in tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java [47:254]
public RESULT visit(CONTEXT ctx, Stack<Expr> stack, Expr expr) throws PlanningException {
preHook(ctx, stack, expr);
RESULT current;
switch (expr.getType()) {
case Projection:
current = visitProjection(ctx, stack, (Projection) expr);
break;
case Limit:
current = visitLimit(ctx, stack, (Limit) expr);
break;
case Sort:
current = visitSort(ctx, stack, (Sort) expr);
break;
case Having:
current = visitHaving(ctx, stack, (Having) expr);
break;
case Aggregation:
current = visitGroupBy(ctx, stack, (Aggregation) expr);
break;
case Join:
current = visitJoin(ctx, stack, (Join) expr);
break;
case Filter:
current = visitFilter(ctx, stack, (Selection) expr);
break;
case Union:
current = visitUnion(ctx, stack, (SetOperation) expr);
break;
case Except:
current = visitExcept(ctx, stack, (SetOperation) expr);
break;
case Intersect:
current = visitIntersect(ctx, stack, (SetOperation) expr);
break;
case SimpleTableSubQuery:
current = visitSimpleTableSubQuery(ctx, stack, (SimpleTableSubQuery) expr);
break;
case TablePrimaryTableSubQuery:
current = visitTableSubQuery(ctx, stack, (TablePrimarySubQuery) expr);
break;
case RelationList:
current = visitRelationList(ctx, stack, (RelationList) expr);
break;
case Relation:
current = visitRelation(ctx, stack, (Relation) expr);
break;
case ScalarSubQuery:
current = visitScalarSubQuery(ctx, stack, (ScalarSubQuery) expr);
break;
case CreateTable:
current = visitCreateTable(ctx, stack, (CreateTable) expr);
break;
case DropTable:
current = visitDropTable(ctx, stack, (DropTable) expr);
break;
case Insert:
current = visitInsert(ctx, stack, (Insert) expr);
break;
case And:
current = visitAnd(ctx, stack, (BinaryOperator) expr);
break;
case Or:
current = visitOr(ctx, stack, (BinaryOperator) expr);
break;
case Not:
current = visitNot(ctx, stack, (NotExpr) expr);
break;
case Equals:
current = visitEquals(ctx, stack, (BinaryOperator) expr);
break;
case NotEquals:
current = visitNotEquals(ctx, stack, (BinaryOperator) expr);
break;
case LessThan:
current = visitLessThan(ctx, stack, (BinaryOperator) expr);
break;
case LessThanOrEquals:
current = visitLessThanOrEquals(ctx, stack, (BinaryOperator) expr);
break;
case GreaterThan:
current = visitGreaterThan(ctx, stack, (BinaryOperator) expr);
break;
case GreaterThanOrEquals:
current = visitGreaterThanOrEquals(ctx, stack, (BinaryOperator) expr);
break;
// Other Predicates
case Between:
current = visitBetween(ctx, stack, (BetweenPredicate) expr);
break;
case CaseWhen:
current = visitCaseWhen(ctx, stack, (CaseWhenPredicate) expr);
break;
case IsNullPredicate:
current = visitIsNullPredicate(ctx, stack, (IsNullPredicate) expr);
break;
case InPredicate:
current = visitInPredicate(ctx, stack, (InPredicate) expr);
break;
case ValueList:
current = visitValueListExpr(ctx, stack, (ValueListExpr) expr);
break;
case ExistsPredicate:
current = visitExistsPredicate(ctx, stack, (ExistsPredicate) expr);
break;
// String Operator or Pattern Matching Predicates
case LikePredicate:
current = visitLikePredicate(ctx, stack, (PatternMatchPredicate) expr);
break;
case SimilarToPredicate:
current = visitSimilarToPredicate(ctx, stack, (PatternMatchPredicate) expr);
break;
case Regexp:
current = visitRegexpPredicate(ctx, stack, (PatternMatchPredicate) expr);
break;
case Concatenate:
current = visitConcatenate(ctx, stack, (BinaryOperator) expr);
break;
// Arithmetic Operators
case Plus:
current = visitPlus(ctx, stack, (BinaryOperator) expr);
break;
case Minus:
current = visitMinus(ctx, stack, (BinaryOperator) expr);
break;
case Multiply:
current = visitMultiply(ctx, stack, (BinaryOperator) expr);
break;
case Divide:
current = visitDivide(ctx, stack, (BinaryOperator) expr);
break;
case Modular:
current = visitModular(ctx, stack, (BinaryOperator) expr);
break;
// Other Expressions
case Sign:
current = visitSign(ctx, stack, (SignedExpr) expr);
break;
case Column:
current = visitColumnReference(ctx, stack, (ColumnReferenceExpr) expr);
break;
case Target:
current = visitTargetExpr(ctx, stack, (NamedExpr) expr);
break;
case Function:
current = visitFunction(ctx, stack, (FunctionExpr) expr);
break;
case Asterisk:
current = visitQualifiedAsterisk(ctx, stack, (QualifiedAsteriskExpr) expr);
break;
case CountRowsFunction:
current = visitCountRowsFunction(ctx, stack, (CountRowsFunctionExpr) expr);
break;
case GeneralSetFunction:
current = visitGeneralSetFunction(ctx, stack, (GeneralSetFunctionExpr) expr);
break;
case DataType:
current = visitDataType(ctx, stack, (DataTypeExpr) expr);
break;
case Cast:
current = visitCastExpr(ctx, stack, (CastExpr) expr);
break;
case Literal:
current = visitLiteral(ctx, stack, (LiteralValue) expr);
break;
case NullLiteral:
current = visitNullLiteral(ctx, stack, (NullLiteral) expr);
break;
case DateLiteral:
current = visitDateLiteral(ctx, stack, (DateLiteral) expr);
break;
case TimeLiteral:
current = visitTimeLiteral(ctx, stack, (TimeLiteral) expr);
break;
case TimestampLiteral:
current = visitTimestampLiteral(ctx, stack, (TimestampLiteral) expr);
break;
default:
throw new PlanningException("Cannot support this type algebra \"" + expr.getType() + "\"");
}
// skip postHook against only one relation
if (expr.getType() == OpType.RelationList) {
RelationList relationList = (RelationList)expr;
if (relationList.size() == 1 && relationList.getRelations()[0].getType() == OpType.Relation) {
return current;
}
}
postHook(ctx, stack, expr, current);
return current;
}