001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.hive.THiveGrantRoleSqlNode; 005import gudusoft.gsqlparser.nodes.hive.THiveGrantSqlNode; 006import gudusoft.gsqlparser.nodes.mssql.TMssqlStmtStubSqlNode; 007import gudusoft.gsqlparser.stmt.*; 008import gudusoft.gsqlparser.stmt.hive.*; 009import gudusoft.gsqlparser.stmt.mysql.*; 010import gudusoft.gsqlparser.stmt.db2.*; 011import gudusoft.gsqlparser.stmt.oracle.*; 012import gudusoft.gsqlparser.stmt.mssql.*; 013import gudusoft.gsqlparser.stmt.postgresql.TMoveStmt; 014import gudusoft.gsqlparser.stmt.postgresql.TPerformanceStmt; 015import gudusoft.gsqlparser.stmt.snowflake.*; 016import gudusoft.gsqlparser.stmt.sybase.TSybaseDeleteStatistics; 017import gudusoft.gsqlparser.stmt.sybase.TSybaseDumpTran; 018import gudusoft.gsqlparser.stmt.sybase.TSybaseUpdateIndexStatistics; 019import gudusoft.gsqlparser.stmt.sybase.TSybaseWritetext; 020import gudusoft.gsqlparser.stmt.teradata.*; 021import gudusoft.gsqlparser.nodes.teradata.TTeradataStmtStubSqlNode; 022 023 024 025public class TStatementSqlNode extends TParseTreeNode { 026 027 public final static int caseExpression = 41; 028 public final static int truncateTable = 77; 029 030 public final static int stubStmtSqlNode = 80; 031 public final static int rolllbackSqlNode = 82; 032 public final static int commitSqlNode = 83; 033 034 035 public final static int select = 100; 036 public final static int delete = 101; 037 public final static int update = 102; 038 public final static int insert = 103; 039 public final static int createtable = 104; 040 public final static int CreateProcedureSqlNode = 105; 041 public final static int CreateFunctionSqlNode = 106; 042 public final static int block = 107; // sql server block, plsql_block, 043 public final static int returnstmt = 108; 044 public final static int createviewstmt = 110; 045 public final static int ifstmt = 112; 046 public final static int declare = 113; 047 public final static int CreateIndexSqlNode = 116; 048 public final static int DropTableSqlNode = 119; 049 public final static int DropIndexSqlNode = 120; 050 public final static int DropViewSqlNode = 121; 051 public final static int AlterTableSqlNode = 123; 052 public final static int MergeSqlNode = 124; 053 public final static int ContinueSqlNode = 125; 054 public final static int BreakSqlNode = 126; 055 public final static int GrantSqlNode = 127; 056 public final static int FetchSqlNode = 128; 057 public final static int OpenSqlNode = 129; 058 public final static int CloseSqlNode = 130; 059 public final static int ExecuteAsSqlNode = 131; 060 public final static int ExecuteSqlNode = 132; 061 public final static int RevokeSqlNode = 133; 062 public final static int DropDbObjectSqlNode = 135; 063 public final static int CollectStatisticsSqlNode = 136; 064 public final static int callSqlNode = 137; 065 public final static int createDatabaseSqlNode = 151; 066 public final static int createSchemaSqlNode = 153; 067 public final static int DenySqlNode = 155; 068 069 public final static int CommentSqlNode = 185; 070 071 public final static int alterViewSqlNode = 355; 072 public final static int alterIndexSqlNode = 356; 073 public final static int alterDatabaseSqlNode = 357; 074 075 public final static int dropSequenceSqlNode = 364; 076 public final static int dropProcedureSqlNode = 366; 077 public final static int dropDatabaseSqlNode = 367; 078 public final static int dropSchemaSqlNode = 368; 079 public final static int dropFunctionSqlNode = 369; 080 081 public final static int IterateSqlNode = 410; 082 083 084 085 public final static int ExecImmeNode = 514; 086 087 public final static int createSynonymSqlNode = 552; 088 public final static int OracleConstructorSpec = 585; 089 public final static int OracleConstructorBody = 587; 090 public final static int OracleCompoundTriggerBody = 597; 091 092 public final static int EndTranSqlNode = 610; 093 public final static int MssqlSetSqlNode = 611; 094 public final static int BeginTranSqlNode = 612; 095 public final static int MssqlRaiserrorSqlNode = 613; 096 public final static int MssqlGotoSqlNode = 614; 097 public final static int MssqlLabelSqlNode = 615; 098 public final static int MssqlDeallocateSqlNode = 616; 099 public final static int MssqlBeginDialogSqlNode = 619; 100 public final static int MssqlSendOnConversationSqlNode = 620; 101 public final static int MssqlEndConversationSqlNode = 621; 102 public final static int MssqlRevertSqlNode = 622; 103 public final static int MssqlBulkInsert = 625; 104 public final static int MssqlUpdateTextSqlNode = 626; 105 public final static int MssqlStmtStubSqlNode = 627; 106 public final static int MssqlWritetextSqlNode = 628; 107 public final static int MssqlReadtextSqlNode = 629; 108 public final static int MssqlSetRowCountSqlNode = 714; 109 public final static int MssqlThrowSqlNode = 716; 110 public final static int MssqlReconfigureSqlNode = 717; 111 public final static int MssqlTryCatchSqlNode = 721; 112 public final static int MssqlCreateTypeSqlNode = 718; 113 public final static int MssqlCreateXmlSchemaCollectionSqlNode = 724; 114 public final static int MssqlBeginConversationTimerSqlNode = 726; 115 116 public final static int T_DisableEnableTriggerSqlNode = 737; 117 public final static int TCreatePartitionFunctionSqlNode = 747; 118 public final static int TAlterPartitionFunctionSqlNode = 748; 119 public final static int TCreatePartitionSchemeSqlNode = 750; 120 public final static int TAlterPartitionSchemeSqlNode = 751; 121 122 public final static int PrepareSqlNode = 808; 123 public final static int DeallocatePrepareSqlNode = 817; 124 public final static int LeaveSqlNode = 820; 125 126 public final static int T_CompoundSqlNode = 911; 127 128 129 public final static int ForSqlNode = 913; 130 public final static int SetSqlNode = 919; 131 public final static int UnsetSqlNode = 920; 132 public final static int WhileSqlNode = 921; 133 public final static int RepeatSqlNode = 923; 134 public final static int LoopSqlNode = 925; 135 //public final static int ContinueSqlNode = 926; 136 137 public final static int ParseErrorNode = 990; 138 public final static int CreateTypeSqlNode = 992; 139 140 public final static int dummyNode = 1000; 141 public final static int dummyListNode = 1001; 142 143 //teradata 144 public final static int T_TeradataStmtStubSqlNode = 1105; 145 public final static int T_TeradataUsingSqlNode = 1106; 146 public final static int T_TeradataLockSqlNode = 1107; 147 public final static int T_TeradataLockClause = 1108; 148 public final static int T_TeradataGiveSqlNode = 1109; 149 public final static int T_CreateMacroSqlNode = 1110; 150 public final static int T_AbortSqlNode = 1112; 151 public final static int T_SetSessionSqlNode = 1117; 152 153 154 155 //postgresql 156 public final static int performanceSqlNode = 1264; 157 public final static int getDiagSqlNode = 1266; 158 public final static int moveSqlNode = 1268; 159 160 public final static int hiveLoadSqlNode = 1839; 161 public final static int hiveExportSqlNode = 1841; 162 public final static int hiveImportSqlNode = 1843; 163 public final static int hiveSwitchDBSqlNode = 1847; 164 public final static int hiveDropDBSqlNode = 1849; 165 public final static int hiveDescribeSqlNode = 1861; 166 public final static int hiveShowSqlNode = 1863; 167 public final static int msckSqlNode = 1865; 168 public final static int hiveDropFunctionSqlNode = 1867; 169 public final static int analyzeSqlNode = 1869; 170 public final static int LockSqlNode = 1871; 171 public final static int hiveCreateRoleSqlNode = 1873; 172 public final static int hiveGrantSqlNode = 1875; 173 public final static int hiveDropRoleSqlNode = 1887; 174 public final static int hiveShowGrantSqlNode = 1891; 175 public final static int hiveShowRoleGrantSqlNode = 1893; 176 public final static int hiveGrantRoleSqlNode = 1895; 177 public final static int hiveFromQuerySqlNode = 1897; 178 public final static int sybaseDumpTranSqlNode = 2001; 179 public final static int sybaseUpdateIndexStatisticsSqlNode = 2003; 180 public final static int sybaseInsertBulkSqlNode = 2005; 181 public final static int sybaseWritetextSqlNode = 2007; 182 public final static int sybaseDeleteStatisticsSqlNode = 2009; 183 184 public final static int upsertSqlNode = 5520; 185 186 public final static int TSignalSqlNode = 6701; 187 188 public final static int TCopyIntoNode = 6502;//snowflake, must match ENodeType.T_CopyIntoNode 189 public final static int TCreateStageSqlNode = 6505;//snowflake 190 public final static int TCreateStreamSqlNode = 6506;//snowflake 191 public final static int TCreatePipeSqlNode = 6507;//snowflake 192 public final static int TCreateTaskSqlNode= 6508;//snowflake 193 public final static int TCreateSemanticViewSqlNode= 6509;//snowflake 194 public final static int TAlterSessionSqlNode= 6515;//snowflake 195 public final static int TResetSqlNode= 6610;//gaussdb 196 197 198 199 public final static int TDoExecuteBlockSqlNode = 6611;//gaussdb 200 201 // StarRocks 202 public final static int TCreateRoutineLoadSqlNode = 7301;//starrocks 203 public final static int TRoutineLoadJobActionSqlNode = 7302;//starrocks 204 public final static int TAlterRoutineLoadSqlNode = 7303;//starrocks 205 public final static int TShowRoutineLoadSqlNode = 7304;//starrocks 206 public final static int TFilesTableFunction = 7305;//starrocks 207 public final static int TPipeOperator = 7306;//starrocks 208 public final static int TSubmitTaskSqlNode = 7307;//starrocks 209 public final static int TDropTaskSqlNode = 7308;//starrocks 210 public final static int TBeginLoadTransactionSqlNode = 7309;//starrocks 211 public final static int TCommitLoadTransactionSqlNode = 7310;//starrocks 212 public final static int TAbortLoadTransactionSqlNode = 7311;//starrocks 213 public final static int TShowLoadTransactionSqlNode = 7312;//starrocks 214 public final static int TExportSqlNode = 7313;//starrocks 215 public final static int TShowExportSqlNode = 7314;//starrocks 216 public final static int TCancelExportSqlNode = 7315;//starrocks 217 public final static int TCreateResourceGroupSqlNode = 7316;//starrocks 218 public final static int TDropResourceGroupSqlNode = 7317;//starrocks 219 public final static int TResourceGroupClassifier = 7318;//starrocks 220 public final static int TAlterResourceGroupSqlNode = 7319;//starrocks 221 public final static int TShowResourceGroupSqlNode = 7320;//starrocks 222 public final static int TCreateStorageVolumeSqlNode = 7321;//starrocks 223 public final static int TAlterStorageVolumeSqlNode = 7322;//starrocks 224 public final static int TDropStorageVolumeSqlNode = 7323;//starrocks 225 public final static int TShowStorageVolumeSqlNode = 7324;//starrocks 226 public final static int TDescStorageVolumeSqlNode = 7325;//starrocks 227 public final static int TBackupSnapshotSqlNode = 7326;//starrocks 228 public final static int TCreateRepositorySqlNode = 7327;//starrocks 229 public final static int TDropRepositorySqlNode = 7328;//starrocks 230 public final static int TRestoreSnapshotSqlNode = 7329;//starrocks 231 public final static int TShowBackupRestoreSqlNode = 7330;//starrocks 232 public final static int TShowSnapshotSqlNode = 7331;//starrocks 233 public final static int TCancelBackupRestoreSqlNode = 7332;//starrocks 234 public final static int TCacheSelectSqlNode = 7333;//starrocks 235 public final static int TCreateDictionarySqlNode = 7334;//starrocks 236 public final static int TDropDictionarySqlNode = 7335;//starrocks 237 public final static int TRefreshDictionarySqlNode = 7336;//starrocks 238 public final static int TShowDictionarySqlNode = 7337;//starrocks 239 public final static int TShowFunctionsSqlNode = 7338;//starrocks 240 241 public final static int TOnConflictClause = 7341; 242 243 // OceanBase Phase 4 Batch 1 — CREATE/ALTER/DROP TENANT 244 public final static int TOceanbaseCreateTenantSqlNode = 7342; 245 public final static int TOceanbaseAlterTenantSqlNode = 7343; 246 public final static int TOceanbaseDropTenantSqlNode = 7344; 247 248 // OceanBase Phase 4 Batch 2 — CREATE/ALTER/DROP RESOURCE POOL|UNIT 249 public final static int TOceanbaseCreateResourcePoolSqlNode = 7346; 250 public final static int TOceanbaseCreateResourceUnitSqlNode = 7347; 251 public final static int TOceanbaseAlterResourcePoolSqlNode = 7348; 252 public final static int TOceanbaseAlterResourceUnitSqlNode = 7349; 253 public final static int TOceanbaseDropResourcePoolSqlNode = 7350; 254 public final static int TOceanbaseDropResourceUnitSqlNode = 7351; 255 256 // OceanBase Phase 4 Batch 6 — CREATE/ALTER/DROP TABLEGROUP 257 public final static int TOceanbaseCreateTablegroupSqlNode = 7353; 258 public final static int TOceanbaseAlterTablegroupSqlNode = 7354; 259 public final static int TOceanbaseDropTablegroupSqlNode = 7355; 260 261 // OceanBase Phase 4 Batch 8 — CREATE/ALTER/DROP OUTLINE 262 public final static int TOceanbaseCreateOutlineSqlNode = 7357; 263 public final static int TOceanbaseAlterOutlineSqlNode = 7358; 264 public final static int TOceanbaseDropOutlineSqlNode = 7359; 265 266 // OceanBase Phase 4 Batch 3 + 10 — ALTER SYSTEM 267 public final static int TOceanbaseAlterSystemSqlNode = 7360; 268 269 // OceanBase documented syntax gaps — SHOW TENANT family 270 public final static int TOceanbaseShowTenantSqlNode = 7361; 271 272 // OceanBase US-003 — FLASHBACK / PURGE 273 public final static int TOceanbaseFlashbackSqlNode = 7362; 274 public final static int TOceanbasePurgeSqlNode = 7363; 275 276 // OceanBase US-004 Round 3 — XA transaction 277 public final static int TOceanbaseXaSqlNode = 7364; 278 279 // OceanBase US-005 Round 3 — DBLINK DDL 280 public final static int TOceanbaseCreateDblinkSqlNode = 7365; 281 public final static int TOceanbaseDropDblinkSqlNode = 7366; 282 283 // OceanBase US-006 Round 3 — RESTORE POINT 284 public final static int TOceanbaseCreateRestorePointSqlNode = 7368; 285 public final static int TOceanbaseDropRestorePointSqlNode = 7369; 286 287 private TParseTreeNode sqlNode = null; 288 private TCustomSqlStatement stmt = null; 289 290 public TCustomSqlStatement getStmt() { 291 return stmt; 292 } 293 294 private boolean isParsed = true; 295 296 public void setParsed(boolean parsed) { 297 isParsed = parsed; 298 } 299 300 public void setSqlNode(TParseTreeNode sqlNode) { 301 this.sqlNode = sqlNode; 302 } 303 304 public void init(Object arg1){ 305 if (arg1 instanceof TCustomSqlStatement){ 306 stmt = (TCustomSqlStatement)arg1; 307 }else{ 308 sqlNode = (TParseTreeNode)arg1; 309 } 310 } 311 312 private TObjectName endlabelName; 313 314 public void setEndlabelName(TObjectName endlabelName) { 315 this.endlabelName = endlabelName; 316 } 317 318 public TObjectName getEndlabelName() { 319 320 return endlabelName; 321 } 322 323 private TObjectName labelName; 324 325 public void setLabelName(TObjectName labelName) { 326 this.labelName = labelName; 327 } 328 329 public TObjectName getLabelName() { 330 331 return labelName; 332 } 333 334 public void init(Object arg1,Object arg2){ 335 this.init(arg1); 336 this.labelName = (TObjectName)arg2; 337 } 338 339 340 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 341 if (stmt != null){ 342 // stmt in plsql already create stmt descends from TCustomSqlStatement 343 if (!isParsed){ 344 stmt.parsestatement(psql,isParsed); 345 }else{ 346 stmt.doParseStatement(psql); 347 } 348 if (stmt.getLabelName() == null){ 349 stmt.setLabelName(this.labelName); 350 } 351 return; 352 } 353 354 if (sqlNode == null) return ; 355 356 switch(sqlNode.getNodeType()){ 357 case(select): 358// TSelectSqlNode selectSqlNode = (TSelectSqlNode)sqlNode; 359// if (selectSqlNode.isHiveFromQuery()){ 360// stmt = new THiveFromQuery(psql.dbvendor); 361// }else{ 362// stmt = new TSelectSqlStatement(psql.dbvendor); 363// } 364 365 stmt = new TSelectSqlStatement(psql.dbvendor); 366 break; 367 case(delete): 368 stmt = new TDeleteSqlStatement(psql.dbvendor); 369 break; 370 case(update): 371 stmt = new TUpdateSqlStatement(psql.dbvendor); 372 break; 373 case(insert): 374 stmt = new TInsertSqlStatement(psql.dbvendor); 375 break; 376 case(MssqlBulkInsert): 377 stmt = new TMssqlBulkInsert(psql.dbvendor); 378 break; 379 case(MssqlUpdateTextSqlNode): 380 stmt = new TMssqlUpdateText(psql.dbvendor); 381 break; 382 case(MssqlWritetextSqlNode): 383 stmt = new TMssqlWriteText(psql.dbvendor); 384 break; 385 case(MssqlReadtextSqlNode): 386 stmt = new TMssqlReadText(psql.dbvendor); 387 break; 388 case (MssqlSetRowCountSqlNode): 389 stmt = new TMssqlSetRowCount(psql.dbvendor); 390 break; 391 case (MssqlThrowSqlNode): 392 stmt = new TMssqlThrow(psql.dbvendor); 393 break; 394 case MssqlReconfigureSqlNode: 395 stmt = new TReconfigure(psql.dbvendor); 396 break; 397 case MssqlCreateTypeSqlNode: 398 stmt = new TMssqlCreateType(psql.dbvendor); 399 break; 400 case(createtable): 401 stmt = new TCreateTableSqlStatement(psql.dbvendor); 402 break; 403 case(declare): 404 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvhana)){ 405 stmt = new TMssqlDeclare(psql.dbvendor); 406 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||(psql.dbvendor == EDbVendor.dbvbigquery)){ 407 stmt = new TMssqlDeclare(psql.dbvendor); 408 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 409 stmt = new TMssqlDeclare(psql.dbvendor); 410 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 411 TDeclareSqlNode declareNode = (TDeclareSqlNode)sqlNode; 412 switch(declareNode.getDeclareType()){ 413 case variable: 414 stmt = new TDb2SqlVariableDeclaration(psql.dbvendor); 415 break; 416 case conditions: 417 stmt = new TDb2ConditionDeclaration(psql.dbvendor); 418 break; 419 case returnCode: 420 stmt = new TDb2ReturnCodesDeclaration(psql.dbvendor); 421 break; 422 case statement: 423 stmt = new TDb2StatementDeclaration(psql.dbvendor); 424 break; 425 case cursor: 426 stmt = new TDb2DeclareCursorStatement(psql.dbvendor); 427 break; 428 case handlers: 429 stmt = new TDb2HandlerDeclaration(psql.dbvendor); 430 break; 431 default: 432 break; 433 } 434 } 435 break; 436 case T_CompoundSqlNode: //db2 compound sql node 437 stmt = new TCommonBlock(psql.dbvendor); 438 break; 439 case(block): 440 switch (psql.dbvendor){ 441 case dbvmssql: 442 case dbvsybase: 443 // case dbvazuresql: 444 // Check if this is a TRY/CATCH block by examining tokens 445 if (isTryCatchBlock(sqlNode)) { 446 stmt = new TMssqlTryCatch(psql.dbvendor); 447 } else { 448 stmt = new TMssqlBlock(psql.dbvendor); 449 } 450 break; 451 case dbvsybasease: 452 // Check if this is a TRY/CATCH block by examining tokens 453 if (isTryCatchBlock(sqlNode)) { 454 stmt = new TMssqlTryCatch(psql.dbvendor); 455 } else { 456 stmt = new TMssqlBlock(psql.dbvendor); 457 } 458 break; 459 case dbvsqlanywhere: 460 // Check if this is a TRY/CATCH block by examining tokens 461 if (isTryCatchBlock(sqlNode)) { 462 stmt = new TMssqlTryCatch(psql.dbvendor); 463 } else { 464 stmt = new TMssqlBlock(psql.dbvendor); 465 } 466 break; 467 case dbvsybaseiq: 468 // Check if this is a TRY/CATCH block by examining tokens 469 if (isTryCatchBlock(sqlNode)) { 470 stmt = new TMssqlTryCatch(psql.dbvendor); 471 } else { 472 stmt = new TMssqlBlock(psql.dbvendor); 473 } 474 break; 475 case dbvoracle: 476 case dbvpostgresql: 477 case dbvteradata: 478 case dbvbigquery: 479 case dbvsnowflake: 480 case dbvmysql: 481 case dbvnetezza: 482 case dbvgreenplum: 483 case dbvgaussdb: 484 case dbvedb: 485 case dbvredshift: 486 case dbvhana: 487 case dbvdameng: 488 case dbvoceanbase: 489 490 stmt = new TCommonBlock(psql.dbvendor); 491 break; 492 default: 493 System.out.println("block type not implemented: "+psql.dbvendor.toString()); 494 break; 495 } 496// if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)){ 497// stmt = new TMssqlBlock(psql.dbvendor); 498// }else if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvpostgresql) 499// ||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvbigquery)){ 500// stmt = new TCommonBlock(psql.dbvendor); 501// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 502// stmt = new TCommonBlock(psql.dbvendor); 503// }else{ 504// System.out.println("block type not implemented: "+psql.dbvendor.toString()); 505// } 506 break; 507 case(MssqlTryCatchSqlNode): 508 stmt = new TMssqlTryCatch(psql.dbvendor); 509 break; 510 case(returnstmt): 511 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvhana)){ 512 stmt = new TMssqlReturn(psql.dbvendor); 513 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 514 stmt = new TDb2ReturnStmt(psql.dbvendor); 515 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 516 stmt = new TReturnStmt(psql.dbvendor); 517 } 518 break; 519 case(ifstmt): 520 switch (psql.dbvendor){ 521 case dbvmssql: 522 case dbvsybase: 523 stmt = new TMssqlIfElse(psql.dbvendor); 524 if ((sqlNode instanceof TIfSqlNode) 525 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 526 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 527 } 528 break; 529 case dbvsybasease: 530 stmt = new TMssqlIfElse(psql.dbvendor); 531 if ((sqlNode instanceof TIfSqlNode) 532 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 533 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 534 } 535 break; 536 case dbvsqlanywhere: 537 stmt = new TMssqlIfElse(psql.dbvendor); 538 if ((sqlNode instanceof TIfSqlNode) 539 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 540 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 541 } 542 break; 543 case dbvsybaseiq: 544 stmt = new TMssqlIfElse(psql.dbvendor); 545 if ((sqlNode instanceof TIfSqlNode) 546 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 547 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 548 } 549 break; 550 case dbvmysql: 551 stmt = new TMySQLIfStmt(psql.dbvendor); 552 break; 553 case dbvbigquery: 554 case dbvdb2: 555 case dbvhana: 556 stmt = new TIfStmt(psql.dbvendor); 557 break; 558 } 559 560 561 break; 562 case (CreateProcedureSqlNode): 563 if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvgaussdb)||(psql.dbvendor == EDbVendor.dbvedb)){ 564 // plsql procedure declaration or specification 565 stmt = new TPlsqlCreateProcedure(EDbVendor.dbvoracle); 566 ((TPlsqlCreateProcedure)stmt).setKind(((TCreateProcedureSqlNode)sqlNode).getKind()); 567 }else if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)){ 568 stmt = new TMssqlCreateProcedure(psql.dbvendor); 569 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 570 stmt = new TCreateProcedureStmt(psql.dbvendor); 571 }else{ 572 System.out.println("create procedure not implemented: "+psql.dbvendor.toString()); 573 } 574 break; 575 case (CreateFunctionSqlNode): 576 switch (psql.dbvendor){ 577 case dbvoracle: 578 stmt = new TPlsqlCreateFunction(psql.dbvendor); 579 ((TPlsqlCreateFunction)stmt).setKind(((TCreateFunctionSqlNode)sqlNode).getKind()); 580 break; 581 case dbvdameng: 582 stmt = new TPlsqlCreateFunction(psql.dbvendor); 583 ((TPlsqlCreateFunction)stmt).setKind(((TCreateFunctionSqlNode)sqlNode).getKind()); 584 break; 585 case dbvmssql: 586 case dbvsybase: 587 stmt = new TMssqlCreateFunction(psql.dbvendor); 588 break; 589 case dbvsybasease: 590 stmt = new TMssqlCreateFunction(psql.dbvendor); 591 break; 592 case dbvsqlanywhere: 593 stmt = new TMssqlCreateFunction(psql.dbvendor); 594 break; 595 case dbvsybaseiq: 596 stmt = new TMssqlCreateFunction(psql.dbvendor); 597 break; 598 case dbvdb2: 599 case dbvgreenplum: 600 case dbvbigquery: 601 case dbvgaussdb: 602 case dbvedb: 603 stmt = new TCreateFunctionStmt(psql.dbvendor); 604 break; 605 case dbvhive: 606 stmt = new THiveCreateFunction(psql.dbvendor); 607 break; 608 default: 609 System.out.println("create function not implemented: "+psql.dbvendor.toString()); 610 break; 611 } 612 break; 613 case (ExecImmeNode): 614 stmt = new TExecImmeStmt(psql.dbvendor); 615 break; 616 case (ContinueSqlNode): 617 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)) { 618 stmt = new TMssqlContinue(psql.dbvendor); 619 }else if (psql.dbvendor == EDbVendor.dbvoracle){ 620 stmt = new TPlsqlContinue(psql.dbvendor); 621 } 622 break; 623 case (BreakSqlNode): 624 stmt = new TBreakStmt(psql.dbvendor); 625 break; 626 case (GrantSqlNode): 627 stmt = new TGrantStmt(psql.dbvendor); 628 break; 629 case (DenySqlNode): 630 stmt = new TDenyStmt(psql.dbvendor); 631 break; 632 case (RevokeSqlNode): 633 stmt = new TRevokeStmt(psql.dbvendor); 634 break; 635 case (FetchSqlNode): 636 if ((psql.dbvendor == EDbVendor.dbvmssql) 637 ||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvhana)){ 638 stmt = new TMssqlFetch(psql.dbvendor); 639 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 640 stmt = new TDb2FetchCursorStmt(psql.dbvendor); 641 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 642 stmt = new TFetchStmt(psql.dbvendor); 643 } 644 break; 645 case (OpenSqlNode): 646 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvhana)){ 647 stmt = new TMssqlOpen(psql.dbvendor); 648 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 649 stmt = new TDb2OpenCursorStmt(psql.dbvendor); 650 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 651 stmt = new TOpenStmt(psql.dbvendor); 652 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 653 stmt = new TMssqlOpen(psql.dbvendor); 654 } 655 break; 656 case (CloseSqlNode): 657 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvhana)){ 658 stmt = new TMssqlClose(psql.dbvendor); 659 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 660 stmt = new TDb2CloseCursorStmt(psql.dbvendor); 661 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 662 stmt = new TCloseStmt(EDbVendor.dbvteradata); 663 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 664 stmt = new TCloseStmt(psql.dbvendor); 665 }else if (psql.dbvendor == EDbVendor.dbvredshift){ 666 stmt = new TCloseStmt(psql.dbvendor); 667 } 668 break; 669 case (CreateIndexSqlNode): 670 stmt = new TCreateIndexSqlStatement(psql.dbvendor); 671 break; 672 case (DropTableSqlNode): 673 stmt = new TDropTableSqlStatement(psql.dbvendor); 674 break; 675 case (DropIndexSqlNode): 676 stmt = new TDropIndexSqlStatement(psql.dbvendor); 677 break; 678 case (DropViewSqlNode): 679 stmt = new TDropViewSqlStatement(psql.dbvendor); 680 break; 681 case (DropDbObjectSqlNode): 682 stmt = new TMssqlDropDbObject(psql.dbvendor); 683 break; 684 case (AlterTableSqlNode): 685 stmt = new TAlterTableStatement(psql.dbvendor); 686 break; 687 case (alterViewSqlNode): 688 stmt = new TAlterViewStatement(psql.dbvendor); 689 break; 690 case (alterDatabaseSqlNode): 691 stmt = new TAlterDatabaseStmt(psql.dbvendor); 692 break; 693 case (alterIndexSqlNode): 694 stmt = new TAlterIndexStmt(psql.dbvendor); 695 break; 696 case (MssqlDeallocateSqlNode): 697 stmt = new TMssqlDeallocate(psql.dbvendor); 698 break; 699 case(ExecuteSqlNode): 700 switch (psql.dbvendor){ 701 case dbvteradata: 702 stmt = new TTeradataExecute(psql.dbvendor); 703 break; 704 case dbvpostgresql: 705 case dbvsnowflake: 706 case dbvnetezza: 707 case dbvredshift: 708 stmt = new TExecuteSqlStatement(psql.dbvendor); 709 break; 710 default: 711 stmt = new TMssqlExecute(psql.dbvendor); 712 break; 713 } 714 715 break; 716 case(ExecuteAsSqlNode): 717 stmt = new TMssqlExecuteAs(psql.dbvendor); 718 break; 719 case(BeginTranSqlNode): 720 stmt = new TBeginTran(psql.dbvendor); 721 break; 722 case(EndTranSqlNode): 723 stmt = new TEndTran(psql.dbvendor); 724 break; 725 case(MssqlRaiserrorSqlNode): 726 stmt = new TMssqlRaiserror(psql.dbvendor); 727 break; 728 case(MssqlLabelSqlNode): 729 stmt = new TMssqlLabel(psql.dbvendor); 730 break; 731 case(MssqlGotoSqlNode): 732 stmt = new TMssqlGoTo(psql.dbvendor); 733 break; 734 case(MssqlRevertSqlNode): 735 stmt = new TMssqlRevert(psql.dbvendor); 736 break; 737 case MssqlSendOnConversationSqlNode: 738 stmt = new TMssqlSendOnConversation(psql.dbvendor); 739 break; 740 case(MssqlEndConversationSqlNode): 741 stmt = new TMssqlEndConversation(psql.dbvendor); 742 break; 743 case(MssqlBeginDialogSqlNode): 744 stmt = new TMssqlBeginDialog(psql.dbvendor); 745 break; 746 case MssqlSetSqlNode: 747 stmt = new TMssqlSet(psql.dbvendor); 748 break; 749 case LoopSqlNode: 750 switch (psql.dbvendor){ 751 case dbvdb2: 752 stmt = new TDb2LoopStmt(EDbVendor.dbvdb2); 753 break; 754 default: 755 stmt = new TLoopStmt(psql.dbvendor); 756 break; 757 758 } 759 break; 760 case RepeatSqlNode: 761 stmt = new TRepeatStmt(psql.dbvendor); 762// if (psql.dbvendor == EDbVendor.dbvdb2){ 763// stmt = new TRepeatStmt(EDbVendor.dbvdb2); 764// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 765// stmt = new TMySQLRepeatStmt(EDbVendor.dbvmysql); 766// } 767 break; 768 case WhileSqlNode: 769 stmt = new TWhileStmt(psql.dbvendor); 770// if (psql.dbvendor == EDbVendor.dbvdb2){ 771// stmt = new TWhileStmt(EDbVendor.dbvdb2); 772// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 773// stmt = new TMySQLWhileStmt(EDbVendor.dbvmysql); 774// } 775 break; 776 case ForSqlNode: 777 stmt = new TForStmt(dbvendor); 778 break; 779 case SetSqlNode: 780 switch (psql.dbvendor){ 781 case dbvhive: 782 stmt = new THiveSet(EDbVendor.dbvhive); 783 break; 784 case dbvmysql: 785 case dbvbigquery: 786 case dbvteradata: 787 case dbvgaussdb: 788 case dbvedb: 789 case dbvsparksql: 790 stmt = new TSetStmt(psql.dbvendor); 791 break; 792 default: 793 stmt = new TDb2SetVariableStmt(EDbVendor.dbvdb2); 794 break; 795 } 796 797 break; 798 case UnsetSqlNode: 799 stmt = new TUnsetStmt(psql.dbvendor); 800 break; 801 case caseExpression: 802 switch (psql.dbvendor){ 803 case dbvdb2: 804 stmt = new TDb2CaseStmt(EDbVendor.dbvdb2); 805 break; 806 case dbvmysql: 807 stmt = new TMySQLCaseStmt(EDbVendor.dbvmysql); 808 break; 809 case dbvteradata: 810 stmt = new TCaseStmt(EDbVendor.dbvmysql); 811 break; 812 default: 813 break; 814 } 815 816 break; 817 case(MssqlStmtStubSqlNode): 818 //TMssqlStmtStubSqlNode stmt1 = (TMssqlStmtStubSqlNode)sqlNode; 819 if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlset){ 820 stmt = new TMssqlSet(psql.dbvendor); 821 //((TMssqlSet)stmt).setSetType(TBaseType.mstSetCmd); 822 stmt.setStartToken(sqlNode); 823 stmt.setEndToken(sqlNode); 824 }else if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlupdatestatistics){ 825 stmt = new TMssqlUpdateStatistics(psql.dbvendor); 826 }else{ 827 stmt = new TMssqlStmtStub(psql.dbvendor); 828 ((TMssqlStmtStub)stmt).setSqlStatementType( ((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() ); 829 } 830 break; 831 case T_TeradataStmtStubSqlNode: 832 switch (((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType()){ 833 case sstRevoke: 834 stmt = new TRevokeStmt(psql.dbvendor); 835 break; 836 default: 837 stmt = new TTeradataStmtStub(psql.dbvendor); 838 ((TTeradataStmtStub)stmt).sqlstatementtype = ( ((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType() ); 839 } 840 break; 841 case stubStmtSqlNode: 842 TStubStmtSqlNode stubNode = (TStubStmtSqlNode)sqlNode; 843 844 switch(stubNode.getSqlStatementType()){ 845 case sstdb2signal: 846 case sstsignal: 847 stmt = new TSignalStmt(psql.dbvendor); 848 break; 849 default: 850 break; 851 } 852 853 if (psql.dbvendor == EDbVendor.dbvdb2){ 854 switch(stubNode.getSqlStatementType()){ 855 case sstdb2iterate: 856 stmt = new TDb2IterateStmt(EDbVendor.dbvdb2); 857 break; 858 case sstdb2call: 859 stmt = new TDb2CallStmt(EDbVendor.dbvdb2); 860 break; 861 case sstdb2leave: 862 stmt = new TDb2LeaveStmt(EDbVendor.dbvdb2); 863 break; 864 case sstdb2signal: 865 break; 866 case sstdb2goto: 867 stmt = new TDb2GotoStmt(EDbVendor.dbvdb2); 868 break; 869 case sstdb2set: 870 stmt = new TDb2SetStmt(EDbVendor.dbvdb2); 871 break; 872 default: 873 stmt = new TDb2StmtStub(EDbVendor.dbvdb2); 874 ((TDb2StmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 875 break; 876 } 877 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 878 stmt = new TMySQLStmtStub(EDbVendor.dbvmysql); 879 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 880 }else if (psql.dbvendor == EDbVendor.dbvbigquery){ 881 stmt = new TMySQLStmtStub(EDbVendor.dbvbigquery); 882 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 883 } 884 break; 885 case(dummyNode): 886 TDummy dummy = (TDummy)sqlNode; 887 888 switch (dummy.sqlstatementtype){ 889 case sstcommit: 890 stmt = new TCommitStmt(psql.dbvendor); 891 break; 892 case sstmssqlcommit: 893 stmt = new TMssqlCommit(psql.dbvendor); 894 break; 895 case sstmssqlrollback: 896 stmt = new TMssqlRollback(psql.dbvendor); 897 break; 898 case sstrollback: 899 stmt = new TRollbackStmt(psql.dbvendor); 900 break; 901 case sstmssqlsavetran: 902 stmt = new TMssqlSaveTran(psql.dbvendor); 903 break; 904 case sstmssqlprint: 905 stmt = new TMssqlPrint(psql.dbvendor); 906 break; 907 case sstmssqluse: 908 stmt = new TUseDatabase(psql.dbvendor); 909 break; 910 case sstmssqlgo: 911 stmt = new TMssqlGo(psql.dbvendor); 912 break; 913 case sstHelpProcedure: 914 stmt = new THelpProcedure(psql.dbvendor); 915 break; 916 case sstShowProcedure: 917 stmt = new TShowProcedure(psql.dbvendor); 918 break; 919 case sstRevoke: 920 stmt = new TRevokeStmt(psql.dbvendor); 921 break; 922 case sstAllocate: 923 stmt = new TAllocateStmt(psql.dbvendor); 924 break; 925 case sstDrop: 926 stmt = new TDropStmt(psql.dbvendor); 927 break; 928 case sstmssqlDropSecurityPolicy: 929 stmt = new TMssqlDropSecurityPolicy(psql.dbvendor); 930 break; 931 case sstbegintran: 932 stmt = new TBeginTran(psql.dbvendor); 933 break; 934 default: 935 // Any other statement the grammar models as a bare 936 // TDummy. Without this the switch left stmt null, so 937 // the statement PARSED FINE standalone and became a 938 // token-less nothing the moment it was used as an 939 // embedded statement -- an IF/WHILE body most visibly. 940 // 941 // That stayed invisible until TMssqlIfElse began 942 // reporting a missing body (mantis 4686), at which point 943 // valid T-SQL from Microsoft's own documentation -- 944 // "IF EXISTS (...) DROP PARTITION FUNCTION ..." -- began 945 // failing to parse and SQL Server coverage fell from 946 // 290/290 to 289/290. 947 // 948 // Blast radius, measured by sweeping every statement in 949 // the SQL Server corpus through "parses standalone but 950 // not as an IF body", pre-fix build vs post-fix build: 951 // 14 corpus statements over 12 distinct constructs, and 952 // 0 regressions. Only DROP PARTITION FUNCTION surfaced 953 // in coverage, because it is the only one the corpus 954 // happens to write inside an IF. The other 11 were 955 // equally broken and equally silent: 956 // ALTER SECURITY POLICY, CREATE CREDENTIAL, 957 // CREATE DATABASE ENCRYPTION KEY, 958 // CREATE DATABASE SCOPED CREDENTIAL, 959 // CREATE EVENT SESSION, CREATE EXTERNAL DATA SOURCE, 960 // CREATE EXTERNAL LANGUAGE, CREATE MASTER KEY, 961 // CREATE SELECTIVE XML INDEX, DROP PARTITION SCHEME, 962 // DROP SYNONYM 963 // Hence a default rather than a case per construct: the 964 // next TDummy-modelled statement is then correct by 965 // construction instead of silently broken here. Carrying 966 // the node's own sqlstatementtype keeps it identifiable 967 // rather than flattened to sstunknown. 968 // 969 // NOT fixed here, and pre-existing: 85 further corpus 970 // statements still fail as an IF body (ALTER RESOURCE 971 // GOVERNOR, BULK INSERT, CREATE SCHEMA, ...). They do 972 // not reach this switch, so they are a separate 973 // limitation -- this default did not change them in 974 // either direction. 975 stmt = new TUnknownSqlStatement(psql.dbvendor); 976 stmt.sqlstatementtype = dummy.sqlstatementtype; 977 break; 978 } 979 break; 980 case(ParseErrorNode): 981 stmt = new TParseErrorSqlStatement(psql.dbvendor); 982 break; 983 case (truncateTable): 984 stmt = new TTruncateStatement(psql.dbvendor); 985 break; 986 case(hiveLoadSqlNode): 987 stmt = new THiveLoad(EDbVendor.dbvhive); 988 break; 989 case (hiveExportSqlNode): 990 stmt = new THiveExportTable(EDbVendor.dbvhive); 991 break; 992 case (hiveImportSqlNode): 993 stmt = new THiveImportTable(EDbVendor.dbvhive); 994 break; 995 case (createDatabaseSqlNode): 996 stmt = new TCreateDatabaseSqlStatement(psql.dbvendor); 997 break; 998 case (hiveSwitchDBSqlNode): 999 stmt = new THiveSwitchDatabase(psql.dbvendor); 1000 break; 1001 case (hiveDropDBSqlNode): 1002 stmt = new THiveDropDatabase(psql.dbvendor); 1003 break; 1004 case (hiveDescribeSqlNode): 1005 stmt = new THiveDescribe(psql.dbvendor); 1006 break; 1007 case (hiveShowSqlNode): 1008 stmt = new THiveShow(psql.dbvendor); 1009 break; 1010 case (msckSqlNode): 1011 stmt = new TMSCKStmt(psql.dbvendor); 1012 break; 1013 case (hiveDropFunctionSqlNode): 1014 stmt = new THiveDropFunction(psql.dbvendor); 1015 break; 1016 case (analyzeSqlNode): 1017 stmt = new TAnalyzeStmt(psql.dbvendor); 1018 break; 1019 case (LockSqlNode): 1020 stmt = new TLockTableStmt(psql.dbvendor); 1021 break; 1022 case (hiveCreateRoleSqlNode): 1023 stmt = new THiveCreateRole(psql.dbvendor); 1024 break; 1025 case (hiveGrantSqlNode): 1026 if (((THiveGrantSqlNode)sqlNode).isRevoke()){ 1027 stmt = new THiveRevoke(EDbVendor.dbvhive); 1028 }else{ 1029 stmt = new THiveGrant(EDbVendor.dbvhive); 1030 } 1031 break; 1032 case (hiveShowGrantSqlNode): 1033 stmt = new THiveShowGrant(psql.dbvendor); 1034 break; 1035 case (hiveDropRoleSqlNode): 1036 stmt = new THiveDropRole(psql.dbvendor); 1037 break; 1038 case (hiveShowRoleGrantSqlNode): 1039 stmt = new THiveShowRoleGrant(psql.dbvendor); 1040 break; 1041 case (hiveGrantRoleSqlNode): 1042 if(((THiveGrantRoleSqlNode)sqlNode).isRevoke()){ 1043 stmt = new THiveRevokeRole(psql.dbvendor); 1044 }else{ 1045 stmt = new THiveGrantRole(psql.dbvendor); 1046 } 1047 1048 break; 1049// case hiveFromQuerySqlNode: 1050// stmt = new THiveFromQuery(EDbVendor.dbvhive); 1051// break; 1052 case sybaseDumpTranSqlNode: 1053 stmt = new TSybaseDumpTran(psql.dbvendor); 1054 break; 1055 case sybaseUpdateIndexStatisticsSqlNode: 1056 stmt = new TSybaseUpdateIndexStatistics(psql.dbvendor); 1057 break; 1058 case sybaseWritetextSqlNode: 1059 stmt = new TSybaseWritetext(psql.dbvendor); 1060 break; 1061 case sybaseDeleteStatisticsSqlNode: 1062 stmt = new TSybaseDeleteStatistics(psql.dbvendor); 1063 break; 1064 case callSqlNode: 1065 stmt = new TCallStatement(psql.dbvendor); 1066 break; 1067 case moveSqlNode: 1068 stmt = new TMoveStmt(EDbVendor.dbvpostgresql); 1069 break; 1070 case MergeSqlNode: 1071 stmt = new TMergeSqlStatement(psql.dbvendor) ; 1072 break; 1073 case dropSequenceSqlNode: 1074 stmt = new TDropSequenceStmt(psql.dbvendor); 1075 break; 1076 case dropProcedureSqlNode: 1077 stmt = new TDropProcedureStmt(psql.dbvendor); 1078 break; 1079 case OracleCompoundTriggerBody: 1080 stmt = new TCompoundTriggerBody(psql.dbvendor); 1081 break; 1082 case createSynonymSqlNode: 1083 stmt = new TCreateSynonymStmt(psql.dbvendor); 1084 break; 1085 case T_TeradataLockSqlNode: 1086 stmt = new TTeradataLock(psql.dbvendor); 1087 break; 1088 case T_AbortSqlNode: 1089 stmt = new TTeradataAbort(psql.dbvendor); 1090 break; 1091 case MssqlCreateXmlSchemaCollectionSqlNode: 1092 stmt = new TMssqlCreateXmlSchemaCollectionStmt(psql.dbvendor); 1093 break; 1094 case DeallocatePrepareSqlNode: 1095 stmt = new TMySQLDeallocatePrepareStmt(psql.dbvendor); 1096 break; 1097 case createSchemaSqlNode: 1098 stmt = new TCreateSchemaSqlStatement(psql.dbvendor); 1099 break; 1100 case dropDatabaseSqlNode: 1101 stmt = new TDropDatabaseStmt(psql.dbvendor); 1102 break; 1103 case dropSchemaSqlNode: 1104 stmt = new TDropSchemaSqlStatement(psql.dbvendor); 1105 break; 1106 case MssqlBeginConversationTimerSqlNode: 1107 stmt = new TMssqlBeginConversationTimer(psql.dbvendor); 1108 break; 1109 case getDiagSqlNode: 1110 stmt = new TGetDiagStmt(psql.dbvendor); 1111 break; 1112 case dropFunctionSqlNode: 1113 stmt = new TDropFunctionStmt(psql.dbvendor); 1114 break; 1115 case performanceSqlNode: 1116 stmt = new TPerformanceStmt(psql.dbvendor); 1117 break; 1118 case PrepareSqlNode: 1119 stmt = new TPrepareStmt(psql.dbvendor); 1120 break; 1121 case upsertSqlNode: 1122 stmt = new TUpsertStmt(psql.dbvendor); 1123 break; 1124 case createviewstmt: 1125 stmt = new TCreateViewSqlStatement(dbvendor); 1126 break; 1127 case LeaveSqlNode: 1128 stmt = new TLeaveStmt(dbvendor); 1129 break; 1130 case TSignalSqlNode: 1131 stmt = new TSignalStmt(dbvendor); 1132 break; 1133 case rolllbackSqlNode: 1134 stmt = new TRollbackStmt(dbvendor); 1135 break; 1136 case commitSqlNode: 1137 stmt = new TCommitStmt(dbvendor); 1138 break; 1139 case IterateSqlNode: 1140 stmt = new TIterateStmt(dbvendor); 1141 break; 1142 case T_SetSessionSqlNode: 1143 stmt = new TTeradataSetSession(dbvendor); 1144 break; 1145 case T_DisableEnableTriggerSqlNode: 1146 stmt = new TDisableEnableTriggerStmt(dbvendor); 1147 break; 1148 case CommentSqlNode: 1149 stmt = new TCommentOnSqlStmt(dbvendor); 1150 break; 1151 case CreateTypeSqlNode: 1152 stmt = new TCreateTypeStmt(dbvendor); 1153 break; 1154 case TCopyIntoNode: 1155 stmt = new TSnowflakeCopyIntoStmt(dbvendor); 1156 break; 1157 case TCreateStageSqlNode: 1158 stmt = new TCreateStageStmt(dbvendor); 1159 break; 1160 case TCreateStreamSqlNode: 1161 stmt = new TCreateStreamStmt(dbvendor); 1162 break; 1163 case TCreatePipeSqlNode: 1164 stmt = new TCreatePipeStmt(dbvendor); 1165 break; 1166 case CollectStatisticsSqlNode: 1167 stmt = new TTeradataCollectStatistics(dbvendor); 1168 break; 1169 case TResetSqlNode: 1170 stmt = new TResetStmt(dbvendor); 1171 break; 1172 case TAlterSessionSqlNode: 1173 stmt = new TAlterSessionStatement(dbvendor); 1174 break; 1175 case TCreateTaskSqlNode: 1176 stmt = new TCreateTaskStmt(dbvendor); 1177 break; 1178 case TCreatePartitionFunctionSqlNode: 1179 stmt = new TCreatePartitionFunctionStmt(dbvendor); 1180 break; 1181 case TAlterPartitionFunctionSqlNode: 1182 stmt = new TAlterPartitionFunctionStmt(dbvendor); 1183 break; 1184 case TCreatePartitionSchemeSqlNode: 1185 stmt = new TCreatePartitionSchemeSqlStatement(dbvendor); 1186 break; 1187 case TAlterPartitionSchemeSqlNode: 1188 stmt = new TAlterPartitionSchemeSqlStatement(dbvendor); 1189 break; 1190 case TCreateRoutineLoadSqlNode: 1191 stmt = new TCreateRoutineLoadStmt(dbvendor); 1192 break; 1193 case TSubmitTaskSqlNode: 1194 stmt = new TSubmitTaskStmt(dbvendor); 1195 break; 1196 case TDropTaskSqlNode: 1197 stmt = new TStarrocksDropTaskStmt(dbvendor); 1198 break; 1199 case TBeginLoadTransactionSqlNode: 1200 stmt = new TBeginLoadTransactionStmt(dbvendor); 1201 break; 1202 case TCommitLoadTransactionSqlNode: 1203 stmt = new TCommitLoadTransactionStmt(dbvendor); 1204 break; 1205 case TAbortLoadTransactionSqlNode: 1206 stmt = new TAbortLoadTransactionStmt(dbvendor); 1207 break; 1208 case TShowLoadTransactionSqlNode: 1209 stmt = new TShowLoadTransactionStmt(dbvendor); 1210 break; 1211 case TExportSqlNode: 1212 stmt = new TStarrocksExportStmt(dbvendor); 1213 break; 1214 case TShowExportSqlNode: 1215 stmt = new TStarrocksShowExportStmt(dbvendor); 1216 break; 1217 case TCancelExportSqlNode: 1218 stmt = new TStarrocksCancelExportStmt(dbvendor); 1219 break; 1220 // OceanBase Phase 4 Batch 1 1221 case TOceanbaseCreateTenantSqlNode: 1222 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateTenantSqlStatement(dbvendor); 1223 break; 1224 case TOceanbaseAlterTenantSqlNode: 1225 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterTenantSqlStatement(dbvendor); 1226 break; 1227 case TOceanbaseDropTenantSqlNode: 1228 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropTenantSqlStatement(dbvendor); 1229 break; 1230 // OceanBase Phase 4 Batch 2 1231 case TOceanbaseCreateResourcePoolSqlNode: 1232 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateResourcePoolSqlStatement(dbvendor); 1233 break; 1234 case TOceanbaseCreateResourceUnitSqlNode: 1235 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateResourceUnitSqlStatement(dbvendor); 1236 break; 1237 case TOceanbaseAlterResourcePoolSqlNode: 1238 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterResourcePoolSqlStatement(dbvendor); 1239 break; 1240 case TOceanbaseAlterResourceUnitSqlNode: 1241 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterResourceUnitSqlStatement(dbvendor); 1242 break; 1243 case TOceanbaseDropResourcePoolSqlNode: 1244 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropResourcePoolSqlStatement(dbvendor); 1245 break; 1246 case TOceanbaseDropResourceUnitSqlNode: 1247 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropResourceUnitSqlStatement(dbvendor); 1248 break; 1249 // OceanBase Phase 4 Batch 6 1250 case TOceanbaseCreateTablegroupSqlNode: 1251 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateTablegroupSqlStatement(dbvendor); 1252 break; 1253 case TOceanbaseAlterTablegroupSqlNode: 1254 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterTablegroupSqlStatement(dbvendor); 1255 break; 1256 case TOceanbaseDropTablegroupSqlNode: 1257 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropTablegroupSqlStatement(dbvendor); 1258 break; 1259 // OceanBase Phase 4 Batch 8 1260 case TOceanbaseCreateOutlineSqlNode: 1261 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateOutlineSqlStatement(dbvendor); 1262 break; 1263 case TOceanbaseAlterOutlineSqlNode: 1264 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterOutlineSqlStatement(dbvendor); 1265 break; 1266 case TOceanbaseDropOutlineSqlNode: 1267 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropOutlineSqlStatement(dbvendor); 1268 break; 1269 // OceanBase Phase 4 Batch 3 + 10 1270 case TOceanbaseAlterSystemSqlNode: 1271 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterSystemSqlStatement(dbvendor); 1272 break; 1273 // OceanBase documented syntax gaps — SHOW TENANT family 1274 case TOceanbaseShowTenantSqlNode: 1275 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TShowTenantSqlStatement(dbvendor); 1276 break; 1277 // OceanBase US-003 — FLASHBACK / PURGE 1278 case TOceanbaseFlashbackSqlNode: 1279 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TFlashbackSqlStatement(dbvendor); 1280 break; 1281 case TOceanbasePurgeSqlNode: 1282 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TPurgeSqlStatement(dbvendor); 1283 break; 1284 // OceanBase US-004 Round 3 — XA transaction 1285 case TOceanbaseXaSqlNode: 1286 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TXaSqlStatement(dbvendor); 1287 break; 1288 // OceanBase US-005 Round 3 — DBLINK DDL 1289 case TOceanbaseCreateDblinkSqlNode: 1290 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateDblinkSqlStatement(dbvendor); 1291 break; 1292 case TOceanbaseDropDblinkSqlNode: 1293 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropDblinkSqlStatement(dbvendor); 1294 break; 1295 // OceanBase US-006 Round 3 — RESTORE POINT 1296 case TOceanbaseCreateRestorePointSqlNode: 1297 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateRestorePointSqlStatement(dbvendor); 1298 break; 1299 case TOceanbaseDropRestorePointSqlNode: 1300 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropRestorePointSqlStatement(dbvendor); 1301 break; 1302 default: 1303 break; 1304 } 1305 1306 if (stmt != null){ 1307 stmt.rootNode = sqlNode; 1308 stmt.setStartToken(sqlNode); 1309 stmt.setEndToken(sqlNode); 1310 stmt.setLabelName(this.labelName); 1311 stmt.doParseStatement(psql); 1312 1313// if (stmt.getStartToken() == null){ 1314// stmt.setStartToken(sqlNode.getStartToken()); 1315// } 1316// if (stmt.getEndToken() == null){ 1317// stmt.setEndToken(sqlNode.getEndToken()); 1318// } 1319 }else{ 1320 // System.out.println("stmt is null:"+sqlNode.getNodeType()); 1321 } 1322 1323 } 1324 1325 /** 1326 * Check if the given block node represents a TRY/CATCH block 1327 * by examining the token pattern: BEGIN TRY ... or END CATCH 1328 */ 1329 private boolean isTryCatchBlock(TParseTreeNode sqlNode) { 1330 TSourceToken startToken = sqlNode.getStartToken(); 1331 TSourceToken endToken = sqlNode.getEndToken(); 1332 1333 if (startToken == null || endToken == null) { 1334 return false; 1335 } 1336 1337 // Check if end token is CATCH (indicates TRY/CATCH block) 1338 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("CATCH")) { 1339 return true; 1340 } 1341 1342 // Check if end token is TRY (TRY-only block without CATCH) 1343 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("TRY")) { 1344 return true; 1345 } 1346 1347 // Check if start is BEGIN and next solid token is TRY 1348 if (startToken.astext != null && startToken.astext.equalsIgnoreCase("BEGIN")) { 1349 TSourceTokenList tokenList = startToken.container; 1350 if (tokenList != null) { 1351 for (int i = startToken.posinlist + 1; i < tokenList.size(); i++) { 1352 TSourceToken token = tokenList.get(i); 1353 if (token.tokentype != ETokenType.ttwhitespace && 1354 token.tokentype != ETokenType.ttreturn) { 1355 if (token.astext != null && token.astext.equalsIgnoreCase("TRY")) { 1356 return true; 1357 } 1358 break; // First non-whitespace token is not TRY 1359 } 1360 } 1361 } 1362 } 1363 1364 return false; 1365 } 1366} 1367