001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005 006/** 007 * StarRocks SQL command resolver. 008 * Handles StarRocks-specific statement detection and command resolution. 009 * 010 * StarRocks is a fork of Apache Doris (from 2020) and maintains MySQL protocol 011 * compatibility. This extends Doris commands with StarRocks-specific additions 012 * such as external catalogs, async materialized views, and SUBMIT TASK. 013 * 014 * @since 4.0.2.0 015 */ 016public class TSqlCmdsStarrocks extends AbstractSqlCmds { 017 018 public TSqlCmdsStarrocks() { 019 super(EDbVendor.dbvstarrocks); 020 } 021 022 @Override 023 protected void initializeCommands() { 024 // Standard SQL commands (SELECT, INSERT, UPDATE, DELETE) 025 addCmd(TBaseType.rrw_select, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstselect); 026 addCmd(TBaseType.rrw_insert, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstinsert); 027 addCmd(TBaseType.rrw_update, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstupdate); 028 addCmd(TBaseType.rrw_delete, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdelete); 029 030 // Pipe query support (FROM table |> SELECT ... or TABLE name |> SELECT ...) 031 addCmd(TBaseType.rrw_from, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstselect); 032 addCmd(TBaseType.rrw_table, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstselect); 033 034 // MERGE INTO (StarRocks supports this) 035 addCmd(TBaseType.rrw_merge, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmerge); 036 037 // CREATE statements 038 addCmd(TBaseType.rrw_create, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatedatabase); 039 addCmd(TBaseType.rrw_create, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatedatabase); 040 addCmd(TBaseType.rrw_create, "external", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 041 addCmd(TBaseType.rrw_create, "external", "catalog", " ", " ", " ", " ", ESqlStatementType.sstunknown); 042 addCmd(TBaseType.rrw_create, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 043 addCmd(TBaseType.rrw_create, "temporary", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable); 044 addCmd(TBaseType.rrw_create, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstcreateview); 045 addCmd(TBaseType.rrw_create, "or", "replace", "view", " ", " ", " ", ESqlStatementType.sstcreateview); 046 addCmd(TBaseType.rrw_create, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstcreatematerializedview); 047 addCmd(TBaseType.rrw_create, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 048 addCmd(TBaseType.rrw_create, "unique", "index", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateindex); 049 addCmd(TBaseType.rrw_create, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateuser); 050 addCmd(TBaseType.rrw_create, "or", "replace", "global", "aggregate", "function", " ", ESqlStatementType.sstmysqlcreatefunction); 051 addCmd(TBaseType.rrw_create, "or", "replace", "global", "table", "function", " ", ESqlStatementType.sstmysqlcreatefunction); 052 addCmd(TBaseType.rrw_create, "or", "replace", "global", "function", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 053 addCmd(TBaseType.rrw_create, "or", "replace", "aggregate", "function", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 054 addCmd(TBaseType.rrw_create, "or", "replace", "table", "function", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 055 addCmd(TBaseType.rrw_create, "or", "replace", "function", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 056 addCmd(TBaseType.rrw_create, "global", "aggregate", "function", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 057 addCmd(TBaseType.rrw_create, "global", "table", "function", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 058 addCmd(TBaseType.rrw_create, "global", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 059 addCmd(TBaseType.rrw_create, "aggregate", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 060 addCmd(TBaseType.rrw_create, "table", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 061 addCmd(TBaseType.rrw_create, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreatefunction); 062 addCmd(TBaseType.rrw_create, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcreateprocedure); 063 addCmd(TBaseType.rrw_create, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstunknown); 064 addCmd(TBaseType.rrw_create, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksCreateRoutineLoad); 065 addCmd(TBaseType.rrw_create, "resource", "group", " ", " ", " ", " ", ESqlStatementType.sststarrocksCreateResourceGroup); 066 addCmd(TBaseType.rrw_create, "storage", "volume", " ", " ", " ", " ", ESqlStatementType.sststarrocksCreateStorageVolume); 067 068 // Routine Load management statements 069 addCmd(TBaseType.rrw_pause, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksPauseRoutineLoad); 070 addCmd(TBaseType.rrw_resume, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksResumeRoutineLoad); 071 addCmd(TBaseType.rrw_stop, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksStopRoutineLoad); 072 073 // SUBMIT TASK (asynchronous ETL jobs) 074 addCmd(TBaseType.rrw_submit, "task", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksSubmitTask); 075 076 // ALTER statements 077 addCmd(TBaseType.rrw_alter, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterdatabase); 078 addCmd(TBaseType.rrw_alter, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstaltertable); 079 addCmd(TBaseType.rrw_alter, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlalterview); 080 addCmd(TBaseType.rrw_alter, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmssqlalteruser); 081 addCmd(TBaseType.rrw_alter, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstAlterMaterializedView); 082 addCmd(TBaseType.rrw_alter, "catalog", " ", " ", " ", " ", " ", ESqlStatementType.sstunknown); 083 addCmd(TBaseType.rrw_alter, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksAlterRoutineLoad); 084 addCmd(TBaseType.rrw_alter, "resource", "group", " ", " ", " ", " ", ESqlStatementType.sststarrocksAlterResourceGroup); 085 addCmd(TBaseType.rrw_alter, "storage", "volume", " ", " ", " ", " ", ESqlStatementType.sststarrocksAlterStorageVolume); 086 087 // DROP statements 088 addCmd(TBaseType.rrw_drop, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropdatabase); 089 addCmd(TBaseType.rrw_drop, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropdatabase); 090 addCmd(TBaseType.rrw_drop, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptable); 091 addCmd(TBaseType.rrw_drop, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldroptable); 092 addCmd(TBaseType.rrw_drop, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstdropview); 093 addCmd(TBaseType.rrw_drop, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstDropMaterializedView); 094 addCmd(TBaseType.rrw_drop, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropindex); 095 addCmd(TBaseType.rrw_drop, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropuser); 096 addCmd(TBaseType.rrw_drop, "global", "function", " ", " ", " ", " ", ESqlStatementType.sstmysqldropfunction); 097 addCmd(TBaseType.rrw_drop, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropfunction); 098 addCmd(TBaseType.rrw_drop, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldropprocedure); 099 addCmd(TBaseType.rrw_drop, "catalog", " ", " ", " ", " ", " ", ESqlStatementType.sstunknown); 100 addCmd(TBaseType.rrw_drop, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstunknown); 101 addCmd(TBaseType.rrw_drop, "task", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksDropTask); 102 addCmd(TBaseType.rrw_drop, "resource", "group", " ", " ", " ", " ", ESqlStatementType.sststarrocksDropResourceGroup); 103 addCmd(TBaseType.rrw_drop, "storage", "volume", " ", " ", " ", " ", ESqlStatementType.sststarrocksDropStorageVolume); 104 105 // TRUNCATE 106 addCmd(TBaseType.rrw_truncate, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqltruncate); 107 addCmd(TBaseType.rrw_truncate, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqltruncate); 108 109 // Stream Load Transaction control (transactional bulk loading) 110 // NOTE: More specific patterns must come BEFORE generic patterns 111 addCmd(TBaseType.rrw_begin, "load", "transaction", " ", " ", " ", " ", ESqlStatementType.sststarrocksBeginLoadTransaction); 112 addCmd(TBaseType.rrw_commit, "load", "transaction", " ", " ", " ", " ", ESqlStatementType.sststarrocksCommitLoadTransaction); 113 // ROLLBACK LOAD TRANSACTION for abort operations 114 addCmd(TBaseType.rrw_rollback, "load", "transaction", " ", " ", " ", " ", ESqlStatementType.sststarrocksAbortLoadTransaction); 115 addCmd(TBaseType.rrw_show, "load", "transaction", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowLoadTransaction); 116 117 // Transaction control (generic - must come AFTER specific load transaction patterns) 118 addCmd(TBaseType.rrw_begin, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlstarttransaction); 119 addCmd(TBaseType.rrw_commit, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcommit); 120 addCmd(TBaseType.rrw_rollback, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrollback); 121 122 // SHOW FUNCTIONS statements 123 addCmd(TBaseType.rrw_show, "full", "builtin", "functions", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 124 addCmd(TBaseType.rrw_show, "full", "global", "functions", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 125 addCmd(TBaseType.rrw_show, "full", "functions", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 126 addCmd(TBaseType.rrw_show, "builtin", "functions", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 127 addCmd(TBaseType.rrw_show, "global", "functions", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 128 addCmd(TBaseType.rrw_show, "functions", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowFunctions); 129 130 // SHOW statements (StarRocks supports many SHOW commands) 131 addCmd(TBaseType.rrw_show, "databases", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowdatabases); 132 addCmd(TBaseType.rrw_show, "tables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtables); 133 addCmd(TBaseType.rrw_show, "full", "tables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtables); 134 addCmd(TBaseType.rrw_show, "columns", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcolumns); 135 addCmd(TBaseType.rrw_show, "full", "columns", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcolumns); 136 addCmd(TBaseType.rrw_show, "create", "database", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreatedatabase); 137 addCmd(TBaseType.rrw_show, "create", "table", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreatetable); 138 addCmd(TBaseType.rrw_show, "create", "view", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowcreateview); 139 addCmd(TBaseType.rrw_show, "create", "materialized", "view", " ", " ", ESqlStatementType.sstmysqlshow); 140 addCmd(TBaseType.rrw_show, "materialized", "views", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 141 addCmd(TBaseType.rrw_show, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 142 addCmd(TBaseType.rrw_show, "indexes", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowindex); 143 addCmd(TBaseType.rrw_show, "status", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowstatus); 144 addCmd(TBaseType.rrw_show, "table", "status", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowtablestatus); 145 addCmd(TBaseType.rrw_show, "variables", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 146 addCmd(TBaseType.rrw_show, "global", "variables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 147 addCmd(TBaseType.rrw_show, "session", "variables", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowvariables); 148 addCmd(TBaseType.rrw_show, "warnings", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowwarnings); 149 addCmd(TBaseType.rrw_show, "errors", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowerrors); 150 addCmd(TBaseType.rrw_show, "processlist", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprocesslist); 151 addCmd(TBaseType.rrw_show, "full", "processlist", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowprocesslist); 152 addCmd(TBaseType.rrw_show, "grants", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshowgrants); 153 addCmd(TBaseType.rrw_show, "partitions", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 154 addCmd(TBaseType.rrw_show, "data", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 155 addCmd(TBaseType.rrw_show, "catalogs", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 156 addCmd(TBaseType.rrw_show, "backends", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 157 addCmd(TBaseType.rrw_show, "frontends", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 158 addCmd(TBaseType.rrw_show, "tablet", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 159 addCmd(TBaseType.rrw_show, "tablets", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 160 addCmd(TBaseType.rrw_show, "broker", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 161 addCmd(TBaseType.rrw_show, "brokers", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 162 addCmd(TBaseType.rrw_show, "resources", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlshow); 163 addCmd(TBaseType.rrw_show, "routine", "load", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowRoutineLoad); 164 addCmd(TBaseType.rrw_show, "all", "routine", "load", " ", " ", " ", ESqlStatementType.sststarrocksShowRoutineLoad); 165 addCmd(TBaseType.rrw_show, "export", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowExport); 166 addCmd(TBaseType.rrw_show, "resource", "group", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowResourceGroup); 167 addCmd(TBaseType.rrw_show, "resource", "groups", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowResourceGroup); 168 addCmd(TBaseType.rrw_show, "storage", "volumes", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowStorageVolume); 169 170 // DESC STORAGE VOLUME 171 addCmd(TBaseType.rrw_describe, "storage", "volume", " ", " ", " ", " ", ESqlStatementType.sststarrocksDescStorageVolume); 172 173 // EXPORT and CANCEL EXPORT 174 addCmd(TBaseType.rrw_export, "table", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksExport); 175 addCmd(TBaseType.rrw_cancel, "export", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCancelExport); 176 177 // BACKUP SNAPSHOT and REPOSITORY statements 178 addCmd(TBaseType.rrw_backup, " ", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksBackup); 179 addCmd(TBaseType.rrw_backup, "database", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksBackup); 180 addCmd(TBaseType.rrw_backup, "snapshot", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksBackup); 181 addCmd(TBaseType.rrw_create, "repository", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCreateRepository); 182 addCmd(TBaseType.rrw_create, "read", "only", "repository", " ", " ", " ", ESqlStatementType.sststarrocksCreateRepository); 183 addCmd(TBaseType.rrw_drop, "repository", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksDropRepository); 184 185 // RESTORE SNAPSHOT and related statements 186 addCmd(TBaseType.rrw_restore, " ", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksRestore); 187 addCmd(TBaseType.rrw_restore, "snapshot", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksRestore); 188 189 // SHOW BACKUP/RESTORE/SNAPSHOT statements 190 addCmd(TBaseType.rrw_show, "backup", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowBackup); 191 addCmd(TBaseType.rrw_show, "restore", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowRestore); 192 addCmd(TBaseType.rrw_show, "snapshot", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowSnapshot); 193 194 // CANCEL BACKUP/RESTORE statements 195 addCmd(TBaseType.rrw_cancel, "backup", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCancelBackup); 196 addCmd(TBaseType.rrw_cancel, "restore", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCancelRestore); 197 198 // CACHE SELECT statement 199 addCmd(TBaseType.rrw_cache, "select", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCacheSelect); 200 201 // DICTIONARY statements 202 addCmd(TBaseType.rrw_create, "dictionary", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksCreateDictionary); 203 addCmd(TBaseType.rrw_drop, "dictionary", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksDropDictionary); 204 addCmd(TBaseType.rrw_refresh, "dictionary", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksRefreshDictionary); 205 addCmd(TBaseType.rrw_cancel, "refresh", "dictionary", " ", " ", " ", " ", ESqlStatementType.sststarrocksRefreshDictionary); 206 addCmd(TBaseType.rrw_show, "dictionary", " ", " ", " ", " ", " ", ESqlStatementType.sststarrocksShowDictionary); 207 208 // SET statements 209 addCmd(TBaseType.rrw_set, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 210 addCmd(TBaseType.rrw_set, "global", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 211 addCmd(TBaseType.rrw_set, "session", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 212 addCmd(TBaseType.rrw_set, "catalog", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlset); 213 214 // USE statement 215 addCmd(TBaseType.rrw_use, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqluse); 216 217 // DESCRIBE/DESC 218 addCmd(TBaseType.rrw_describe, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdescribe); 219 220 // EXPLAIN 221 addCmd(TBaseType.rrw_explain, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstExplain); 222 223 // GRANT/REVOKE 224 addCmd(TBaseType.rrw_grant, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlgrant); 225 addCmd(TBaseType.rrw_revoke, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlrevoke); 226 227 // LOAD DATA (StarRocks supports various load methods) 228 addCmd(TBaseType.rrw_load, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlloaddatainfile); 229 addCmd(TBaseType.rrw_load, "label", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlloaddatainfile); 230 231 // ANALYZE TABLE/DATABASE 232 addCmd(TBaseType.rrw_analyze, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 233 addCmd(TBaseType.rrw_analyze, "full", "table", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 234 addCmd(TBaseType.rrw_analyze, "sample", "table", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 235 addCmd(TBaseType.rrw_analyze, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 236 addCmd(TBaseType.rrw_analyze, "full", "database", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 237 addCmd(TBaseType.rrw_analyze, "sample", "database", " ", " ", " ", " ", ESqlStatementType.sstanalyzeTable); 238 239 // KILL 240 addCmd(TBaseType.rrw_kill, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlkill); 241 242 // CALL 243 addCmd(TBaseType.rrw_call, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlcall); 244 245 // PREPARE/EXECUTE/DEALLOCATE 246 addCmd(TBaseType.rrw_prepare, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlprepare); 247 addCmd(TBaseType.rrw_execute, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqlexecute); 248 addCmd(TBaseType.rrw_deallocate, "prepare", " ", " ", " ", " ", " ", ESqlStatementType.sstmysqldeallocateprepare); 249 250 // REFRESH MATERIALIZED VIEW (StarRocks specific) 251 addCmd(TBaseType.rrw_refresh, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 252 } 253 254 @Override 255 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 256 TCustomSqlStatement ret = null; 257 int k; 258 boolean lcisnewsql; 259 TSourceToken lcpprevsolidtoken, lcnextsolidtoken; 260 261 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 262 263 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 264 || (pcst.tokencode == TBaseType.cmtslashstar) 265 || (pcst.tokencode == TBaseType.lexspace) 266 || (pcst.tokencode == TBaseType.lexnewline) 267 || (pcst.tokentype == ETokenType.ttsemicolon)) { 268 return ret; 269 } 270 271 int lcpos = pcst.posinlist; 272 TSourceTokenList lcsourcetokenlist = pcst.container; 273 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 274 275 // Subquery after semicolon or at first line 276 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { 277 k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 278 if (k > 0) { 279 ret = new TSelectSqlStatement(vendor); 280 } 281 return ret; 282 } 283 284 // CTE 285 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 286 ret = findcte(pcst); 287 if ((ret != null)) return ret; 288 } 289 290 gnewsqlstatementtype = getStatementTypeForToken(pcst); 291 292 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 293 294 // Handle CREATE ... VIEW pattern 295 if ((gnewsqlstatementtype == ESqlStatementType.sstinvalid) && (pcst.tokencode == TBaseType.rrw_create)) { 296 TSourceToken viewToken = pcst.container.searchToken(TBaseType.rrw_view, "", pcst, 15); 297 if (viewToken != null) { 298 gnewsqlstatementtype = ESqlStatementType.sstcreateview; 299 } 300 } 301 302 switch (gnewsqlstatementtype) { 303 case sstcreatetable: 304 ret = new TCreateTableSqlStatement(vendor); 305 break; 306 307 case sstinvalid: { 308 ret = null; 309 break; 310 } 311 case sstselect: { 312 lcisnewsql = true; 313 314 if (pstate != EFindSqlStateType.stnormal) { 315 if (TBaseType.assigned(lcprevsolidtoken)) { 316 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 317 lcisnewsql = false; 318 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 319 lcisnewsql = false; 320 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 321 lcisnewsql = false; 322 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 323 lcisnewsql = false; 324 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 325 lcisnewsql = false; 326 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 327 lcisnewsql = false; 328 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 329 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 330 lcisnewsql = false; 331 else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 332 lcisnewsql = false; 333 else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatematerializedview) 334 lcisnewsql = false; 335 } 336 } 337 } 338 if (lcisnewsql) { 339 ret = new TSelectSqlStatement(vendor); 340 } 341 break; 342 } 343 case sstanalyzeTable: { 344 if (pstate == EFindSqlStateType.stnormal) { 345 ret = new TAnalyzeStmt(vendor); 346 } 347 break; 348 } 349 case sststarrocksCreateRoutineLoad: { 350 if (pstate == EFindSqlStateType.stnormal) { 351 ret = new TCreateRoutineLoadStmt(vendor); 352 } 353 break; 354 } 355 case sststarrocksPauseRoutineLoad: { 356 if (pstate == EFindSqlStateType.stnormal) { 357 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksPauseRoutineLoad); 358 } 359 break; 360 } 361 case sststarrocksResumeRoutineLoad: { 362 if (pstate == EFindSqlStateType.stnormal) { 363 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksResumeRoutineLoad); 364 } 365 break; 366 } 367 case sststarrocksStopRoutineLoad: { 368 if (pstate == EFindSqlStateType.stnormal) { 369 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksStopRoutineLoad); 370 } 371 break; 372 } 373 case sststarrocksAlterRoutineLoad: { 374 if (pstate == EFindSqlStateType.stnormal) { 375 ret = new TAlterRoutineLoadStmt(vendor); 376 } 377 break; 378 } 379 case sststarrocksShowRoutineLoad: { 380 if (pstate == EFindSqlStateType.stnormal) { 381 ret = new TShowRoutineLoadStmt(vendor); 382 } 383 break; 384 } 385 case sststarrocksSubmitTask: { 386 if (pstate == EFindSqlStateType.stnormal) { 387 ret = new TSubmitTaskStmt(vendor); 388 } 389 break; 390 } 391 case sststarrocksDropTask: { 392 if (pstate == EFindSqlStateType.stnormal) { 393 ret = new TStarrocksDropTaskStmt(vendor); 394 } 395 break; 396 } 397 case sststarrocksBeginLoadTransaction: { 398 if (pstate == EFindSqlStateType.stnormal) { 399 ret = new TBeginLoadTransactionStmt(vendor); 400 } 401 break; 402 } 403 case sststarrocksCommitLoadTransaction: { 404 if (pstate == EFindSqlStateType.stnormal) { 405 ret = new TCommitLoadTransactionStmt(vendor); 406 } 407 break; 408 } 409 case sststarrocksAbortLoadTransaction: { 410 if (pstate == EFindSqlStateType.stnormal) { 411 ret = new TAbortLoadTransactionStmt(vendor); 412 } 413 break; 414 } 415 case sststarrocksShowLoadTransaction: { 416 if (pstate == EFindSqlStateType.stnormal) { 417 ret = new TShowLoadTransactionStmt(vendor); 418 } 419 break; 420 } 421 case sststarrocksExport: { 422 if (pstate == EFindSqlStateType.stnormal) { 423 ret = new TStarrocksExportStmt(vendor); 424 } 425 break; 426 } 427 case sststarrocksShowExport: { 428 if (pstate == EFindSqlStateType.stnormal) { 429 ret = new TStarrocksShowExportStmt(vendor); 430 } 431 break; 432 } 433 case sststarrocksCancelExport: { 434 if (pstate == EFindSqlStateType.stnormal) { 435 ret = new TStarrocksCancelExportStmt(vendor); 436 } 437 break; 438 } 439 case sststarrocksCreateResourceGroup: { 440 if (pstate == EFindSqlStateType.stnormal) { 441 ret = new TStarrocksCreateResourceGroupStmt(vendor); 442 } 443 break; 444 } 445 case sststarrocksDropResourceGroup: { 446 if (pstate == EFindSqlStateType.stnormal) { 447 ret = new TStarrocksDropResourceGroupStmt(vendor); 448 } 449 break; 450 } 451 case sststarrocksAlterResourceGroup: { 452 if (pstate == EFindSqlStateType.stnormal) { 453 ret = new TStarrocksAlterResourceGroupStmt(vendor); 454 } 455 break; 456 } 457 case sststarrocksShowResourceGroup: { 458 if (pstate == EFindSqlStateType.stnormal) { 459 ret = new TStarrocksShowResourceGroupStmt(vendor); 460 } 461 break; 462 } 463 case sststarrocksCreateStorageVolume: { 464 if (pstate == EFindSqlStateType.stnormal) { 465 ret = new TStarrocksCreateStorageVolumeStmt(vendor); 466 } 467 break; 468 } 469 case sststarrocksAlterStorageVolume: { 470 if (pstate == EFindSqlStateType.stnormal) { 471 ret = new TStarrocksAlterStorageVolumeStmt(vendor); 472 } 473 break; 474 } 475 case sststarrocksDropStorageVolume: { 476 if (pstate == EFindSqlStateType.stnormal) { 477 ret = new TStarrocksDropStorageVolumeStmt(vendor); 478 } 479 break; 480 } 481 case sststarrocksShowStorageVolume: { 482 if (pstate == EFindSqlStateType.stnormal) { 483 ret = new TStarrocksShowStorageVolumeStmt(vendor); 484 } 485 break; 486 } 487 case sststarrocksDescStorageVolume: { 488 if (pstate == EFindSqlStateType.stnormal) { 489 ret = new TStarrocksDescStorageVolumeStmt(vendor); 490 } 491 break; 492 } 493 case sststarrocksBackup: { 494 if (pstate == EFindSqlStateType.stnormal) { 495 ret = new TStarrocksBackupStmt(vendor); 496 } 497 break; 498 } 499 case sststarrocksCreateRepository: { 500 if (pstate == EFindSqlStateType.stnormal) { 501 ret = new TStarrocksCreateRepositoryStmt(vendor); 502 } 503 break; 504 } 505 case sststarrocksDropRepository: { 506 if (pstate == EFindSqlStateType.stnormal) { 507 ret = new TStarrocksDropRepositoryStmt(vendor); 508 } 509 break; 510 } 511 case sststarrocksRestore: { 512 if (pstate == EFindSqlStateType.stnormal) { 513 ret = new TStarrocksRestoreStmt(vendor); 514 } 515 break; 516 } 517 case sststarrocksShowBackup: 518 case sststarrocksShowRestore: { 519 if (pstate == EFindSqlStateType.stnormal) { 520 ret = new TStarrocksShowBackupRestoreStmt(vendor); 521 } 522 break; 523 } 524 case sststarrocksShowSnapshot: { 525 if (pstate == EFindSqlStateType.stnormal) { 526 ret = new TStarrocksShowSnapshotStmt(vendor); 527 } 528 break; 529 } 530 case sststarrocksCancelBackup: 531 case sststarrocksCancelRestore: { 532 if (pstate == EFindSqlStateType.stnormal) { 533 ret = new TStarrocksCancelBackupRestoreStmt(vendor); 534 } 535 break; 536 } 537 case sststarrocksCacheSelect: { 538 if (pstate == EFindSqlStateType.stnormal) { 539 ret = new TStarrocksCacheSelectStmt(vendor); 540 } 541 break; 542 } 543 case sststarrocksCreateDictionary: { 544 if (pstate == EFindSqlStateType.stnormal) { 545 ret = new TStarrocksCreateDictionaryStmt(vendor); 546 } 547 break; 548 } 549 case sststarrocksDropDictionary: { 550 if (pstate == EFindSqlStateType.stnormal) { 551 ret = new TStarrocksDropDictionaryStmt(vendor); 552 } 553 break; 554 } 555 case sststarrocksRefreshDictionary: { 556 if (pstate == EFindSqlStateType.stnormal) { 557 ret = new TStarrocksRefreshDictionaryStmt(vendor); 558 } 559 break; 560 } 561 case sststarrocksShowDictionary: { 562 if (pstate == EFindSqlStateType.stnormal) { 563 ret = new TStarrocksShowDictionaryStmt(vendor); 564 } 565 break; 566 } 567 case sstinsert: { 568 if (pstate == EFindSqlStateType.stnormal) { 569 ret = new TInsertSqlStatement(vendor); 570 } 571 break; 572 } 573 case sstupdate: { 574 if (pstate == EFindSqlStateType.stnormal) { 575 ret = new TUpdateSqlStatement(vendor); 576 } 577 break; 578 } 579 case sstdelete: { 580 if (pstate == EFindSqlStateType.stnormal) { 581 ret = new TDeleteSqlStatement(vendor); 582 } 583 break; 584 } 585 case sstmerge: { 586 if (pstate == EFindSqlStateType.stnormal) { 587 ret = new TMergeSqlStatement(vendor); 588 } 589 break; 590 } 591 case sstmysqlcreatefunction: { 592 if (pstate == EFindSqlStateType.stnormal) { 593 ret = new TCreateFunctionStmt(vendor); 594 } 595 break; 596 } 597 case sstmysqldropfunction: { 598 if (pstate == EFindSqlStateType.stnormal) { 599 ret = new TDropFunctionStmt(vendor); 600 } 601 break; 602 } 603 case sststarrocksShowFunctions: { 604 if (pstate == EFindSqlStateType.stnormal) { 605 ret = new TStarrocksShowFunctionsStmt(vendor); 606 } 607 break; 608 } 609 default: { 610 ret = new TUnknownSqlStatement(vendor); 611 ret.sqlstatementtype = gnewsqlstatementtype; 612 break; 613 } 614 } 615 616 return ret; 617 } 618}