001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.postgresql.TRefreshMaterializedViewStmt; 006import gudusoft.gsqlparser.stmt.redshift.*; 007 008/** 009 * Redshift SQL command resolver. 010 * Handles Amazon Redshift SQL syntax and command recognition. 011 * 012 * @since 3.1.0.9 013 */ 014public class TSqlCmdsRedshift extends AbstractSqlCmds { 015 016 public TSqlCmdsRedshift() { 017 super(EDbVendor.dbvredshift); 018 } 019 020 @Override 021 protected void initializeCommands() { 022 // Commands sorted alphabetically 023 // Redshift is PostgreSQL-based but has its own command set 024 025 // ABORT commands 026 addCmd(TBaseType.rrw_abort, ESqlStatementType.sstredshiftAbort); 027 addCmd(TBaseType.rrw_abort, "transaction", ESqlStatementType.sstredshiftAbort); 028 addCmd(TBaseType.rrw_abort, "work", ESqlStatementType.sstredshiftAbort); 029 030 // ALTER commands (ordered: longer patterns first) 031 addCmd(TBaseType.rrw_alter, "external", "schema", ESqlStatementType.sstredshiftAlterExternalSchema); 032 addCmd(TBaseType.rrw_alter, "external", "view", ESqlStatementType.sstredshiftAlterExternalView); 033 addCmd(TBaseType.rrw_alter, "default", "privileges", ESqlStatementType.sstredshiftAlterDefaultPrivileges); 034 addCmd(TBaseType.rrw_alter, "identity", "provider", ESqlStatementType.sstredshiftAlterIdentityProvider); 035 addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstredshiftAlterMaterializedView); 036 addCmd(TBaseType.rrw_alter, "masking", ESqlStatementType.sstredshiftAlterMaskingPolicy); 037 addCmd(TBaseType.rrw_alter, "rls", ESqlStatementType.sstredshiftAlterRlsPolicy); 038 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase); 039 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstredshiftAlterFunction); 040 addCmd(TBaseType.rrw_alter, "group", ESqlStatementType.sstredshiftAlterGroup); 041 addCmd(TBaseType.rrw_alter, "datashare", ESqlStatementType.sstredshiftAlterDatashare); 042 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstredshiftAlterProcedure); 043 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstredshiftAlterRole); 044 addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstredshiftAlterSchema); 045 addCmd(TBaseType.rrw_alter, "system", ESqlStatementType.sstredshiftAlterSystem); 046 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 047 addCmd(TBaseType.rrw_alter, "template", ESqlStatementType.sstredshiftAlterTemplate); 048 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstredshiftAlterUser); 049 050 // ATTACH commands 051 addCmd(TBaseType.rrw_redshift_attach, "rls", ESqlStatementType.sstredshiftAttachRlsPolicy); 052 addCmd(TBaseType.rrw_redshift_attach, "masking", ESqlStatementType.sstredshiftAttachMaskingPolicy); 053 054 // ANALYZE commands (longer pattern first) 055 addCmd(TBaseType.rrw_analyze, "Compression", ESqlStatementType.sstredshiftAnalyzeCompression); 056 addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstredshiftAnalyze); 057 058 // BEGIN 059 addCmd(TBaseType.rrw_begin, ESqlStatementType.sstredshiftBegin); 060 061 // CALL 062 addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall); 063 064 // CANCEL 065 addCmd(TBaseType.rrw_redshift_cancel, ESqlStatementType.sstredshiftCancel); 066 067 // CLOSE 068 addCmd(TBaseType.rrw_close, ESqlStatementType.sstredshiftClose); 069 070 // COMMENT 071 addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstredshiftComment); 072 073 // COMMIT 074 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstredshiftCommit); 075 076 // COPY (longer patterns first) 077 addCmd(TBaseType.rrw_redshift_copy, "job", ESqlStatementType.sstredshiftCopyJob); 078 addCmd(TBaseType.rrw_redshift_copy, ESqlStatementType.sstredshiftCopy); 079 080 // DETACH commands 081 addCmd(TBaseType.rrw_redshift_detach, "rls", ESqlStatementType.sstredshiftDetachRlsPolicy); 082 addCmd(TBaseType.rrw_redshift_detach, "masking", ESqlStatementType.sstredshiftDetachMaskingPolicy); 083 084 // CREATE commands (ordered: longer patterns first) 085 addCmd(TBaseType.rrw_create, "external", "protected", "view", ESqlStatementType.sstredshiftCreateExternalView); 086 addCmd(TBaseType.rrw_create, "external", "function", ESqlStatementType.sstredshiftCreateExternalFunction); 087 addCmd(TBaseType.rrw_create, "external", "view", ESqlStatementType.sstredshiftCreateExternalView); 088 addCmd(TBaseType.rrw_create, "or", "replace", "external", "function", ESqlStatementType.sstredshiftCreateExternalFunction); 089 addCmd(TBaseType.rrw_create, "or", "replace", "materialized", "view", ESqlStatementType.sstcreatematerializedview); 090 addCmd(TBaseType.rrw_create, "or", "replace", "library", ESqlStatementType.sstredshiftCreateLibrary); 091 addCmd(TBaseType.rrw_create, "or", "replace", "template", ESqlStatementType.sstredshiftCreateTemplate); 092 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 093 addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable); 094 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure); 095 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction); 096 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview); 097 addCmd(TBaseType.rrw_create, "identity", "provider", ESqlStatementType.sstredshiftCreateIdentityProvider); 098 addCmd(TBaseType.rrw_create, "masking", "policies", ESqlStatementType.sstredshiftCreateMaskingPolicy); 099 addCmd(TBaseType.rrw_create, "masking", "policy", ESqlStatementType.sstredshiftCreateMaskingPolicy); 100 addCmd(TBaseType.rrw_create, "external", "schema", ESqlStatementType.sstredshiftCreateSchema); 101 addCmd(TBaseType.rrw_create, "external", "model", ESqlStatementType.sstredshiftCreateExternalModel); 102 addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstcreatetable); 103 addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable); 104 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable); 105 addCmd(TBaseType.rrw_create, "local", "table", ESqlStatementType.sstcreatetable); 106 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview); 107 addCmd(TBaseType.rrw_create, "rls", "policies", ESqlStatementType.sstredshiftCreateRlsPolicy); 108 addCmd(TBaseType.rrw_create, "rls", "policy", ESqlStatementType.sstredshiftCreateRlsPolicy); 109 addCmd(TBaseType.rrw_create, "datashare", ESqlStatementType.sstredshiftCreateDatashare); 110 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase); 111 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction); 112 addCmd(TBaseType.rrw_create, "group", ESqlStatementType.sstredshiftCreateGroup); 113 addCmd(TBaseType.rrw_create, "library", ESqlStatementType.sstredshiftCreateLibrary); 114 addCmd(TBaseType.rrw_create, "model", ESqlStatementType.sstredshiftCreateModel); 115 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 116 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstredshiftCreateRole); 117 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstredshiftCreateSchema); 118 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 119 addCmd(TBaseType.rrw_create, "template", ESqlStatementType.sstredshiftCreateTemplate); 120 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstredshiftCreateUser); 121 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview); 122 123 // DESC 124 addCmd(TBaseType.rrw_redshift_desc, "identity", "provider", ESqlStatementType.sstredshiftDescIdentityProvider); 125 addCmd(TBaseType.rrw_redshift_desc, "datashare", ESqlStatementType.sstredshiftDescDatashare); 126 127 // DEALLOCATE 128 addCmd(TBaseType.rrw_deallocate, ESqlStatementType.sstredshiftDeallocate); 129 130 // DECLARE 131 addCmd(TBaseType.rrw_declare, ESqlStatementType.sstredshiftDeclare); 132 133 // DELETE 134 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 135 136 // DROP commands (ordered: longer patterns first) 137 addCmd(TBaseType.rrw_drop, "external", "view", ESqlStatementType.sstredshiftDropExternalView); 138 addCmd(TBaseType.rrw_drop, "identity", "provider", ESqlStatementType.sstredshiftDropIdentityProvider); 139 addCmd(TBaseType.rrw_drop, "masking", "policies", ESqlStatementType.sstredshiftDropMaskingPolicy); 140 addCmd(TBaseType.rrw_drop, "masking", "policy", ESqlStatementType.sstredshiftDropMaskingPolicy); 141 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstredshiftDropMaterializedView); 142 addCmd(TBaseType.rrw_drop, "rls", "policies", ESqlStatementType.sstredshiftDropRlsPolicy); 143 addCmd(TBaseType.rrw_drop, "rls", "policy", ESqlStatementType.sstredshiftDropRlsPolicy); 144 addCmd(TBaseType.rrw_drop, "datashare", ESqlStatementType.sstredshiftDropDatashare); 145 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstredshiftDropDatabase); 146 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstredshiftDropFunction); 147 addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstredshiftDropGroup); 148 addCmd(TBaseType.rrw_drop, "library", ESqlStatementType.sstredshiftDropLibrary); 149 addCmd(TBaseType.rrw_drop, "model", ESqlStatementType.sstredshiftDropModel); 150 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstredshiftDropProcedure); 151 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstredshiftDropRole); 152 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstredshiftDropSchema); 153 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable); 154 addCmd(TBaseType.rrw_drop, "template", ESqlStatementType.sstredshiftDropTemplate); 155 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstredshiftDropUser); 156 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview); 157 158 // END 159 addCmd(TBaseType.rrw_end, ESqlStatementType.sstredshiftEnd); 160 161 // EXECUTE 162 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstExecutePreparedStmt); 163 164 // EXPLAIN 165 addCmd(TBaseType.rrw_explain, ESqlStatementType.sstExplain); 166 167 // FETCH 168 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstFetchFrom); 169 170 // GRANT 171 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant); 172 173 // INSERT 174 addCmd(TBaseType.rrw_insert, "into", ESqlStatementType.sstinsert); 175 176 // LOCK 177 addCmd(TBaseType.rrw_lock, ESqlStatementType.sstredshiftLock); 178 179 // MERGE 180 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 181 182 // PREPARE 183 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstredshiftPrepare); 184 185 // REFRESH 186 addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 187 188 // RESET 189 addCmd(TBaseType.rrw_reset, ESqlStatementType.sstredshiftReset); 190 191 // REVOKE 192 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke); 193 194 // ROLLBACK 195 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstredshiftRollback); 196 197 // SELECT 198 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 199 200 // SET commands (ordered: longer patterns first) 201 addCmd(TBaseType.rrw_set, "local", "Authorization", ESqlStatementType.sstredshiftSetSessionAuthorization); 202 addCmd(TBaseType.rrw_set, "Characteristics", ESqlStatementType.sstredshiftSetSessionCharacteristics); 203 addCmd(TBaseType.rrw_set, "Authorization", ESqlStatementType.sstredshiftSetSessionAuthorization); 204 addCmd(TBaseType.rrw_set, ESqlStatementType.sstredshiftSet); 205 206 // SHOW 207 addCmd(TBaseType.rrw_show, ESqlStatementType.sstredshiftShow); 208 209 // START TRANSACTION 210 addCmd(TBaseType.rrw_start, "Transaction", ESqlStatementType.sstStartTransaction); 211 212 // TRUNCATE 213 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstTruncate); 214 215 // UNLOAD 216 addCmd(TBaseType.rrw_redshift_unload, ESqlStatementType.sstredshiftUnload); 217 218 // UPDATE 219 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 220 221 // USE 222 addCmd(TBaseType.rrw_use, "database", ESqlStatementType.sstUseDatabase); 223 addCmd(TBaseType.rrw_use, "schema", ESqlStatementType.sstUseDatabase); 224 addCmd(TBaseType.rrw_use, ESqlStatementType.sstUseDatabase); 225 226 // VACUUM 227 addCmd(TBaseType.rrw_redshift_vacuum, ESqlStatementType.sstredshiftVacuum); 228 } 229 230 @Override 231 protected String getToken1Str(int token1) { 232 // Handle vendor-specific reserved words (token codes > TBaseType.rrw_abort) 233 switch (token1) { 234 case TBaseType.rrw_redshift_desc: 235 return "desc"; 236 case TBaseType.rrw_redshift_cancel: 237 return "cancel"; 238 case TBaseType.rrw_redshift_copy: 239 return "copy"; 240 case TBaseType.rrw_redshift_unload: 241 return "unload"; 242 case TBaseType.rrw_redshift_vacuum: 243 return "vacuum"; 244 case TBaseType.rrw_redshift_attach: 245 return "attach"; 246 case TBaseType.rrw_redshift_detach: 247 return "detach"; 248 case TBaseType.rrw_redshift_library: 249 return "library"; 250 default: 251 return null; 252 } 253 } 254 255 @Override 256 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 257 TCustomSqlStatement ret = null; 258 259 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 260 261 // Skip comments, whitespace, and semicolons 262 if ((token.tokencode == TBaseType.cmtdoublehyphen) 263 || (token.tokencode == TBaseType.cmtslashstar) 264 || (token.tokencode == TBaseType.lexspace) 265 || (token.tokencode == TBaseType.lexnewline) 266 || (token.tokentype == ETokenType.ttsemicolon)) { 267 return null; 268 } 269 270 int lcpos = token.posinlist; 271 TSourceTokenList lcsourcetokenlist = token.container; 272 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 273 274 // Subquery after semicolon or at first line 275 if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) { 276 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 277 if (k > 0) { 278 ret = new TSelectSqlStatement(this.vendor); 279 } 280 return ret; 281 } 282 283 // CTE (Common Table Expression) 284 if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) { 285 ret = findcte(token); 286 if (ret != null) return ret; 287 } 288 289 gnewsqlstatementtype = getStatementTypeForToken(token); 290 291 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 292 293 switch (gnewsqlstatementtype) { 294 case sstinvalid: 295 ret = null; 296 break; 297 298 case sstselect: { 299 boolean lcisnewsql = true; 300 301 if (state != EFindSqlStateType.stnormal) { 302 if (lcprevsolidtoken != null) { 303 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 304 lcisnewsql = false; // subquery 305 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 306 lcisnewsql = false; 307 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 308 lcisnewsql = false; 309 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 310 lcisnewsql = false; 311 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 312 lcisnewsql = false; 313 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 314 lcisnewsql = false; 315 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 316 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 317 lcisnewsql = false; 318 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 319 lcisnewsql = false; 320 } 321 322 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 323 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 324 if (lcpprevsolidtoken != null) { 325 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 326 lcisnewsql = false; 327 } 328 } 329 } 330 331 if (lccurrentsqlstatement != null) { 332 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 333 lcisnewsql = false; 334 } 335 } 336 337 if (lcisnewsql) 338 ret = new TSelectSqlStatement(this.vendor); 339 340 break; 341 } 342 343 case sstinsert: { 344 ret = new TInsertSqlStatement(this.vendor); 345 break; 346 } 347 348 case sstupdate: { 349 boolean lcisnewsql = true; 350 if (state != EFindSqlStateType.stnormal) { 351 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 352 if (lcprevsolidtoken != null) { 353 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 354 lcisnewsql = false; 355 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 356 lcisnewsql = false; 357 } 358 359 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 360 if (lcnextsolidtoken != null) { 361 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 362 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 363 if (k == 0) lcisnewsql = false; 364 } 365 } 366 } 367 368 if (lcisnewsql) { 369 ret = new TUpdateSqlStatement(this.vendor); 370 ret.dummytag = 1; // means set clause in update is not found yet 371 } 372 break; 373 } 374 375 case sstdelete: { 376 boolean lcisnewsql = true; 377 378 if (state != EFindSqlStateType.stnormal) { 379 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 380 if (lcprevsolidtoken != null) { 381 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 382 lcisnewsql = false; 383 } 384 } 385 386 if (lcisnewsql) 387 ret = new TDeleteSqlStatement(this.vendor); 388 389 break; 390 } 391 392 case sstredshiftAbort: 393 ret = new TRedshiftAbort(this.vendor); 394 ret.sqlstatementtype = gnewsqlstatementtype; 395 break; 396 397 case sstalterdatabase: 398 ret = new TAlterDatabaseStmt(this.vendor); 399 break; 400 401 case sstredshiftAlterGroup: 402 ret = new TAlterGroup(this.vendor); 403 break; 404 405 case sstredshiftAlterSchema: 406 ret = new TRedshiftAlterSchema(this.vendor); 407 break; 408 409 case sstaltertable: 410 ret = new TAlterTableStatement(this.vendor); 411 break; 412 413 case sstredshiftAlterUser: 414 ret = new TRedshiftAlterUser(this.vendor); 415 break; 416 417 case sstredshiftAnalyze: 418 ret = new TRedshiftAnalyze(this.vendor); 419 break; 420 421 case sstredshiftAnalyzeCompression: 422 ret = new TRedshiftAnalyzeCompression(this.vendor); 423 break; 424 425 case sstredshiftBegin: 426 ret = new TRedshiftBegin(this.vendor); 427 break; 428 429 case sstredshiftCancel: 430 ret = new TRedshiftCancel(this.vendor); 431 break; 432 433 case sstredshiftClose: 434 ret = new TCloseStmt(this.vendor); 435 break; 436 437 case sstredshiftComment: 438 ret = new TRedshiftComment(this.vendor); 439 break; 440 441 case sstredshiftCommit: 442 ret = new TRedshiftCommit(this.vendor); 443 break; 444 445 case sstredshiftCopy: 446 ret = new TRedshiftCopy(this.vendor); 447 break; 448 449 case sstcreatedatabase: 450 ret = new TCreateDatabaseSqlStatement(this.vendor); 451 break; 452 453 case sstredshiftCreateGroup: 454 ret = new TCreateGroup(this.vendor); 455 break; 456 457 case sstredshiftCreateRole: 458 case sstredshiftAlterRole: 459 case sstredshiftDropRole: 460 case sstredshiftCreateDatashare: 461 case sstredshiftAlterDatashare: 462 case sstredshiftDropDatashare: 463 case sstredshiftDescDatashare: 464 case sstredshiftCreateRlsPolicy: 465 case sstredshiftAttachRlsPolicy: 466 case sstredshiftDetachRlsPolicy: 467 case sstredshiftDropRlsPolicy: 468 case sstredshiftAlterRlsPolicy: 469 case sstredshiftCreateMaskingPolicy: 470 case sstredshiftAlterMaskingPolicy: 471 case sstredshiftAttachMaskingPolicy: 472 case sstredshiftDetachMaskingPolicy: 473 case sstredshiftDropMaskingPolicy: 474 case sstredshiftCreateIdentityProvider: 475 case sstredshiftAlterIdentityProvider: 476 case sstredshiftDropIdentityProvider: 477 case sstredshiftDescIdentityProvider: 478 case sstredshiftCreateModel: 479 case sstredshiftCreateExternalModel: 480 case sstredshiftDropModel: 481 case sstredshiftAlterDefaultPrivileges: 482 case sstredshiftCreateLibrary: 483 case sstredshiftDropLibrary: 484 case sstredshiftAlterFunction: 485 case sstredshiftDropFunction: 486 case sstredshiftAlterProcedure: 487 case sstredshiftDropProcedure: 488 case sstredshiftAlterSystem: 489 case sstredshiftDropMaterializedView: 490 case sstredshiftAlterMaterializedView: 491 case sstredshiftCreateExternalView: 492 case sstredshiftAlterExternalView: 493 case sstredshiftDropExternalView: 494 case sstredshiftAlterExternalSchema: 495 case sstredshiftCopyJob: 496 ret = new TUnknownSqlStatement(this.vendor); 497 ret.sqlstatementtype = gnewsqlstatementtype; 498 break; 499 500 case sstredshiftCreateSchema: 501 ret = new TCreateSchemaSqlStatement(this.vendor); 502 break; 503 504 case sstcreatetable: 505 ret = new TCreateTableSqlStatement(this.vendor); 506 break; 507 508 case sstredshiftCreateUser: 509 ret = new TRedshiftCreateUser(this.vendor); 510 break; 511 512 case sstredshiftCreateTemplate: 513 case sstredshiftAlterTemplate: 514 case sstredshiftDropTemplate: 515 case sstredshiftCreateExternalFunction: 516 ret = new TUnknownSqlStatement(this.vendor); 517 ret.sqlstatementtype = gnewsqlstatementtype; 518 break; 519 520 case sstcreateview: 521 ret = new TCreateViewSqlStatement(this.vendor); 522 break; 523 524 case sstredshiftDeallocate: 525 ret = new TRedshiftDeallocate(this.vendor); 526 break; 527 528 case sstredshiftDeclare: 529 ret = new TRedshiftDeclare(this.vendor); 530 break; 531 532 case sstredshiftDropDatabase: 533 ret = new TDropDatabaseStmt(this.vendor); 534 break; 535 536 case sstredshiftDropGroup: 537 ret = new TDropGroup(this.vendor); 538 break; 539 540 case sstredshiftDropSchema: 541 ret = new TRedshiftDropSchema(this.vendor); 542 break; 543 544 case sstdroptable: 545 ret = new TDropTableSqlStatement(this.vendor); 546 break; 547 548 case sstredshiftDropUser: 549 ret = new TRedshiftDropUser(this.vendor); 550 break; 551 552 case sstdropview: 553 ret = new TDropViewSqlStatement(this.vendor); 554 break; 555 556 case sstredshiftEnd: 557 ret = new TRedshiftEnd(this.vendor); 558 break; 559 560 case sstExecutePreparedStmt: 561 ret = new TExecuteSqlStatement(this.vendor); 562 break; 563 564 case sstExplain: 565 ret = new TExplainPlan(this.vendor); 566 break; 567 568 case sstFetchFrom: 569 ret = new TFetchFromStmt(this.vendor); 570 break; 571 572 case sstGrant: 573 ret = new TGrantStmt(this.vendor); 574 break; 575 576 case sstredshiftLock: 577 ret = new TLockTableStmt(this.vendor); 578 break; 579 580 case sstredshiftPrepare: 581 ret = new TRedshiftPrepare(this.vendor); 582 break; 583 584 case sstredshiftReset: 585 ret = new TRedshiftReset(this.vendor); 586 break; 587 588 case sstRevoke: 589 ret = new TRevokeStmt(this.vendor); 590 break; 591 592 case sstredshiftRollback: 593 ret = new TRedshiftRollback(this.vendor); 594 break; 595 596 case sstredshiftSet: 597 ret = new TSetStmt(this.vendor); 598 break; 599 600 case sstredshiftSetSessionAuthorization: 601 ret = new TRedshiftSessionAuthorization(this.vendor); 602 break; 603 604 case sstredshiftShow: 605 ret = new TShowStmt(this.vendor); 606 break; 607 608 case sstStartTransaction: { 609 boolean lcisnewsql = true; 610 if (state != EFindSqlStateType.stnormal) { 611 // Inside another statement - START WITH is hierarchical clause, not START TRANSACTION 612 lcisnewsql = false; 613 } 614 if (lcisnewsql) 615 ret = new TStartTransactionStmt(this.vendor); 616 break; 617 } 618 619 case sstTruncate: 620 ret = new TTruncateStatement(this.vendor); 621 break; 622 623 case sstredshiftUnload: 624 ret = new TUnloadStmt(this.vendor); 625 break; 626 627 case sstredshiftVacuum: 628 ret = new TRedshiftVacuum(this.vendor); 629 break; 630 631 case sstcreatefunction: 632 ret = new TCreateFunctionStmt(this.vendor); 633 break; 634 635 case sstcreateprocedure: 636 ret = new TCreateProcedureStmt(this.vendor); 637 break; 638 639 case sstcreatematerializedview: 640 ret = new TCreateMaterializedSqlStatement(this.vendor); 641 break; 642 643 case sstcall: 644 ret = new TCallStatement(this.vendor); 645 break; 646 647 case sstmerge: 648 ret = new TMergeSqlStatement(this.vendor); 649 break; 650 651 case sstpostgresqlRefreshMaterializedView: 652 ret = new TRefreshMaterializedViewStmt(this.vendor); 653 break; 654 655 case sstUseDatabase: 656 ret = new TUnknownSqlStatement(this.vendor); 657 ret.sqlstatementtype = gnewsqlstatementtype; 658 break; 659 660 default: 661 ret = new TUnknownSqlStatement(this.vendor); 662 ret.sqlstatementtype = gnewsqlstatementtype; 663 break; 664 } 665 666 return ret; 667 } 668}