001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.snowflake.*; 006import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreateFunction; 007import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreatePackage; 008import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreateProcedure; 009 010/** 011 * Snowflake SQL command resolver. 012 * Extracted from monolithic TSqlCmds for lazy loading. 013 * 014 * @since 3.1.0.9 015 */ 016public class TSqlCmdsSnowflake extends AbstractSqlCmds { 017 018 public TSqlCmdsSnowflake() { 019 super(EDbVendor.dbvsnowflake); 020 } 021 022 @Override 023 protected void initializeCommands() { 024 // Commands must be in order: longer patterns BEFORE shorter patterns with same prefix 025 026 // ALTER commands 027 addCmd(TBaseType.rrw_alter, "external", "table", ESqlStatementType.sstaltertable); 028 addCmd(TBaseType.rrw_alter, "account", ESqlStatementType.sstAlterAccount); 029 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase); 030 addCmd(TBaseType.rrw_alter, "file", "format", ESqlStatementType.sstAlterFileFormat); 031 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstalterfunction); 032 addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstAlterMaterializedView); 033 addCmd(TBaseType.rrw_alter, "network", "policy", ESqlStatementType.sstAlterNetworkPolicy); 034 addCmd(TBaseType.rrw_alter, "pipe", ESqlStatementType.sstAlterPipe); 035 addCmd(TBaseType.rrw_alter, "resource", "monitor", ESqlStatementType.sstAlterResourceMonitor); 036 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstAlterRole); 037 addCmd(TBaseType.rrw_alter, "task", ESqlStatementType.sstAlterTask); 038 addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstAlterSchema); 039 addCmd(TBaseType.rrw_alter, "session", ESqlStatementType.sstaltersession); 040 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstaltersequence); 041 addCmd(TBaseType.rrw_alter, "share", ESqlStatementType.sstAlterShare); 042 addCmd(TBaseType.rrw_alter, "stage", ESqlStatementType.sstAlterStage); 043 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 044 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstalteruser); 045 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstalterview); 046 addCmd(TBaseType.rrw_alter, "warehouse", ESqlStatementType.sstAlterWarehouse); 047 048 // BEGIN commands 049 addCmd(TBaseType.rrw_begin, "work", ESqlStatementType.sstbegintran); 050 addCmd(TBaseType.rrw_begin, "transaction", ESqlStatementType.sstbegintran); 051 addCmd(TBaseType.rrw_begin, ESqlStatementType.sstBegin); 052 addCmd(TBaseType.rrw_snowflake_begin_transaction, ESqlStatementType.sstbegintran); 053 054 // PL/SQL block delimiter for procedure body reparsing 055 addCmd(TBaseType.rrw_snowflake_plpgsql_function_delimiter, ESqlStatementType.sstPostgresqlBlock); 056 057 // Other commands 058 addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall); 059 addCmd(TBaseType.rrw_comment, ESqlStatementType.sstcomment); 060 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstcommit); 061 addCmd(TBaseType.rrw_snowflake_copy, "into", ESqlStatementType.sstCopyInto); 062 063 // CREATE commands - longer patterns first 064 addCmd(TBaseType.rrw_create, "or", "replace", "global", "temporary", "table", ESqlStatementType.sstcreatetable); 065 addCmd(TBaseType.rrw_create, "or", "replace", "local", "temporary", "table", ESqlStatementType.sstcreatetable); 066 addCmd(TBaseType.rrw_create, "or", "replace", "transient", "dynamic", "table", ESqlStatementType.sstcreatetable); 067 addCmd(TBaseType.rrw_create, "or", "replace", "external", "table", ESqlStatementType.sstcreatetable); 068 addCmd(TBaseType.rrw_create, "or", "replace", "dynamic", "table", ESqlStatementType.sstcreatetable); 069 addCmd(TBaseType.rrw_create, "or", "replace", "file", "format", ESqlStatementType.sstCreateFileFormat); 070 addCmd(TBaseType.rrw_create, "or", "replace", "force", "view", ESqlStatementType.sstcreateview); 071 addCmd(TBaseType.rrw_create, "or", "replace", "hybrid", "table", ESqlStatementType.sstcreatetable); 072 addCmd(TBaseType.rrw_create, "or", "replace", "materialized", "view", ESqlStatementType.sstcreatematerializedview); 073 addCmd(TBaseType.rrw_create, "or", "replace", "network", "policy", ESqlStatementType.sstCreateNetworkPolicy); 074 addCmd(TBaseType.rrw_create, "or", "replace", "recursive", "view", ESqlStatementType.sstcreateview); 075 addCmd(TBaseType.rrw_create, "or", "replace", "resource", "monitor", ESqlStatementType.sstCreateResourceMonitor); 076 addCmd(TBaseType.rrw_create, "or", "replace", "secure", "materialized", "view", ESqlStatementType.sstcreatematerializedview); 077 addCmd(TBaseType.rrw_create, "or", "replace", "secure", "view", ESqlStatementType.sstcreateview); 078 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "stage", ESqlStatementType.sstCreateStage); 079 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "table", ESqlStatementType.sstcreatetable); 080 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstcreateview); 081 addCmd(TBaseType.rrw_create, "or", "replace", "transient", "database", ESqlStatementType.sstcreatedatabase); 082 addCmd(TBaseType.rrw_create, "or", "replace", "transient", "schema", ESqlStatementType.sstcreateschema); 083 addCmd(TBaseType.rrw_create, "or", "replace", "transient", "table", ESqlStatementType.sstcreatetable); 084 addCmd(TBaseType.rrw_create, "or", "replace", "database", ESqlStatementType.sstcreatedatabase); 085 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction); 086 addCmd(TBaseType.rrw_create, "or", "replace", "pipe", ESqlStatementType.sstCreatePipe); 087 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure); 088 addCmd(TBaseType.rrw_create, "or", "replace", "role", ESqlStatementType.sstcreaterole); 089 addCmd(TBaseType.rrw_create, "or", "replace", "schema", ESqlStatementType.sstcreateschema); 090 addCmd(TBaseType.rrw_create, "or", "replace", "semantic", "view", ESqlStatementType.sstcreatesemanticview); 091 addCmd(TBaseType.rrw_create, "or", "replace", "sequence", ESqlStatementType.sstcreatesequence); 092 addCmd(TBaseType.rrw_create, "or", "replace", "share", ESqlStatementType.sstCreateShare); 093 addCmd(TBaseType.rrw_create, "or", "replace", "stage", ESqlStatementType.sstCreateStage); 094 addCmd(TBaseType.rrw_create, "or", "replace", "stream", ESqlStatementType.sstCreateStream); 095 addCmd(TBaseType.rrw_create, "or", "replace", "table", ESqlStatementType.sstcreatetable); 096 addCmd(TBaseType.rrw_create, "or", "replace", "task", ESqlStatementType.sstCreateTask); 097 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "table", ESqlStatementType.sstcreatetable); 098 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstcreateview); 099 addCmd(TBaseType.rrw_create, "or", "replace", "user", ESqlStatementType.sstcreateuser); 100 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview); 101 addCmd(TBaseType.rrw_create, "or", "replace", "warehouse", ESqlStatementType.sstCreateWarehouse); 102 103 // CREATE without OR REPLACE - 3+ tokens 104 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 105 addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable); 106 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 107 addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable); 108 addCmd(TBaseType.rrw_create, "dynamic", "table", ESqlStatementType.sstcreatetable); 109 addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstcreatetable); 110 addCmd(TBaseType.rrw_create, "file", "format", ESqlStatementType.sstCreateFileFormat); 111 addCmd(TBaseType.rrw_create, "global", "table", ESqlStatementType.sstcreatetable); 112 addCmd(TBaseType.rrw_create, "hybrid", "table", ESqlStatementType.sstcreatetable); 113 addCmd(TBaseType.rrw_create, "local", "table", ESqlStatementType.sstcreatetable); 114 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview); 115 addCmd(TBaseType.rrw_create, "network", "policy", ESqlStatementType.sstCreateNetworkPolicy); 116 addCmd(TBaseType.rrw_create, "recursive", "view", ESqlStatementType.sstcreateview); 117 addCmd(TBaseType.rrw_create, "resource", "monitor", ESqlStatementType.sstCreateResourceMonitor); 118 addCmd(TBaseType.rrw_create, "secure", "materialized", "view", ESqlStatementType.sstcreatematerializedview); 119 addCmd(TBaseType.rrw_create, "secure", "view", ESqlStatementType.sstcreateview); 120 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable); 121 addCmd(TBaseType.rrw_create, "temporary", "stage", ESqlStatementType.sstCreateStage); 122 addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable); 123 addCmd(TBaseType.rrw_create, "transient", "dynamic", "table", ESqlStatementType.sstcreatetable); 124 addCmd(TBaseType.rrw_create, "transient", "database", ESqlStatementType.sstcreatedatabase); 125 addCmd(TBaseType.rrw_create, "transient", "schema", ESqlStatementType.sstcreateschema); 126 addCmd(TBaseType.rrw_create, "transient", "table", ESqlStatementType.sstcreatetable); 127 128 // CREATE - 2 tokens 129 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase); 130 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction); 131 addCmd(TBaseType.rrw_create, "pipe", ESqlStatementType.sstCreatePipe); 132 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 133 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole); 134 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstcreateschema); 135 addCmd(TBaseType.rrw_create, "semantic", "view", ESqlStatementType.sstcreatesemanticview); 136 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstcreatesequence); 137 addCmd(TBaseType.rrw_create, "share", ESqlStatementType.sstCreateShare); 138 addCmd(TBaseType.rrw_create, "stage", ESqlStatementType.sstCreateStage); 139 addCmd(TBaseType.rrw_create, "stream", ESqlStatementType.sstCreateStream); 140 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 141 addCmd(TBaseType.rrw_create, "task", ESqlStatementType.sstCreateTask); 142 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstcreateuser); 143 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview); 144 addCmd(TBaseType.rrw_create, "warehouse", ESqlStatementType.sstCreateWarehouse); 145 146 // DELETE 147 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 148 149 // DESCRIBE/DESC commands - 3 tokens 150 addCmd(TBaseType.rrw_snowflake_desc, "file", "format", ESqlStatementType.sstDescFileFormat); 151 addCmd(TBaseType.rrw_snowflake_desc, "network", "policy", ESqlStatementType.sstDescNetworkPolicy); 152 addCmd(TBaseType.rrw_describe, "file", "format", ESqlStatementType.sstDescFileFormat); 153 addCmd(TBaseType.rrw_describe, "network", "policy", ESqlStatementType.sstDescNetworkPolicy); 154 addCmd(TBaseType.rrw_describe, "user", "functions", ESqlStatementType.sstDescFunction); 155 156 // DESCRIBE/DESC commands - 2 tokens 157 addCmd(TBaseType.rrw_snowflake_desc, "function", ESqlStatementType.sstDescFunction); 158 addCmd(TBaseType.rrw_snowflake_desc, "pipe", ESqlStatementType.sstDescPipe); 159 addCmd(TBaseType.rrw_snowflake_desc, "result", ESqlStatementType.sstDescResult); 160 addCmd(TBaseType.rrw_snowflake_desc, "share", ESqlStatementType.sstDescShare); 161 addCmd(TBaseType.rrw_snowflake_desc, "stage", ESqlStatementType.sstDescStage); 162 addCmd(TBaseType.rrw_snowflake_desc, "storage", ESqlStatementType.sstDescStorage); 163 addCmd(TBaseType.rrw_snowflake_desc, "table", ESqlStatementType.sstDescTable); 164 addCmd(TBaseType.rrw_snowflake_desc, "user", ESqlStatementType.sstDescUser); 165 addCmd(TBaseType.rrw_snowflake_desc, "view", ESqlStatementType.sstDescView); 166 addCmd(TBaseType.rrw_describe, "function", ESqlStatementType.sstDescFunction); 167 addCmd(TBaseType.rrw_describe, "pipe", ESqlStatementType.sstDescPipe); 168 addCmd(TBaseType.rrw_describe, "result", ESqlStatementType.sstDescResult); 169 addCmd(TBaseType.rrw_describe, "share", ESqlStatementType.sstDescShare); 170 addCmd(TBaseType.rrw_describe, "stage", ESqlStatementType.sstDescStage); 171 addCmd(TBaseType.rrw_describe, "storage", ESqlStatementType.sstDescStorage); 172 addCmd(TBaseType.rrw_describe, "table", ESqlStatementType.sstDescTable); 173 addCmd(TBaseType.rrw_describe, "user", ESqlStatementType.sstDescUser); 174 addCmd(TBaseType.rrw_describe, "view", ESqlStatementType.sstDescView); 175 176 // DROP commands - 3 tokens 177 addCmd(TBaseType.rrw_drop, "file", "format", ESqlStatementType.sstDropFileFormat); 178 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstDropMaterializedView); 179 addCmd(TBaseType.rrw_drop, "network", "policy", ESqlStatementType.sstDropNetworkPolicy); 180 addCmd(TBaseType.rrw_drop, "resource", "monitor", ESqlStatementType.sstDropResourceMonitor); 181 182 // DROP commands - 2 tokens 183 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstdropdatabase); 184 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstdropfunction); 185 addCmd(TBaseType.rrw_drop, "pipe", ESqlStatementType.sstDropPipe); 186 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstdropprocedure); 187 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstdroprole); 188 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstdropschema); 189 addCmd(TBaseType.rrw_drop, "share", ESqlStatementType.sstDropShare); 190 addCmd(TBaseType.rrw_drop, "stage", ESqlStatementType.sstDropStage); 191 addCmd(TBaseType.rrw_drop, "stream", ESqlStatementType.sstDropStream); 192 addCmd(TBaseType.rrw_drop, "streamlit", ESqlStatementType.sstDropStreamlit); 193 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable); 194 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstdropuser); 195 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview); 196 addCmd(TBaseType.rrw_drop, "warehouse", ESqlStatementType.sstDropWarehouse); 197 198 // EXECUTE 199 addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstExecute); 200 201 // Other commands 202 addCmd(TBaseType.rrw_get, ESqlStatementType.sstGet); 203 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant); 204 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 205 addCmd(TBaseType.rrw_snowflake_list, ESqlStatementType.sstList); 206 addCmd(TBaseType.rrw_snowflake_ls, ESqlStatementType.sstList); 207 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 208 addCmd(TBaseType.rrw_snowflake_pseudo_stmt_sign, ESqlStatementType.sstSnowflakePseudoExprStmt); 209 addCmd(TBaseType.rrw_snowflake_put, ESqlStatementType.sstPut); 210 addCmd(TBaseType.rrw_snowflake_remove, ESqlStatementType.sstRemove); 211 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke); 212 addCmd(TBaseType.rrw_snowflake_rm, ESqlStatementType.sstRemove); 213 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstrollback); 214 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 215 addCmd(TBaseType.rrw_set, ESqlStatementType.sstset); 216 217 // SHOW commands - 3+ tokens 218 addCmd(TBaseType.rrw_show, "terse", "databases", ESqlStatementType.sstShowDatabases); 219 addCmd(TBaseType.rrw_show, "terse", "streams", ESqlStatementType.sstShowStreams); 220 addCmd(TBaseType.rrw_show, "terse", "tasks", ESqlStatementType.sstShowTasks); 221 addCmd(TBaseType.rrw_show, "file", "formats", ESqlStatementType.sstShowFileFormats); 222 addCmd(TBaseType.rrw_show, "network", "policies", ESqlStatementType.sstShowNetworkPolicies); 223 addCmd(TBaseType.rrw_show, "resource", "monitors", ESqlStatementType.sstShowResourceMonitors); 224 addCmd(TBaseType.rrw_show, "user", "functions", ESqlStatementType.sstShowUserFunctions); 225 226 // SHOW commands - 2 tokens 227 addCmd(TBaseType.rrw_show, "columns", ESqlStatementType.sstShowColumns); 228 addCmd(TBaseType.rrw_show, "databases", ESqlStatementType.sstShowDatabases); 229 addCmd(TBaseType.rrw_show, "functions", ESqlStatementType.sstShowFunctions); 230 addCmd(TBaseType.rrw_show, "grants", ESqlStatementType.sstShowGrants); 231 addCmd(TBaseType.rrw_show, "locks", ESqlStatementType.sstShowLocks); 232 addCmd(TBaseType.rrw_show, "objects", ESqlStatementType.sstShowObjects); 233 addCmd(TBaseType.rrw_show, "parameters", ESqlStatementType.sstShowParameters); 234 addCmd(TBaseType.rrw_show, "pipes", ESqlStatementType.sstShowPipes); 235 addCmd(TBaseType.rrw_show, "procedures", ESqlStatementType.sstShowProcedures); 236 addCmd(TBaseType.rrw_show, "roles", ESqlStatementType.sstShowRoles); 237 addCmd(TBaseType.rrw_show, "schemas", ESqlStatementType.sstShowSchemas); 238 addCmd(TBaseType.rrw_show, "sequences", ESqlStatementType.sstShowSequences); 239 addCmd(TBaseType.rrw_show, "shares", ESqlStatementType.sstShowShares); 240 addCmd(TBaseType.rrw_show, "stages", ESqlStatementType.sstShowStages); 241 addCmd(TBaseType.rrw_show, "streams", ESqlStatementType.sstShowStreams); 242 addCmd(TBaseType.rrw_show, "tables", ESqlStatementType.sstShowTables); 243 addCmd(TBaseType.rrw_show, "tasks", ESqlStatementType.sstShowTasks); 244 addCmd(TBaseType.rrw_show, "transactions", ESqlStatementType.sstShowTransactions); 245 addCmd(TBaseType.rrw_show, "users", ESqlStatementType.sstShowUsers); 246 addCmd(TBaseType.rrw_show, "variables", ESqlStatementType.sstShowVariables); 247 addCmd(TBaseType.rrw_show, "views", ESqlStatementType.sstShowViews); 248 addCmd(TBaseType.rrw_show, "warehouses", ESqlStatementType.sstShowWarehouses); 249 250 // START, TRUNCATE, UNDROP, UNSET, UPDATE, USE 251 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstbegintran); 252 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate); 253 addCmd(TBaseType.rrw_snowflake_undrop, "database", ESqlStatementType.sstUndropDatabase); 254 addCmd(TBaseType.rrw_snowflake_undrop, "schema", ESqlStatementType.sstUndropSchema); 255 addCmd(TBaseType.rrw_snowflake_undrop, "table", ESqlStatementType.sstUndropTable); 256 addCmd(TBaseType.rrw_snowflake_unset, ESqlStatementType.sstunset); 257 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 258 addCmd(TBaseType.rrw_use, "secondary", "roles", ESqlStatementType.sstUseSecondaryRoles); 259 addCmd(TBaseType.rrw_use, ESqlStatementType.sstUse); 260 } 261 262 @Override 263 protected String getToken1Str(int token1) { 264 // Map vendor-specific token codes to their string representations 265 switch (token1) { 266 case TBaseType.rrw_snowflake_list: 267 return "list"; 268 case TBaseType.rrw_snowflake_remove: 269 return "remove"; 270 case TBaseType.rrw_snowflake_undrop: 271 return "undrop"; 272 case TBaseType.rrw_snowflake_copy: 273 return "copy"; 274 case TBaseType.rrw_snowflake_desc: 275 return "desc"; 276 case TBaseType.rrw_snowflake_ls: 277 return "ls"; 278 case TBaseType.rrw_snowflake_put: 279 return "put"; 280 case TBaseType.rrw_snowflake_rm: 281 return "rm"; 282 case TBaseType.rrw_snowflake_unset: 283 return "unset"; 284 default: 285 return null; 286 } 287 } 288 289 @Override 290 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 291 TCustomSqlStatement ret = null; 292 293 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 294 295 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 296 || (pcst.tokencode == TBaseType.cmtslashstar) 297 || (pcst.tokencode == TBaseType.lexspace) 298 || (pcst.tokencode == TBaseType.lexnewline) 299 || (pcst.tokentype == ETokenType.ttsemicolon)) { 300 return null; 301 } 302 303 int lcpos = pcst.posinlist; 304 TSourceTokenList lcsourcetokenlist = pcst.container; 305 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 306 307 // Subquery after semicolon or at first line 308 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { 309 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 310 if (k > 0) { 311 ret = new TSelectSqlStatement(this.vendor); 312 } else { 313 k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_with, 1, "("); 314 int k2 = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_as, 3, "("); 315 if ((k > 0) && (k2 > 2)) { 316 ret = new TSelectSqlStatement(this.vendor); 317 } 318 } 319 return ret; 320 } 321 322 // CTE 323 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 324 ret = findcte(pcst); 325 if (ret != null) return ret; 326 } 327 328 gnewsqlstatementtype = getStatementTypeForToken(pcst); 329 330 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 331 switch (gnewsqlstatementtype) { 332 case sstinvalid: { 333 ret = null; 334 335 if (pstate == EFindSqlStateType.stnormal) { 336 if (pcst.tokencode == TBaseType.label_begin) { 337 ret = new TCommonBlock(this.vendor); 338 gnewsqlstatementtype = ret.sqlstatementtype; 339 } else if (pcst.tokencode == TBaseType.rrw_declare) { 340 ret = new TCommonBlock(this.vendor); 341 gnewsqlstatementtype = ret.sqlstatementtype; 342 } else if (pcst.tokencode == TBaseType.rrw_begin) { 343 ret = new TCommonBlock(this.vendor); 344 gnewsqlstatementtype = ret.sqlstatementtype; 345 } else if (pcst.tokencode == TBaseType.rrw_procedure) { 346 ret = new TPlsqlCreateProcedure(this.vendor); 347 gnewsqlstatementtype = ret.sqlstatementtype; 348 } else if (pcst.tokencode == TBaseType.rrw_function) { 349 ret = new TPlsqlCreateFunction(this.vendor); 350 gnewsqlstatementtype = ret.sqlstatementtype; 351 } else if (pcst.tokencode == TBaseType.rrw_package) { 352 ret = new TPlsqlCreatePackage(this.vendor); 353 gnewsqlstatementtype = ret.sqlstatementtype; 354 } 355 } 356 break; 357 } 358 case sstselect: { 359 boolean lcisnewsql = true; 360 361 if (pstate != EFindSqlStateType.stnormal) { 362 if (lcprevsolidtoken != null) { 363 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 364 lcisnewsql = false; // subquery 365 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 366 lcisnewsql = false; 367 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 368 lcisnewsql = false; 369 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 370 lcisnewsql = false; 371 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 372 lcisnewsql = false; 373 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 374 lcisnewsql = false; 375 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 376 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 377 lcisnewsql = false; 378 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 379 lcisnewsql = false; 380 } 381 382 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 383 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 384 if (lcpprevsolidtoken != null) { 385 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 386 lcisnewsql = false; 387 } 388 } 389 } 390 391 if (lccurrentsqlstatement != null) { 392 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 393 lcisnewsql = false; 394 } 395 } 396 397 if (lcisnewsql) 398 ret = new TSelectSqlStatement(this.vendor); 399 400 break; 401 } 402 case sstinsert: { 403 boolean lcisnewsql = true; 404 if (pstate != EFindSqlStateType.stnormal) { 405 if (lccurrentsqlstatement != null) { 406 } 407 } 408 409 if (lcisnewsql) 410 ret = new TInsertSqlStatement(this.vendor); 411 412 break; 413 } 414 case sstupdate: { 415 boolean lcisnewsql = true; 416 if (pstate != EFindSqlStateType.stnormal) { 417 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 418 if (lcprevsolidtoken != null) { 419 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 420 lcisnewsql = false; 421 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 422 lcisnewsql = false; 423 } 424 425 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 426 if (lcnextsolidtoken != null) { 427 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 428 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 429 if (k == 0) lcisnewsql = false; 430 } 431 } 432 433 if (lccurrentsqlstatement != null) { 434 } 435 } 436 437 if (lcisnewsql) { 438 ret = new TUpdateSqlStatement(this.vendor); 439 ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement 440 } 441 break; 442 } 443 case sstdelete: { 444 boolean lcisnewsql = true; 445 446 if (pstate != EFindSqlStateType.stnormal) { 447 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 448 if (lcprevsolidtoken != null) { 449 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 450 lcisnewsql = false; 451 } 452 453 if (lccurrentsqlstatement != null) { 454 } 455 } 456 457 if (lcisnewsql) 458 ret = new TDeleteSqlStatement(this.vendor); 459 460 break; 461 } 462 case sstmerge: { 463 ret = new TMergeSqlStatement(this.vendor); 464 ret.sqlstatementtype = gnewsqlstatementtype; 465 break; 466 } 467 case sstoraclecommit: { 468 ret = new TUnknownSqlStatement(this.vendor); 469 ret.sqlstatementtype = gnewsqlstatementtype; 470 break; 471 } 472 case sstoraclerollback: { 473 ret = new TUnknownSqlStatement(this.vendor); 474 ret.sqlstatementtype = gnewsqlstatementtype; 475 break; 476 } 477 case sstoraclerevoke: { 478 ret = new TUnknownSqlStatement(this.vendor); 479 ret.sqlstatementtype = gnewsqlstatementtype; 480 break; 481 } 482 case sstoraclegrant: { 483 ret = new TUnknownSqlStatement(this.vendor); 484 ret.sqlstatementtype = gnewsqlstatementtype; 485 break; 486 } 487 case sstcreatetable: { 488 ret = new TCreateTableSqlStatement(this.vendor); 489 break; 490 } 491 case sstoraclecreateview: { 492 ret = new TCreateViewSqlStatement(this.vendor); 493 break; 494 } 495 case sstAlterAccount: { 496 ret = new TAlterAccountStmt(this.vendor); 497 break; 498 } 499 case sstalterdatabase: { 500 ret = new TAlterDatabaseStmt(this.vendor); 501 break; 502 } 503 case sstAlterFileFormat: { 504 ret = new TAlterFileFormatStmt(this.vendor); 505 break; 506 } 507 case sstalterfunction: { 508 ret = new TAlterFunctionStmt(this.vendor); 509 break; 510 } 511 case sstAlterNetworkPolicy: { 512 ret = new TAlterNetworkPolicyStmt(this.vendor); 513 break; 514 } 515 case sstAlterPipe: { 516 ret = new TAlterPipeStmt(this.vendor); 517 break; 518 } 519 case sstAlterResourceMonitor: { 520 ret = new TAlterResourceMonitorStmt(this.vendor); 521 break; 522 } 523 case sstAlterRole: { 524 ret = new TAlterRoleStmt(this.vendor); 525 break; 526 } 527 case sstAlterSchema: { 528 ret = new TAlterSchemaStmt(this.vendor); 529 break; 530 } 531 case sstaltersequence: { 532 ret = new TAlterSequenceStatement(this.vendor); 533 break; 534 } 535 case sstaltersession: { 536 ret = new TAlterSessionStatement(this.vendor); 537 break; 538 } 539 case sstAlterStage: { 540 ret = new TAlterStageStmt(this.vendor); 541 break; 542 } 543 case sstalteruser: { 544 ret = new TAlterUserStmt(this.vendor); 545 break; 546 } 547 case sstAlterShare: { 548 ret = new TAlterShareStmt(this.vendor); 549 break; 550 } 551 case sstalterview: { 552 ret = new TAlterViewStatement(this.vendor); 553 break; 554 } 555 case sstAlterWarehouse: { 556 ret = new TAlterWarehouseStmt(this.vendor); 557 break; 558 } 559 case sstBegin: { 560 boolean isblock = false; 561 int numOfSolidToken = 0; 562 TSourceToken st; 563 if (lcpos == lcsourcetokenlist.size() - 1) { 564 // this is the last token 565 } else { 566 for (int i = lcpos + 1; i < lcsourcetokenlist.size(); i++) { 567 st = lcsourcetokenlist.get(i); 568 if (st.issolidtoken()) { 569 numOfSolidToken++; 570 } 571 // Check for newline before semicolon - if found, must be a block 572 if (st.tokencode == TBaseType.lexnewline) { 573 isblock = true; 574 // Continue to look for semicolon to complete the check 575 } 576 577 if (st.tokencode == ';') { 578 if (numOfSolidToken <= 3) { 579 } else { 580 isblock = true; 581 } 582 break; 583 } 584 585 if (numOfSolidToken > 3) { 586 isblock = true; 587 break; 588 } 589 } 590 } 591 592 if (isblock) { 593 ret = new TCommonBlock(this.vendor); 594 gnewsqlstatementtype = ret.sqlstatementtype; 595 } else { 596 ret = new TBeginTran(this.vendor); 597 pcst.tokencode = TBaseType.rrw_snowflake_begin_transaction; 598 } 599 600 break; 601 } 602 case sstbegintran: { 603 ret = new TBeginTran(this.vendor); 604 if (pcst.tokencode == TBaseType.rrw_begin) { 605 pcst.tokencode = TBaseType.rrw_snowflake_begin_transaction; 606 } 607 break; 608 } 609 case sstcomment: { 610 ret = new TCommentOnSqlStmt(this.vendor); 611 break; 612 } 613 case sstcommit: { 614 ret = new TCommitStmt(this.vendor); 615 break; 616 } 617 case sstCopyInto: { 618 ret = new TSnowflakeCopyIntoStmt(this.vendor); 619 break; 620 } 621 case sstcreatedatabase: { 622 ret = new TCreateDatabaseSqlStatement(this.vendor); 623 break; 624 } 625 case sstCreateFileFormat: { 626 ret = new TCreateFileFormatStmt(this.vendor); 627 break; 628 } 629 case sstcreatefunction: { 630 ret = new TCreateFunctionStmt(this.vendor); 631 break; 632 } 633 case sstCreateNetworkPolicy: { 634 ret = new TCreateNetworkPolicyStmt(this.vendor); 635 break; 636 } 637 case sstCreatePipe: { 638 ret = new TCreatePipeStmt(this.vendor); 639 break; 640 } 641 case sstCreateResourceMonitor: { 642 ret = new TCreateResourceMonitorStmt(this.vendor); 643 break; 644 } 645 case sstcreaterole: { 646 ret = new TCreateRoleStmt(this.vendor); 647 break; 648 } 649 case sstcreateschema: { 650 ret = new TCreateSchemaSqlStatement(this.vendor); 651 break; 652 } 653 case sstcreatesequence: { 654 ret = new TCreateSequenceStmt(this.vendor); 655 break; 656 } 657 case sstCreateShare: { 658 ret = new TCreateShareStmt(this.vendor); 659 break; 660 } 661 case sstCreateStage: { 662 ret = new TCreateStageStmt(this.vendor); 663 break; 664 } 665 case sstcreateuser: { 666 ret = new TCreateUserStmt(this.vendor); 667 break; 668 } 669 case sstCreateWarehouse: { 670 ret = new TCreateWarehouseStmt(this.vendor); 671 break; 672 } 673 case sstDescFileFormat: 674 case sstDescFunction: 675 case sstDescNetworkPolicy: 676 case sstDescPipe: 677 case sstDescResult: 678 case sstDescShare: 679 case sstDescStage: 680 case sstDescTable: 681 case sstDescUser: 682 case sstDescView: 683 case sstDescStorage: { 684 ret = new TDescribeStmt(this.vendor); 685 break; 686 } 687 case sstdropfunction: { 688 ret = new TDropFunctionStmt(this.vendor); 689 break; 690 } 691 case sstdropdatabase: { 692 ret = new TDropDatabaseStmt(this.vendor); 693 break; 694 } 695 case sstDropFileFormat: { 696 ret = new TDropStmt(this.vendor); 697 ret.sqlstatementtype = gnewsqlstatementtype; 698 break; 699 } 700 case sstDropNetworkPolicy: { 701 ret = new TDropStmt(this.vendor); 702 ret.sqlstatementtype = gnewsqlstatementtype; 703 break; 704 } 705 case sstDropPipe: { 706 ret = new TDropStmt(this.vendor); 707 ret.sqlstatementtype = gnewsqlstatementtype; 708 break; 709 } 710 case sstDropResourceMonitor: { 711 ret = new TDropStmt(this.vendor); 712 ret.sqlstatementtype = gnewsqlstatementtype; 713 break; 714 } 715 case sstdroprole: { 716 ret = new TDropRoleStmt(this.vendor); 717 break; 718 } 719 case sstdropschema: { 720 ret = new TDropSchemaSqlStatement(this.vendor); 721 break; 722 } 723 case sstDropShare: { 724 ret = new TDropStmt(this.vendor); 725 ret.sqlstatementtype = gnewsqlstatementtype; 726 break; 727 } 728 case sstDropStage: { 729 ret = new TDropStmt(this.vendor); 730 ret.sqlstatementtype = gnewsqlstatementtype; 731 break; 732 } 733 case sstdroptable: { 734 ret = new TDropTableSqlStatement(this.vendor); 735 break; 736 } 737 case sstdropuser: { 738 ret = new TDropUserStmt(this.vendor); 739 break; 740 } 741 case sstdropview: { 742 ret = new TDropViewSqlStatement(this.vendor); 743 break; 744 } 745 case sstDropWarehouse: { 746 ret = new TDropStmt(this.vendor); 747 ret.sqlstatementtype = gnewsqlstatementtype; 748 break; 749 } 750 case sstGet: { 751 ret = new TGetStmt(this.vendor); 752 break; 753 } 754 case sstGrant: { 755 ret = new TGrantStmt(this.vendor); 756 break; 757 } 758 case sstList: { 759 ret = new TListStmt(this.vendor); 760 break; 761 } 762 case sstPut: { 763 ret = new TPutStmt(this.vendor); 764 break; 765 } 766 case sstRemove: { 767 ret = new TRemoveStmt(this.vendor); 768 break; 769 } 770 case sstRevoke: { 771 ret = new TRevokeStmt(this.vendor); 772 break; 773 } 774 case sstrollback: { 775 ret = new TRollbackStmt(this.vendor); 776 break; 777 } 778 case sstset: { 779 ret = new TSetStmt(this.vendor); 780 break; 781 } 782 case sstShowColumns: 783 case sstShowDatabases: 784 case sstShowFileFormats: 785 case sstShowFunctions: 786 case sstShowGrants: 787 case sstShowNetworkPolicies: 788 case sstShowObjects: 789 case sstShowParameters: 790 case sstShowPipes: 791 case sstShowResourceMonitors: 792 case sstShowRoles: 793 case sstShowSchemas: 794 case sstShowSequences: 795 case sstShowShares: 796 case sstShowStages: 797 case sstShowTables: 798 case sstShowTransactions: 799 case sstShowUserFunctions: 800 case sstShowUsers: 801 case sstShowVariables: 802 case sstShowViews: 803 case sstShowWarehouses: 804 case sstShowProcedures: 805 case sstShowTasks: 806 case sstShowStreams: { 807 ret = new TShowStmt(this.vendor); 808 ret.sqlstatementtype = gnewsqlstatementtype; 809 break; 810 } 811 case sstTruncate: { 812 ret = new TTruncateStatement(this.vendor); 813 break; 814 } 815 case sstUndropDatabase: 816 case sstUndropSchema: 817 case sstUndropTable: { 818 ret = new TUndropStmt(this.vendor); 819 ret.sqlstatementtype = gnewsqlstatementtype; 820 break; 821 } 822 case sstunset: { 823 ret = new TUnsetStmt(this.vendor); 824 break; 825 } 826 case sstcreatematerializedview: { 827 ret = new TCreateMaterializedSqlStatement(this.vendor); 828 break; 829 } 830 case sstoraclecreateindex: { 831 ret = new TCreateIndexSqlStatement(this.vendor); 832 break; 833 } 834 case sstoracledroptable: { 835 ret = new TDropTableSqlStatement(this.vendor); 836 break; 837 } 838 case sstoracledropview: { 839 ret = new TDropViewSqlStatement(this.vendor); 840 break; 841 } 842 case sstoracledropindex: { 843 ret = new TDropIndexSqlStatement(this.vendor); 844 break; 845 } 846 case sstaltertable: { 847 ret = new TAlterTableStatement(this.vendor); 848 break; 849 } 850 case sstoraclealtersession: { 851 ret = new TAlterSessionStatement(this.vendor); 852 break; 853 } 854 case sstplsql_createfunction: { 855 ret = new TPlsqlCreateFunction(this.vendor); 856 ret.sqlstatementtype = gnewsqlstatementtype; 857 break; 858 } 859 case sstCommentOn: { 860 ret = new TCommentOnSqlStmt(this.vendor); 861 break; 862 } 863 case sstoraclecreatesequence: { 864 ret = new TCreateSequenceStmt(this.vendor); 865 break; 866 } 867 case sstpostgresqlCreateIndex: 868 ret = new TCreateIndexSqlStatement(this.vendor); 869 break; 870 case sstpostgresqlCreateView: 871 ret = new TCreateViewSqlStatement(this.vendor); 872 break; 873 case sstpostgresqlCreateFunction: 874 ret = new TCreateFunctionStmt(this.vendor); 875 break; 876 case sstpostgresqlTruncate: 877 ret = new TTruncateStatement(this.vendor); 878 break; 879 case sstpostgresqlDropTable: 880 ret = new TDropTableSqlStatement(this.vendor); 881 break; 882 case sstcreateview: 883 ret = new TCreateViewSqlStatement(this.vendor); 884 break; 885 case sstcall: 886 ret = new TCallStatement(this.vendor); 887 break; 888 case sstSnowflakePseudoExprStmt: 889 ret = new TPseudoExprStmt(this.vendor); 890 break; 891 case sstcreateprocedure: 892 ret = new TCreateProcedureStmt(this.vendor); 893 break; 894 case sstCreateStream: 895 ret = new TCreateStreamStmt(this.vendor); 896 break; 897 case sstUse: 898 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 899 if (lcnextsolidtoken != null) { 900 if (lcnextsolidtoken.toString().equalsIgnoreCase("database")) { 901 ret = new TUseDatabase(this.vendor); 902 } else if (lcnextsolidtoken.toString().equalsIgnoreCase("role")) { 903 ret = new TUseRole(this.vendor); 904 } else if (lcnextsolidtoken.toString().equalsIgnoreCase("warehouse")) { 905 ret = new TUseWarehouse(this.vendor); 906 } else { 907 ret = new TUseSchema(this.vendor); 908 } 909 } else { 910 ret = new TUnknownSqlStatement(this.vendor); 911 ret.sqlstatementtype = gnewsqlstatementtype; 912 } 913 break; 914 case sstExecute: { 915 ret = new TExecuteSqlStatement(this.vendor); 916 break; 917 } 918 case sstAlterTask: 919 ret = new TAlterTaskStmt(this.vendor); 920 break; 921 case sstCreateTask: 922 ret = new TCreateTaskStmt(this.vendor); 923 break; 924 case sstcreatesemanticview: 925 ret = new TCreateSemanticViewStmt(this.vendor); 926 break; 927 case sstAlterMaterializedView: 928 ret = new TAlterMaterializedViewStmt(this.vendor); 929 break; 930 case sstDropMaterializedView: 931 ret = new TDropMaterializedViewStmt(this.vendor); 932 break; 933 case sstdropprocedure: 934 ret = new TDropProcedureStmt(this.vendor); 935 break; 936 case sstUseSecondaryRoles: 937 ret = new TUseSecondaryRolesStmt(this.vendor); 938 break; 939 case sstDropStreamlit: 940 ret = new TDropStmt(this.vendor); 941 break; 942 case sstDropStream: 943 ret = new TDropStreamStmt(this.vendor); 944 break; 945 default: { 946 ret = new TUnknownSqlStatement(this.vendor); 947 ret.sqlstatementtype = gnewsqlstatementtype; 948 break; 949 } 950 } 951 952 return ret; 953 } 954}