/* * Copyright 1999-2017 Alibaba Group Holding Ltd. * * 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. */ package com.alibaba.druid.sql.dialect.mysql.visitor; import com.alibaba.druid.sql.ast.SQLDeclareItem; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLStartTransactionStatement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareConditionStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareHandlerStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableDiscardTablespace; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableImportTablespace; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableModifyColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExplainStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlOptimizeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetCharSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetNamesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetPasswordStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetTransactionStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowAuthorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinLogEventsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTriggerStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEngineStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEnginesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowErrorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEventsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowFunctionCodeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowFunctionStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcedureCodeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcedureStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcessListStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProfileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProfilesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowRelayLogEventsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSubPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSubPartitionByList; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlTableIndex; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnlockTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateTableSource; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MysqlDeallocatePrepareStatement; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; import com.alibaba.druid.stat.TableStat; import com.alibaba.druid.stat.TableStat.Mode; import com.alibaba.druid.util.JdbcUtils; import java.util.Map; public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlASTVisitor { public boolean visit(SQLSelectStatement x) { setAliasMap(); getAliasMap().put("DUAL", null); return true; } @Override public String getDbType() { return JdbcUtils.MYSQL; } // DUAL public boolean visit(MySqlDeleteStatement x) { setAliasMap(); setMode(x, Mode.Delete); accept(x.getFrom()); accept(x.getUsing()); x.getTableSource().accept(this); if (x.getTableSource() instanceof SQLExprTableSource) { SQLName tableName = (SQLName) ((SQLExprTableSource) x.getTableSource()).getExpr(); String ident = tableName.toString(); setCurrentTable(x, ident); TableStat stat = this.getTableStat(ident); stat.incrementDeleteCount(); } accept(x.getWhere()); accept(x.getOrderBy()); accept(x.getLimit()); return false; } public void endVisit(MySqlDeleteStatement x) { setAliasMap(null); } @Override public void endVisit(MySqlInsertStatement x) { setModeOrigin(x); } @Override public boolean visit(MySqlInsertStatement x) { setMode(x, Mode.Insert); setAliasMap(); SQLName tableName = x.getTableName(); String ident = null; if (tableName instanceof SQLIdentifierExpr) { ident = ((SQLIdentifierExpr) tableName).getName(); } else if (tableName instanceof SQLPropertyExpr) { SQLPropertyExpr propertyExpr = (SQLPropertyExpr) tableName; if (propertyExpr.getOwner() instanceof SQLIdentifierExpr) { ident = propertyExpr.toString(); } } if (ident != null) { setCurrentTable(x, ident); TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map<String, String> aliasMap = getAliasMap(); putAliasMap(aliasMap, x.getAlias(), ident); putAliasMap(aliasMap, ident, ident); } accept(x.getColumns()); accept(x.getValuesList()); accept(x.getQuery()); accept(x.getDuplicateKeyUpdate()); return false; } @Override public boolean visit(MySqlTableIndex x) { return false; } @Override public void endVisit(MySqlTableIndex x) { } @Override public boolean visit(MySqlKey x) { for (SQLObject item : x.getColumns()) { item.accept(this); } return false; } @Override public void endVisit(MySqlKey x) { } @Override public boolean visit(MySqlPrimaryKey x) { for (SQLObject item : x.getColumns()) { item.accept(this); } return false; } @Override public void endVisit(MySqlPrimaryKey x) { } @Override public void endVisit(MySqlIntervalExpr x) { } @Override public boolean visit(MySqlIntervalExpr x) { return true; } @Override public void endVisit(MySqlExtractExpr x) { } @Override public boolean visit(MySqlExtractExpr x) { return true; } @Override public void endVisit(MySqlMatchAgainstExpr x) { } @Override public boolean visit(MySqlMatchAgainstExpr x) { return true; } @Override public void endVisit(MySqlPrepareStatement x) { } @Override public boolean visit(MySqlPrepareStatement x) { return true; } @Override public void endVisit(MySqlExecuteStatement x) { } @Override public boolean visit(MySqlExecuteStatement x) { return true; } @Override public void endVisit(MysqlDeallocatePrepareStatement x) { } @Override public boolean visit(MysqlDeallocatePrepareStatement x) { return true; } @Override public void endVisit(MySqlLoadDataInFileStatement x) { } @Override public boolean visit(MySqlLoadDataInFileStatement x) { return true; } @Override public void endVisit(MySqlLoadXmlStatement x) { } @Override public boolean visit(MySqlLoadXmlStatement x) { return true; } @Override public void endVisit(MySqlReplaceStatement x) { } @Override public boolean visit(MySqlReplaceStatement x) { setMode(x, Mode.Replace); setAliasMap(); SQLName tableName = x.getTableName(); String ident = null; if (tableName instanceof SQLIdentifierExpr) { ident = ((SQLIdentifierExpr) tableName).getName(); } else if (tableName instanceof SQLPropertyExpr) { SQLPropertyExpr propertyExpr = (SQLPropertyExpr) tableName; if (propertyExpr.getOwner() instanceof SQLIdentifierExpr) { ident = propertyExpr.toString(); } } if (ident != null) { setCurrentTable(x, ident); TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map<String, String> aliasMap = getAliasMap(); putAliasMap(aliasMap, ident, ident); } accept(x.getColumns()); accept(x.getValuesList()); accept(x.getQuery()); return false; } @Override public void endVisit(SQLStartTransactionStatement x) { } @Override public boolean visit(SQLStartTransactionStatement x) { return true; } @Override public void endVisit(MySqlCommitStatement x) { } @Override public boolean visit(MySqlCommitStatement x) { return true; } @Override public void endVisit(MySqlRollbackStatement x) { } @Override public boolean visit(MySqlRollbackStatement x) { return true; } @Override public void endVisit(MySqlShowColumnsStatement x) { } @Override public boolean visit(MySqlShowColumnsStatement x) { return false; } @Override public void endVisit(MySqlShowDatabasesStatement x) { } @Override public boolean visit(MySqlShowDatabasesStatement x) { return false; } @Override public void endVisit(MySqlShowWarningsStatement x) { } @Override public boolean visit(MySqlShowWarningsStatement x) { return true; } @Override public void endVisit(MySqlShowStatusStatement x) { } @Override public boolean visit(MySqlShowStatusStatement x) { return true; } @Override public void endVisit(CobarShowStatus x) { } @Override public boolean visit(CobarShowStatus x) { return true; } @Override public void endVisit(MySqlKillStatement x) { } @Override public boolean visit(MySqlKillStatement x) { return false; } @Override public void endVisit(MySqlBinlogStatement x) { } @Override public boolean visit(MySqlBinlogStatement x) { return true; } @Override public void endVisit(MySqlResetStatement x) { } @Override public boolean visit(MySqlResetStatement x) { return true; } @Override public void endVisit(MySqlCreateUserStatement x) { } @Override public boolean visit(MySqlCreateUserStatement x) { return false; } @Override public void endVisit(UserSpecification x) { } @Override public boolean visit(UserSpecification x) { return true; } @Override public void endVisit(MySqlPartitionByKey x) { } @Override public boolean visit(MySqlPartitionByKey x) { accept(x.getColumns()); return false; } @Override public boolean visit(MySqlSelectQueryBlock x) { return this.visit((SQLSelectQueryBlock) x); } @Override public void endVisit(MySqlSelectQueryBlock x) { } @Override public boolean visit(MySqlOutFileExpr x) { return false; } @Override public void endVisit(MySqlOutFileExpr x) { } @Override public boolean visit(MySqlExplainStatement x) { if (x.getTableName() != null) { String table = x.getTableName().toString(); getTableStat(table); if (x.getColumnName() != null) { addColumn(table, x.getColumnName().toString()); } } if (x.getStatement() != null) { accept(x.getStatement()); } return false; } @Override public void endVisit(MySqlExplainStatement x) { } @Override public boolean visit(MySqlUpdateStatement x) { visit((SQLUpdateStatement) x); for (SQLExpr item : x.getReturning()) { item.accept(this); } return false; } @Override public void endVisit(MySqlUpdateStatement x) { } @Override public boolean visit(MySqlSetTransactionStatement x) { return false; } @Override public void endVisit(MySqlSetTransactionStatement x) { } @Override public boolean visit(MySqlSetNamesStatement x) { return false; } @Override public void endVisit(MySqlSetNamesStatement x) { } @Override public boolean visit(MySqlSetCharSetStatement x) { return false; } @Override public void endVisit(MySqlSetCharSetStatement x) { } @Override public boolean visit(MySqlShowAuthorsStatement x) { return false; } @Override public void endVisit(MySqlShowAuthorsStatement x) { } @Override public boolean visit(MySqlShowBinaryLogsStatement x) { return false; } @Override public void endVisit(MySqlShowBinaryLogsStatement x) { } @Override public boolean visit(MySqlShowMasterLogsStatement x) { return false; } @Override public void endVisit(MySqlShowMasterLogsStatement x) { } @Override public boolean visit(MySqlShowCollationStatement x) { return false; } @Override public void endVisit(MySqlShowCollationStatement x) { } @Override public boolean visit(MySqlShowBinLogEventsStatement x) { return false; } @Override public void endVisit(MySqlShowBinLogEventsStatement x) { } @Override public boolean visit(MySqlShowCharacterSetStatement x) { return false; } @Override public void endVisit(MySqlShowCharacterSetStatement x) { } @Override public boolean visit(MySqlShowContributorsStatement x) { return false; } @Override public void endVisit(MySqlShowContributorsStatement x) { } @Override public boolean visit(MySqlShowCreateDatabaseStatement x) { return false; } @Override public void endVisit(MySqlShowCreateDatabaseStatement x) { } @Override public boolean visit(MySqlShowCreateEventStatement x) { return false; } @Override public void endVisit(MySqlShowCreateEventStatement x) { } @Override public boolean visit(MySqlShowCreateFunctionStatement x) { return false; } @Override public void endVisit(MySqlShowCreateFunctionStatement x) { } @Override public boolean visit(MySqlShowCreateProcedureStatement x) { return false; } @Override public void endVisit(MySqlShowCreateProcedureStatement x) { } @Override public boolean visit(MySqlShowCreateTableStatement x) { return false; } @Override public void endVisit(MySqlShowCreateTableStatement x) { } @Override public boolean visit(MySqlShowCreateTriggerStatement x) { return false; } @Override public void endVisit(MySqlShowCreateTriggerStatement x) { } @Override public boolean visit(MySqlShowCreateViewStatement x) { return false; } @Override public void endVisit(MySqlShowCreateViewStatement x) { } @Override public boolean visit(MySqlShowEngineStatement x) { return false; } @Override public void endVisit(MySqlShowEngineStatement x) { } @Override public boolean visit(MySqlShowEnginesStatement x) { return false; } @Override public void endVisit(MySqlShowEnginesStatement x) { } @Override public boolean visit(MySqlShowErrorsStatement x) { return false; } @Override public void endVisit(MySqlShowErrorsStatement x) { } @Override public boolean visit(MySqlShowEventsStatement x) { return false; } @Override public void endVisit(MySqlShowEventsStatement x) { } @Override public boolean visit(MySqlShowFunctionCodeStatement x) { return false; } @Override public void endVisit(MySqlShowFunctionCodeStatement x) { } @Override public boolean visit(MySqlShowFunctionStatusStatement x) { return false; } @Override public void endVisit(MySqlShowFunctionStatusStatement x) { } @Override public boolean visit(MySqlShowGrantsStatement x) { return false; } @Override public void endVisit(MySqlShowGrantsStatement x) { } @Override public boolean visit(MySqlUserName x) { return false; } @Override public void endVisit(MySqlUserName x) { } @Override public boolean visit(MySqlShowIndexesStatement x) { return false; } @Override public void endVisit(MySqlShowIndexesStatement x) { } @Override public boolean visit(MySqlShowKeysStatement x) { return false; } @Override public void endVisit(MySqlShowKeysStatement x) { } @Override public boolean visit(MySqlShowMasterStatusStatement x) { return false; } @Override public void endVisit(MySqlShowMasterStatusStatement x) { } @Override public boolean visit(MySqlShowOpenTablesStatement x) { return false; } @Override public void endVisit(MySqlShowOpenTablesStatement x) { } @Override public boolean visit(MySqlShowPluginsStatement x) { return false; } @Override public void endVisit(MySqlShowPluginsStatement x) { } @Override public boolean visit(MySqlShowPrivilegesStatement x) { return false; } @Override public void endVisit(MySqlShowPrivilegesStatement x) { } @Override public boolean visit(MySqlShowProcedureCodeStatement x) { return false; } @Override public void endVisit(MySqlShowProcedureCodeStatement x) { } @Override public boolean visit(MySqlShowProcedureStatusStatement x) { return false; } @Override public void endVisit(MySqlShowProcedureStatusStatement x) { } @Override public boolean visit(MySqlShowProcessListStatement x) { return false; } @Override public void endVisit(MySqlShowProcessListStatement x) { } @Override public boolean visit(MySqlShowProfileStatement x) { return false; } @Override public void endVisit(MySqlShowProfileStatement x) { } @Override public boolean visit(MySqlShowProfilesStatement x) { return false; } @Override public void endVisit(MySqlShowProfilesStatement x) { } @Override public boolean visit(MySqlShowRelayLogEventsStatement x) { return false; } @Override public void endVisit(MySqlShowRelayLogEventsStatement x) { } @Override public boolean visit(MySqlShowSlaveHostsStatement x) { return false; } @Override public void endVisit(MySqlShowSlaveHostsStatement x) { } @Override public boolean visit(MySqlShowSlaveStatusStatement x) { return false; } @Override public void endVisit(MySqlShowSlaveStatusStatement x) { } @Override public boolean visit(MySqlShowTableStatusStatement x) { return false; } @Override public void endVisit(MySqlShowTableStatusStatement x) { } @Override public boolean visit(MySqlShowTriggersStatement x) { return false; } @Override public void endVisit(MySqlShowTriggersStatement x) { } @Override public boolean visit(MySqlShowVariantsStatement x) { return false; } @Override public void endVisit(MySqlShowVariantsStatement x) { } @Override public boolean visit(MySqlRenameTableStatement.Item x) { return false; } @Override public void endVisit(MySqlRenameTableStatement.Item x) { } @Override public boolean visit(MySqlRenameTableStatement x) { return false; } @Override public void endVisit(MySqlRenameTableStatement x) { } @Override public boolean visit(MySqlUnionQuery x) { return visit((SQLUnionQuery) x); } @Override public void endVisit(MySqlUnionQuery x) { } @Override public boolean visit(MySqlUseIndexHint x) { return false; } @Override public void endVisit(MySqlUseIndexHint x) { } @Override public boolean visit(MySqlIgnoreIndexHint x) { return false; } @Override public void endVisit(MySqlIgnoreIndexHint x) { } @Override public boolean visit(MySqlLockTableStatement x) { return false; } @Override public void endVisit(MySqlLockTableStatement x) { } @Override public boolean visit(MySqlUnlockTablesStatement x) { return false; } @Override public void endVisit(MySqlUnlockTablesStatement x) { } @Override public boolean visit(MySqlForceIndexHint x) { return false; } @Override public void endVisit(MySqlForceIndexHint x) { } @Override public boolean visit(MySqlAlterTableChangeColumn x) { SQLAlterTableStatement stmt = (SQLAlterTableStatement) x.getParent(); String table = stmt.getName().toString(); String columnName = x.getColumnName().toString(); addColumn(table, columnName); return false; } @Override public void endVisit(MySqlAlterTableChangeColumn x) { } @Override public boolean visit(MySqlAlterTableModifyColumn x) { SQLAlterTableStatement stmt = (SQLAlterTableStatement) x.getParent(); String table = stmt.getName().toString(); String columnName = x.getNewColumnDefinition().getName().toString(); addColumn(table, columnName); return false; } @Override public void endVisit(MySqlAlterTableModifyColumn x) { } @Override public boolean visit(MySqlAlterTableCharacter x) { return false; } @Override public void endVisit(MySqlAlterTableCharacter x) { } @Override public boolean visit(MySqlAlterTableOption x) { return false; } @Override public void endVisit(MySqlAlterTableOption x) { } @Override public boolean visit(MySqlCreateTableStatement x) { boolean val = super.visit((SQLCreateTableStatement) x); for (SQLObject option : x.getTableOptions().values()) { if (option instanceof SQLTableSource) { option.accept(this); } } return val; } @Override public void endVisit(MySqlCreateTableStatement x) { } @Override public boolean visit(MySqlHelpStatement x) { return false; } @Override public void endVisit(MySqlHelpStatement x) { } @Override public boolean visit(MySqlCharExpr x) { return false; } @Override public void endVisit(MySqlCharExpr x) { } @Override public boolean visit(MySqlUnique x) { return false; } @Override public void endVisit(MySqlUnique x) { } @Override public boolean visit(MysqlForeignKey x) { return super.visit(x); } @Override public void endVisit(MysqlForeignKey x) { } @Override public boolean visit(MySqlAlterTableDiscardTablespace x) { return false; } @Override public void endVisit(MySqlAlterTableDiscardTablespace x) { } @Override public boolean visit(MySqlAlterTableImportTablespace x) { return false; } @Override public void endVisit(MySqlAlterTableImportTablespace x) { } @Override public boolean visit(TableSpaceOption x) { return false; } @Override public void endVisit(TableSpaceOption x) { } @Override public boolean visit(MySqlAnalyzeStatement x) { return true; } @Override public void endVisit(MySqlAnalyzeStatement x) { } @Override public boolean visit(MySqlAlterUserStatement x) { return true; } @Override public void endVisit(MySqlAlterUserStatement x) { } @Override public boolean visit(MySqlOptimizeStatement x) { return true; } @Override public void endVisit(MySqlOptimizeStatement x) { } @Override public boolean visit(MySqlSetPasswordStatement x) { return false; } @Override public void endVisit(MySqlSetPasswordStatement x) { } @Override public boolean visit(MySqlHintStatement x) { return true; } @Override public void endVisit(MySqlHintStatement x) { } @Override public boolean visit(MySqlOrderingExpr x) { return true; } @Override public void endVisit(MySqlOrderingExpr x) { } @Override public boolean visit(MySqlAlterTableAlterColumn x) { return false; } @Override public void endVisit(MySqlAlterTableAlterColumn x) { } /** * support procedure */ @Override public boolean visit(MySqlWhileStatement x) { accept(x.getStatements()); return false; } @Override public void endVisit(MySqlWhileStatement x) { } @Override public boolean visit(MySqlCaseStatement x) { accept(x.getWhenList()); return false; } @Override public void endVisit(MySqlCaseStatement x) { } @Override public boolean visit(MySqlDeclareStatement x) { for (SQLDeclareItem item : x.getVarList()) { item.setParent(x); SQLName var = (SQLName) item.getName(); this.variants.put(var.toString(), var); } return false; } @Override public void endVisit(MySqlDeclareStatement x) { } @Override public boolean visit(MySqlSelectIntoStatement x) { return false; } @Override public void endVisit(MySqlSelectIntoStatement x) { } @Override public boolean visit(MySqlWhenStatement x) { accept(x.getStatements()); return false; } @Override public void endVisit(MySqlWhenStatement x) { } @Override public boolean visit(MySqlLeaveStatement x) { return false; } @Override public void endVisit(MySqlLeaveStatement x) { } @Override public boolean visit(MySqlIterateStatement x) { return false; } @Override public void endVisit(MySqlIterateStatement x) { } @Override public boolean visit(MySqlRepeatStatement x) { accept(x.getStatements()); return false; } @Override public void endVisit(MySqlRepeatStatement x) { } @Override public boolean visit(MySqlCursorDeclareStatement x) { accept(x.getSelect()); return false; } @Override public void endVisit(MySqlCursorDeclareStatement x) { } @Override public boolean visit(MySqlUpdateTableSource x) { if (x.getUpdate() != null) { return this.visit(x.getUpdate()); } return false; } @Override public void endVisit(MySqlUpdateTableSource x) { } @Override public boolean visit(MySqlSubPartitionByKey x) { return false; } @Override public void endVisit(MySqlSubPartitionByKey x) { } @Override public boolean visit(MySqlSubPartitionByList x) { return false; } @Override public void endVisit(MySqlSubPartitionByList x) { } @Override public boolean visit(MySqlDeclareHandlerStatement x) { // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlDeclareHandlerStatement x) { // TODO Auto-generated method stub } @Override public boolean visit(MySqlDeclareConditionStatement x) { // TODO Auto-generated method stub return false; } @Override public void endVisit(MySqlDeclareConditionStatement x) { // TODO Auto-generated method stub } }