001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.db2.*; 006 007/** 008 * DB2 SQL command resolver. 009 * Handles DB2-specific statement recognition. 010 * 011 * @since 3.1.0.9 012 */ 013public class TSqlCmdsDb2 extends AbstractSqlCmds { 014 015 public TSqlCmdsDb2() { 016 super(EDbVendor.dbvdb2); 017 } 018 019 @Override 020 protected String getToken1Str(int token1) { 021 // Handle DB2-specific reserved words (token codes > TBaseType.rrw_abort) 022 switch (token1) { 023 case TBaseType.rrw_db2_label: 024 return "label"; 025 case TBaseType.rrw_db2_runstats: 026 return "runstats"; 027 default: 028 return null; 029 } 030 } 031 032 @Override 033 protected void initializeCommands() { 034 // DB2 commands must be sorted alphabetically by token1 035 036 addCmd(TBaseType.rrw_allocate, "cursor", ESqlStatementType.sstdb2allocatecursor); 037 038 // ALTER commands 039 addCmd(TBaseType.rrw_alter, "bufferpool", ESqlStatementType.sstdb2alterbufferpool); 040 addCmd(TBaseType.rrw_alter, "database", "partition", "group", ESqlStatementType.sstdb2alterdatabasepartitiongroup); 041 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstdb2alterfunction); 042 addCmd(TBaseType.rrw_alter, "method", ESqlStatementType.sstdb2altermethod); 043 addCmd(TBaseType.rrw_alter, "nickname", ESqlStatementType.sstdb2alternickname); 044 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstdb2alterprocedure); 045 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstdb2altersequence); 046 addCmd(TBaseType.rrw_alter, "server", ESqlStatementType.sstdb2alterserver); 047 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 048 addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstdb2altertablespace); 049 addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstdb2altertype); 050 addCmd(TBaseType.rrw_alter, "user", "mapping", ESqlStatementType.sstdb2alterusermapping); 051 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstdb2alterview); 052 addCmd(TBaseType.rrw_alter, "wrapper", ESqlStatementType.sstdb2alterwrapper); 053 054 addCmd(TBaseType.rrw_associate, "locators", ESqlStatementType.sstdb2associatelocators); 055 addCmd(TBaseType.rrw_begin, "declare", "section", ESqlStatementType.sstdb2begindeclaresection); 056 addCmd(TBaseType.rrw_call, ESqlStatementType.sstdb2call); 057 addCmd(TBaseType.rrw_case, ESqlStatementType.sstdb2case); 058 addCmd(TBaseType.rrw_close, ESqlStatementType.sstdb2close); 059 addCmd(TBaseType.rrw_comment, ESqlStatementType.sstdb2comment); 060 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstdb2commit); 061 addCmd(TBaseType.rrw_connect, ESqlStatementType.sstdb2connect); 062 063 // CREATE commands - Note: longer patterns BEFORE shorter ones 064 addCmd(TBaseType.rrw_create, "or", "replace", "public", "alias", ESqlStatementType.sstdb2createalias); 065 addCmd(TBaseType.rrw_create, "or", "replace", "alias", ESqlStatementType.sstdb2createalias); 066 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction); 067 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure); 068 addCmd(TBaseType.rrw_create, "or", "replace", "trigger", ESqlStatementType.sstdb2createtrigger); 069 addCmd(TBaseType.rrw_create, "or", "replace", "variable", ESqlStatementType.sstdb2createvariable); 070 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview); 071 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 072 addCmd(TBaseType.rrw_create, "large", "tablespace", ESqlStatementType.sstcreateTablespace); 073 addCmd(TBaseType.rrw_create, "database", "partition", "group", ESqlStatementType.sstdb2createdatabasepartitiongroup); 074 addCmd(TBaseType.rrw_create, "distinct", "type", ESqlStatementType.sstdb2createdistincttype); 075 addCmd(TBaseType.rrw_create, "function", "mapping", ESqlStatementType.sstdb2createfunctionmapping); 076 addCmd(TBaseType.rrw_create, "index", "extension", ESqlStatementType.sstdb2createindexextension); 077 addCmd(TBaseType.rrw_create, "type", "mapping", ESqlStatementType.sstdb2createtypemapping); 078 addCmd(TBaseType.rrw_create, "user", "mapping", ESqlStatementType.sstdb2createusermapping); 079 addCmd(TBaseType.rrw_create, "audit", "policy", ESqlStatementType.sstcreateauditpolicy); 080 addCmd(TBaseType.rrw_create, "public", "alias", ESqlStatementType.sstdb2createalias); 081 addCmd(TBaseType.rrw_create, "public", "synonym", ESqlStatementType.sstcreatesynonym); 082 addCmd(TBaseType.rrw_create, "summary", "table", ESqlStatementType.sstcreatetable); 083 addCmd(TBaseType.rrw_create, "alias", ESqlStatementType.sstdb2createalias); 084 addCmd(TBaseType.rrw_create, "bufferpool", ESqlStatementType.sstdb2createbufferpool); 085 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase); 086 addCmd(TBaseType.rrw_create, "eventmonitor", ESqlStatementType.sstdb2createeventmonitor); 087 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction); 088 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstcreateindex); 089 addCmd(TBaseType.rrw_create, "method", ESqlStatementType.sstdb2createmethod); 090 addCmd(TBaseType.rrw_create, "nickname", ESqlStatementType.sstdb2createnickname); 091 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 092 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole); 093 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstdb2createschema); 094 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstdb2createsequence); 095 addCmd(TBaseType.rrw_create, "server", ESqlStatementType.sstdb2createserver); 096 addCmd(TBaseType.rrw_create, "stogroup", ESqlStatementType.sstdb2createstogroup); 097 addCmd(TBaseType.rrw_create, "synonym", ESqlStatementType.sstcreatesynonym); 098 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 099 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstcreateTablespace); 100 addCmd(TBaseType.rrw_create, "transform", ESqlStatementType.sstdb2createtransform); 101 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstdb2createtrigger); 102 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstdb2createtype); 103 addCmd(TBaseType.rrw_create, "variable", ESqlStatementType.sstdb2createvariable); 104 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview); 105 addCmd(TBaseType.rrw_create, "wrapper", ESqlStatementType.sstdb2createwrapper); 106 addCmd(TBaseType.rrw_create, "*", "index", ESqlStatementType.sstcreateindex); 107 108 // DECLARE commands 109 addCmd(TBaseType.rrw_declare, "global", "temporary", "table", ESqlStatementType.sstdb2declareglobaltemporarytable); 110 addCmd(TBaseType.rrw_declare, "*", "cursor", ESqlStatementType.sstdb2declarecursor); 111 112 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 113 addCmd(TBaseType.rrw_describe, ESqlStatementType.sstdb2describe); 114 addCmd(TBaseType.rrw_disconnect, ESqlStatementType.sstdb2disconnect); 115 116 // DROP commands - longer patterns first 117 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex); 118 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable); 119 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview); 120 addCmd(TBaseType.rrw_drop, ESqlStatementType.sstdb2drop); 121 122 addCmd(TBaseType.rrw_end, "declare", "section", ESqlStatementType.sstdb2enddeclaresection); 123 124 // EXECUTE commands 125 addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstdb2executeimmediate); 126 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstdb2execute); 127 128 addCmd(TBaseType.rrw_explain, ESqlStatementType.sstdb2explain); 129 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstdb2fetch); 130 131 // FLUSH commands 132 addCmd(TBaseType.rrw_flush, "event", "monitor", ESqlStatementType.sstdb2flusheventmonitor); 133 addCmd(TBaseType.rrw_flush, "package", "cache", ESqlStatementType.sstdb2flushpackagecache); 134 135 addCmd(TBaseType.rrw_for, ESqlStatementType.sstdb2for); 136 addCmd(TBaseType.rrw_free, "locator", ESqlStatementType.sstdb2freelocator); 137 addCmd(TBaseType.rrw_get, "diagnostics", ESqlStatementType.sstgetdiagnostics); 138 addCmd(TBaseType.rrw_goto, ESqlStatementType.sstdb2goto); 139 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstdb2grant); 140 addCmd(TBaseType.rrw_if, ESqlStatementType.sstdb2if); 141 addCmd(TBaseType.rrw_include, ESqlStatementType.sstdb2include); 142 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 143 addCmd(TBaseType.rrw_iterate, ESqlStatementType.sstdb2iterate); 144 addCmd(TBaseType.rrw_db2_label, "on", ESqlStatementType.sstdb2labelOn); 145 addCmd(TBaseType.rrw_leave, ESqlStatementType.sstdb2leave); 146 addCmd(TBaseType.rrw_lock, "table", ESqlStatementType.sstdb2locktable); 147 addCmd(TBaseType.rrw_loop, ESqlStatementType.sstdb2loop); 148 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 149 addCmd(TBaseType.rrw_open, ESqlStatementType.sstdb2open); 150 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstdb2prepare); 151 addCmd(TBaseType.rrw_refresh, "table", ESqlStatementType.sstdb2refreshtable); 152 153 // RELEASE commands 154 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstdb2releasesavepoint); 155 addCmd(TBaseType.rrw_release, ESqlStatementType.sstdb2release); 156 157 // RENAME commands 158 addCmd(TBaseType.rrw_rename, "tablespace", ESqlStatementType.sstdb2renametablespace); 159 addCmd(TBaseType.rrw_rename, ESqlStatementType.sstdb2rename); 160 161 addCmd(TBaseType.rrw_repeat, ESqlStatementType.sstdb2repeat); 162 addCmd(TBaseType.rrw_resignal, ESqlStatementType.sstdb2resignal); 163 addCmd(TBaseType.rrw_return, ESqlStatementType.sstdb2return); 164 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstdb2revoke); 165 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstdb2rollback); 166 addCmd(TBaseType.rrw_db2_runstats, ESqlStatementType.sstRunStats); 167 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstdb2savepoint); 168 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 169 170 // SET commands - longer patterns first 171 addCmd(TBaseType.rrw_set, "current", "default", "transform", "group", ESqlStatementType.sstdb2setcurrentdefaulttransformgroup); 172 addCmd(TBaseType.rrw_set, "current", "maintained", "table", "types", ESqlStatementType.sstdb2setcurrentmaintainedtabletypesforoptimization); 173 addCmd(TBaseType.rrw_set, "current", "explain", "snapshot", ESqlStatementType.sstdb2setcurrentexplainsnapshot); 174 addCmd(TBaseType.rrw_set, "current", "explain", "mode", ESqlStatementType.sstdb2setcurrentexplainmode); 175 addCmd(TBaseType.rrw_set, "current", "lock", "timeout", ESqlStatementType.sstdb2setcurrentlocktimeout); 176 addCmd(TBaseType.rrw_set, "current", "package", "path", ESqlStatementType.sstdb2setcurrentpackagepath); 177 addCmd(TBaseType.rrw_set, "current", "query", "optimization", ESqlStatementType.sstdb2setcurrentqueryoptimization); 178 addCmd(TBaseType.rrw_set, "current", "refresh", "age", ESqlStatementType.sstdb2setcurrentrefreshage); 179 addCmd(TBaseType.rrw_set, "encryption", "password", ESqlStatementType.sstdb2setencryptionpassword); 180 addCmd(TBaseType.rrw_set, "event", "monitor", "state", ESqlStatementType.sstdb2seteventmonitorstate); 181 addCmd(TBaseType.rrw_set, "server", "option", ESqlStatementType.sstdb2setserveroption); 182 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstdb2setsessionauthorization); 183 addCmd(TBaseType.rrw_set, "current", "degree", ESqlStatementType.sstdb2setcurrentdegree); 184 addCmd(TBaseType.rrw_set, "current", "isolation", ESqlStatementType.sstdb2setcurrentisolation); 185 addCmd(TBaseType.rrw_set, "current", "packageset", ESqlStatementType.sstdb2setcurrentpackageset); 186 addCmd(TBaseType.rrw_set, "current", "schema", ESqlStatementType.sstdb2setschema); 187 addCmd(TBaseType.rrw_set, "connection", ESqlStatementType.sstdb2setconnection); 188 addCmd(TBaseType.rrw_set, "integrity", ESqlStatementType.sstdb2setintegrity); 189 addCmd(TBaseType.rrw_set, "passthru", ESqlStatementType.sstdb2setpassthru); 190 addCmd(TBaseType.rrw_set, "path", ESqlStatementType.sstdb2setpath); 191 addCmd(TBaseType.rrw_set, "schema", ESqlStatementType.sstdb2setschema); 192 addCmd(TBaseType.rrw_set, ESqlStatementType.sstdb2set); 193 194 addCmd(TBaseType.rrw_signal, ESqlStatementType.sstdb2signal); 195 addCmd(TBaseType.rrw_terminate, ESqlStatementType.sstdb2terminate); 196 addCmd(TBaseType.rrw_truncate, ESqlStatementType.ssttruncatetable); 197 198 // UPDATE commands 199 addCmd(TBaseType.rrw_update, "command", ESqlStatementType.sstdb2updateCommand); 200 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 201 202 addCmd(TBaseType.rrw_while, ESqlStatementType.sstdb2while); 203 } 204 205 @Override 206 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 207 TCustomSqlStatement ret = null; 208 int k; 209 boolean lcisnewsql; 210 TSourceToken lcpprevsolidtoken, lcnextsolidtoken; 211 212 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 213 214 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 215 || (pcst.tokencode == TBaseType.cmtslashstar) 216 || (pcst.tokencode == TBaseType.lexspace) 217 || (pcst.tokencode == TBaseType.lexnewline) 218 || (pcst.tokentype == ETokenType.ttsemicolon)) { 219 return ret; 220 } 221 222 int lcpos = pcst.posinlist; 223 TSourceTokenList lcsourcetokenlist = pcst.container; 224 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 225 226 // subquery after semicolon || at first line 227 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { // ( 228 k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 229 if (k > 0) { 230 ret = new TSelectSqlStatement(this.vendor); 231 } 232 233 return ret; 234 } 235 236 // cte 237 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 238 ret = findcte(pcst); 239 if (TBaseType.assigned(ret)) return ret; 240 } 241 242 // values 243 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_values)) { 244 ret = new TSelectSqlStatement(this.vendor); 245 return ret; 246 } 247 248 // db2 scriptoptions 249 if (pcst.tokencode == TBaseType.scriptoptions) { 250 ret = new TDb2ScriptOptionStmt(this.vendor); 251 return ret; 252 } 253 254 gnewsqlstatementtype = getStatementTypeForToken(pcst); 255 256 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 257 switch (gnewsqlstatementtype) { 258 case sstinvalid: { 259 ret = null; 260 if (pcst.tokencode == TBaseType.rrw_begin) { 261 ret = new TCommonBlock(this.vendor); 262 gnewsqlstatementtype = ret.sqlstatementtype; 263 } 264 break; 265 } 266 case sstselect: { 267 lcisnewsql = true; 268 269 if (pstate != EFindSqlStateType.stnormal) { 270 if (TBaseType.assigned(lcprevsolidtoken)) { 271 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 272 lcisnewsql = false; // subquery 273 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 274 lcisnewsql = false; 275 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 276 lcisnewsql = false; 277 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 278 lcisnewsql = false; 279 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 280 lcisnewsql = false; 281 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 282 lcisnewsql = false; 283 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 284 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 285 lcisnewsql = false; 286 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 287 lcisnewsql = false; 288 } 289 290 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 291 lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 292 if (TBaseType.assigned(lcpprevsolidtoken)) { 293 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 294 lcisnewsql = false; 295 } 296 } 297 } 298 299 if (TBaseType.assigned(lccurrentsqlstatement)) { 300 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) { 301 lcisnewsql = false; 302 } else if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstselect) { 303 if (lccurrentsqlstatement.isctequery) 304 lcisnewsql = false; 305 } 306 } 307 } 308 309 if (lcisnewsql) 310 ret = new TSelectSqlStatement(this.vendor); 311 break; 312 } 313 case sstinsert: { 314 lcisnewsql = true; 315 if (pstate != EFindSqlStateType.stnormal) { 316 if (TBaseType.assigned(lccurrentsqlstatement)) { 317 } 318 } 319 320 if (lcisnewsql) 321 ret = new TInsertSqlStatement(this.vendor); 322 break; 323 } 324 case sstupdate: { 325 lcisnewsql = true; 326 if (pstate != EFindSqlStateType.stnormal) { 327 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 328 if (TBaseType.assigned(lcprevsolidtoken)) { 329 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 330 lcisnewsql = false; 331 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 332 lcisnewsql = false; 333 } 334 335 lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 336 if (TBaseType.assigned(lcnextsolidtoken)) { 337 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 338 k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 339 if (k == 0) lcisnewsql = false; 340 } 341 } 342 343 if (TBaseType.assigned(lccurrentsqlstatement)) { 344 } 345 } 346 347 if (lcisnewsql) { 348 ret = new TUpdateSqlStatement(this.vendor); 349 ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement 350 } 351 break; 352 } 353 case sstdelete: { 354 lcisnewsql = true; 355 356 if (pstate != EFindSqlStateType.stnormal) { 357 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 358 if (TBaseType.assigned(lcprevsolidtoken)) { 359 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 360 lcisnewsql = false; 361 } 362 363 if (TBaseType.assigned(lccurrentsqlstatement)) { 364 } 365 } 366 367 if (lcisnewsql) 368 ret = new TDeleteSqlStatement(this.vendor); 369 break; 370 } 371 case sstmerge: { 372 ret = new TMergeSqlStatement(this.vendor); 373 ret.sqlstatementtype = gnewsqlstatementtype; 374 break; 375 } 376 case sstcommit: { 377 ret = new TUnknownSqlStatement(this.vendor); 378 ret.sqlstatementtype = gnewsqlstatementtype; 379 break; 380 } 381 case sstrollback: { 382 ret = new TUnknownSqlStatement(this.vendor); 383 ret.sqlstatementtype = gnewsqlstatementtype; 384 break; 385 } 386 case sstsavepoint: { 387 ret = new TUnknownSqlStatement(this.vendor); 388 ret.sqlstatementtype = gnewsqlstatementtype; 389 break; 390 } 391 case sstRevoke: { 392 ret = new TUnknownSqlStatement(this.vendor); 393 ret.sqlstatementtype = gnewsqlstatementtype; 394 break; 395 } 396 case sstcreatetable: { 397 ret = new TCreateTableSqlStatement(this.vendor); 398 break; 399 } 400 case sstcreateview: { 401 ret = new TCreateViewSqlStatement(this.vendor); 402 break; 403 } 404 case sstcreateindex: { 405 ret = new TCreateIndexSqlStatement(this.vendor); 406 break; 407 } 408 case sstcreatedatabase: { 409 ret = new TCreateDatabaseSqlStatement(this.vendor); 410 break; 411 } 412 case sstdroptable: { 413 ret = new TDropTableSqlStatement(this.vendor); 414 break; 415 } 416 case sstdropview: { 417 ret = new TDropViewSqlStatement(this.vendor); 418 break; 419 } 420 case sstdropindex: { 421 ret = new TDropIndexSqlStatement(this.vendor); 422 break; 423 } 424 case sstaltertable: { 425 ret = new TAlterTableStatement(this.vendor); 426 break; 427 } 428 case sstaltersession: { 429 ret = new TAlterSessionStatement(this.vendor); 430 break; 431 } 432 case sstdb2set: { 433 ret = new TDb2SetVariableStmt(this.vendor); 434 break; 435 } 436 case sstdb2setschema: { 437 ret = new TSetDatabaseObjectStmt(this.vendor); 438 break; 439 } 440 case sstdb2call: { 441 ret = new TDb2CallStmt(this.vendor); 442 break; 443 } 444 case sstdb2declarecursor: { 445 ret = new TDb2DeclareCursorStatement(this.vendor); 446 break; 447 } 448 case sstcreateprocedure: { 449 ret = new TCreateProcedureStmt(this.vendor); 450 break; 451 } 452 case sstcreatefunction: { 453 ret = new TCreateFunctionStmt(this.vendor); 454 break; 455 } 456 case sstdb2createtrigger: { 457 ret = new TCreateTriggerStmt(this.vendor); 458 break; 459 } 460 case sstdb2return: { 461 ret = new TDb2ReturnStmt(this.vendor); 462 break; 463 } 464 case sstdb2refreshtable: 465 case sstdb2connect: 466 case sstdb2terminate: 467 case sstdb2execute: { 468 ret = new TDb2DummyStmt(this.vendor); 469 break; 470 } 471 case sstdb2createalias: { 472 ret = new TCreateAliasStmt(this.vendor); 473 break; 474 } 475 case sstcreateauditpolicy: 476 ret = new TCreateAuditPolicyStmt(this.vendor); 477 break; 478 case sstdb2comment: 479 ret = new TCommentOnSqlStmt(this.vendor); 480 break; 481 case sstdb2createvariable: 482 ret = new TCreateVariableStmt(this.vendor); 483 break; 484 case sstcreaterole: 485 ret = new TCreateRoleStmt(this.vendor); 486 break; 487 case sstcreateTablespace: 488 ret = new TCreateTablespaceStmt(this.vendor); 489 break; 490 case sstRunStats: 491 ret = new TRunStats(this.vendor); 492 break; 493 case ssttruncatetable: { 494 ret = new TTruncateStatement(this.vendor); 495 break; 496 } 497 case sstcreatesynonym: 498 ret = new TCreateSynonymStmt(this.vendor); 499 break; 500 default: { 501 ret = new TUnknownSqlStatement(this.vendor); 502 ret.sqlstatementtype = gnewsqlstatementtype; 503 break; 504 } 505 } 506 507 return ret; 508 } 509}