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