/* * Copyright 1999-2012 Alibaba Group. * * Licensed 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. */ /** * (created at 2011-11-9) */ package com.alibaba.cobar.parser.visitor; import java.util.Collection; import com.alibaba.cobar.parser.ast.ASTNode; import com.alibaba.cobar.parser.ast.expression.BinaryOperatorExpression; import com.alibaba.cobar.parser.ast.expression.PolyadicOperatorExpression; import com.alibaba.cobar.parser.ast.expression.UnaryOperatorExpression; import com.alibaba.cobar.parser.ast.expression.comparison.BetweenAndExpression; import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionEqualsExpression; import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionIsExpression; import com.alibaba.cobar.parser.ast.expression.comparison.ComparisionNullSafeEqualsExpression; import com.alibaba.cobar.parser.ast.expression.comparison.InExpression; import com.alibaba.cobar.parser.ast.expression.logical.LogicalAndExpression; import com.alibaba.cobar.parser.ast.expression.logical.LogicalOrExpression; import com.alibaba.cobar.parser.ast.expression.misc.InExpressionList; import com.alibaba.cobar.parser.ast.expression.misc.UserExpression; import com.alibaba.cobar.parser.ast.expression.primary.CaseWhenOperatorExpression; import com.alibaba.cobar.parser.ast.expression.primary.DefaultValue; import com.alibaba.cobar.parser.ast.expression.primary.ExistsPrimary; import com.alibaba.cobar.parser.ast.expression.primary.Identifier; import com.alibaba.cobar.parser.ast.expression.primary.MatchExpression; import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker; import com.alibaba.cobar.parser.ast.expression.primary.PlaceHolder; import com.alibaba.cobar.parser.ast.expression.primary.RowExpression; import com.alibaba.cobar.parser.ast.expression.primary.SysVarPrimary; import com.alibaba.cobar.parser.ast.expression.primary.UsrDefVarPrimary; import com.alibaba.cobar.parser.ast.expression.primary.function.FunctionExpression; import com.alibaba.cobar.parser.ast.expression.primary.function.cast.Cast; import com.alibaba.cobar.parser.ast.expression.primary.function.cast.Convert; import com.alibaba.cobar.parser.ast.expression.primary.function.datetime.Extract; import com.alibaba.cobar.parser.ast.expression.primary.function.datetime.GetFormat; import com.alibaba.cobar.parser.ast.expression.primary.function.datetime.Timestampadd; import com.alibaba.cobar.parser.ast.expression.primary.function.datetime.Timestampdiff; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Avg; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Count; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.GroupConcat; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Max; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Min; import com.alibaba.cobar.parser.ast.expression.primary.function.groupby.Sum; import com.alibaba.cobar.parser.ast.expression.primary.function.string.Char; import com.alibaba.cobar.parser.ast.expression.primary.function.string.Trim; import com.alibaba.cobar.parser.ast.expression.primary.literal.IntervalPrimary; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralBitField; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralBoolean; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralHexadecimal; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralNull; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralNumber; import com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString; import com.alibaba.cobar.parser.ast.expression.string.LikeExpression; import com.alibaba.cobar.parser.ast.expression.type.CollateExpression; import com.alibaba.cobar.parser.ast.fragment.GroupBy; import com.alibaba.cobar.parser.ast.fragment.Limit; import com.alibaba.cobar.parser.ast.fragment.OrderBy; import com.alibaba.cobar.parser.ast.fragment.ddl.ColumnDefinition; import com.alibaba.cobar.parser.ast.fragment.ddl.TableOptions; import com.alibaba.cobar.parser.ast.fragment.ddl.datatype.DataType; import com.alibaba.cobar.parser.ast.fragment.ddl.index.IndexColumnName; import com.alibaba.cobar.parser.ast.fragment.ddl.index.IndexOption; import com.alibaba.cobar.parser.ast.fragment.tableref.Dual; import com.alibaba.cobar.parser.ast.fragment.tableref.IndexHint; import com.alibaba.cobar.parser.ast.fragment.tableref.InnerJoin; import com.alibaba.cobar.parser.ast.fragment.tableref.NaturalJoin; import com.alibaba.cobar.parser.ast.fragment.tableref.OuterJoin; import com.alibaba.cobar.parser.ast.fragment.tableref.StraightJoin; import com.alibaba.cobar.parser.ast.fragment.tableref.SubqueryFactor; import com.alibaba.cobar.parser.ast.fragment.tableref.TableRefFactor; import com.alibaba.cobar.parser.ast.fragment.tableref.TableReferences; import com.alibaba.cobar.parser.ast.stmt.dal.DALSetCharacterSetStatement; import com.alibaba.cobar.parser.ast.stmt.dal.DALSetNamesStatement; import com.alibaba.cobar.parser.ast.stmt.dal.DALSetStatement; import com.alibaba.cobar.parser.ast.stmt.dal.ShowAuthors; import com.alibaba.cobar.parser.ast.stmt.dal.ShowBinLogEvent; import com.alibaba.cobar.parser.ast.stmt.dal.ShowBinaryLog; import com.alibaba.cobar.parser.ast.stmt.dal.ShowCharaterSet; import com.alibaba.cobar.parser.ast.stmt.dal.ShowCollation; import com.alibaba.cobar.parser.ast.stmt.dal.ShowColumns; import com.alibaba.cobar.parser.ast.stmt.dal.ShowContributors; import com.alibaba.cobar.parser.ast.stmt.dal.ShowCreate; import com.alibaba.cobar.parser.ast.stmt.dal.ShowDatabases; import com.alibaba.cobar.parser.ast.stmt.dal.ShowEngine; import com.alibaba.cobar.parser.ast.stmt.dal.ShowEngines; import com.alibaba.cobar.parser.ast.stmt.dal.ShowErrors; import com.alibaba.cobar.parser.ast.stmt.dal.ShowEvents; import com.alibaba.cobar.parser.ast.stmt.dal.ShowFunctionCode; import com.alibaba.cobar.parser.ast.stmt.dal.ShowFunctionStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowGrants; import com.alibaba.cobar.parser.ast.stmt.dal.ShowIndex; import com.alibaba.cobar.parser.ast.stmt.dal.ShowMasterStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowOpenTables; import com.alibaba.cobar.parser.ast.stmt.dal.ShowPlugins; import com.alibaba.cobar.parser.ast.stmt.dal.ShowPrivileges; import com.alibaba.cobar.parser.ast.stmt.dal.ShowProcedureCode; import com.alibaba.cobar.parser.ast.stmt.dal.ShowProcedureStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowProcesslist; import com.alibaba.cobar.parser.ast.stmt.dal.ShowProfile; import com.alibaba.cobar.parser.ast.stmt.dal.ShowProfiles; import com.alibaba.cobar.parser.ast.stmt.dal.ShowSlaveHosts; import com.alibaba.cobar.parser.ast.stmt.dal.ShowSlaveStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowTableStatus; import com.alibaba.cobar.parser.ast.stmt.dal.ShowTables; import com.alibaba.cobar.parser.ast.stmt.dal.ShowTriggers; import com.alibaba.cobar.parser.ast.stmt.dal.ShowVariables; import com.alibaba.cobar.parser.ast.stmt.dal.ShowWarnings; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLAlterTableStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLAlterTableStatement.AlterSpecification; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLCreateIndexStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLCreateTableStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLDropIndexStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLDropTableStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLRenameTableStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DDLTruncateStatement; import com.alibaba.cobar.parser.ast.stmt.ddl.DescTableStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLCallStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLDeleteStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLInsertStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLReplaceStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLSelectStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLSelectUnionStatement; import com.alibaba.cobar.parser.ast.stmt.dml.DMLUpdateStatement; import com.alibaba.cobar.parser.ast.stmt.extension.ExtDDLCreatePolicy; import com.alibaba.cobar.parser.ast.stmt.extension.ExtDDLDropPolicy; import com.alibaba.cobar.parser.ast.stmt.mts.MTSReleaseStatement; import com.alibaba.cobar.parser.ast.stmt.mts.MTSRollbackStatement; import com.alibaba.cobar.parser.ast.stmt.mts.MTSSavepointStatement; import com.alibaba.cobar.parser.ast.stmt.mts.MTSSetTransactionStatement; import com.alibaba.cobar.parser.util.Pair; /** * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a> */ public class EmptySQLASTVisitor implements SQLASTVisitor { @SuppressWarnings({ "rawtypes" }) private void visitInternal(Object obj) { if (obj == null) return; if (obj instanceof ASTNode) { ((ASTNode) obj).accept(this); } else if (obj instanceof Collection) { for (Object o : (Collection) obj) { visitInternal(o); } } else if (obj instanceof Pair) { visitInternal(((Pair) obj).getKey()); visitInternal(((Pair) obj).getValue()); } } @Override public void visit(BetweenAndExpression node) { visitInternal(node.getFirst()); visitInternal(node.getSecond()); visitInternal(node.getThird()); } @Override public void visit(ComparisionIsExpression node) { visitInternal(node.getOperand()); } @Override public void visit(InExpressionList node) { visitInternal(node.getList()); } @Override public void visit(LikeExpression node) { visitInternal(node.getFirst()); visitInternal(node.getSecond()); visitInternal(node.getThird()); } @Override public void visit(CollateExpression node) { visitInternal(node.getString()); } @Override public void visit(UserExpression node) { } @Override public void visit(UnaryOperatorExpression node) { visitInternal(node.getOperand()); } @Override public void visit(BinaryOperatorExpression node) { visitInternal(node.getLeftOprand()); visitInternal(node.getRightOprand()); } @Override public void visit(PolyadicOperatorExpression node) { for (int i = 0, len = node.getArity(); i < len; ++i) { visitInternal(node.getOperand(i)); } } @Override public void visit(LogicalAndExpression node) { visit((PolyadicOperatorExpression) node); } @Override public void visit(LogicalOrExpression node) { visit((PolyadicOperatorExpression) node); } @Override public void visit(ComparisionEqualsExpression node) { visit((BinaryOperatorExpression) node); } @Override public void visit(ComparisionNullSafeEqualsExpression node) { visit((BinaryOperatorExpression) node); } @Override public void visit(InExpression node) { visit((BinaryOperatorExpression) node); } @Override public void visit(FunctionExpression node) { visitInternal(node.getArguments()); } @Override public void visit(Char node) { visit((FunctionExpression) node); } @Override public void visit(Convert node) { visit((FunctionExpression) node); } @Override public void visit(Trim node) { visit((FunctionExpression) node); visitInternal(node.getRemainString()); visitInternal(node.getString()); } @Override public void visit(Cast node) { visit((FunctionExpression) node); visitInternal(node.getExpr()); visitInternal(node.getTypeInfo1()); visitInternal(node.getTypeInfo2()); } @Override public void visit(Avg node) { visit((FunctionExpression) node); } @Override public void visit(Max node) { visit((FunctionExpression) node); } @Override public void visit(Min node) { visit((FunctionExpression) node); } @Override public void visit(Sum node) { visit((FunctionExpression) node); } @Override public void visit(Count node) { visit((FunctionExpression) node); } @Override public void visit(GroupConcat node) { visit((FunctionExpression) node); visitInternal(node.getAppendedColumnNames()); visitInternal(node.getOrderBy()); } @Override public void visit(Timestampdiff node) { } @Override public void visit(Timestampadd node) { } @Override public void visit(Extract node) { } @Override public void visit(GetFormat node) { } @Override public void visit(IntervalPrimary node) { visitInternal(node.getQuantity()); } @Override public void visit(LiteralBitField node) { } @Override public void visit(LiteralBoolean node) { } @Override public void visit(LiteralHexadecimal node) { } @Override public void visit(LiteralNull node) { } @Override public void visit(LiteralNumber node) { } @Override public void visit(LiteralString node) { } @Override public void visit(CaseWhenOperatorExpression node) { visitInternal(node.getComparee()); visitInternal(node.getElseResult()); visitInternal(node.getWhenList()); } @Override public void visit(DefaultValue node) { } @Override public void visit(ExistsPrimary node) { visitInternal(node.getSubquery()); } @Override public void visit(PlaceHolder node) { } @Override public void visit(Identifier node) { } @Override public void visit(MatchExpression node) { visitInternal(node.getColumns()); visitInternal(node.getPattern()); } @Override public void visit(ParamMarker node) { } @Override public void visit(RowExpression node) { visitInternal(node.getRowExprList()); } @Override public void visit(SysVarPrimary node) { } @Override public void visit(UsrDefVarPrimary node) { } @Override public void visit(IndexHint node) { } @Override public void visit(InnerJoin node) { visitInternal(node.getLeftTableRef()); visitInternal(node.getOnCond()); visitInternal(node.getRightTableRef()); } @Override public void visit(NaturalJoin node) { visitInternal(node.getLeftTableRef()); visitInternal(node.getRightTableRef()); } @Override public void visit(OuterJoin node) { visitInternal(node.getLeftTableRef()); visitInternal(node.getOnCond()); visitInternal(node.getRightTableRef()); } @Override public void visit(StraightJoin node) { visitInternal(node.getLeftTableRef()); visitInternal(node.getOnCond()); visitInternal(node.getRightTableRef()); } @Override public void visit(SubqueryFactor node) { visitInternal(node.getSubquery()); } @Override public void visit(TableReferences node) { visitInternal(node.getTableReferenceList()); } @Override public void visit(TableRefFactor node) { visitInternal(node.getHintList()); visitInternal(node.getTable()); } @Override public void visit(Dual dual) { } @Override public void visit(GroupBy node) { visitInternal(node.getOrderByList()); } @Override public void visit(Limit node) { visitInternal(node.getOffset()); visitInternal(node.getSize()); } @Override public void visit(OrderBy node) { visitInternal(node.getOrderByList()); } @Override public void visit(ColumnDefinition columnDefinition) { } @Override public void visit(IndexOption indexOption) { } @Override public void visit(IndexColumnName indexColumnName) { } @Override public void visit(TableOptions node) { } @Override public void visit(AlterSpecification node) { } @Override public void visit(DataType node) { } @Override public void visit(ShowAuthors node) { } @Override public void visit(ShowBinaryLog node) { } @Override public void visit(ShowBinLogEvent node) { visitInternal(node.getLimit()); visitInternal(node.getPos()); } @Override public void visit(ShowCharaterSet node) { visitInternal(node.getWhere()); } @Override public void visit(ShowCollation node) { visitInternal(node.getWhere()); } @Override public void visit(ShowColumns node) { visitInternal(node.getTable()); visitInternal(node.getWhere()); } @Override public void visit(ShowContributors node) { } @Override public void visit(ShowCreate node) { visitInternal(node.getId()); } @Override public void visit(ShowDatabases node) { visitInternal(node.getWhere()); } @Override public void visit(ShowEngine node) { } @Override public void visit(ShowEngines node) { } @Override public void visit(ShowErrors node) { visitInternal(node.getLimit()); } @Override public void visit(ShowEvents node) { visitInternal(node.getSchema()); visitInternal(node.getWhere()); } @Override public void visit(ShowFunctionCode node) { visitInternal(node.getFunctionName()); } @Override public void visit(ShowFunctionStatus node) { visitInternal(node.getWhere()); } @Override public void visit(ShowGrants node) { visitInternal(node.getUser()); } @Override public void visit(ShowIndex node) { visitInternal(node.getTable()); } @Override public void visit(ShowMasterStatus node) { } @Override public void visit(ShowOpenTables node) { visitInternal(node.getSchema()); visitInternal(node.getWhere()); } @Override public void visit(ShowPlugins node) { } @Override public void visit(ShowPrivileges node) { } @Override public void visit(ShowProcedureCode node) { visitInternal(node.getProcedureName()); } @Override public void visit(ShowProcedureStatus node) { visitInternal(node.getWhere()); } @Override public void visit(ShowProcesslist node) { } @Override public void visit(ShowProfile node) { visitInternal(node.getForQuery()); visitInternal(node.getLimit()); } @Override public void visit(ShowProfiles node) { } @Override public void visit(ShowSlaveHosts node) { } @Override public void visit(ShowSlaveStatus node) { } @Override public void visit(ShowStatus node) { visitInternal(node.getWhere()); } @Override public void visit(ShowTables node) { visitInternal(node.getSchema()); visitInternal(node.getWhere()); } @Override public void visit(ShowTableStatus node) { visitInternal(node.getDatabase()); visitInternal(node.getWhere()); } @Override public void visit(ShowTriggers node) { visitInternal(node.getSchema()); visitInternal(node.getWhere()); } @Override public void visit(ShowVariables node) { visitInternal(node.getWhere()); } @Override public void visit(ShowWarnings node) { visitInternal(node.getLimit()); } @Override public void visit(DescTableStatement node) { visitInternal(node.getTable()); } @Override public void visit(DALSetStatement node) { visitInternal(node.getAssignmentList()); } @Override public void visit(DALSetNamesStatement node) { } @Override public void visit(DALSetCharacterSetStatement node) { } @Override public void visit(DMLCallStatement node) { visitInternal(node.getArguments()); visitInternal(node.getProcedure()); } @Override public void visit(DMLDeleteStatement node) { visitInternal(node.getLimit()); visitInternal(node.getOrderBy()); visitInternal(node.getTableNames()); visitInternal(node.getTableRefs()); visitInternal(node.getWhereCondition()); } @Override public void visit(DMLInsertStatement node) { visitInternal(node.getColumnNameList()); visitInternal(node.getDuplicateUpdate()); visitInternal(node.getRowList()); visitInternal(node.getSelect()); visitInternal(node.getTable()); } @Override public void visit(DMLReplaceStatement node) { visitInternal(node.getColumnNameList()); visitInternal(node.getRowList()); visitInternal(node.getSelect()); visitInternal(node.getTable()); } @Override public void visit(DMLSelectStatement node) { visitInternal(node.getGroup()); visitInternal(node.getHaving()); visitInternal(node.getLimit()); visitInternal(node.getOrder()); visitInternal(node.getSelectExprList()); visitInternal(node.getTables()); visitInternal(node.getWhere()); } @Override public void visit(DMLSelectUnionStatement node) { visitInternal(node.getLimit()); visitInternal(node.getOrderBy()); visitInternal(node.getSelectStmtList()); } @Override public void visit(DMLUpdateStatement node) { visitInternal(node.getLimit()); visitInternal(node.getOrderBy()); visitInternal(node.getTableRefs()); visitInternal(node.getValues()); visitInternal(node.getWhere()); } @Override public void visit(MTSSetTransactionStatement node) { } @Override public void visit(MTSSavepointStatement node) { visitInternal(node.getSavepoint()); } @Override public void visit(MTSReleaseStatement node) { visitInternal(node.getSavepoint()); } @Override public void visit(MTSRollbackStatement node) { visitInternal(node.getSavepoint()); } @Override public void visit(DDLTruncateStatement node) { visitInternal(node.getTable()); } @Override public void visit(DDLAlterTableStatement node) { visitInternal(node.getTable()); } @Override public void visit(DDLCreateIndexStatement node) { visitInternal(node.getIndexName()); visitInternal(node.getTable()); } @Override public void visit(DDLCreateTableStatement node) { visitInternal(node.getTable()); } @Override public void visit(DDLRenameTableStatement node) { visitInternal(node.getList()); } @Override public void visit(DDLDropIndexStatement node) { visitInternal(node.getIndexName()); visitInternal(node.getTable()); } @Override public void visit(DDLDropTableStatement node) { visitInternal(node.getTableNames()); } @Override public void visit(ExtDDLCreatePolicy node) { } @Override public void visit(ExtDDLDropPolicy node) { } }