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)||psql.isMySQLDialect()){ 407 // OceanBase MySQL/system tenant is MySQL SQL (Mantis 4813) 408 stmt = new TMssqlDeclare(psql.dbvendor); 409 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 410 stmt = new TMssqlDeclare(psql.dbvendor); 411 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 412 TDeclareSqlNode declareNode = (TDeclareSqlNode)sqlNode; 413 switch(declareNode.getDeclareType()){ 414 case variable: 415 stmt = new TDb2SqlVariableDeclaration(psql.dbvendor); 416 break; 417 case conditions: 418 stmt = new TDb2ConditionDeclaration(psql.dbvendor); 419 break; 420 case returnCode: 421 stmt = new TDb2ReturnCodesDeclaration(psql.dbvendor); 422 break; 423 case statement: 424 stmt = new TDb2StatementDeclaration(psql.dbvendor); 425 break; 426 case cursor: 427 stmt = new TDb2DeclareCursorStatement(psql.dbvendor); 428 break; 429 case handlers: 430 stmt = new TDb2HandlerDeclaration(psql.dbvendor); 431 break; 432 default: 433 break; 434 } 435 } 436 break; 437 case T_CompoundSqlNode: //db2 compound sql node 438 stmt = new TCommonBlock(psql.dbvendor); 439 break; 440 case(block): 441 switch (psql.dbvendor){ 442 case dbvmssql: 443 case dbvsybase: 444 // case dbvazuresql: 445 // Check if this is a TRY/CATCH block by examining tokens 446 if (isTryCatchBlock(sqlNode)) { 447 stmt = new TMssqlTryCatch(psql.dbvendor); 448 } else { 449 stmt = new TMssqlBlock(psql.dbvendor); 450 } 451 break; 452 case dbvsybasease: 453 // Check if this is a TRY/CATCH block by examining tokens 454 if (isTryCatchBlock(sqlNode)) { 455 stmt = new TMssqlTryCatch(psql.dbvendor); 456 } else { 457 stmt = new TMssqlBlock(psql.dbvendor); 458 } 459 break; 460 case dbvsqlanywhere: 461 // Check if this is a TRY/CATCH block by examining tokens 462 if (isTryCatchBlock(sqlNode)) { 463 stmt = new TMssqlTryCatch(psql.dbvendor); 464 } else { 465 stmt = new TMssqlBlock(psql.dbvendor); 466 } 467 break; 468 case dbvsybaseiq: 469 // Check if this is a TRY/CATCH block by examining tokens 470 if (isTryCatchBlock(sqlNode)) { 471 stmt = new TMssqlTryCatch(psql.dbvendor); 472 } else { 473 stmt = new TMssqlBlock(psql.dbvendor); 474 } 475 break; 476 case dbvoracle: 477 case dbvpostgresql: 478 case dbvteradata: 479 case dbvbigquery: 480 case dbvsnowflake: 481 case dbvmysql: 482 case dbvnetezza: 483 case dbvgreenplum: 484 case dbvgaussdb: 485 case dbvedb: 486 case dbvredshift: 487 case dbvhana: 488 case dbvdameng: 489 case dbvoceanbase: 490 491 stmt = new TCommonBlock(psql.dbvendor); 492 break; 493 default: 494 System.out.println("block type not implemented: "+psql.dbvendor.toString()); 495 break; 496 } 497// if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)){ 498// stmt = new TMssqlBlock(psql.dbvendor); 499// }else if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvpostgresql) 500// ||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvbigquery)){ 501// stmt = new TCommonBlock(psql.dbvendor); 502// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 503// stmt = new TCommonBlock(psql.dbvendor); 504// }else{ 505// System.out.println("block type not implemented: "+psql.dbvendor.toString()); 506// } 507 break; 508 case(MssqlTryCatchSqlNode): 509 stmt = new TMssqlTryCatch(psql.dbvendor); 510 break; 511 case(returnstmt): 512 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)){ 513 stmt = new TMssqlReturn(psql.dbvendor); 514 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 515 stmt = new TDb2ReturnStmt(psql.dbvendor); 516 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||psql.isMySQLDialect()){ 517 stmt = new TReturnStmt(psql.dbvendor); 518 } 519 break; 520 case(ifstmt): 521 switch (psql.dbvendor){ 522 case dbvmssql: 523 case dbvsybase: 524 stmt = new TMssqlIfElse(psql.dbvendor); 525 if ((sqlNode instanceof TIfSqlNode) 526 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 527 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 528 } 529 break; 530 case dbvsybasease: 531 stmt = new TMssqlIfElse(psql.dbvendor); 532 if ((sqlNode instanceof TIfSqlNode) 533 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 534 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 535 } 536 break; 537 case dbvsqlanywhere: 538 stmt = new TMssqlIfElse(psql.dbvendor); 539 if ((sqlNode instanceof TIfSqlNode) 540 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 541 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 542 } 543 break; 544 case dbvsybaseiq: 545 stmt = new TMssqlIfElse(psql.dbvendor); 546 if ((sqlNode instanceof TIfSqlNode) 547 && (((TIfSqlNode)sqlNode).getStmtType() == TBaseType.condition_statement_while)) { 548 stmt.sqlstatementtype = ESqlStatementType.sstmssqlwhile; 549 } 550 break; 551 case dbvmysql: 552 stmt = new TMySQLIfStmt(psql.dbvendor); 553 break; 554 case dbvoceanbase: 555 // MySQL/system tenant: the MySQL IF statement (Mantis 4813); Oracle tenant unchanged 556 if (psql.isMySQLDialect()){ 557 stmt = new TMySQLIfStmt(psql.dbvendor); 558 } 559 break; 560 case dbvbigquery: 561 case dbvdb2: 562 case dbvhana: 563 stmt = new TIfStmt(psql.dbvendor); 564 break; 565 } 566 567 568 break; 569 case (CreateProcedureSqlNode): 570 if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvgaussdb)||(psql.dbvendor == EDbVendor.dbvedb)){ 571 // plsql procedure declaration or specification 572 stmt = new TPlsqlCreateProcedure(EDbVendor.dbvoracle); 573 ((TPlsqlCreateProcedure)stmt).setKind(((TCreateProcedureSqlNode)sqlNode).getKind()); 574 }else if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)){ 575 stmt = new TMssqlCreateProcedure(psql.dbvendor); 576 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 577 stmt = new TCreateProcedureStmt(psql.dbvendor); 578 }else{ 579 System.out.println("create procedure not implemented: "+psql.dbvendor.toString()); 580 } 581 break; 582 case (CreateFunctionSqlNode): 583 switch (psql.dbvendor){ 584 case dbvoracle: 585 stmt = new TPlsqlCreateFunction(psql.dbvendor); 586 ((TPlsqlCreateFunction)stmt).setKind(((TCreateFunctionSqlNode)sqlNode).getKind()); 587 break; 588 case dbvdameng: 589 stmt = new TPlsqlCreateFunction(psql.dbvendor); 590 ((TPlsqlCreateFunction)stmt).setKind(((TCreateFunctionSqlNode)sqlNode).getKind()); 591 break; 592 case dbvmssql: 593 case dbvsybase: 594 stmt = new TMssqlCreateFunction(psql.dbvendor); 595 break; 596 case dbvsybasease: 597 stmt = new TMssqlCreateFunction(psql.dbvendor); 598 break; 599 case dbvsqlanywhere: 600 stmt = new TMssqlCreateFunction(psql.dbvendor); 601 break; 602 case dbvsybaseiq: 603 stmt = new TMssqlCreateFunction(psql.dbvendor); 604 break; 605 case dbvdb2: 606 case dbvgreenplum: 607 case dbvbigquery: 608 case dbvgaussdb: 609 case dbvedb: 610 stmt = new TCreateFunctionStmt(psql.dbvendor); 611 break; 612 case dbvhive: 613 stmt = new THiveCreateFunction(psql.dbvendor); 614 break; 615 default: 616 System.out.println("create function not implemented: "+psql.dbvendor.toString()); 617 break; 618 } 619 break; 620 case (ExecImmeNode): 621 stmt = new TExecImmeStmt(psql.dbvendor); 622 break; 623 case (ContinueSqlNode): 624 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)) { 625 stmt = new TMssqlContinue(psql.dbvendor); 626 }else if (psql.dbvendor == EDbVendor.dbvoracle){ 627 stmt = new TPlsqlContinue(psql.dbvendor); 628 } 629 break; 630 case (BreakSqlNode): 631 stmt = new TBreakStmt(psql.dbvendor); 632 break; 633 case (GrantSqlNode): 634 stmt = new TGrantStmt(psql.dbvendor); 635 break; 636 case (DenySqlNode): 637 stmt = new TDenyStmt(psql.dbvendor); 638 break; 639 case (RevokeSqlNode): 640 stmt = new TRevokeStmt(psql.dbvendor); 641 break; 642 case (FetchSqlNode): 643 if ((psql.dbvendor == EDbVendor.dbvmssql) 644 ||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvsybasease || psql.dbvendor == EDbVendor.dbvsqlanywhere || psql.dbvendor == EDbVendor.dbvsybaseiq)||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvhana)){ 645 stmt = new TMssqlFetch(psql.dbvendor); 646 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 647 stmt = new TDb2FetchCursorStmt(psql.dbvendor); 648 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||psql.isMySQLDialect()){ 649 stmt = new TFetchStmt(psql.dbvendor); 650 } 651 break; 652 case (OpenSqlNode): 653 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)){ 654 stmt = new TMssqlOpen(psql.dbvendor); 655 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 656 stmt = new TDb2OpenCursorStmt(psql.dbvendor); 657 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||psql.isMySQLDialect()){ 658 stmt = new TOpenStmt(psql.dbvendor); 659 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 660 stmt = new TMssqlOpen(psql.dbvendor); 661 } 662 break; 663 case (CloseSqlNode): 664 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)){ 665 stmt = new TMssqlClose(psql.dbvendor); 666 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 667 stmt = new TDb2CloseCursorStmt(psql.dbvendor); 668 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 669 stmt = new TCloseStmt(EDbVendor.dbvteradata); 670 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||psql.isMySQLDialect()){ 671 stmt = new TCloseStmt(psql.dbvendor); 672 }else if (psql.dbvendor == EDbVendor.dbvredshift){ 673 stmt = new TCloseStmt(psql.dbvendor); 674 } 675 break; 676 case (CreateIndexSqlNode): 677 stmt = new TCreateIndexSqlStatement(psql.dbvendor); 678 break; 679 case (DropTableSqlNode): 680 stmt = new TDropTableSqlStatement(psql.dbvendor); 681 break; 682 case (DropIndexSqlNode): 683 stmt = new TDropIndexSqlStatement(psql.dbvendor); 684 break; 685 case (DropViewSqlNode): 686 stmt = new TDropViewSqlStatement(psql.dbvendor); 687 break; 688 case (DropDbObjectSqlNode): 689 stmt = new TMssqlDropDbObject(psql.dbvendor); 690 break; 691 case (AlterTableSqlNode): 692 stmt = new TAlterTableStatement(psql.dbvendor); 693 break; 694 case (alterViewSqlNode): 695 stmt = new TAlterViewStatement(psql.dbvendor); 696 break; 697 case (alterDatabaseSqlNode): 698 stmt = new TAlterDatabaseStmt(psql.dbvendor); 699 break; 700 case (alterIndexSqlNode): 701 stmt = new TAlterIndexStmt(psql.dbvendor); 702 break; 703 case (MssqlDeallocateSqlNode): 704 stmt = new TMssqlDeallocate(psql.dbvendor); 705 break; 706 case(ExecuteSqlNode): 707 switch (psql.dbvendor){ 708 case dbvteradata: 709 stmt = new TTeradataExecute(psql.dbvendor); 710 break; 711 case dbvpostgresql: 712 case dbvsnowflake: 713 case dbvnetezza: 714 case dbvredshift: 715 stmt = new TExecuteSqlStatement(psql.dbvendor); 716 break; 717 default: 718 stmt = new TMssqlExecute(psql.dbvendor); 719 break; 720 } 721 722 break; 723 case(ExecuteAsSqlNode): 724 stmt = new TMssqlExecuteAs(psql.dbvendor); 725 break; 726 case(BeginTranSqlNode): 727 stmt = new TBeginTran(psql.dbvendor); 728 break; 729 case(EndTranSqlNode): 730 stmt = new TEndTran(psql.dbvendor); 731 break; 732 case(MssqlRaiserrorSqlNode): 733 stmt = new TMssqlRaiserror(psql.dbvendor); 734 break; 735 case(MssqlLabelSqlNode): 736 stmt = new TMssqlLabel(psql.dbvendor); 737 break; 738 case(MssqlGotoSqlNode): 739 stmt = new TMssqlGoTo(psql.dbvendor); 740 break; 741 case(MssqlRevertSqlNode): 742 stmt = new TMssqlRevert(psql.dbvendor); 743 break; 744 case MssqlSendOnConversationSqlNode: 745 stmt = new TMssqlSendOnConversation(psql.dbvendor); 746 break; 747 case(MssqlEndConversationSqlNode): 748 stmt = new TMssqlEndConversation(psql.dbvendor); 749 break; 750 case(MssqlBeginDialogSqlNode): 751 stmt = new TMssqlBeginDialog(psql.dbvendor); 752 break; 753 case MssqlSetSqlNode: 754 stmt = new TMssqlSet(psql.dbvendor); 755 break; 756 case LoopSqlNode: 757 switch (psql.dbvendor){ 758 case dbvdb2: 759 stmt = new TDb2LoopStmt(EDbVendor.dbvdb2); 760 break; 761 default: 762 stmt = new TLoopStmt(psql.dbvendor); 763 break; 764 765 } 766 break; 767 case RepeatSqlNode: 768 stmt = new TRepeatStmt(psql.dbvendor); 769// if (psql.dbvendor == EDbVendor.dbvdb2){ 770// stmt = new TRepeatStmt(EDbVendor.dbvdb2); 771// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 772// stmt = new TMySQLRepeatStmt(EDbVendor.dbvmysql); 773// } 774 break; 775 case WhileSqlNode: 776 stmt = new TWhileStmt(psql.dbvendor); 777// if (psql.dbvendor == EDbVendor.dbvdb2){ 778// stmt = new TWhileStmt(EDbVendor.dbvdb2); 779// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 780// stmt = new TMySQLWhileStmt(EDbVendor.dbvmysql); 781// } 782 break; 783 case ForSqlNode: 784 stmt = new TForStmt(dbvendor); 785 break; 786 case SetSqlNode: 787 switch (psql.dbvendor){ 788 case dbvhive: 789 stmt = new THiveSet(EDbVendor.dbvhive); 790 break; 791 case dbvmysql: 792 case dbvbigquery: 793 case dbvteradata: 794 case dbvgaussdb: 795 case dbvedb: 796 case dbvsparksql: 797 stmt = new TSetStmt(psql.dbvendor); 798 break; 799 case dbvoceanbase: 800 // MySQL/system tenant: the MySQL SET (Mantis 4813); Oracle tenant keeps the default 801 if (psql.isMySQLDialect()){ 802 stmt = new TSetStmt(psql.dbvendor); 803 }else{ 804 stmt = new TDb2SetVariableStmt(EDbVendor.dbvdb2); 805 } 806 break; 807 default: 808 stmt = new TDb2SetVariableStmt(EDbVendor.dbvdb2); 809 break; 810 } 811 812 break; 813 case UnsetSqlNode: 814 stmt = new TUnsetStmt(psql.dbvendor); 815 break; 816 case caseExpression: 817 switch (psql.dbvendor){ 818 case dbvdb2: 819 stmt = new TDb2CaseStmt(EDbVendor.dbvdb2); 820 break; 821 case dbvmysql: 822 stmt = new TMySQLCaseStmt(EDbVendor.dbvmysql); 823 break; 824 case dbvoceanbase: 825 // MySQL/system tenant: the MySQL CASE statement (Mantis 4813); Oracle tenant unchanged 826 if (psql.isMySQLDialect()){ 827 stmt = new TMySQLCaseStmt(psql.dbvendor); 828 } 829 break; 830 case dbvteradata: 831 stmt = new TCaseStmt(EDbVendor.dbvmysql); 832 break; 833 case dbvsybase: 834 // The Watcom CASE statement of a procedure body (Mantis 4717). 835 stmt = new TCaseStmt(psql.dbvendor); 836 break; 837 case dbvsybaseiq: 838 // The Watcom CASE statement of a procedure body (Mantis 4717). 839 stmt = new TCaseStmt(psql.dbvendor); 840 break; 841 case dbvsqlanywhere: 842 // The Watcom CASE statement of a procedure body (Mantis 4717). 843 stmt = new TCaseStmt(psql.dbvendor); 844 break; 845 default: 846 break; 847 } 848 849 break; 850 case(MssqlStmtStubSqlNode): 851 //TMssqlStmtStubSqlNode stmt1 = (TMssqlStmtStubSqlNode)sqlNode; 852 if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlset){ 853 stmt = new TMssqlSet(psql.dbvendor); 854 //((TMssqlSet)stmt).setSetType(TBaseType.mstSetCmd); 855 stmt.setStartToken(sqlNode); 856 stmt.setEndToken(sqlNode); 857 }else if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlupdatestatistics){ 858 stmt = new TMssqlUpdateStatistics(psql.dbvendor); 859 }else{ 860 stmt = new TMssqlStmtStub(psql.dbvendor); 861 ((TMssqlStmtStub)stmt).setSqlStatementType( ((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() ); 862 } 863 break; 864 case T_TeradataStmtStubSqlNode: 865 switch (((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType()){ 866 case sstRevoke: 867 stmt = new TRevokeStmt(psql.dbvendor); 868 break; 869 default: 870 stmt = new TTeradataStmtStub(psql.dbvendor); 871 ((TTeradataStmtStub)stmt).sqlstatementtype = ( ((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType() ); 872 } 873 break; 874 case stubStmtSqlNode: 875 TStubStmtSqlNode stubNode = (TStubStmtSqlNode)sqlNode; 876 877 switch(stubNode.getSqlStatementType()){ 878 case sstdb2signal: 879 case sstsignal: 880 stmt = new TSignalStmt(psql.dbvendor); 881 break; 882 default: 883 break; 884 } 885 886 if (psql.dbvendor == EDbVendor.dbvdb2){ 887 switch(stubNode.getSqlStatementType()){ 888 case sstdb2iterate: 889 stmt = new TDb2IterateStmt(EDbVendor.dbvdb2); 890 break; 891 case sstdb2call: 892 stmt = new TDb2CallStmt(EDbVendor.dbvdb2); 893 break; 894 case sstdb2leave: 895 stmt = new TDb2LeaveStmt(EDbVendor.dbvdb2); 896 break; 897 case sstdb2signal: 898 break; 899 case sstdb2goto: 900 stmt = new TDb2GotoStmt(EDbVendor.dbvdb2); 901 break; 902 case sstdb2set: 903 stmt = new TDb2SetStmt(EDbVendor.dbvdb2); 904 break; 905 default: 906 stmt = new TDb2StmtStub(EDbVendor.dbvdb2); 907 ((TDb2StmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 908 break; 909 } 910 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 911 stmt = new TMySQLStmtStub(EDbVendor.dbvmysql); 912 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 913 }else if (psql.isMySQLDialect()){ 914 // OceanBase MySQL/system tenant (Mantis 4813) 915 stmt = new TMySQLStmtStub(psql.dbvendor); 916 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 917 }else if (psql.dbvendor == EDbVendor.dbvbigquery){ 918 stmt = new TMySQLStmtStub(EDbVendor.dbvbigquery); 919 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 920 } 921 break; 922 case(dummyNode): 923 TDummy dummy = (TDummy)sqlNode; 924 925 switch (dummy.sqlstatementtype){ 926 case sstcommit: 927 stmt = new TCommitStmt(psql.dbvendor); 928 break; 929 case sstmssqlcommit: 930 stmt = new TMssqlCommit(psql.dbvendor); 931 break; 932 case sstmssqlrollback: 933 stmt = new TMssqlRollback(psql.dbvendor); 934 break; 935 case sstrollback: 936 stmt = new TRollbackStmt(psql.dbvendor); 937 break; 938 case sstmssqlsavetran: 939 stmt = new TMssqlSaveTran(psql.dbvendor); 940 break; 941 case sstmssqlprint: 942 stmt = new TMssqlPrint(psql.dbvendor); 943 break; 944 case sstmssqluse: 945 stmt = new TUseDatabase(psql.dbvendor); 946 break; 947 case sstmssqlgo: 948 stmt = new TMssqlGo(psql.dbvendor); 949 break; 950 case sstHelpProcedure: 951 stmt = new THelpProcedure(psql.dbvendor); 952 break; 953 case sstShowProcedure: 954 stmt = new TShowProcedure(psql.dbvendor); 955 break; 956 case sstRevoke: 957 stmt = new TRevokeStmt(psql.dbvendor); 958 break; 959 case sstAllocate: 960 stmt = new TAllocateStmt(psql.dbvendor); 961 break; 962 case sstDrop: 963 stmt = new TDropStmt(psql.dbvendor); 964 break; 965 case sstmssqlDropSecurityPolicy: 966 stmt = new TMssqlDropSecurityPolicy(psql.dbvendor); 967 break; 968 case sstbegintran: 969 stmt = new TBeginTran(psql.dbvendor); 970 break; 971 default: 972 // Any other statement the grammar models as a bare 973 // TDummy. Without this the switch left stmt null, so 974 // the statement PARSED FINE standalone and became a 975 // token-less nothing the moment it was used as an 976 // embedded statement -- an IF/WHILE body most visibly. 977 // 978 // That stayed invisible until TMssqlIfElse began 979 // reporting a missing body (mantis 4686), at which point 980 // valid T-SQL from Microsoft's own documentation -- 981 // "IF EXISTS (...) DROP PARTITION FUNCTION ..." -- began 982 // failing to parse and SQL Server coverage fell from 983 // 290/290 to 289/290. 984 // 985 // Blast radius, measured by sweeping every statement in 986 // the SQL Server corpus through "parses standalone but 987 // not as an IF body", pre-fix build vs post-fix build: 988 // 14 corpus statements over 12 distinct constructs, and 989 // 0 regressions. Only DROP PARTITION FUNCTION surfaced 990 // in coverage, because it is the only one the corpus 991 // happens to write inside an IF. The other 11 were 992 // equally broken and equally silent: 993 // ALTER SECURITY POLICY, CREATE CREDENTIAL, 994 // CREATE DATABASE ENCRYPTION KEY, 995 // CREATE DATABASE SCOPED CREDENTIAL, 996 // CREATE EVENT SESSION, CREATE EXTERNAL DATA SOURCE, 997 // CREATE EXTERNAL LANGUAGE, CREATE MASTER KEY, 998 // CREATE SELECTIVE XML INDEX, DROP PARTITION SCHEME, 999 // DROP SYNONYM 1000 // Hence a default rather than a case per construct: the 1001 // next TDummy-modelled statement is then correct by 1002 // construction instead of silently broken here. Carrying 1003 // the node's own sqlstatementtype keeps it identifiable 1004 // rather than flattened to sstunknown. 1005 // 1006 // NOT fixed here, and pre-existing: 85 further corpus 1007 // statements still fail as an IF body (ALTER RESOURCE 1008 // GOVERNOR, BULK INSERT, CREATE SCHEMA, ...). They do 1009 // not reach this switch, so they are a separate 1010 // limitation -- this default did not change them in 1011 // either direction. 1012 stmt = new TUnknownSqlStatement(psql.dbvendor); 1013 stmt.sqlstatementtype = dummy.sqlstatementtype; 1014 break; 1015 } 1016 break; 1017 case(ParseErrorNode): 1018 stmt = new TParseErrorSqlStatement(psql.dbvendor); 1019 break; 1020 case (truncateTable): 1021 stmt = new TTruncateStatement(psql.dbvendor); 1022 break; 1023 case(hiveLoadSqlNode): 1024 stmt = new THiveLoad(EDbVendor.dbvhive); 1025 break; 1026 case (hiveExportSqlNode): 1027 stmt = new THiveExportTable(EDbVendor.dbvhive); 1028 break; 1029 case (hiveImportSqlNode): 1030 stmt = new THiveImportTable(EDbVendor.dbvhive); 1031 break; 1032 case (createDatabaseSqlNode): 1033 stmt = new TCreateDatabaseSqlStatement(psql.dbvendor); 1034 break; 1035 case (hiveSwitchDBSqlNode): 1036 stmt = new THiveSwitchDatabase(psql.dbvendor); 1037 break; 1038 case (hiveDropDBSqlNode): 1039 stmt = new THiveDropDatabase(psql.dbvendor); 1040 break; 1041 case (hiveDescribeSqlNode): 1042 stmt = new THiveDescribe(psql.dbvendor); 1043 break; 1044 case (hiveShowSqlNode): 1045 stmt = new THiveShow(psql.dbvendor); 1046 break; 1047 case (msckSqlNode): 1048 stmt = new TMSCKStmt(psql.dbvendor); 1049 break; 1050 case (hiveDropFunctionSqlNode): 1051 stmt = new THiveDropFunction(psql.dbvendor); 1052 break; 1053 case (analyzeSqlNode): 1054 stmt = new TAnalyzeStmt(psql.dbvendor); 1055 break; 1056 case (LockSqlNode): 1057 stmt = new TLockTableStmt(psql.dbvendor); 1058 break; 1059 case (hiveCreateRoleSqlNode): 1060 stmt = new THiveCreateRole(psql.dbvendor); 1061 break; 1062 case (hiveGrantSqlNode): 1063 if (((THiveGrantSqlNode)sqlNode).isRevoke()){ 1064 stmt = new THiveRevoke(EDbVendor.dbvhive); 1065 }else{ 1066 stmt = new THiveGrant(EDbVendor.dbvhive); 1067 } 1068 break; 1069 case (hiveShowGrantSqlNode): 1070 stmt = new THiveShowGrant(psql.dbvendor); 1071 break; 1072 case (hiveDropRoleSqlNode): 1073 stmt = new THiveDropRole(psql.dbvendor); 1074 break; 1075 case (hiveShowRoleGrantSqlNode): 1076 stmt = new THiveShowRoleGrant(psql.dbvendor); 1077 break; 1078 case (hiveGrantRoleSqlNode): 1079 if(((THiveGrantRoleSqlNode)sqlNode).isRevoke()){ 1080 stmt = new THiveRevokeRole(psql.dbvendor); 1081 }else{ 1082 stmt = new THiveGrantRole(psql.dbvendor); 1083 } 1084 1085 break; 1086// case hiveFromQuerySqlNode: 1087// stmt = new THiveFromQuery(EDbVendor.dbvhive); 1088// break; 1089 case sybaseDumpTranSqlNode: 1090 stmt = new TSybaseDumpTran(psql.dbvendor); 1091 break; 1092 case sybaseUpdateIndexStatisticsSqlNode: 1093 stmt = new TSybaseUpdateIndexStatistics(psql.dbvendor); 1094 break; 1095 case sybaseWritetextSqlNode: 1096 stmt = new TSybaseWritetext(psql.dbvendor); 1097 break; 1098 case sybaseDeleteStatisticsSqlNode: 1099 stmt = new TSybaseDeleteStatistics(psql.dbvendor); 1100 break; 1101 case callSqlNode: 1102 stmt = new TCallStatement(psql.dbvendor); 1103 break; 1104 case moveSqlNode: 1105 stmt = new TMoveStmt(EDbVendor.dbvpostgresql); 1106 break; 1107 case MergeSqlNode: 1108 stmt = new TMergeSqlStatement(psql.dbvendor) ; 1109 break; 1110 case dropSequenceSqlNode: 1111 stmt = new TDropSequenceStmt(psql.dbvendor); 1112 break; 1113 case dropProcedureSqlNode: 1114 stmt = new TDropProcedureStmt(psql.dbvendor); 1115 break; 1116 case OracleCompoundTriggerBody: 1117 stmt = new TCompoundTriggerBody(psql.dbvendor); 1118 break; 1119 case createSynonymSqlNode: 1120 stmt = new TCreateSynonymStmt(psql.dbvendor); 1121 break; 1122 case T_TeradataLockSqlNode: 1123 stmt = new TTeradataLock(psql.dbvendor); 1124 break; 1125 case T_AbortSqlNode: 1126 stmt = new TTeradataAbort(psql.dbvendor); 1127 break; 1128 case MssqlCreateXmlSchemaCollectionSqlNode: 1129 stmt = new TMssqlCreateXmlSchemaCollectionStmt(psql.dbvendor); 1130 break; 1131 case DeallocatePrepareSqlNode: 1132 stmt = new TMySQLDeallocatePrepareStmt(psql.dbvendor); 1133 break; 1134 case createSchemaSqlNode: 1135 stmt = new TCreateSchemaSqlStatement(psql.dbvendor); 1136 break; 1137 case dropDatabaseSqlNode: 1138 stmt = new TDropDatabaseStmt(psql.dbvendor); 1139 break; 1140 case dropSchemaSqlNode: 1141 stmt = new TDropSchemaSqlStatement(psql.dbvendor); 1142 break; 1143 case MssqlBeginConversationTimerSqlNode: 1144 stmt = new TMssqlBeginConversationTimer(psql.dbvendor); 1145 break; 1146 case getDiagSqlNode: 1147 stmt = new TGetDiagStmt(psql.dbvendor); 1148 break; 1149 case dropFunctionSqlNode: 1150 stmt = new TDropFunctionStmt(psql.dbvendor); 1151 break; 1152 case performanceSqlNode: 1153 stmt = new TPerformanceStmt(psql.dbvendor); 1154 break; 1155 case PrepareSqlNode: 1156 stmt = new TPrepareStmt(psql.dbvendor); 1157 break; 1158 case upsertSqlNode: 1159 stmt = new TUpsertStmt(psql.dbvendor); 1160 break; 1161 case createviewstmt: 1162 stmt = new TCreateViewSqlStatement(dbvendor); 1163 break; 1164 case LeaveSqlNode: 1165 stmt = new TLeaveStmt(dbvendor); 1166 break; 1167 case TSignalSqlNode: 1168 stmt = new TSignalStmt(dbvendor); 1169 break; 1170 case rolllbackSqlNode: 1171 stmt = new TRollbackStmt(dbvendor); 1172 break; 1173 case commitSqlNode: 1174 stmt = new TCommitStmt(dbvendor); 1175 break; 1176 case IterateSqlNode: 1177 stmt = new TIterateStmt(dbvendor); 1178 break; 1179 case T_SetSessionSqlNode: 1180 stmt = new TTeradataSetSession(dbvendor); 1181 break; 1182 case T_DisableEnableTriggerSqlNode: 1183 stmt = new TDisableEnableTriggerStmt(dbvendor); 1184 break; 1185 case CommentSqlNode: 1186 stmt = new TCommentOnSqlStmt(dbvendor); 1187 break; 1188 case CreateTypeSqlNode: 1189 stmt = new TCreateTypeStmt(dbvendor); 1190 break; 1191 case TCopyIntoNode: 1192 stmt = new TSnowflakeCopyIntoStmt(dbvendor); 1193 break; 1194 case TCreateStageSqlNode: 1195 stmt = new TCreateStageStmt(dbvendor); 1196 break; 1197 case TCreateStreamSqlNode: 1198 stmt = new TCreateStreamStmt(dbvendor); 1199 break; 1200 case TCreatePipeSqlNode: 1201 stmt = new TCreatePipeStmt(dbvendor); 1202 break; 1203 case CollectStatisticsSqlNode: 1204 stmt = new TTeradataCollectStatistics(dbvendor); 1205 break; 1206 case TResetSqlNode: 1207 stmt = new TResetStmt(dbvendor); 1208 break; 1209 case TAlterSessionSqlNode: 1210 stmt = new TAlterSessionStatement(dbvendor); 1211 break; 1212 case TCreateTaskSqlNode: 1213 stmt = new TCreateTaskStmt(dbvendor); 1214 break; 1215 case TCreatePartitionFunctionSqlNode: 1216 stmt = new TCreatePartitionFunctionStmt(dbvendor); 1217 break; 1218 case TAlterPartitionFunctionSqlNode: 1219 stmt = new TAlterPartitionFunctionStmt(dbvendor); 1220 break; 1221 case TCreatePartitionSchemeSqlNode: 1222 stmt = new TCreatePartitionSchemeSqlStatement(dbvendor); 1223 break; 1224 case TAlterPartitionSchemeSqlNode: 1225 stmt = new TAlterPartitionSchemeSqlStatement(dbvendor); 1226 break; 1227 case TCreateRoutineLoadSqlNode: 1228 stmt = new TCreateRoutineLoadStmt(dbvendor); 1229 break; 1230 case TSubmitTaskSqlNode: 1231 stmt = new TSubmitTaskStmt(dbvendor); 1232 break; 1233 case TDropTaskSqlNode: 1234 stmt = new TStarrocksDropTaskStmt(dbvendor); 1235 break; 1236 case TBeginLoadTransactionSqlNode: 1237 stmt = new TBeginLoadTransactionStmt(dbvendor); 1238 break; 1239 case TCommitLoadTransactionSqlNode: 1240 stmt = new TCommitLoadTransactionStmt(dbvendor); 1241 break; 1242 case TAbortLoadTransactionSqlNode: 1243 stmt = new TAbortLoadTransactionStmt(dbvendor); 1244 break; 1245 case TShowLoadTransactionSqlNode: 1246 stmt = new TShowLoadTransactionStmt(dbvendor); 1247 break; 1248 case TExportSqlNode: 1249 stmt = new TStarrocksExportStmt(dbvendor); 1250 break; 1251 case TShowExportSqlNode: 1252 stmt = new TStarrocksShowExportStmt(dbvendor); 1253 break; 1254 case TCancelExportSqlNode: 1255 stmt = new TStarrocksCancelExportStmt(dbvendor); 1256 break; 1257 // OceanBase Phase 4 Batch 1 1258 case TOceanbaseCreateTenantSqlNode: 1259 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateTenantSqlStatement(dbvendor); 1260 break; 1261 case TOceanbaseAlterTenantSqlNode: 1262 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterTenantSqlStatement(dbvendor); 1263 break; 1264 case TOceanbaseDropTenantSqlNode: 1265 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropTenantSqlStatement(dbvendor); 1266 break; 1267 // OceanBase Phase 4 Batch 2 1268 case TOceanbaseCreateResourcePoolSqlNode: 1269 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateResourcePoolSqlStatement(dbvendor); 1270 break; 1271 case TOceanbaseCreateResourceUnitSqlNode: 1272 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateResourceUnitSqlStatement(dbvendor); 1273 break; 1274 case TOceanbaseAlterResourcePoolSqlNode: 1275 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterResourcePoolSqlStatement(dbvendor); 1276 break; 1277 case TOceanbaseAlterResourceUnitSqlNode: 1278 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterResourceUnitSqlStatement(dbvendor); 1279 break; 1280 case TOceanbaseDropResourcePoolSqlNode: 1281 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropResourcePoolSqlStatement(dbvendor); 1282 break; 1283 case TOceanbaseDropResourceUnitSqlNode: 1284 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropResourceUnitSqlStatement(dbvendor); 1285 break; 1286 // OceanBase Phase 4 Batch 6 1287 case TOceanbaseCreateTablegroupSqlNode: 1288 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateTablegroupSqlStatement(dbvendor); 1289 break; 1290 case TOceanbaseAlterTablegroupSqlNode: 1291 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterTablegroupSqlStatement(dbvendor); 1292 break; 1293 case TOceanbaseDropTablegroupSqlNode: 1294 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropTablegroupSqlStatement(dbvendor); 1295 break; 1296 // OceanBase Phase 4 Batch 8 1297 case TOceanbaseCreateOutlineSqlNode: 1298 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateOutlineSqlStatement(dbvendor); 1299 break; 1300 case TOceanbaseAlterOutlineSqlNode: 1301 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterOutlineSqlStatement(dbvendor); 1302 break; 1303 case TOceanbaseDropOutlineSqlNode: 1304 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropOutlineSqlStatement(dbvendor); 1305 break; 1306 // OceanBase Phase 4 Batch 3 + 10 1307 case TOceanbaseAlterSystemSqlNode: 1308 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TAlterSystemSqlStatement(dbvendor); 1309 break; 1310 // OceanBase documented syntax gaps — SHOW TENANT family 1311 case TOceanbaseShowTenantSqlNode: 1312 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TShowTenantSqlStatement(dbvendor); 1313 break; 1314 // OceanBase US-003 — FLASHBACK / PURGE 1315 case TOceanbaseFlashbackSqlNode: 1316 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TFlashbackSqlStatement(dbvendor); 1317 break; 1318 case TOceanbasePurgeSqlNode: 1319 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TPurgeSqlStatement(dbvendor); 1320 break; 1321 // OceanBase US-004 Round 3 — XA transaction 1322 case TOceanbaseXaSqlNode: 1323 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TXaSqlStatement(dbvendor); 1324 break; 1325 // OceanBase US-005 Round 3 — DBLINK DDL 1326 case TOceanbaseCreateDblinkSqlNode: 1327 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateDblinkSqlStatement(dbvendor); 1328 break; 1329 case TOceanbaseDropDblinkSqlNode: 1330 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropDblinkSqlStatement(dbvendor); 1331 break; 1332 // OceanBase US-006 Round 3 — RESTORE POINT 1333 case TOceanbaseCreateRestorePointSqlNode: 1334 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TCreateRestorePointSqlStatement(dbvendor); 1335 break; 1336 case TOceanbaseDropRestorePointSqlNode: 1337 stmt = new gudusoft.gsqlparser.stmt.oceanbase.TDropRestorePointSqlStatement(dbvendor); 1338 break; 1339 default: 1340 break; 1341 } 1342 1343 if (stmt != null){ 1344 stmt.rootNode = sqlNode; 1345 stmt.setStartToken(sqlNode); 1346 stmt.setEndToken(sqlNode); 1347 stmt.setLabelName(this.labelName); 1348 stmt.doParseStatement(psql); 1349 1350// if (stmt.getStartToken() == null){ 1351// stmt.setStartToken(sqlNode.getStartToken()); 1352// } 1353// if (stmt.getEndToken() == null){ 1354// stmt.setEndToken(sqlNode.getEndToken()); 1355// } 1356 }else{ 1357 // System.out.println("stmt is null:"+sqlNode.getNodeType()); 1358 } 1359 1360 } 1361 1362 /** 1363 * Check if the given block node represents a TRY/CATCH block 1364 * by examining the token pattern: BEGIN TRY ... or END CATCH 1365 */ 1366 private boolean isTryCatchBlock(TParseTreeNode sqlNode) { 1367 TSourceToken startToken = sqlNode.getStartToken(); 1368 TSourceToken endToken = sqlNode.getEndToken(); 1369 1370 if (startToken == null || endToken == null) { 1371 return false; 1372 } 1373 1374 // Check if end token is CATCH (indicates TRY/CATCH block) 1375 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("CATCH")) { 1376 return true; 1377 } 1378 1379 // Check if end token is TRY (TRY-only block without CATCH) 1380 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("TRY")) { 1381 return true; 1382 } 1383 1384 // Check if start is BEGIN and next solid token is TRY 1385 if (startToken.astext != null && startToken.astext.equalsIgnoreCase("BEGIN")) { 1386 TSourceTokenList tokenList = startToken.container; 1387 if (tokenList != null) { 1388 for (int i = startToken.posinlist + 1; i < tokenList.size(); i++) { 1389 TSourceToken token = tokenList.get(i); 1390 if (token.tokentype != ETokenType.ttwhitespace && 1391 token.tokentype != ETokenType.ttreturn) { 1392 if (token.astext != null && token.astext.equalsIgnoreCase("TRY")) { 1393 return true; 1394 } 1395 break; // First non-whitespace token is not TRY 1396 } 1397 } 1398 } 1399 } 1400 1401 return false; 1402 } 1403} 1404