001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.oracle.*; 006import gudusoft.gsqlparser.stmt.postgresql.*; 007 008/** 009 * Greenplum SQL command resolver. 010 * Extracted from TSqlCmds monolith for modular architecture. 011 * 012 * @since 3.1.0.9 013 */ 014public class TSqlCmdsGreenplum extends AbstractSqlCmds { 015 016 public TSqlCmdsGreenplum() { 017 super(EDbVendor.dbvgreenplum); 018 } 019 020 @Override 021 protected void initializeCommands() { 022 // Commands must be sorted alphabetically 023 // Extracted from TSqlCmds.initgreenplumcmds() 024 025 addCmd(TBaseType.rrw_abort, ESqlStatementType.sstpostgresqlabort); 026 addCmd(TBaseType.rrw_alter, "aggregate", ESqlStatementType.sstpostgresqlAlterAggregate); 027 addCmd(TBaseType.rrw_alter, "conversion", ESqlStatementType.sstpostgresqlAlterConversion); 028 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstpostgresqlalterdatabase); 029 addCmd(TBaseType.rrw_alter, "domain", ESqlStatementType.sstpostgresqlAlterDomain); 030 031 addCmd(TBaseType.rrw_alter, "external", "table", ESqlStatementType.sstgreenplumAlterExternalTable); 032 addCmd(TBaseType.rrw_alter, "filespace", ESqlStatementType.sstgreenplumAlterFilespace); 033 034 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstpostgresqlAlterfunction); 035 addCmd(TBaseType.rrw_alter, "group", ESqlStatementType.sstpostgresqlAlterGroup); 036 addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstpostgresqlAlterIndex); 037 addCmd(TBaseType.rrw_alter, "language", ESqlStatementType.sstpostgresqlAlterLanguage); 038 addCmd(TBaseType.rrw_alter, "operator", "class", ESqlStatementType.sstpostgresqlAlterOperatorClass); 039 addCmd(TBaseType.rrw_alter, "operator", ESqlStatementType.sstpostgresqlAlterOperator); 040 addCmd(TBaseType.rrw_alter, "protocol", ESqlStatementType.sstgreenplumAlterProtocol); 041 addCmd(TBaseType.rrw_alter, "resource", "queue", ESqlStatementType.sstgreenplumAlterResourceQueue); 042 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstpostgresqlAlterRole); 043 addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstpostgresqlAlterSchema); 044 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstpostgresqlAlterSequence); 045 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 046 addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstpostgresqlAlterTablespace); 047 048 addCmd(TBaseType.rrw_alter, "trigger", ESqlStatementType.sstpostgresqlAlterTrigger); 049 050 addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstpostgresqlAlterType); 051 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstpostgresqlAlterUser); 052 addCmd(TBaseType.rrw_greenplum_analyse, ESqlStatementType.sstpostgresqlAnalyze); 053 addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstpostgresqlAnalyze); 054 055 addCmd(TBaseType.rrw_begin, ESqlStatementType.sstpostgresqlBegin); 056 addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall); 057 058 addCmd(TBaseType.rrw_checkpoint, ESqlStatementType.sstpostgresqlCheckpoint); 059 addCmd(TBaseType.rrw_close, ESqlStatementType.sstpostgresqlClose); 060 061 addCmd(TBaseType.rrw_greenplum_cluster, ESqlStatementType.sstpostgresqlCluster); 062 063 addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstpostgresqlComment); 064 065 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstpostgresqlCommit); 066 addCmd(TBaseType.rrw_greenplum_copy, ESqlStatementType.sstpostgresqlCopy); 067 068 addCmd(TBaseType.rrw_create, "aggregate", ESqlStatementType.sstpostgresqlCreateAggregate); 069 addCmd(TBaseType.rrw_create, "cast", ESqlStatementType.sstpostgresqlCreateCast); 070 071 addCmd(TBaseType.rrw_create, "constraint", "trigger", ESqlStatementType.sstcreatetrigger); 072 073 addCmd(TBaseType.rrw_create, "conversion", ESqlStatementType.sstpostgresqlConversion); 074 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstpostgresqlCreateDatabase); 075 addCmd(TBaseType.rrw_create, "domain", ESqlStatementType.sstpostgresqlCreateDomain); 076 addCmd(TBaseType.rrw_create, "extension", ESqlStatementType.sstcreateExtension); 077 078 addCmd(TBaseType.rrw_create, "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 079 addCmd(TBaseType.rrw_create, "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 080 addCmd(TBaseType.rrw_create, "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 081 addCmd(TBaseType.rrw_create, "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 082 addCmd(TBaseType.rrw_create, "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 083 addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 084 addCmd(TBaseType.rrw_create, "filespace", ESqlStatementType.sstgreenplumCreateFilespace); 085 086 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstpostgresqlCreateFunction); 087 088 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 089 addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable); 090 addCmd(TBaseType.rrw_create, "global", "unlocked", "table", ESqlStatementType.sstcreatetable); 091 092 addCmd(TBaseType.rrw_create, "group", ESqlStatementType.sstpostgresqlCreateGroup); 093 094 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstpostgresqlCreateIndex); 095 addCmd(TBaseType.rrw_create, "language", ESqlStatementType.sstpostgresqlCreateLanguage); 096 097 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 098 addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable); 099 addCmd(TBaseType.rrw_create, "local", "unlocked", "table", ESqlStatementType.sstcreatetable); 100 101 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstpostgresqlCreateMaterializedView); 102 103 addCmd(TBaseType.rrw_create, "operator", ESqlStatementType.sstpostgresqlCreateOperator); 104 105 addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "language", ESqlStatementType.sstpostgresqlCreateFunction); 106 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 107 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 108 addCmd(TBaseType.rrw_create, "or", "replace", "role ", ESqlStatementType.sstpostgresqlCreateRole); 109 addCmd(TBaseType.rrw_create, "or", "replace", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 110 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstpostgresqlCreateFunction); 111 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstpostgresqlCreateView); 112 113 addCmd(TBaseType.rrw_create, "readable", "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 114 addCmd(TBaseType.rrw_create, "readable", "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 115 addCmd(TBaseType.rrw_create, "readable", "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 116 addCmd(TBaseType.rrw_create, "readable", "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 117 addCmd(TBaseType.rrw_create, "readable", "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 118 addCmd(TBaseType.rrw_create, "readable", "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 119 120 addCmd(TBaseType.rrw_create, "resource", "queue", ESqlStatementType.sstgreenplumCreateResourceQueue); 121 122 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstpostgresqlCreateRole); 123 addCmd(TBaseType.rrw_create, "rule", ESqlStatementType.sstpostgresqlCreateRule); 124 125 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstpostgresqlCreateSchema); 126 127 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 128 129 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 130 131 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstpostgresqlCreateTablespace); 132 133 addCmd(TBaseType.rrw_create, "temporary", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 134 addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable); 135 addCmd(TBaseType.rrw_create, "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 136 addCmd(TBaseType.rrw_create, "temp", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 137 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable); 138 addCmd(TBaseType.rrw_create, "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 139 140 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger); 141 142 addCmd(TBaseType.rrw_create, "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 143 144 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstpostgresqlCreateType); 145 146 addCmd(TBaseType.rrw_create, "unlocked", "table", ESqlStatementType.sstcreatetable); 147 148 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstpostgresqlCreateUser); 149 150 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstpostgresqlCreateView); 151 152 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstpostgresqlCreateIndex); 153 154 addCmd(TBaseType.rrw_create, "writable", "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 155 addCmd(TBaseType.rrw_create, "writable", "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 156 addCmd(TBaseType.rrw_create, "writable", "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 157 addCmd(TBaseType.rrw_create, "writable", "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 158 addCmd(TBaseType.rrw_create, "writable", "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 159 addCmd(TBaseType.rrw_create, "writable", "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable); 160 161 addCmd(TBaseType.rrw_deallocate, ESqlStatementType.sstpostgresqlDeallocate); 162 163 addCmd(TBaseType.rrw_declare, ESqlStatementType.sstpostgresqlDeclare); 164 165 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 166 167 addCmd(TBaseType.rrw_do, ESqlStatementType.sstpostgresqlDo); 168 169 addCmd(TBaseType.rrw_drop, "aggregate", ESqlStatementType.sstpostgresqlDropAggregate); 170 171 addCmd(TBaseType.rrw_drop, "cast", ESqlStatementType.sstpostgresqlDropCast); 172 173 addCmd(TBaseType.rrw_drop, "conversion", ESqlStatementType.sstpostgresqlDropConversion); 174 175 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstpostgresqlDropDatabase); 176 177 addCmd(TBaseType.rrw_drop, "domain", ESqlStatementType.sstpostgresqlDropDomain); 178 179 addCmd(TBaseType.rrw_drop, "external", "web", "table", ESqlStatementType.sstgreenplumDropExternalTable); 180 addCmd(TBaseType.rrw_drop, "external", "table", ESqlStatementType.sstgreenplumDropExternalTable); 181 182 addCmd(TBaseType.rrw_drop, "filespace", ESqlStatementType.sstgreenplumDropFilespace); 183 184 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstpostgresqlDropFunction); 185 186 addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstpostgresqlDropGroup); 187 188 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex); 189 190 addCmd(TBaseType.rrw_drop, "language", ESqlStatementType.sstpostgresqlDropLanguage); 191 192 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstpostgresqlDropMaterializedView); 193 194 addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstpostgresqlDropOperator); 195 196 addCmd(TBaseType.rrw_drop, "owned", ESqlStatementType.sstpostgresqlDropOwned); 197 198 addCmd(TBaseType.rrw_drop, "procedural", "language", ESqlStatementType.sstpostgresqlDropLanguage); 199 200 addCmd(TBaseType.rrw_drop, "resource", "queue", ESqlStatementType.sstgreenplumDropResourceQueue); 201 202 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstpostgresqlDropRole); 203 addCmd(TBaseType.rrw_drop, "rule", ESqlStatementType.sstpostgresqlDropRule); 204 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstpostgresqlDropSchema); 205 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstpostgresqlDropSequence); 206 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstpostgresqlDropTable); 207 addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstpostgresqlDropTablespace); 208 209 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstpostgresqlDropTrigger); 210 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstpostgresqlDropType); 211 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstpostgresqlDropUser); 212 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstpostgresqlDropView); 213 214 addCmd(TBaseType.rrw_end, ESqlStatementType.sstpostgresqlEnd); 215 216 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstpostgresqlExecute); 217 218 addCmd(TBaseType.rrw_explain, ESqlStatementType.sstpostgresqlExplain); 219 220 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstFetchFrom); 221 222 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstpostgresqlGrant); 223 224 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 225 226 addCmd(TBaseType.rrw_load, ESqlStatementType.sstpostgresqlLoad); 227 228 addCmd(TBaseType.rrw_lock, ESqlStatementType.sstpostgresqlLock); 229 230 addCmd(TBaseType.rrw_move, ESqlStatementType.sstpostgresqlMove); 231 232 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstpostgresqlPrepare); 233 234 addCmd(TBaseType.rrw_greenplum_reassign, "owned", ESqlStatementType.sstpostgresqlReassignOwned); 235 236 addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 237 238 addCmd(TBaseType.rrw_greenplum_reindex, ESqlStatementType.sstpostgresqlReindex); 239 240 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstpostgresqlReleaseSavepoint); 241 addCmd(TBaseType.rrw_release, ESqlStatementType.sstpostgresqlReleaseSavepoint); 242 243 addCmd(TBaseType.rrw_reset, ESqlStatementType.sstpostgresqlReset); 244 245 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstpostgresqlRevoke); 246 247 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstpostgresqlRollback); 248 249 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstpostgresqlSavepoint); 250 251 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 252 253 addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 254 addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 255 addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole); 256 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 257 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 258 addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole); 259 addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 260 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole); 261 addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet); 262 263 addCmd(TBaseType.rrw_show, ESqlStatementType.sstgreenplumShow); 264 265 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstgreenplumStartTransaction); 266 267 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate); 268 269 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 270 271 addCmd(TBaseType.rrw_greenplum_vacuum, ESqlStatementType.sstgreenplumVacuum); 272 addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues); 273 } 274 275 @Override 276 protected String getToken1Str(int token1) { 277 // Greenplum vendor-specific token mappings 278 switch (token1) { 279 case TBaseType.rrw_greenplum_cluster: 280 return "cluster"; 281 case TBaseType.rrw_greenplum_copy: 282 return "copy"; 283 case TBaseType.rrw_greenplum_reassign: 284 return "reassign"; 285 case TBaseType.rrw_greenplum_reindex: 286 return "reindex"; 287 case TBaseType.rrw_greenplum_vacuum: 288 return "vacuum"; 289 case TBaseType.rrw_greenplum_analyse: 290 return "analyse"; 291 default: 292 return null; 293 } 294 } 295 296 @Override 297 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 298 TCustomSqlStatement ret = null; 299 300 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 301 302 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 303 || (pcst.tokencode == TBaseType.cmtslashstar) 304 || (pcst.tokencode == TBaseType.lexspace) 305 || (pcst.tokencode == TBaseType.lexnewline) 306 || (pcst.tokentype == ETokenType.ttsemicolon)) { 307 return null; 308 } 309 310 int lcpos = pcst.posinlist; 311 TSourceTokenList lcsourcetokenlist = pcst.container; 312 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 313 314 //subquery after semicolon or at first line 315 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { // ( 316 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 317 if (k > 0) { 318 ret = new TSelectSqlStatement(this.vendor); 319 } 320 321 return ret; 322 } 323 324 //cte 325 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 326 ret = findcte(pcst); 327 if ((ret != null)) return ret; 328 } 329 330 gnewsqlstatementtype = getStatementTypeForToken(pcst); 331 332 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 333 switch (gnewsqlstatementtype) { // 334 case sstinvalid: { 335 ret = null; 336 337 if (pstate == EFindSqlStateType.stnormal) { 338 if (pcst.tokencode == TBaseType.label_begin) { 339 ret = new TCommonBlock(this.vendor); 340 gnewsqlstatementtype = ret.sqlstatementtype; 341 } else if (pcst.tokencode == TBaseType.rrw_declare) { 342 ret = new TCommonBlock(this.vendor); 343 gnewsqlstatementtype = ret.sqlstatementtype; 344 } else if (pcst.tokencode == TBaseType.rrw_begin) { 345 ret = new TCommonBlock(this.vendor); 346 gnewsqlstatementtype = ret.sqlstatementtype; 347 } else if (pcst.tokencode == TBaseType.rrw_procedure) { 348 ret = new TPlsqlCreateProcedure(this.vendor); 349 gnewsqlstatementtype = ret.sqlstatementtype; 350 } else if (pcst.tokencode == TBaseType.rrw_function) { 351 ret = new TPlsqlCreateFunction(this.vendor); 352 gnewsqlstatementtype = ret.sqlstatementtype; 353 } else if (pcst.tokencode == TBaseType.rrw_package) { 354 ret = new TPlsqlCreatePackage(this.vendor); 355 gnewsqlstatementtype = ret.sqlstatementtype; 356 } 357 } 358 break; 359 } 360 case sstselect: { 361 boolean lcisnewsql = true; 362 363 if (pstate != EFindSqlStateType.stnormal) { 364 if ((lcprevsolidtoken != null)) { 365 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 366 lcisnewsql = false; //subquery 367 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 368 lcisnewsql = false; 369 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 370 lcisnewsql = false; 371 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 372 lcisnewsql = false; 373 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 374 lcisnewsql = false; 375 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 376 lcisnewsql = false; 377 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 378 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 379 lcisnewsql = false; 380 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 381 lcisnewsql = false; 382 } 383 384 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 385 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 386 if ((lcpprevsolidtoken != null)) { 387 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 388 lcisnewsql = false; 389 } 390 } 391 392 } 393 394 395 if ((lccurrentsqlstatement != null)) { 396 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 397 lcisnewsql = false; 398 } 399 400 } 401 402 if (lcisnewsql) 403 ret = new TSelectSqlStatement(this.vendor); 404 405 break; 406 } 407 case sstinsert: { 408 boolean lcisnewsql = true; 409 if (pstate != EFindSqlStateType.stnormal) { 410 if ((lccurrentsqlstatement != null)) { 411 412 } 413 } 414 415 if (lcisnewsql) 416 ret = new TInsertSqlStatement(this.vendor); 417 418 break; 419 } 420 case sstupdate: { 421 boolean lcisnewsql = true; 422 if (pstate != EFindSqlStateType.stnormal) { 423 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 424 if ((lcprevsolidtoken != null)) { // 425 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 426 lcisnewsql = false; 427 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 428 lcisnewsql = false; 429 } 430 431 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 432 if ((lcnextsolidtoken != null)) { 433 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 434 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 435 if (k == 0) lcisnewsql = false; 436 } 437 } 438 439 440 if ((lccurrentsqlstatement != null)) { 441 } 442 } 443 444 if (lcisnewsql) { 445 ret = new TUpdateSqlStatement(this.vendor); 446 ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement 447 } 448 break; 449 } 450 case sstdelete: { 451 boolean lcisnewsql = true; 452 453 if (pstate != EFindSqlStateType.stnormal) { 454 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 455 if ((lcprevsolidtoken != null)) { 456 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 457 lcisnewsql = false; 458 } 459 460 if ((lccurrentsqlstatement != null)) { 461 } 462 } 463 464 if (lcisnewsql) 465 ret = new TDeleteSqlStatement(this.vendor); 466 467 break; 468 } 469 case sstmerge: { 470 ret = new TMergeSqlStatement(this.vendor); 471 ret.sqlstatementtype = gnewsqlstatementtype; 472 break; 473 } 474 case sstoraclecommit: { 475 ret = new TUnknownSqlStatement(this.vendor); 476 ret.sqlstatementtype = gnewsqlstatementtype; 477 break; 478 } 479 case sstoraclerollback: { 480 ret = new TUnknownSqlStatement(this.vendor); 481 ret.sqlstatementtype = gnewsqlstatementtype; 482 break; 483 } 484 case sstoraclesavepoint: { 485 ret = new TUnknownSqlStatement(this.vendor); 486 ret.sqlstatementtype = gnewsqlstatementtype; 487 break; 488 } 489 case sstoraclerevoke: { 490 ret = new TUnknownSqlStatement(this.vendor); 491 ret.sqlstatementtype = gnewsqlstatementtype; 492 break; 493 } 494 case sstoraclegrant: { 495 ret = new TUnknownSqlStatement(this.vendor); 496 ret.sqlstatementtype = gnewsqlstatementtype; 497 break; 498 } 499 case sstoracleanalyze: { 500 ret = new TUnknownSqlStatement(this.vendor); 501 ret.sqlstatementtype = gnewsqlstatementtype; 502 break; 503 } 504 case sstoracletruncate: { 505 ret = new TUnknownSqlStatement(this.vendor); 506 ret.sqlstatementtype = gnewsqlstatementtype; 507 break; 508 } 509 case sstcreatetable: 510 case sstgreenplumCreateExternalTable: { 511 ret = new TCreateTableSqlStatement(this.vendor); 512 break; 513 } 514 case sstoraclecreateview: { 515 ret = new TCreateViewSqlStatement(this.vendor); 516 break; 517 } 518 case sstcreatematerializedview: { 519 ret = new TCreateMaterializedSqlStatement(this.vendor); 520 break; 521 } 522 case sstoraclecreateindex: { 523 ret = new TCreateIndexSqlStatement(this.vendor); 524 break; 525 } 526 case sstoraclecreatedatabase: { 527 ret = new TCreateDatabaseSqlStatement(this.vendor); 528 break; 529 } 530 case sstoracledroptable: { 531 ret = new TDropTableSqlStatement(this.vendor); 532 break; 533 } 534 case sstoracledropview: { 535 ret = new TDropViewSqlStatement(this.vendor); 536 break; 537 } 538 case sstoracledropindex: { 539 ret = new TDropIndexSqlStatement(this.vendor); 540 break; 541 } 542 case sstaltertable: { 543 ret = new TAlterTableStatement(this.vendor); 544 break; 545 } 546 case sstoraclealtersession: { 547 ret = new TAlterSessionStatement(this.vendor); 548 break; 549 } 550 case sstplsql_createprocedure: { 551 ret = new TPlsqlCreateProcedure(this.vendor); 552 ret.sqlstatementtype = gnewsqlstatementtype; 553 break; 554 } 555 case sstplsql_createfunction: { 556 ret = new TPlsqlCreateFunction(this.vendor); 557 ret.sqlstatementtype = gnewsqlstatementtype; 558 break; 559 } 560 case sstplsql_createpackage: { 561 ret = new TPlsqlCreatePackage(this.vendor); 562 ret.sqlstatementtype = gnewsqlstatementtype; 563 break; 564 } 565 case sstplsql_createtrigger: { 566 ret = new TPlsqlCreateTrigger(this.vendor); 567 ret.sqlstatementtype = gnewsqlstatementtype; 568 break; 569 } 570 case sstplsql_execimmestmt: { 571 ret = new TExecImmeStmt(this.vendor); 572 break; 573 } 574 case sstoraclecreatepackagebody: { 575 ret = new TPlsqlCreatePackage(this.vendor); 576 ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage; 577 break; 578 } 579 case sstplsql_createtype_placeholder: { 580 ret = new TPlsqlCreateType_Placeholder(this.vendor); 581 ret.sqlstatementtype = gnewsqlstatementtype; 582 break; 583 } 584 case sstplsql_createtypebody: { 585 ret = new TPlsqlCreateTypeBody(this.vendor); 586 ret.sqlstatementtype = gnewsqlstatementtype; 587 break; 588 } 589 case sstCommentOn: { 590 ret = new TCommentOnSqlStmt(this.vendor); 591 break; 592 } 593 case sstoraclecreatesequence: { 594 ret = new TCreateSequenceStmt(this.vendor); 595 break; 596 } 597 case sstoraclecreatesynonym: { 598 ret = new TCreateSynonymStmt(this.vendor); 599 break; 600 } 601 case sstoraclecreatedirectory: { 602 ret = new TOracleCreateDirectoryStmt(this.vendor); 603 break; 604 } 605 case sstpostgresqlCreateIndex: 606 ret = new TCreateIndexSqlStatement(this.vendor); 607 break; 608 case sstpostgresqlCreateView: 609 ret = new TCreateViewSqlStatement(this.vendor); 610 break; 611 case sstpostgresqlCreateFunction: 612 ret = new TCreateFunctionStmt(this.vendor); 613 break; 614 case sstcreatetrigger: 615 ret = new TCreateTriggerStmt(this.vendor); 616 break; 617 case sstpostgresqlMove: 618 ret = new TMoveStmt(EDbVendor.dbvgreenplum); 619 break; 620 case sstpostgresqlTruncate: 621 ret = new TTruncateStatement(EDbVendor.dbvgreenplum); 622 break; 623 case sstpostgresqlExecute: 624 ret = new TExecuteSqlStatement(EDbVendor.dbvgreenplum); 625 break; 626 case sstValues: 627 ret = new TSelectSqlStatement(EDbVendor.dbvgreenplum); 628 break; 629 case sstpostgresqlDeclare: { 630 boolean lcisnewsql = true; 631 632 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 2, false); 633 if ((lcnextsolidtoken != null)) { 634 if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_CURSOR) { 635 lcisnewsql = false; 636 } 637 } 638 639 640 if (lcisnewsql) 641 ret = new TCommonBlock(this.vendor); 642 else { 643 ret = new TUnknownSqlStatement(this.vendor); 644 } 645 ret.sqlstatementtype = gnewsqlstatementtype; 646 647 break; 648 } 649 case sstpostgresqlSet: 650 ret = new TSetStmt(this.vendor); 651 break; 652 case sstcreateExtension: 653 ret = new TCreateExtensionStmt(this.vendor); 654 break; 655 case sstcall: 656 ret = new TCallStatement(this.vendor); 657 break; 658 case sstpostgresqlCreateSchema: 659 ret = new TCreateSchemaSqlStatement(this.vendor); 660 break; 661 case sstpostgresqlDo: { 662 boolean lcisnewsql = false; 663 664 if (pstate == EFindSqlStateType.stnormal) { 665 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 666 if ((lcnextsolidtoken != null)) { 667 if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_function_delimiter) 668 lcisnewsql = true; 669 } 670 } 671 672 if (lcisnewsql) 673 ret = new TDoExecuteBlockStmt(this.vendor); 674 675 break; 676 } 677 case sstpostgresqlComment: 678 ret = new TCommentOnSqlStmt(this.vendor); 679 break; 680 default: { 681 ret = new TUnknownSqlStatement(this.vendor); 682 ret.sqlstatementtype = gnewsqlstatementtype; 683 break; 684 } 685 } // case 686 687 return ret; 688 } 689}