001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.hana.*; 006 007/** 008 * SAP HANA SQL command resolver. 009 * Contains all HANA-specific SQL command recognition logic. 010 * 011 * @since 3.1.0.9 012 */ 013public class TSqlCmdsHana extends AbstractSqlCmds { 014 015 // Temporary field for statement type during issql processing 016 private ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid; 017 018 public TSqlCmdsHana() { 019 super(EDbVendor.dbvhana); 020 } 021 022 @Override 023 protected String getToken1Str(int token1) { 024 // HANA vendor-specific reserved words requiring token1Str mapping 025 switch (token1) { 026 case TBaseType.rrw_hana_unset: 027 return "unset"; 028 case TBaseType.rrw_hana_upsert: 029 return "upsert"; 030 case TBaseType.rrw_hana_import: 031 return "import"; 032 case TBaseType.rrw_hana_export: 033 return "export"; 034 case TBaseType.rrw_hana_recover: 035 return "recover"; 036 case TBaseType.rrw_hana_unload: 037 return "unload"; 038 case TBaseType.rrw_hana_validate: 039 return "validate"; 040 default: 041 return null; 042 } 043 } 044 045 @Override 046 protected void initializeCommands() { 047 // ALTER commands 048 addCmd(TBaseType.rrw_alter, "audit", "policy", ESqlStatementType.sstalterauditpolicy); 049 addCmd(TBaseType.rrw_alter, "clientside", ESqlStatementType.ssthanaalterclientsidekey); 050 addCmd(TBaseType.rrw_alter, "collection", ESqlStatementType.ssthanaaltercollection); 051 addCmd(TBaseType.rrw_alter, "library", ESqlStatementType.ssthanaalterlibrary); 052 addCmd(TBaseType.rrw_alter, "credential", ESqlStatementType.sstaltercredential); 053 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase); 054 addCmd(TBaseType.rrw_alter, "fulltext", "index", ESqlStatementType.sstalterfulltextindex); 055 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstalterfunction); 056 addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstalterindex); 057 addCmd(TBaseType.rrw_alter, "ldap", "provider", ESqlStatementType.sstalterldapprovider); 058 addCmd(TBaseType.rrw_alter, "jwt", "provider", ESqlStatementType.sstalterjwtprovider); 059 addCmd(TBaseType.rrw_alter, "pse", ESqlStatementType.sstalterpse); 060 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstalterprocedure); 061 addCmd(TBaseType.rrw_alter, "remote", "source", ESqlStatementType.sstalterremotesource); 062 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstAlterRole); 063 addCmd(TBaseType.rrw_alter, "saml", "provider", ESqlStatementType.sstaltersamlprovider); 064 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstaltersequence); 065 addCmd(TBaseType.rrw_alter, "statistics", ESqlStatementType.sstalterstatistics); 066 addCmd(TBaseType.rrw_alter, "structured", "privilege", ESqlStatementType.sstalterstructuredprivilege); 067 addCmd(TBaseType.rrw_alter, "system", ESqlStatementType.sstaltersystem); 068 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 069 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstalteruser); 070 addCmd(TBaseType.rrw_alter, "usergroup", ESqlStatementType.sstalterusergroup); 071 addCmd(TBaseType.rrw_alter, "view", "cache", ESqlStatementType.sstalterviewcache); 072 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstalterview); 073 addCmd(TBaseType.rrw_alter, "virtual", "table", ESqlStatementType.sstaltervirtualtable); 074 addCmd(TBaseType.rrw_alter, "workload", "class", ESqlStatementType.sstalterworkloadclass); 075 addCmd(TBaseType.rrw_alter, "workload", "mapping", ESqlStatementType.sstalterworkloadmapping); 076 077 // BACKUP commands 078 addCmd(TBaseType.rrw_backup, "cancel", ESqlStatementType.sstbackupcancel); 079 addCmd(TBaseType.rrw_backup, "catalog", "delete", ESqlStatementType.sstbackupcatalogdelete); 080 addCmd(TBaseType.rrw_backup, "check", "access", ESqlStatementType.sstbackupcheckaccess); 081 addCmd(TBaseType.rrw_backup, "check", ESqlStatementType.sstbackupcheck); 082 addCmd(TBaseType.rrw_backup, "data", ESqlStatementType.sstbackupdata); 083 addCmd(TBaseType.rrw_backup, "list", "data", ESqlStatementType.sstbackuplistdata); 084 085 // CALL command 086 addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall); 087 088 // COMMENT/COMMIT/CONNECT commands 089 addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstcomment); 090 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstcommit); 091 addCmd(TBaseType.rrw_connect, ESqlStatementType.sstconnect); 092 093 // CREATE commands - ordered with longer patterns first 094 addCmd(TBaseType.rrw_create, "audit", "policy", ESqlStatementType.sstcreateauditpolicy); 095 addCmd(TBaseType.rrw_create, "btree", "index", ESqlStatementType.sstcreateindex); 096 addCmd(TBaseType.rrw_create, "certificate", ESqlStatementType.sstcreatecertificate); 097 addCmd(TBaseType.rrw_create, "clientside", ESqlStatementType.ssthanacreateclientsidekey); 098 addCmd(TBaseType.rrw_create, "library", ESqlStatementType.ssthanacreatelibrary); 099 addCmd(TBaseType.rrw_create, "or", "replace", "library", ESqlStatementType.ssthanacreatelibrary); 100 addCmd(TBaseType.rrw_create, "projection", "view", ESqlStatementType.ssthanacreateprojectionview); 101 addCmd(TBaseType.rrw_create, "or", "replace", "projection", ESqlStatementType.ssthanacreateprojectionview); 102 addCmd(TBaseType.rrw_create, "collection", ESqlStatementType.sstcreatecollection); 103 addCmd(TBaseType.rrw_create, "column", "table", ESqlStatementType.sstcreatetable); 104 addCmd(TBaseType.rrw_create, "cpbtree", "index", ESqlStatementType.sstcreateindex); 105 addCmd(TBaseType.rrw_create, "credential", ESqlStatementType.sstcreatecredential); 106 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase); 107 addCmd(TBaseType.rrw_create, "fulltext", "index", ESqlStatementType.sstcreatefulltextindex); 108 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction); 109 addCmd(TBaseType.rrw_create, "global", "temporary", "column", "table", ESqlStatementType.sstcreatetable); 110 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 111 addCmd(TBaseType.rrw_create, "graph", "workspace", ESqlStatementType.sstcreategraphworkspace); 112 addCmd(TBaseType.rrw_create, "history", "column", "table", ESqlStatementType.sstcreatetable); 113 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstcreateindex); 114 addCmd(TBaseType.rrw_create, "jwt", "provider", ESqlStatementType.sstcreateJWTProvider); 115 addCmd(TBaseType.rrw_create, "ldap", "provider", ESqlStatementType.sstcreateLDAPProvider); 116 addCmd(TBaseType.rrw_create, "local", "temporary", "column", "table", ESqlStatementType.sstcreatetable); 117 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 118 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editionable", "view", ESqlStatementType.sstcreateview); 119 addCmd(TBaseType.rrw_create, "or", "replace", "public", "synonym", ESqlStatementType.sstcreatesynonym); 120 addCmd(TBaseType.rrw_create, "or", "replace", "synonym", ESqlStatementType.sstcreatesynonym); 121 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview); 122 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 123 addCmd(TBaseType.rrw_create, "pse", ESqlStatementType.sstcreatepse); 124 addCmd(TBaseType.rrw_create, "public", "synonym", ESqlStatementType.sstcreatesynonym); 125 addCmd(TBaseType.rrw_create, "remote", "source", ESqlStatementType.sstcreateremotesource); 126 addCmd(TBaseType.rrw_create, "restricted", "user", ESqlStatementType.sstcreateuser); 127 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole); 128 addCmd(TBaseType.rrw_create, "row", "table", ESqlStatementType.sstcreatetable); 129 addCmd(TBaseType.rrw_create, "saml", "provider", ESqlStatementType.sstcreatesamlprovider); 130 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstcreateschema); 131 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstcreatesequence); 132 addCmd(TBaseType.rrw_create, "statistics", ESqlStatementType.sstcreatestatistics); 133 addCmd(TBaseType.rrw_create, "structured", "privilege", ESqlStatementType.sstcreatestructuredprivilege); 134 addCmd(TBaseType.rrw_create, "synonym", ESqlStatementType.sstcreatesynonym); 135 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 136 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger); 137 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstcreatetype); 138 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstcreateindex); 139 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstcreateuser); 140 addCmd(TBaseType.rrw_create, "usergroup", ESqlStatementType.sstcreateusergroup); 141 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview); 142 addCmd(TBaseType.rrw_create, "virtual", "function", ESqlStatementType.sstcreatevirtualfunction); 143 addCmd(TBaseType.rrw_create, "virtual", "table", ESqlStatementType.sstcreatevirtualtable); 144 addCmd(TBaseType.rrw_create, "workload", "class", ESqlStatementType.sstcreateworkloadclass); 145 addCmd(TBaseType.rrw_create, "workload", "mapping", ESqlStatementType.sstcreateworkloadmapping); 146 147 // DELETE command 148 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 149 150 // DO command 151 addCmd(TBaseType.rrw_do, "begin", ESqlStatementType.sstdobeginend); 152 153 // DROP commands - ordered with longer patterns first 154 addCmd(TBaseType.rrw_drop, "audit", "policy", ESqlStatementType.sstdropauditpolicy); 155 addCmd(TBaseType.rrw_drop, "certificate", ESqlStatementType.sstdropcertificate); 156 addCmd(TBaseType.rrw_drop, "clientside", ESqlStatementType.ssthanadropclientsidekey); 157 addCmd(TBaseType.rrw_drop, "library", ESqlStatementType.ssthanadroplibrary); 158 addCmd(TBaseType.rrw_drop, "collection", ESqlStatementType.sstdropcollection); 159 addCmd(TBaseType.rrw_drop, "credential", ESqlStatementType.sstdropcredential); 160 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstdropdatabase); 161 addCmd(TBaseType.rrw_drop, "fulltext", "index", ESqlStatementType.sstdropfulltextindex); 162 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstdropfunction); 163 addCmd(TBaseType.rrw_drop, "graph", "workspace", ESqlStatementType.sstdropgraphworkspace); 164 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex); 165 addCmd(TBaseType.rrw_drop, "jwt", "provider", ESqlStatementType.sstdropJWTProvider); 166 addCmd(TBaseType.rrw_drop, "ldap", "provider", ESqlStatementType.sstdropLDAPProvider); 167 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstdropprocedure); 168 addCmd(TBaseType.rrw_drop, "pse", ESqlStatementType.sstdroppse); 169 addCmd(TBaseType.rrw_drop, "public", "synonym", ESqlStatementType.sstdropsynonym); 170 addCmd(TBaseType.rrw_drop, "remote", "source", ESqlStatementType.sstdropremotesource); 171 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstdroprole); 172 addCmd(TBaseType.rrw_drop, "saml", "provider", ESqlStatementType.sstdropsamlprovider); 173 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstdropschema); 174 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstdropsequence); 175 addCmd(TBaseType.rrw_drop, "statistics", ESqlStatementType.sstdropstatistics); 176 addCmd(TBaseType.rrw_drop, "structured", "privilege", ESqlStatementType.sstdropstructuredprivilege); 177 addCmd(TBaseType.rrw_drop, "synonym", ESqlStatementType.sstdropsynonym); 178 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable); 179 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstdroptrigger); 180 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstdroptype); 181 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstdropuser); 182 addCmd(TBaseType.rrw_drop, "usergroup", ESqlStatementType.sstdropusergroup); 183 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview); 184 addCmd(TBaseType.rrw_drop, "workload", "class", ESqlStatementType.sstdropworkloadclass); 185 addCmd(TBaseType.rrw_drop, "workload", "mapping", ESqlStatementType.sstdropworkloadmapping); 186 187 // EXPLAIN/EXPORT commands 188 addCmd(TBaseType.rrw_explain, "plan", ESqlStatementType.sstExplain); 189 addCmd(TBaseType.rrw_hana_export, ESqlStatementType.sstexport); 190 191 // GRANT command 192 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant); 193 194 // IMPORT commands 195 addCmd(TBaseType.rrw_hana_import, "from", ESqlStatementType.sstimportfrom); 196 addCmd(TBaseType.rrw_hana_import, "scan", ESqlStatementType.sstimportscan); 197 addCmd(TBaseType.rrw_hana_import, ESqlStatementType.sstimport); 198 199 // INSERT command 200 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 201 202 // LOAD/LOCK commands 203 addCmd(TBaseType.rrw_load, ESqlStatementType.sstload); 204 addCmd(TBaseType.rrw_lock, "table", ESqlStatementType.sstlocktable); 205 206 // MERGE commands 207 addCmd(TBaseType.rrw_merge, "history", "delta", ESqlStatementType.sstmergedelta); 208 addCmd(TBaseType.rrw_merge, "delta", ESqlStatementType.sstmergedelta); 209 addCmd(TBaseType.rrw_merge, "into", ESqlStatementType.sstmerge); 210 211 // RECOVER commands 212 addCmd(TBaseType.rrw_hana_recover, "database", ESqlStatementType.sstrecoverdatabase); 213 addCmd(TBaseType.rrw_hana_recover, "encryption", ESqlStatementType.ssthanarecoverencryptionrootkeys); 214 addCmd(TBaseType.rrw_hana_recover, "data", ESqlStatementType.sstrecoverdata); 215 216 // REFRESH/RENAME commands 217 addCmd(TBaseType.rrw_refresh, "statistics", ESqlStatementType.sstrefreshstatistics); 218 addCmd(TBaseType.rrw_refresh, "view", ESqlStatementType.ssthanarefreshview); 219 addCmd(TBaseType.rrw_rename, "collection", ESqlStatementType.sstrenamecollection); 220 addCmd(TBaseType.rrw_rename, "column", ESqlStatementType.sstrenamecolumn); 221 addCmd(TBaseType.rrw_rename, "database", ESqlStatementType.sstrenamedatabase); 222 addCmd(TBaseType.rrw_rename, "index", ESqlStatementType.sstrenameindex); 223 addCmd(TBaseType.rrw_rename, "table", ESqlStatementType.sstrenametable); 224 addCmd(TBaseType.rrw_rename, "schema", ESqlStatementType.ssthanarenameschema); 225 226 // REPLACE command 227 addCmd(TBaseType.rrw_replace, ESqlStatementType.sstreplace); 228 229 // REVOKE/ROLLBACK commands 230 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke); 231 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstrollback); 232 233 // SAVEPOINT command 234 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstsavepoint); 235 236 // SELECT command 237 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 238 239 // SET commands - ordered with longer patterns first 240 addCmd(TBaseType.rrw_set, "history", "session", ESqlStatementType.sssethistorysession); 241 addCmd(TBaseType.rrw_set, "pse", ESqlStatementType.sstsetpse); 242 addCmd(TBaseType.rrw_set, "schema", ESqlStatementType.sstsetschema); 243 addCmd(TBaseType.rrw_set, "system", "license", ESqlStatementType.sstsetsystemlicense); 244 addCmd(TBaseType.rrw_set, "transaction", "autocommit", ESqlStatementType.sstsettransactionautocommit); 245 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstsettransaction); 246 addCmd(TBaseType.rrw_set, ESqlStatementType.sstset); 247 248 // START TRANSACTION command 249 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstStartTransaction); 250 251 // TRUNCATE commands 252 addCmd(TBaseType.rrw_truncate, "collection", ESqlStatementType.ssttruncatecollection); 253 addCmd(TBaseType.rrw_truncate, "table", ESqlStatementType.ssttruncatetable); 254 255 // UNLOAD/UNSET commands 256 addCmd(TBaseType.rrw_hana_unload, ESqlStatementType.sstunload); 257 addCmd(TBaseType.rrw_hana_unset, "pse", ESqlStatementType.sstunsetpse); 258 addCmd(TBaseType.rrw_hana_unset, "system", "license", ESqlStatementType.sstunsetsystemlicense); 259 addCmd(TBaseType.rrw_hana_unset, ESqlStatementType.sstunset); 260 261 // UPDATE command 262 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 263 264 // UPSERT/VALIDATE commands 265 addCmd(TBaseType.rrw_hana_upsert, ESqlStatementType.sstupsert); 266 addCmd(TBaseType.rrw_hana_validate, "ldap", "provider", ESqlStatementType.sstvalidateLDAPProvider); 267 addCmd(TBaseType.rrw_hana_validate, "user", ESqlStatementType.sstvalidateUser); 268 } 269 270 @Override 271 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 272 // HANA administrative statements recognized by leading words run to 273 // the next top-level semicolon: while one is open, never start a new 274 // statement (protects CREATE PROJECTION VIEW ... AS SELECT and the 275 // action lists of CREATE/ALTER AUDIT POLICY from being split). 276 if (pstate != EFindSqlStateType.stnormal && psqlstatement != null) { 277 switch (psqlstatement.sqlstatementtype) { 278 case ssthanacreateclientsidekey: 279 case ssthanaalterclientsidekey: 280 case ssthanadropclientsidekey: 281 case ssthanaaltercollection: 282 case ssthanadroplibrary: 283 case ssthanacreateprojectionview: 284 case ssthanarecoverencryptionrootkeys: 285 case ssthanarefreshview: 286 case ssthanarenameschema: 287 case ssthanareleasesavepoint: 288 case sstcreateauditpolicy: 289 case sstalterauditpolicy: 290 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 291 return null; 292 default: 293 break; 294 } 295 } 296 TCustomSqlStatement ret = null; 297 int k; 298 boolean lcisnewsql; 299 TSourceToken lcpprevsolidtoken, lcnextsolidtoken, lctoken; 300 301 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 302 303 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 304 || (pcst.tokencode == TBaseType.cmtslashstar) 305 || (pcst.tokencode == TBaseType.lexspace) 306 || (pcst.tokencode == TBaseType.lexnewline) 307 || (pcst.tokentype == ETokenType.ttsemicolon)) { 308 return ret; 309 } 310 311 int lcpos = pcst.posinlist; 312 TSourceTokenList lcsourcetokenlist = pcst.container; 313 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 314 315 // Subquery after semicolon || at first line 316 if (pcst.tokentype == ETokenType.ttleftparenthesis) { // ( 317 k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 318 if (k > 0) { 319 if (pstate == EFindSqlStateType.stnormal) { 320 ret = new TSelectSqlStatement(this.vendor); 321 return ret; 322 } 323 } 324 } 325 326 // CTE 327 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 328 ret = findcte(pcst); 329 if ((ret != null)) return ret; 330 } 331 332 gnewsqlstatementtype = getStatementTypeForToken(pcst); 333 334 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 335 switch (gnewsqlstatementtype) { 336 case sstinvalid: { 337 // HANA doesn't support MSSQL-style labels 338 ret = null; 339 break; 340 } 341 case sstselect: { 342 lcisnewsql = true; 343 344 if (pstate != EFindSqlStateType.stnormal) { 345 if ((lcprevsolidtoken != null)) { 346 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 347 lcisnewsql = false; // subquery 348 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 349 lcisnewsql = false; 350 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 351 lcisnewsql = false; 352 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 353 lcisnewsql = false; 354 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 355 lcisnewsql = false; 356 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 357 lcisnewsql = false; 358 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 359 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 360 lcisnewsql = false; 361 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 362 lcisnewsql = false; 363 } else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) { 364 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmssqlset) 365 lcisnewsql = false; 366 } else if (lcprevsolidtoken.tokentype == ETokenType.ttrightparenthesis) { 367 if ((lccurrentsqlstatement != null) && (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)) { 368 lcisnewsql = false; 369 } 370 } 371 372 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 373 lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 374 if ((lcpprevsolidtoken != null)) { 375 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 376 lcisnewsql = false; 377 } 378 } 379 380 } 381 382 if ((lccurrentsqlstatement != null)) { 383 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) { 384 lcisnewsql = false; 385 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstGrant) { 386 if ((lcprevsolidtoken != null)) { 387 if (lcprevsolidtoken.tokencode == TBaseType.rrw_grant) 388 lcisnewsql = false; 389 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 390 lcisnewsql = false; 391 } 392 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) { 393 lcisnewsql = false; 394 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstaltersequence) { 395 lcisnewsql = false; 396 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstExplain) { 397 lcisnewsql = false; 398 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstRevoke) { 399 lcisnewsql = false; 400 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstupsert) { 401 lcisnewsql = false; 402 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstalterview) { 403 lcisnewsql = false; 404 } 405 } 406 407 } 408 409 if (lcisnewsql) 410 ret = new TSelectSqlStatement(this.vendor); 411 412 break; 413 414 } 415 case sstinsert: { 416 lcisnewsql = true; 417 if (pstate != EFindSqlStateType.stnormal) { 418 if ((lccurrentsqlstatement != null)) { 419 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateauditpolicy) { 420 lcisnewsql = false; 421 } 422 // merge 423 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 424 if (lcprevsolidtoken != null) { 425 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 426 lcisnewsql = false; 427 } 428 } 429 } 430 431 432 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstGrant) { 433 if ((lcprevsolidtoken != null)) { 434 if (lcprevsolidtoken.tokencode == TBaseType.rrw_grant) 435 lcisnewsql = false; 436 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 437 lcisnewsql = false; 438 } 439 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstRevoke) { 440 // Fix for issue #4315: REVOKE INSERT should not split into two statements 441 if ((lcprevsolidtoken != null)) { 442 if (lcprevsolidtoken.tokencode == TBaseType.rrw_revoke) 443 lcisnewsql = false; 444 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 445 lcisnewsql = false; 446 } 447 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 448 lcisnewsql = false; 449 } 450 451 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetrigger) { 452 if ((lcprevsolidtoken != null)) { 453 if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 454 lcisnewsql = false; 455 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 456 lcisnewsql = false; 457 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "after") == 0) 458 lcisnewsql = false; 459 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0) 460 lcisnewsql = false; 461 } 462 } 463 464 465 } 466 } 467 468 if (lcisnewsql) { 469 ret = new TInsertSqlStatement(this.vendor); 470 ret.dummytag = 1; // select stmt in insert is permitted 471 for (k = lcpos + 1; k < lcsourcetokenlist.size(); k++) // iterate 472 { 473 if (lcsourcetokenlist.get(k).isnonsolidtoken()) continue; 474 if (lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_values) break; 475 if (lcsourcetokenlist.get(k).tokentype == ETokenType.ttsemicolon) break; 476 if (lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_select) { 477 ret.dummytag = 0; 478 break; 479 } 480 } // for ( 481 if (k > lcsourcetokenlist.size() - 1) 482 k = lcsourcetokenlist.size() - 1; 483 484 for (int i = lcpos + 1; i <= k; i++) // iterate 485 { 486 lcsourcetokenlist.get(i).tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 487 } // for ( 488 489 } 490 491 break; 492 } 493 case sstupdate: { 494 lcisnewsql = true; 495 if (pstate != EFindSqlStateType.stnormal) { 496 if ((lcprevsolidtoken != null)) { // 497 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 498 lcisnewsql = false; 499 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 500 lcisnewsql = false; 501 } 502 503 lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 504 if (TBaseType.assigned(lcnextsolidtoken)) { 505 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 506 k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 507 if (k == 0) lcisnewsql = false; 508 } 509 } 510 511 512 if (TBaseType.assigned(lccurrentsqlstatement)) { 513 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateauditpolicy) { 514 lcisnewsql = false; 515 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 516 lcisnewsql = false; 517 } 518 // merge 519 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 520 if (lcprevsolidtoken != null) { 521 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 522 lcisnewsql = false; 523 } 524 } 525 } 526 527 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstGrant) { 528 if (TBaseType.assigned(lcprevsolidtoken)) { 529 if (lcprevsolidtoken.tokencode == TBaseType.rrw_grant) 530 lcisnewsql = false; 531 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 532 lcisnewsql = false; 533 } 534 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstRevoke) { 535 // Fix for issue #4315: REVOKE UPDATE should not split into two statements 536 if (TBaseType.assigned(lcprevsolidtoken)) { 537 if (lcprevsolidtoken.tokencode == TBaseType.rrw_revoke) 538 lcisnewsql = false; 539 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 540 lcisnewsql = false; 541 } 542 } 543 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetrigger) { 544 if (TBaseType.assigned(lcprevsolidtoken)) { 545 if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 546 lcisnewsql = false; 547 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 548 lcisnewsql = false; 549 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "after") == 0) 550 lcisnewsql = false; 551 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0) 552 lcisnewsql = false; 553 } 554 } 555 556 } 557 } 558 559 if (lcisnewsql) { 560 ret = new TUpdateSqlStatement(this.vendor); 561 ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement 562 } 563 564 break; 565 } 566 case sstdelete: { 567 lcisnewsql = true; 568 569 if (pstate != EFindSqlStateType.stnormal) { 570 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 571 if (TBaseType.assigned(lcprevsolidtoken)) { 572 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 573 lcisnewsql = false; 574 } 575 576 if (TBaseType.assigned(lccurrentsqlstatement)) { 577 // merge 578 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 579 if (lcprevsolidtoken != null) { 580 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 581 lcisnewsql = false; 582 } 583 } 584 } 585 586 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstGrant) { 587 if (TBaseType.assigned(lcprevsolidtoken)) { 588 if (lcprevsolidtoken.tokencode == TBaseType.rrw_grant) 589 lcisnewsql = false; 590 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 591 lcisnewsql = false; 592 } 593 } 594 595 // Fix for issue #4315: REVOKE DELETE should not split into two statements 596 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstRevoke) { 597 if (TBaseType.assigned(lcprevsolidtoken)) { 598 if (lcprevsolidtoken.tokencode == TBaseType.rrw_revoke) 599 lcisnewsql = false; 600 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 601 lcisnewsql = false; 602 } 603 } 604 605 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetrigger) { 606 if (TBaseType.assigned(lcprevsolidtoken)) { 607 if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 608 lcisnewsql = false; 609 else if (lcprevsolidtoken.tokentype == ETokenType.ttcomma) 610 lcisnewsql = false; 611 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "after") == 0) 612 lcisnewsql = false; 613 else if (TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0) 614 lcisnewsql = false; 615 } 616 } 617 618 if ((lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstbackupcatalogdelete) 619 || (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 620 ) { 621 lcisnewsql = false; 622 } 623 624 } 625 } 626 627 if (lcisnewsql) 628 ret = new TDeleteSqlStatement(this.vendor); 629 630 break; 631 } 632 case sstcreatetable: { 633 ret = new TCreateTableSqlStatement(this.vendor); 634 break; 635 } 636 case sstcreateview: { 637 ret = new TCreateViewSqlStatement(this.vendor); 638 break; 639 } 640 case sstcreatesequence: { 641 ret = new TCreateSequenceStmt(this.vendor); 642 break; 643 } 644 case sstaltertable: { 645 lcisnewsql = true; 646 if (pstate != EFindSqlStateType.stnormal) { 647 lcisnewsql = false; 648 } 649 if (lcisnewsql) { 650 ret = new TAlterTableStatement(this.vendor); 651 } 652 break; 653 } 654 case sstcreateprocedure: { 655 ret = new TCreateProcedureStmt(this.vendor); 656 break; 657 } 658 case sstalterprocedure: { 659 boolean isAlter = false; 660 // hana alter and create procedure 语法混在一起,无法区分 661 // c:\prg\gsp_java\gsp_java_core\gsp_sqlfiles\TestCases\public\allversions\hana\create_procedure.sql 662 if (pcst.tokencode == TBaseType.rrw_alter) { 663 664 TSourceToken st = pcst.nextSolidToken(3); 665 if (st != null) { 666 switch (st.toString().toUpperCase()) { 667 case "RECOMPILE": 668 isAlter = true; 669 break; 670 case "ENCRYPTION": 671 isAlter = true; 672 break; 673 case "ADD": 674 isAlter = true; 675 break; 676 default: 677 break; 678 } 679 } 680 } 681 if (isAlter) { 682 ret = new TAlterProcedureStmt(this.vendor); 683 } else { 684 ret = new TCreateProcedureStmt(this.vendor); 685 } 686 687 break; 688 } 689 case sstcreatefunction: { 690 ret = new TCreateFunctionStmt(this.vendor); 691 break; 692 } 693 case sstalterfunction: { 694 boolean isAlter = false; 695 // hana alter and create function 语法混在一起,无法区分 696 697 if (pcst.tokencode == TBaseType.rrw_alter) { 698 TSourceToken stAdd = pcst.searchToken("add", 4); 699 TSourceToken stAlter = pcst.searchToken("alter", 4); 700 TSourceToken stDrop = pcst.searchToken("drop", 4); 701 if ((stAdd != null) || (stAlter != null) || (stDrop != null)) { 702 isAlter = true; 703 } else { 704 TSourceToken st = pcst.searchToken("encryption", 4); 705 if (st != null) { 706 isAlter = true; 707 } 708 } 709 } 710 711 if (isAlter) { 712 ret = new TAlterFunctionStmt(this.vendor); 713 } else { 714 ret = new TCreateFunctionStmt(this.vendor); 715 } 716 717 718 break; 719 } 720 case sstcreatetrigger: 721 case sstaltertrigger: { 722 ret = new TCreateTriggerStmt(this.vendor); 723 break; 724 } 725 case sstGrant: { 726 lcisnewsql = true; 727 728 if (pstate != EFindSqlStateType.stnormal) { 729 lcisnewsql = false; 730 731 } 732 if (lcisnewsql) { 733 ret = new TGrantStmt(this.vendor); 734 for (k = lcpos + 1; k < lcsourcetokenlist.size(); k++) // iterate 735 { 736 lctoken = lcsourcetokenlist.get(k); 737 if (lctoken.isnonsolidtoken()) continue; 738 if (lctoken.tokencode == TBaseType.rrw_go) break; 739 if (lctoken.tokentype == ETokenType.ttsemicolon) break; 740 if (lctoken.tokencode == TBaseType.rrw_to) break; 741 lctoken.tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 742 } 743 } 744 break; 745 } 746 case sstdropview: { 747 ret = new TDropViewSqlStatement(this.vendor); 748 break; 749 } 750 case sstdroptable: { 751 ret = new TDropTableSqlStatement(this.vendor); 752 break; 753 } 754 case sstdropindex: { 755 ret = new TDropIndexSqlStatement(this.vendor); 756 break; 757 } 758 case ssttruncatetable: { 759 ret = new TTruncateStatement(this.vendor); 760 break; 761 } 762 case sstcommit: { 763 lcisnewsql = true; 764 TSourceToken lcPrev = pcst.prevSolidToken(); 765 if ((lcPrev != null) && (lcPrev.tokencode == TBaseType.rrw_hana_of)) { 766 lcisnewsql = false; 767 } 768 if (pstate != EFindSqlStateType.stnormal) { 769 lcisnewsql = false; 770 771 } 772 if (lcisnewsql) { 773 ret = new TCommitStmt(this.vendor); 774 } 775 776 break; 777 } 778 case sstrollback: { 779 ret = new TRollbackStmt(this.vendor); 780 break; 781 } 782 case sstRevoke: { 783 lcisnewsql = true; 784 785 if (pstate != EFindSqlStateType.stnormal) { 786 lcisnewsql = false; 787 788 } 789 if (lcisnewsql) { 790 ret = new TRevokeStmt(this.vendor); 791 } 792 break; 793 } 794 case sstcreateindex: { 795 ret = new TCreateIndexSqlStatement(this.vendor); 796 break; 797 } 798 case sstset: { 799 lcisnewsql = true; 800 if (pstate != EFindSqlStateType.stnormal) { 801 if (TBaseType.assigned(lccurrentsqlstatement)) { 802 lcisnewsql = false; 803 } 804 } 805 806 if (lcisnewsql) { 807 ret = new TSetStmt(this.vendor); 808 } 809 810 break; 811 } 812 case sstdropsequence: 813 ret = new TDropSequenceStmt(this.vendor); 814 break; 815 case sstalterdatabase: 816 ret = new TAlterDatabaseStmt(this.vendor); 817 break; 818 case sstcreatedatabase: { 819 ret = new TCreateDatabaseSqlStatement(this.vendor); 820 break; 821 } 822 case sstcreateschema: { 823 ret = new TCreateSchemaSqlStatement(this.vendor); 824 break; 825 } 826 case sstcreatesynonym: { 827 ret = new TCreateSynonymStmt(this.vendor); 828 break; 829 } 830 case sstcreatetype: 831 ret = new TMssqlCreateType(this.vendor); 832 break; 833 case sstreplace: 834 lcisnewsql = true; 835 TSourceToken lcNext = pcst.nextSolidToken(); 836 if ((lcNext != null) && (lcNext.tokencode == '(')) { 837 lcisnewsql = false; 838 } 839 if (pstate != EFindSqlStateType.stnormal) { 840 lcisnewsql = false; 841 } 842 if (lcisnewsql) { 843 ret = new TUpsertStmt(this.vendor); 844 } 845 break; 846 case sstalterauditpolicy: 847 ret = new TAlterAuditPolicyStmt(this.vendor); 848 break; 849 case sstaltercredential: 850 ret = new TAlterCredentialStmt(this.vendor); 851 break; 852 case sstalterfulltextindex: 853 ret = new TAlterFulltextIndexStmt(this.vendor); 854 break; 855 case sstalterindex: 856 ret = new TAlterIndexStmt(this.vendor); 857 break; 858 case sstalterldapprovider: 859 ret = new TAlterLDAPProviderStmt(this.vendor); 860 break; 861 case sstalterjwtprovider: 862 ret = new TAlterJWTProviderStmt(this.vendor); 863 break; 864 case sstalterpse: 865 ret = new TAlterPSEStmt(this.vendor); 866 break; 867 case sstalterremotesource: 868 ret = new TAlterRemoteSourceStmt(this.vendor); 869 break; 870 case sstAlterRole: 871 ret = new TAlterRoleStmt(this.vendor); 872 break; 873 case sstaltersamlprovider: 874 ret = new TAlterSAMLProviderStmt(this.vendor); 875 break; 876 case sstaltersequence: 877 ret = new TAlterSequenceStatement(this.vendor); 878 break; 879 case sstalterstatistics: 880 ret = new TAlterStatisticsStmt(this.vendor); 881 break; 882 case sstaltersystem: 883 ret = new TAlterSystemStmt(this.vendor); 884 break; 885 case sstunload: 886 lcisnewsql = true; 887 if (pstate != EFindSqlStateType.stnormal) { 888 lcisnewsql = false; 889 } 890 if (lcisnewsql) { 891 ret = new TUnloadStmt(this.vendor); 892 ret.sqlstatementtype = gnewsqlstatementtype; 893 } 894 break; 895 case sstunset: 896 case sstunsetpse: 897 case sstunsetsystemlicense: 898 lcisnewsql = true; 899 if (pstate != EFindSqlStateType.stnormal) { 900 lcisnewsql = false; 901 } 902 if (lcisnewsql) { 903 ret = new TUnsetStmt(this.vendor); 904 ret.sqlstatementtype = gnewsqlstatementtype; 905 } 906 break; 907 case sstalteruser: 908 ret = new TAlterUserStmt(this.vendor); 909 break; 910 case sstconnect: 911 lcisnewsql = true; 912 if (pstate != EFindSqlStateType.stnormal) { 913 lcisnewsql = false; 914 } 915 if (lcisnewsql) { 916 ret = new TConnectStmt(this.vendor); 917 ret.sqlstatementtype = gnewsqlstatementtype; 918 } 919 break; 920 case sstalterusergroup: 921 ret = new TAlterUserGroupStmt(this.vendor); 922 break; 923 case sstalterview: 924 case sstalterviewcache: 925 ret = new TAlterViewStatement(this.vendor); 926 break; 927 case sstaltervirtualtable: 928 ret = new TAlterVirtualTableStmt(this.vendor); 929 break; 930 case sstalterworkloadclass: 931 ret = new TAlterWorkloadClassStmt(this.vendor); 932 break; 933 case sstalterworkloadmapping: 934 ret = new TAlterWorkloadMappingStmt(this.vendor); 935 break; 936 case sstbackupcancel: 937 ret = new TBackupCancelStmt(this.vendor); 938 break; 939 case sstbackupcatalogdelete: 940 ret = new TBackupCatalogDeleteStmt(this.vendor); 941 break; 942 case sstbackupcheck: 943 case sstbackupcheckaccess: 944 ret = new TBackupCheckStmt(this.vendor); 945 break; 946 case sstbackupdata: 947 ret = new TBackupDataStmt(this.vendor); 948 break; 949 case sstbackuplistdata: 950 ret = new TBackupListDataStmt(this.vendor); 951 break; 952 case sstcall: 953 ret = new TCallStatement(this.vendor); 954 break; 955 case sstcomment: 956 ret = new TCommentOnSqlStmt(this.vendor); 957 break; 958 case sstcreateauditpolicy: 959 ret = new TCreateAuditPolicyStmt(this.vendor); 960 break; 961 case sstcreatecertificate: 962 ret = new TCreateCertificateStmt(this.vendor); 963 break; 964 case sstcreatecollection: 965 ret = new TCreateCollectionStmt(this.vendor); 966 break; 967 case sstcreatecredential: 968 ret = new TCreateCredentialStmt(this.vendor); 969 break; 970 case sstcreatefulltextindex: 971 ret = new TCreateFulltextIndexStmt(this.vendor); 972 break; 973 case sstcreategraphworkspace: 974 ret = new TCreateGraphWorkspaceStmt(this.vendor); 975 break; 976 case sstcreateJWTProvider: 977 ret = new TCreateJWTProviderStmt(this.vendor); 978 break; 979 case sstcreateLDAPProvider: 980 ret = new TCreateLDAPProviderStmt(this.vendor); 981 break; 982 case sstcreatepse: 983 ret = new TCreatePSEStmt(this.vendor); 984 break; 985 case sstcreateremotesource: 986 ret = new TCreateRemoteSourceStmt(this.vendor); 987 break; 988 case sstcreaterole: 989 ret = new TCreateRoleStmt(this.vendor); 990 break; 991 case sstcreatesamlprovider: 992 ret = new TCreateSAMLProviderStmt(this.vendor); 993 break; 994 case sstcreatestatistics: 995 ret = new TCreateStatistics(this.vendor); 996 break; 997 case sstcreatestructuredprivilege: 998 ret = new TCreateStructuredPrivilegeStmt(this.vendor); 999 break; 1000 case sstcreateuser: 1001 ret = new TCreateUserStmt(this.vendor); 1002 break; 1003 case sstcreateusergroup: 1004 ret = new TCreateUserGroupStmt(this.vendor); 1005 break; 1006 case sstcreatevirtualfunction: 1007 ret = new TCreateVirtualFunctionStmt(this.vendor); 1008 break; 1009 case sstcreatevirtualtable: 1010 ret = new TCreateVirtualTableStmt(this.vendor); 1011 break; 1012 case sstcreateworkloadclass: 1013 ret = new TCreateWorkloadClassStmt(this.vendor); 1014 break; 1015 case sstcreateworkloadmapping: 1016 ret = new TCreateWorkloadMappingStmt(this.vendor); 1017 break; 1018 case sstdropauditpolicy: 1019 case sstdropcertificate: 1020 case sstdropcollection: 1021 case sstdropcredential: 1022 case sstdropfulltextindex: 1023 case sstdropJWTProvider: 1024 case sstdropLDAPProvider: 1025 case sstdroppse: 1026 case sstdropremotesource: 1027 case sstdropsamlprovider: 1028 case sstdropstatistics: 1029 case sstdropgraphworkspace: 1030 case sstdropstructuredprivilege: 1031 case sstdroptype: 1032 case sstdropusergroup: 1033 case sstdropworkloadclass: 1034 case sstdropworkloadmapping: 1035 lcisnewsql = true; 1036 if (pstate != EFindSqlStateType.stnormal) { 1037 lcisnewsql = false; 1038 } 1039 if (lcisnewsql) { 1040 ret = new TDropStmt(this.vendor); 1041 } 1042 1043 break; 1044 case sstdropdatabase: 1045 ret = new TDropDatabaseStmt(this.vendor); 1046 break; 1047 case sstdropfunction: 1048 ret = new TDropFunctionStmt(this.vendor); 1049 break; 1050 case sstdropprocedure: 1051 ret = new TDropProcedureStmt(this.vendor); 1052 break; 1053 case sstdroprole: 1054 ret = new TDropRoleStmt(this.vendor); 1055 break; 1056 case sstdropschema: 1057 ret = new TDropSchemaSqlStatement(this.vendor); 1058 break; 1059 case sstdropsynonym: 1060 ret = new TDropSynonymStmt(this.vendor); 1061 break; 1062 case sstdroptrigger: 1063 ret = new TDropTriggerSqlStatement(this.vendor); 1064 break; 1065 case sstdropuser: 1066 ret = new TDropUserStmt(this.vendor); 1067 break; 1068 case sstExplain: 1069 ret = new TExplainPlan(this.vendor); 1070 break; 1071 case sstexport: 1072 ret = new TExportStmt(this.vendor); 1073 break; 1074 case sstimport: 1075 ret = new TImportStmt(this.vendor); 1076 break; 1077 case sstload: 1078 lcisnewsql = true; 1079 if (pstate != EFindSqlStateType.stnormal) { 1080 lcisnewsql = false; 1081 } 1082 if (lcisnewsql) { 1083 ret = new TLoadStmt(this.vendor); 1084 } 1085 1086 break; 1087 case sstlocktable: 1088 ret = new TLockTableStmt(this.vendor); 1089 break; 1090 case sstmergedelta: 1091 ret = new TMergeDeltaStmt(this.vendor); 1092 break; 1093 case sstmerge: 1094 ret = new TMergeSqlStatement(this.vendor); 1095 break; 1096 case sstrecoverdata: 1097 ret = new TRecoverDataStmt(this.vendor); 1098 break; 1099 case sstrecoverdatabase: 1100 ret = new TRecoverDatabaseStmt(this.vendor); 1101 break; 1102 case sstrefreshstatistics: 1103 ret = new TRefreshStatisticsStmt(this.vendor); 1104 break; 1105 case sstrenamecollection: 1106 case sstrenamecolumn: 1107 case sstrenamedatabase: 1108 case sstrenameindex: 1109 case sstrenametable: 1110 ret = new TRenameStmt(this.vendor); 1111 break; 1112 case sssethistorysession: 1113 case sstsetpse: 1114 case sstsetschema: 1115 case sstsetsystemlicense: 1116 case sstsettransaction: 1117 case sstsettransactionautocommit: 1118 ret = new TSetDatabaseObjectStmt(this.vendor); 1119 break; 1120 case ssttruncatecollection: 1121 ret = new TTruncateCollectionStmt(this.vendor); 1122 break; 1123 case sstvalidateLDAPProvider: 1124 ret = new TValidateLDAPProviderStmt(this.vendor); 1125 break; 1126 case sstvalidateUser: 1127 ret = new TValidateUserStmt(this.vendor); 1128 break; 1129 case sstupsert: 1130 ret = new TUpsertStmt(this.vendor); 1131 break; 1132 case sstsavepoint: { 1133 lcisnewsql = true; 1134 1135 if (pstate != EFindSqlStateType.stnormal) { 1136 lcisnewsql = false; 1137 1138 } 1139 if (lcisnewsql) { 1140 ret = new TSavepointStmt(this.vendor); 1141 ret.sqlstatementtype = gnewsqlstatementtype; 1142 } 1143 break; 1144 } 1145 default: { 1146 ret = new TUnknownSqlStatement(this.vendor); 1147 ret.sqlstatementtype = gnewsqlstatementtype; 1148 break; 1149 } 1150 } // case 1151 1152 return ret; 1153 } 1154}