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 sstinvalid: { 304 ret = null; 305 break; 306 } 307 case sstselect: { 308 lcisnewsql = true; 309 310 if (pstate != EFindSqlStateType.stnormal) { 311 if (TBaseType.assigned(lcprevsolidtoken)) { 312 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 313 lcisnewsql = false; 314 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 315 lcisnewsql = false; 316 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 317 lcisnewsql = false; 318 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 319 lcisnewsql = false; 320 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 321 lcisnewsql = false; 322 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 323 lcisnewsql = false; 324 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 325 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 326 lcisnewsql = false; 327 else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 328 lcisnewsql = false; 329 else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatematerializedview) 330 lcisnewsql = false; 331 } 332 } 333 } 334 if (lcisnewsql) { 335 ret = new TSelectSqlStatement(vendor); 336 } 337 break; 338 } 339 case sstanalyzeTable: { 340 if (pstate == EFindSqlStateType.stnormal) { 341 ret = new TAnalyzeStmt(vendor); 342 } 343 break; 344 } 345 case sststarrocksCreateRoutineLoad: { 346 if (pstate == EFindSqlStateType.stnormal) { 347 ret = new TCreateRoutineLoadStmt(vendor); 348 } 349 break; 350 } 351 case sststarrocksPauseRoutineLoad: { 352 if (pstate == EFindSqlStateType.stnormal) { 353 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksPauseRoutineLoad); 354 } 355 break; 356 } 357 case sststarrocksResumeRoutineLoad: { 358 if (pstate == EFindSqlStateType.stnormal) { 359 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksResumeRoutineLoad); 360 } 361 break; 362 } 363 case sststarrocksStopRoutineLoad: { 364 if (pstate == EFindSqlStateType.stnormal) { 365 ret = new TRoutineLoadJobActionStmt(vendor, ESqlStatementType.sststarrocksStopRoutineLoad); 366 } 367 break; 368 } 369 case sststarrocksAlterRoutineLoad: { 370 if (pstate == EFindSqlStateType.stnormal) { 371 ret = new TAlterRoutineLoadStmt(vendor); 372 } 373 break; 374 } 375 case sststarrocksShowRoutineLoad: { 376 if (pstate == EFindSqlStateType.stnormal) { 377 ret = new TShowRoutineLoadStmt(vendor); 378 } 379 break; 380 } 381 case sststarrocksSubmitTask: { 382 if (pstate == EFindSqlStateType.stnormal) { 383 ret = new TSubmitTaskStmt(vendor); 384 } 385 break; 386 } 387 case sststarrocksDropTask: { 388 if (pstate == EFindSqlStateType.stnormal) { 389 ret = new TStarrocksDropTaskStmt(vendor); 390 } 391 break; 392 } 393 case sststarrocksBeginLoadTransaction: { 394 if (pstate == EFindSqlStateType.stnormal) { 395 ret = new TBeginLoadTransactionStmt(vendor); 396 } 397 break; 398 } 399 case sststarrocksCommitLoadTransaction: { 400 if (pstate == EFindSqlStateType.stnormal) { 401 ret = new TCommitLoadTransactionStmt(vendor); 402 } 403 break; 404 } 405 case sststarrocksAbortLoadTransaction: { 406 if (pstate == EFindSqlStateType.stnormal) { 407 ret = new TAbortLoadTransactionStmt(vendor); 408 } 409 break; 410 } 411 case sststarrocksShowLoadTransaction: { 412 if (pstate == EFindSqlStateType.stnormal) { 413 ret = new TShowLoadTransactionStmt(vendor); 414 } 415 break; 416 } 417 case sststarrocksExport: { 418 if (pstate == EFindSqlStateType.stnormal) { 419 ret = new TStarrocksExportStmt(vendor); 420 } 421 break; 422 } 423 case sststarrocksShowExport: { 424 if (pstate == EFindSqlStateType.stnormal) { 425 ret = new TStarrocksShowExportStmt(vendor); 426 } 427 break; 428 } 429 case sststarrocksCancelExport: { 430 if (pstate == EFindSqlStateType.stnormal) { 431 ret = new TStarrocksCancelExportStmt(vendor); 432 } 433 break; 434 } 435 case sststarrocksCreateResourceGroup: { 436 if (pstate == EFindSqlStateType.stnormal) { 437 ret = new TStarrocksCreateResourceGroupStmt(vendor); 438 } 439 break; 440 } 441 case sststarrocksDropResourceGroup: { 442 if (pstate == EFindSqlStateType.stnormal) { 443 ret = new TStarrocksDropResourceGroupStmt(vendor); 444 } 445 break; 446 } 447 case sststarrocksAlterResourceGroup: { 448 if (pstate == EFindSqlStateType.stnormal) { 449 ret = new TStarrocksAlterResourceGroupStmt(vendor); 450 } 451 break; 452 } 453 case sststarrocksShowResourceGroup: { 454 if (pstate == EFindSqlStateType.stnormal) { 455 ret = new TStarrocksShowResourceGroupStmt(vendor); 456 } 457 break; 458 } 459 case sststarrocksCreateStorageVolume: { 460 if (pstate == EFindSqlStateType.stnormal) { 461 ret = new TStarrocksCreateStorageVolumeStmt(vendor); 462 } 463 break; 464 } 465 case sststarrocksAlterStorageVolume: { 466 if (pstate == EFindSqlStateType.stnormal) { 467 ret = new TStarrocksAlterStorageVolumeStmt(vendor); 468 } 469 break; 470 } 471 case sststarrocksDropStorageVolume: { 472 if (pstate == EFindSqlStateType.stnormal) { 473 ret = new TStarrocksDropStorageVolumeStmt(vendor); 474 } 475 break; 476 } 477 case sststarrocksShowStorageVolume: { 478 if (pstate == EFindSqlStateType.stnormal) { 479 ret = new TStarrocksShowStorageVolumeStmt(vendor); 480 } 481 break; 482 } 483 case sststarrocksDescStorageVolume: { 484 if (pstate == EFindSqlStateType.stnormal) { 485 ret = new TStarrocksDescStorageVolumeStmt(vendor); 486 } 487 break; 488 } 489 case sststarrocksBackup: { 490 if (pstate == EFindSqlStateType.stnormal) { 491 ret = new TStarrocksBackupStmt(vendor); 492 } 493 break; 494 } 495 case sststarrocksCreateRepository: { 496 if (pstate == EFindSqlStateType.stnormal) { 497 ret = new TStarrocksCreateRepositoryStmt(vendor); 498 } 499 break; 500 } 501 case sststarrocksDropRepository: { 502 if (pstate == EFindSqlStateType.stnormal) { 503 ret = new TStarrocksDropRepositoryStmt(vendor); 504 } 505 break; 506 } 507 case sststarrocksRestore: { 508 if (pstate == EFindSqlStateType.stnormal) { 509 ret = new TStarrocksRestoreStmt(vendor); 510 } 511 break; 512 } 513 case sststarrocksShowBackup: 514 case sststarrocksShowRestore: { 515 if (pstate == EFindSqlStateType.stnormal) { 516 ret = new TStarrocksShowBackupRestoreStmt(vendor); 517 } 518 break; 519 } 520 case sststarrocksShowSnapshot: { 521 if (pstate == EFindSqlStateType.stnormal) { 522 ret = new TStarrocksShowSnapshotStmt(vendor); 523 } 524 break; 525 } 526 case sststarrocksCancelBackup: 527 case sststarrocksCancelRestore: { 528 if (pstate == EFindSqlStateType.stnormal) { 529 ret = new TStarrocksCancelBackupRestoreStmt(vendor); 530 } 531 break; 532 } 533 case sststarrocksCacheSelect: { 534 if (pstate == EFindSqlStateType.stnormal) { 535 ret = new TStarrocksCacheSelectStmt(vendor); 536 } 537 break; 538 } 539 case sststarrocksCreateDictionary: { 540 if (pstate == EFindSqlStateType.stnormal) { 541 ret = new TStarrocksCreateDictionaryStmt(vendor); 542 } 543 break; 544 } 545 case sststarrocksDropDictionary: { 546 if (pstate == EFindSqlStateType.stnormal) { 547 ret = new TStarrocksDropDictionaryStmt(vendor); 548 } 549 break; 550 } 551 case sststarrocksRefreshDictionary: { 552 if (pstate == EFindSqlStateType.stnormal) { 553 ret = new TStarrocksRefreshDictionaryStmt(vendor); 554 } 555 break; 556 } 557 case sststarrocksShowDictionary: { 558 if (pstate == EFindSqlStateType.stnormal) { 559 ret = new TStarrocksShowDictionaryStmt(vendor); 560 } 561 break; 562 } 563 case sstinsert: { 564 if (pstate == EFindSqlStateType.stnormal) { 565 ret = new TInsertSqlStatement(vendor); 566 } 567 break; 568 } 569 case sstupdate: { 570 if (pstate == EFindSqlStateType.stnormal) { 571 ret = new TUpdateSqlStatement(vendor); 572 } 573 break; 574 } 575 case sstdelete: { 576 if (pstate == EFindSqlStateType.stnormal) { 577 ret = new TDeleteSqlStatement(vendor); 578 } 579 break; 580 } 581 case sstmerge: { 582 if (pstate == EFindSqlStateType.stnormal) { 583 ret = new TMergeSqlStatement(vendor); 584 } 585 break; 586 } 587 case sstmysqlcreatefunction: { 588 if (pstate == EFindSqlStateType.stnormal) { 589 ret = new TCreateFunctionStmt(vendor); 590 } 591 break; 592 } 593 case sstmysqldropfunction: { 594 if (pstate == EFindSqlStateType.stnormal) { 595 ret = new TDropFunctionStmt(vendor); 596 } 597 break; 598 } 599 case sststarrocksShowFunctions: { 600 if (pstate == EFindSqlStateType.stnormal) { 601 ret = new TStarrocksShowFunctionsStmt(vendor); 602 } 603 break; 604 } 605 default: { 606 ret = new TUnknownSqlStatement(vendor); 607 ret.sqlstatementtype = gnewsqlstatementtype; 608 break; 609 } 610 } 611 612 return ret; 613 } 614}