public RESULT visit()

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;
  }