blob: 8b34189efe08a519d1de3d86af3e2d9b932a32d9 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.tajo.engine.planner;
import org.apache.tajo.algebra.*;
import java.util.Stack;
/**
* <code>SimpleAlgebraVisitor</code> provides a simple and fewer visit methods. It makes building concrete class easier.
*/
public abstract class SimpleAlgebraVisitor<CONTEXT, RESULT> extends BaseAlgebraVisitor<CONTEXT, RESULT> {
public RESULT visit(CONTEXT ctx, Stack<Expr> stack, Expr expr) throws PlanningException {
RESULT result = null;
if (expr instanceof UnaryOperator) {
preHook(ctx, stack, expr);
result = visitUnaryOperator(ctx, stack, (UnaryOperator) expr);
postHook(ctx, stack, expr, result);
} else if (expr instanceof BinaryOperator) {
preHook(ctx, stack, expr);
result = visitBinaryOperator(ctx, stack, (BinaryOperator) expr);
postHook(ctx, stack, expr, result);
} else {
result = super.visit(ctx, stack, expr);
}
return result;
}
public RESULT visitUnaryOperator(CONTEXT ctx, Stack<Expr> stack, UnaryOperator expr) throws PlanningException {
stack.push(expr);
RESULT result = visit(ctx, stack, expr.getChild());
stack.pop();
return result;
}
public RESULT visitBinaryOperator(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException {
stack.push(expr);
visit(ctx, stack, expr.getLeft());
RESULT result = visit(ctx, stack, expr.getRight());
stack.pop();
return result;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Relational Operator Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitProjection(CONTEXT ctx, Stack<Expr> stack, Projection expr) throws PlanningException {
return super.visitProjection(ctx, stack, expr);
}
@Override
public RESULT visitLimit(CONTEXT ctx, Stack<Expr> stack, Limit expr) throws PlanningException {
return super.visitLimit(ctx, stack, expr);
}
@Override
public RESULT visitSort(CONTEXT ctx, Stack<Expr> stack, Sort expr) throws PlanningException {
return super.visitSort(ctx, stack, expr);
}
@Override
public RESULT visitHaving(CONTEXT ctx, Stack<Expr> stack, Having expr) throws PlanningException {
return super.visitHaving(ctx, stack, expr);
}
@Override
public RESULT visitGroupBy(CONTEXT ctx, Stack<Expr> stack, Aggregation expr) throws PlanningException {
return super.visitGroupBy(ctx, stack, expr);
}
public RESULT visitFilter(CONTEXT ctx, Stack<Expr> stack, Selection expr) throws PlanningException {
return super.visitFilter(ctx, stack, expr);
}
@Override
public RESULT visitJoin(CONTEXT ctx, Stack<Expr> stack, Join expr) throws PlanningException {
return super.visitJoin(ctx, stack, expr);
}
@Override
public RESULT visitTableSubQuery(CONTEXT ctx, Stack<Expr> stack, TablePrimarySubQuery expr) throws PlanningException {
return super.visitTableSubQuery(ctx, stack, expr);
}
@Override
public RESULT visitRelationList(CONTEXT ctx, Stack<Expr> stack, RelationList expr) throws PlanningException {
return super.visitRelationList(ctx, stack, expr);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Data Definition Language Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitCreateTable(CONTEXT ctx, Stack<Expr> stack, CreateTable expr) throws PlanningException {
return super.visitCreateTable(ctx, stack, expr);
}
@Override
public RESULT visitDropTable(CONTEXT ctx, Stack<Expr> stack, DropTable expr) throws PlanningException {
return super.visitDropTable(ctx, stack, expr);
}
@Override
public RESULT visitAlterTable(CONTEXT ctx, Stack<Expr> stack, AlterTable expr) throws PlanningException {
return super.visitAlterTable(ctx, stack, expr);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Insert or Update Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitInsert(CONTEXT ctx, Stack<Expr> stack, Insert expr) throws PlanningException {
return super.visitInsert(ctx, stack, expr);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Other Predicates Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitBetween(CONTEXT ctx, Stack<Expr> stack, BetweenPredicate expr) throws PlanningException {
return super.visitBetween(ctx, stack, expr);
}
@Override
public RESULT visitCaseWhen(CONTEXT ctx, Stack<Expr> stack, CaseWhenPredicate expr) throws PlanningException {
return super.visitCaseWhen(ctx, stack, expr);
}
@Override
public RESULT visitValueListExpr(CONTEXT ctx, Stack<Expr> stack, ValueListExpr expr) throws PlanningException {
return super.visitValueListExpr(ctx, stack, expr);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Functions and General Set Function Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitFunction(CONTEXT ctx, Stack<Expr> stack, FunctionExpr expr) throws PlanningException {
return super.visitFunction(ctx, stack, expr);
}
@Override
public RESULT visitCountRowsFunction(CONTEXT ctx, Stack<Expr> stack, CountRowsFunctionExpr expr)
throws PlanningException {
return super.visitCountRowsFunction(ctx, stack, expr);
}
@Override
public RESULT visitGeneralSetFunction(CONTEXT ctx, Stack<Expr> stack, GeneralSetFunctionExpr expr)
throws PlanningException {
return super.visitGeneralSetFunction(ctx, stack, expr);
}
@Override
public RESULT visitWindowFunction(CONTEXT ctx, Stack<Expr> stack, WindowFunctionExpr expr) throws PlanningException {
return super.visitWindowFunction(ctx, stack, expr);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Literal Section
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public RESULT visitDataType(CONTEXT ctx, Stack<Expr> stack, DataTypeExpr expr) throws PlanningException {
return super.visitDataType(ctx, stack, expr);
}
@Override
public RESULT visitLiteral(CONTEXT ctx, Stack<Expr> stack, LiteralValue expr) throws PlanningException {
return super.visitLiteral(ctx, stack, expr);
}
@Override
public RESULT visitNullLiteral(CONTEXT ctx, Stack<Expr> stack, NullLiteral expr) throws PlanningException {
return super.visitNullLiteral(ctx, stack, expr);
}
@Override
public RESULT visitTimestampLiteral(CONTEXT ctx, Stack<Expr> stack, TimestampLiteral expr) throws PlanningException {
return super.visitTimestampLiteral(ctx, stack, expr);
}
@Override
public RESULT visitTimeLiteral(CONTEXT ctx, Stack<Expr> stack, TimeLiteral expr) throws PlanningException {
return super.visitTimeLiteral(ctx, stack, expr);
}
}