001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.mysql.*; 006 007/** 008 * MySQL SQL command resolver. 009 * Handles MySQL-specific statement detection and command resolution. 010 * 011 * @since 3.1.0.9 012 */ 013public class TSqlCmdsMysql extends AbstractSqlCmds { 014 015 public TSqlCmdsMysql() { 016 super(EDbVendor.dbvmysql); 017 } 018 019 @Override 020 protected void initializeCommands() { 021 // MySQL commands - sorted alphabetically by first token 022 // Note: Longer patterns should come before shorter ones with same prefix 023 024 addCmd(TBaseType.rrw_alter, "algorithm", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterview); 025 addCmd(TBaseType.rrw_alter, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterdatabase); 026 addCmd(TBaseType.rrw_alter, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterfunction); 027 addCmd(TBaseType.rrw_alter, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterprocedure); 028 addCmd(TBaseType.rrw_alter, "sql", "security", "definer", "view", " ", " ", ESqlStatementType.sstmysqlalterview); 029 addCmd(TBaseType.rrw_alter, "sql", "security", "invoker", "view", " ", " ", ESqlStatementType.sstmysqlalterview); 030 addCmd(TBaseType.rrw_alter, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstaltertable); 031 addCmd(TBaseType.rrw_alter, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterview); 032 addCmd(TBaseType.rrw_analyze, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlanalyzetable); 033 addCmd(TBaseType.rrw_backup, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlbackuptable); 034 addCmd(TBaseType.rrw_begin, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlstarttransaction); 035 addCmd(TBaseType.rrw_cache, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcacheindex); 036 addCmd(TBaseType.rrw_call, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcall); 037 addCmd(TBaseType.rrw_case, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcase); 038 addCmd(TBaseType.rrw_change, "master", "to", " ", " ", " ", " ", ESqlStatementType.sstmysqlchangemasterto); 039 addCmd(TBaseType.rrw_check, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlchecktable); 040 addCmd(TBaseType.rrw_check, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlchecktable); 041 addCmd(TBaseType.rrw_checksum, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlchecksumtable); 042 addCmd(TBaseType.rrw_close, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlclose); 043 addCmd(TBaseType.rrw_commit, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcommit); 044 addCmd(TBaseType.rrw_create, "aggregate", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 045 addCmd(TBaseType.rrw_create, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatedatabase); 046 addCmd(TBaseType.rrw_create, "definer", "=", "current_user", "function", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 047 addCmd(TBaseType.rrw_create, "definer", "=", "current_user", "procedure", " ", " ", ESqlStatementType.sstmysqlcreateprocedure); 048 addCmd(TBaseType.rrw_create, "definer", "=", "current_user", "trigger", " ", " ", ESqlStatementType.sstcreatetrigger); 049 addCmd(TBaseType.rrw_create, "definer", "=", "*", "*", "*", "function", ESqlStatementType.sstmysqlcreatefunction); 050 addCmd(TBaseType.rrw_create, "definer", "=", "*", "*", "*", "procedure", ESqlStatementType.sstmysqlcreateprocedure); 051 addCmd(TBaseType.rrw_create, "definer", "=", "*", "*", "*", "trigger", ESqlStatementType.sstcreatetrigger); 052 addCmd(TBaseType.rrw_create, "definer", "=", "*", "procedure", " ", " ", ESqlStatementType.sstmysqlcreateprocedure); 053 addCmd(TBaseType.rrw_create, "definer", "=", "*", "function", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 054 addCmd(TBaseType.rrw_create, "definer", "=", "*", "trigger", " ", " ", ESqlStatementType.sstcreatetrigger); 055 addCmd(TBaseType.rrw_create, "fulltext", "index", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 056 addCmd(TBaseType.rrw_create, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 057 addCmd(TBaseType.rrw_create, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 058 addCmd(TBaseType.rrw_create, "or", "replace", "table", " ", " ", " ", ESqlStatementType.sstcreatetable); 059 addCmd(TBaseType.rrw_create, "or", "replace", "*", "*", "*", "view", ESqlStatementType.sstcreateview); 060 addCmd(TBaseType.rrw_create, "or", "replace", "view", " ", " ", " ", ESqlStatementType.sstcreateview); 061 addCmd(TBaseType.rrw_create, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateprocedure); 062 addCmd(TBaseType.rrw_create, "spatial", "index", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 063 addCmd(TBaseType.rrw_create, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatedatabase); 064 addCmd(TBaseType.rrw_create, "temporary", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 065 addCmd(TBaseType.rrw_create, "temp", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 066 addCmd(TBaseType.rrw_create, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 067 addCmd(TBaseType.rrw_create, "trigger", " ", " ", " ", " ", " ", ESqlStatementType.sstcreatetrigger); 068 addCmd(TBaseType.rrw_create, "unique", "index", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 069 addCmd(TBaseType.rrw_create, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateuser); 070 addCmd(TBaseType.rrw_create, "*", "*", "*", "*", "*", "view", ESqlStatementType.sstcreateview); 071 addCmd(TBaseType.rrw_create, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstcreateview); 072 addCmd(TBaseType.rrw_deallocate, "prepare", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldeallocateprepare); 073 addCmd(TBaseType.rrw_declare, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldeclare); 074 addCmd(TBaseType.rrw_delete, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdelete); 075 addCmd(TBaseType.rrw_mysql_delimiter, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldelimiter); 076 addCmd(TBaseType.rrw_mysql_desc, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdescribe); 077 addCmd(TBaseType.rrw_describe, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdescribe); 078 addCmd(TBaseType.rrw_do, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldo); 079 addCmd(TBaseType.rrw_drop, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropdatabase); 080 addCmd(TBaseType.rrw_drop, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropfunction); 081 addCmd(TBaseType.rrw_drop, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropindex); 082 addCmd(TBaseType.rrw_drop, "prepare", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropprepare); 083 addCmd(TBaseType.rrw_drop, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropprocedure); 084 addCmd(TBaseType.rrw_drop, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropdatabase); 085 addCmd(TBaseType.rrw_drop, "temporary", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptable); 086 addCmd(TBaseType.rrw_drop, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptable); 087 addCmd(TBaseType.rrw_drop, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptable); 088 addCmd(TBaseType.rrw_drop, "trigger", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptrigger); 089 addCmd(TBaseType.rrw_drop, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropuser); 090 addCmd(TBaseType.rrw_drop, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstdropview); 091 addCmd(TBaseType.rrw_execute, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlexecute); 092 addCmd(TBaseType.rrw_explain, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstExplain); 093 addCmd(TBaseType.rrw_fetch, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlfetch); 094 addCmd(TBaseType.rrw_flush, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlflush); 095 addCmd(TBaseType.rrw_grant, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlgrant); 096 addCmd(TBaseType.rrw_handler, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlhandler); 097 addCmd(TBaseType.rrw_if, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlifstmt); 098 addCmd(TBaseType.rrw_insert, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstinsert); 099 addCmd(TBaseType.rrw_iterate, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqliterate); 100 addCmd(TBaseType.rrw_kill, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlkill); 101 addCmd(TBaseType.rrw_leave, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlleave); 102 addCmd(TBaseType.rrw_load, "data", "from", "master", " ", " ", " ", ESqlStatementType.sstmysqlloaddatafrommaster); 103 addCmd(TBaseType.rrw_load, "data", "local", "infile", " ", " ", " ", ESqlStatementType.sstmysqlloaddatainfile); 104 addCmd(TBaseType.rrw_load, "data", "infile", " ", " ", " ", " ", ESqlStatementType.sstmysqlloaddatainfile); 105 addCmd(TBaseType.rrw_load, "index", "into", "cache", " ", " ", " ", ESqlStatementType.sstmysqlloadindexintocache); 106 addCmd(TBaseType.rrw_load, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlloadtable); 107 addCmd(TBaseType.rrw_lock, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqllocktable); 108 addCmd(TBaseType.rrw_lock, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqllocktable); 109 addCmd(TBaseType.rrw_loop, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlloop); 110 addCmd(TBaseType.rrw_open, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlopen); 111 addCmd(TBaseType.rrw_optimize, "no_write_to_binlog", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqloptimizetable); 112 addCmd(TBaseType.rrw_optimize, "local", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqloptimizetable); 113 addCmd(TBaseType.rrw_optimize, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqloptimizetable); 114 addCmd(TBaseType.rrw_prepare, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlprepare); 115 addCmd(TBaseType.rrw_purge, "binary", "logs", " ", " ", " ", " ", ESqlStatementType.sstmysqlpurgelogs); 116 addCmd(TBaseType.rrw_purge, "master", "logs", " ", " ", " ", " ", ESqlStatementType.sstmysqlpurgelogs); 117 addCmd(TBaseType.rrw_purge, "logs", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlpurgelogs); 118 addCmd(TBaseType.rrw_release, "savepoint", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlreleasesavepoint); 119 addCmd(TBaseType.rrw_rename, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrenametable); 120 addCmd(TBaseType.rrw_rename, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrenameuser); 121 addCmd(TBaseType.rrw_repair, "no_write_to_binlog", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqlrepairtable); 122 addCmd(TBaseType.rrw_repair, "local", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqlrepairtable); 123 addCmd(TBaseType.rrw_repair, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrepairtable); 124 addCmd(TBaseType.rrw_repeat, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrepeat); 125 addCmd(TBaseType.rrw_replace, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlreplace); 126 addCmd(TBaseType.rrw_reset, "master", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlresetmaster); 127 addCmd(TBaseType.rrw_reset, "slave", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlresetslave); 128 addCmd(TBaseType.rrw_reset, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlreset); 129 addCmd(TBaseType.rrw_restore, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrestoretable); 130 addCmd(TBaseType.rrw_revoke, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrevoke); 131 addCmd(TBaseType.rrw_rollback, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrollback); 132 addCmd(TBaseType.rrw_savepoint, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlsavepoint); 133 addCmd(TBaseType.rrw_select, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstselect); 134 addCmd(TBaseType.rrw_set, "global", "sql_slave_skip_counter", " ", " ", " ", " ", ESqlStatementType.sstmysqlsetglobalsql_slave_skip_counter); 135 addCmd(TBaseType.rrw_set, "global", "transaction", " ", " ", " ", " ", ESqlStatementType.sstmysqlsettransaction); 136 addCmd(TBaseType.rrw_set, "session", "transaction", " ", " ", " ", " ", ESqlStatementType.sstmysqlsettransaction); 137 addCmd(TBaseType.rrw_set, "autocommit", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlsetautocommit); 138 addCmd(TBaseType.rrw_set, "delimiter", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldelimiter); 139 addCmd(TBaseType.rrw_set, "PASSWORD", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 140 addCmd(TBaseType.rrw_set, "sql_log_bin", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlsetsql_log_bin); 141 addCmd(TBaseType.rrw_set, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlsettransaction); 142 addCmd(TBaseType.rrw_set, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 143 addCmd(TBaseType.rrw_show, "bdb", "logs", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowlogs); 144 addCmd(TBaseType.rrw_show, "binlog", "events", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowbinlogevents); 145 addCmd(TBaseType.rrw_show, "character", "set", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcharacterset); 146 addCmd(TBaseType.rrw_show, "charset", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcharacterset); 147 addCmd(TBaseType.rrw_show, "collation", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcollation); 148 addCmd(TBaseType.rrw_show, "columns", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcolumns); 149 addCmd(TBaseType.rrw_show, "count", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowwarnings); 150 addCmd(TBaseType.rrw_show, "create", "schema", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreateschema); 151 addCmd(TBaseType.rrw_show, "create", "database", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreatedatabase); 152 addCmd(TBaseType.rrw_show, "create", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreatefunction); 153 addCmd(TBaseType.rrw_show, "create", "procedure", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreateprocedure); 154 addCmd(TBaseType.rrw_show, "create", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreatetable); 155 addCmd(TBaseType.rrw_show, "create", "view", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreateview); 156 addCmd(TBaseType.rrw_show, "databases", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowdatabases); 157 addCmd(TBaseType.rrw_show, "engine", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowengine); 158 addCmd(TBaseType.rrw_show, "engines", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowengines); 159 addCmd(TBaseType.rrw_show, "errors", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowerrors); 160 addCmd(TBaseType.rrw_show, "extend", "indexes", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 161 addCmd(TBaseType.rrw_show, "extend", "index", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 162 addCmd(TBaseType.rrw_show, "extend", "keys", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 163 addCmd(TBaseType.rrw_show, "fields", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowfields); 164 addCmd(TBaseType.rrw_show, "full", "columns", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcolumns); 165 addCmd(TBaseType.rrw_show, "full", "fields", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowfields); 166 addCmd(TBaseType.rrw_show, "full", "processlist", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprocesslist); 167 addCmd(TBaseType.rrw_show, "full", "tables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtables); 168 addCmd(TBaseType.rrw_show, "function", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowfunctionstatus); 169 addCmd(TBaseType.rrw_show, "global", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowstatus); 170 addCmd(TBaseType.rrw_show, "global", "variables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 171 addCmd(TBaseType.rrw_show, "grants", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowgrants); 172 addCmd(TBaseType.rrw_show, "indexes", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 173 addCmd(TBaseType.rrw_show, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 174 addCmd(TBaseType.rrw_show, "innodb", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowinnodbstatus); 175 addCmd(TBaseType.rrw_show, "keys", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 176 addCmd(TBaseType.rrw_show, "logs", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowlogs); 177 addCmd(TBaseType.rrw_show, "master", "logs", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowmasterlogs); 178 addCmd(TBaseType.rrw_show, "master", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowmasterstatus); 179 addCmd(TBaseType.rrw_show, "open", "tables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtables); 180 addCmd(TBaseType.rrw_show, "plugins", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowplugins); 181 addCmd(TBaseType.rrw_show, "privileges", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprivileges); 182 addCmd(TBaseType.rrw_show, "procedure", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowfunctionstatus); 183 addCmd(TBaseType.rrw_show, "processlist", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprocesslist); 184 addCmd(TBaseType.rrw_show, "profile", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprofile); 185 addCmd(TBaseType.rrw_show, "profiles", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprofiles); 186 addCmd(TBaseType.rrw_show, "replica", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowreplicaStatus); 187 addCmd(TBaseType.rrw_show, "session", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowstatus); 188 addCmd(TBaseType.rrw_show, "session", "variables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 189 addCmd(TBaseType.rrw_show, "slave", "hosts", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowslavehosts); 190 addCmd(TBaseType.rrw_show, "slave", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowslavestatus); 191 addCmd(TBaseType.rrw_show, "status", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowstatus); 192 addCmd(TBaseType.rrw_show, "storage", "engines", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowengines); 193 addCmd(TBaseType.rrw_show, "table", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtablestatus); 194 addCmd(TBaseType.rrw_show, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtables); 195 addCmd(TBaseType.rrw_show, "triggers", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtriggers); 196 addCmd(TBaseType.rrw_show, "variables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 197 addCmd(TBaseType.rrw_show, "warnings", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowwarnings); 198 addCmd(TBaseType.rrw_signal, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlsignal); 199 addCmd(TBaseType.rrw_start, "slave", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlstartslave); 200 addCmd(TBaseType.rrw_start, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlstarttransaction); 201 addCmd(TBaseType.rrw_stop, "slave", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlstopslave); 202 addCmd(TBaseType.rrw_truncate, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqltruncate); 203 addCmd(TBaseType.rrw_unlock, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlunlocktable); 204 addCmd(TBaseType.rrw_update, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstupdate); 205 addCmd(TBaseType.rrw_use, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqluse); 206 addCmd(TBaseType.rrw_while, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlwhile); 207 } 208 209 @Override 210 protected String getToken1Str(int token1) { 211 // Handle MySQL vendor-specific reserved words 212 switch (token1) { 213 case TBaseType.rrw_mysql_delimiter: 214 return "delimiter"; 215 case TBaseType.rrw_mysql_desc: 216 return "desc"; 217 default: 218 return null; 219 } 220 } 221 222 @Override 223 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 224 TCustomSqlStatement ret = null; 225 int k; 226 boolean lcisnewsql; 227 TSourceToken lcpprevsolidtoken, lcnextsolidtoken; 228 229 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 230 231 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 232 || (pcst.tokencode == TBaseType.cmtslashstar) 233 || (pcst.tokencode == TBaseType.lexspace) 234 || (pcst.tokencode == TBaseType.lexnewline) 235 || (pcst.tokentype == ETokenType.ttsemicolon)) { 236 return ret; 237 } 238 239 int lcpos = pcst.posinlist; 240 TSourceTokenList lcsourcetokenlist = pcst.container; 241 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 242 243 // subquery after semicolon || at first line 244 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) // ( 245 { 246 k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 247 if (k > 0) { 248 ret = new TSelectSqlStatement(vendor); 249 } 250 251 return ret; 252 } 253 254 // cte 255 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 256 ret = findcte(pcst); 257 if ((ret != null)) return ret; 258 } 259 260 gnewsqlstatementtype = getStatementTypeForToken(pcst); 261 262 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 263 264 if ((gnewsqlstatementtype == ESqlStatementType.sstinvalid) && (pcst.tokencode == TBaseType.rrw_create)) { 265 TSourceToken viewToken = pcst.container.searchToken(TBaseType.rrw_view, "", pcst, 15); 266 if (viewToken != null) { 267 gnewsqlstatementtype = ESqlStatementType.sstcreateview; 268 } 269 } 270 switch (gnewsqlstatementtype) { 271 case sstinvalid: { 272 ret = null; 273 break; 274 } 275 case sstselect: { 276 lcisnewsql = true; 277 278 if (pstate != EFindSqlStateType.stnormal) { 279 if (TBaseType.assigned(lcprevsolidtoken)) { 280 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 281 lcisnewsql = false; // subquery 282 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 283 lcisnewsql = false; 284 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 285 lcisnewsql = false; 286 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 287 lcisnewsql = false; 288 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 289 lcisnewsql = false; 290 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 291 lcisnewsql = false; 292 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 293 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 294 lcisnewsql = false; 295 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 296 lcisnewsql = false; 297 } 298 299 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 300 lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 301 if (TBaseType.assigned(lcpprevsolidtoken)) { 302 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 303 lcisnewsql = false; 304 } 305 } 306 307 } 308 309 310 if (TBaseType.assigned(lccurrentsqlstatement)) { 311 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 312 lcisnewsql = false; 313 } 314 315 } 316 317 if (lcisnewsql) 318 ret = new TSelectSqlStatement(vendor); 319 break; 320 } 321 case sstinsert: 322 case sstmysqlreplace: { 323 lcisnewsql = true; 324 if (pstate != EFindSqlStateType.stnormal) { 325 if (TBaseType.assigned(lccurrentsqlstatement)) { 326 327 } 328 } 329 330 if (lcisnewsql) 331 ret = new TInsertSqlStatement(vendor); 332 ret.sqlstatementtype = gnewsqlstatementtype; 333 break; 334 } 335 case sstupdate: { 336 lcisnewsql = true; 337 if (pstate != EFindSqlStateType.stnormal) { 338 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 339 if (TBaseType.assigned(lcprevsolidtoken)) { 340 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 341 lcisnewsql = false; 342 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 343 lcisnewsql = false; 344 } 345 346 lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 347 if (TBaseType.assigned(lcnextsolidtoken)) { 348 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 349 k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 350 if (k == 0) lcisnewsql = false; 351 } 352 } 353 354 355 if (TBaseType.assigned(lccurrentsqlstatement)) { 356 } 357 } 358 359 if (lcisnewsql) { 360 ret = new TUpdateSqlStatement(vendor); 361 ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement 362 } 363 break; 364 } 365 case sstdelete: { 366 lcisnewsql = true; 367 368 if (pstate != EFindSqlStateType.stnormal) { 369 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 370 if (TBaseType.assigned(lcprevsolidtoken)) { 371 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 372 lcisnewsql = false; 373 } 374 375 if (TBaseType.assigned(lccurrentsqlstatement)) { 376 } 377 } 378 379 if (lcisnewsql) 380 ret = new TDeleteSqlStatement(vendor); 381 break; 382 } 383 case sstmerge: { 384 ret = new TMergeSqlStatement(vendor); 385 ret.sqlstatementtype = gnewsqlstatementtype; 386 break; 387 } 388 case sstcommit: { 389 ret = new TUnknownSqlStatement(vendor); 390 ret.sqlstatementtype = gnewsqlstatementtype; 391 break; 392 } 393 case sstrollback: { 394 ret = new TUnknownSqlStatement(vendor); 395 ret.sqlstatementtype = gnewsqlstatementtype; 396 break; 397 } 398 case sstsavepoint: { 399 ret = new TUnknownSqlStatement(vendor); 400 ret.sqlstatementtype = gnewsqlstatementtype; 401 break; 402 } 403 case sstRevoke: { 404 ret = new TUnknownSqlStatement(vendor); 405 ret.sqlstatementtype = gnewsqlstatementtype; 406 break; 407 } 408 case sstcreatetable: { 409 ret = new TCreateTableSqlStatement(vendor); 410 break; 411 } 412 case sstcreateview: { 413 ret = new TCreateViewSqlStatement(vendor); 414 break; 415 } 416 case sstmysqlcreateindex: { 417 ret = new TCreateIndexSqlStatement(vendor); 418 break; 419 } 420 case sstcreatedatabase: { 421 ret = new TCreateDatabaseSqlStatement(vendor); 422 break; 423 } 424 case sstmysqldroptable: 425 case sstdroptable: { 426 ret = new TDropTableSqlStatement(vendor); 427 break; 428 } 429 case sstdropview: { 430 ret = new TDropViewSqlStatement(vendor); 431 break; 432 } 433 case sstdropindex: { 434 ret = new TDropIndexSqlStatement(vendor); 435 break; 436 } 437 case sstaltertable: { 438 ret = new TAlterTableStatement(vendor); 439 break; 440 } 441 case sstaltersession: { 442 ret = new TAlterSessionStatement(vendor); 443 break; 444 } 445 case sstmysqlset: { 446 ret = new TSetStmt(vendor); 447 break; 448 } 449 case sstmysqlcreateprocedure: { 450 ret = new TCreateProcedureStmt(vendor); 451 break; 452 } 453 case sstmysqlcreatefunction: { 454 ret = new TCreateFunctionStmt(vendor); 455 break; 456 } 457 case sstcreatetrigger: { 458 ret = new TCreateTriggerStmt(vendor); 459 break; 460 } 461 case sstmysqlcall: { 462 ret = new TCallStatement(vendor); 463 break; 464 } 465 case sstmysqltruncate: { 466 ret = new TTruncateStatement(vendor); 467 break; 468 } 469 case sstmysqlprepare: { 470 ret = new TPrepareStmt(vendor); 471 break; 472 } 473 case sstdescribe: { 474 ret = new TDescribeStmt(vendor); 475 break; 476 } 477 case sstExplain: { 478 ret = new TExplainPlan(vendor); 479 break; 480 } 481 case sstmysqldropindex: { 482 ret = new TDropIndexSqlStatement(vendor); 483 break; 484 } 485 case sstmysqldropprocedure: { 486 ret = new TDropProcedureStmt(vendor); 487 break; 488 } 489 case sstmysqlsignal: { 490 ret = new TMySQLSignal(vendor); 491 break; 492 } 493 case sstmysqlstarttransaction: { 494 if (pstate == EFindSqlStateType.stnormal) { 495 ret = new TUnknownSqlStatement(vendor); 496 ret.sqlstatementtype = gnewsqlstatementtype; 497 } 498 break; 499 } 500 case sstmysqluse: { 501 ret = new TUseDatabase(vendor); 502 break; 503 } 504 case sstmysqlexecute: { 505 ret = new TExecuteSqlStatement(vendor); 506 ret.sqlstatementtype = gnewsqlstatementtype; 507 break; 508 } 509 case sstmysqlcreatedatabase: { 510 ret = new TCreateDatabaseSqlStatement(vendor); 511 break; 512 } 513 case sstmysqlrenametable: { 514 ret = new TRenameStmt(vendor); 515 break; 516 } 517 case sstmysqlshowindex: 518 ret = new TShowIndexStmt(vendor); 519 break; 520 case sstmysqlloaddatainfile: 521 ret = new TLoadDataStmt(vendor); 522 break; 523 case sstmysqlshowlogs: 524 case sstmysqlshowbinlogevents: 525 case sstmysqlshowcharacterset: 526 case sstmysqlshowcollation: 527 case sstmysqlshowcolumns: 528 case sstmysqlshowwarnings: 529 case sstmysqlshowcreatedatabase: 530 case sstmysqlshowcreatefunction: 531 case sstmysqlshowcreateprocedure: 532 case sstmysqlshowcreatetable: 533 case sstmysqlshowcreateview: 534 case sstmysqlshowdatabases: 535 case sstmysqlshowerrors: 536 case sstmysqlshowfields: 537 case sstmysqlshowprocesslist: 538 case sstmysqlshowtables: 539 case sstmysqlshowfunctionstatus: 540 case sstmysqlshowstatus: 541 case sstmysqlshowvariables: 542 case sstmysqlshowgrants: 543 case sstmysqlshowinnodbstatus: 544 case sstmysqlshowmasterlogs: 545 case sstmysqlshowplugins: 546 case sstmysqlshowprivileges: 547 case sstmysqlshowprofile: 548 case sstmysqlshowprofiles: 549 case sstmysqlshowslavehosts: 550 case sstmysqlshowslavestatus: 551 case sstmysqlshowtablestatus: 552 case sstmysqlshowtriggers: 553 case sstmysqlshowcreateschema: 554 case sstmysqlshowengines: 555 ret = new TMySQLShowStmt(vendor); 556 ret.sqlstatementtype = gnewsqlstatementtype; 557 break; 558 case sstmysqlshowengine: 559 ret = new TShowEngineStmt(vendor); 560 break; 561 case sstmysqlshowreplicaStatus: 562 ret = new TShowStmt(vendor); 563 ret.sqlstatementtype = gnewsqlstatementtype; 564 break; 565 case sstmysqlalterfunction: 566 ret = new TAlterFunctionStmt(vendor); 567 break; 568 case sstmysqlalterprocedure: 569 ret = new TAlterProcedureStmt(vendor); 570 break; 571 case sstmysqldropfunction: 572 ret = new TDropFunctionStmt(vendor); 573 break; 574 case sstmysqldroptrigger: 575 ret = new TDropTriggerSqlStatement(vendor); 576 break; 577 case sstmysqloptimizetable: 578 ret = new TMySQLOptimizeTableStmt(vendor); 579 break; 580 case sstmysqlalterview: 581 ret = new TAlterViewStatement(vendor); 582 break; 583 default: { 584 ret = new TUnknownSqlStatement(vendor); 585 ret.sqlstatementtype = gnewsqlstatementtype; 586 break; 587 } 588 } // case 589 590 return ret; 591 } 592}