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