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