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 private TParseTreeNode sqlNode = null; 240 private TCustomSqlStatement stmt = null; 241 242 public TCustomSqlStatement getStmt() { 243 return stmt; 244 } 245 246 private boolean isParsed = true; 247 248 public void setParsed(boolean parsed) { 249 isParsed = parsed; 250 } 251 252 public void setSqlNode(TParseTreeNode sqlNode) { 253 this.sqlNode = sqlNode; 254 } 255 256 public void init(Object arg1){ 257 if (arg1 instanceof TCustomSqlStatement){ 258 stmt = (TCustomSqlStatement)arg1; 259 }else{ 260 sqlNode = (TParseTreeNode)arg1; 261 } 262 } 263 264 private TObjectName endlabelName; 265 266 public void setEndlabelName(TObjectName endlabelName) { 267 this.endlabelName = endlabelName; 268 } 269 270 public TObjectName getEndlabelName() { 271 272 return endlabelName; 273 } 274 275 private TObjectName labelName; 276 277 public void setLabelName(TObjectName labelName) { 278 this.labelName = labelName; 279 } 280 281 public TObjectName getLabelName() { 282 283 return labelName; 284 } 285 286 public void init(Object arg1,Object arg2){ 287 this.init(arg1); 288 this.labelName = (TObjectName)arg2; 289 } 290 291 292 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 293 if (stmt != null){ 294 // stmt in plsql already create stmt descends from TCustomSqlStatement 295 if (!isParsed){ 296 stmt.parsestatement(psql,isParsed); 297 }else{ 298 stmt.doParseStatement(psql); 299 } 300 if (stmt.getLabelName() == null){ 301 stmt.setLabelName(this.labelName); 302 } 303 return; 304 } 305 306 if (sqlNode == null) return ; 307 308 switch(sqlNode.getNodeType()){ 309 case(select): 310// TSelectSqlNode selectSqlNode = (TSelectSqlNode)sqlNode; 311// if (selectSqlNode.isHiveFromQuery()){ 312// stmt = new THiveFromQuery(psql.dbvendor); 313// }else{ 314// stmt = new TSelectSqlStatement(psql.dbvendor); 315// } 316 317 stmt = new TSelectSqlStatement(psql.dbvendor); 318 break; 319 case(delete): 320 stmt = new TDeleteSqlStatement(psql.dbvendor); 321 break; 322 case(update): 323 stmt = new TUpdateSqlStatement(psql.dbvendor); 324 break; 325 case(insert): 326 stmt = new TInsertSqlStatement(psql.dbvendor); 327 break; 328 case(MssqlBulkInsert): 329 stmt = new TMssqlBulkInsert(psql.dbvendor); 330 break; 331 case(MssqlUpdateTextSqlNode): 332 stmt = new TMssqlUpdateText(psql.dbvendor); 333 break; 334 case (MssqlSetRowCountSqlNode): 335 stmt = new TMssqlSetRowCount(psql.dbvendor); 336 break; 337 case (MssqlThrowSqlNode): 338 stmt = new TMssqlThrow(psql.dbvendor); 339 break; 340 case MssqlReconfigureSqlNode: 341 stmt = new TReconfigure(psql.dbvendor); 342 break; 343 case MssqlCreateTypeSqlNode: 344 stmt = new TMssqlCreateType(psql.dbvendor); 345 break; 346 case(createtable): 347 stmt = new TCreateTableSqlStatement(psql.dbvendor); 348 break; 349 case(declare): 350 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvhana)){ 351 stmt = new TMssqlDeclare(psql.dbvendor); 352 }else if ((psql.dbvendor == EDbVendor.dbvmysql)||(psql.dbvendor == EDbVendor.dbvbigquery)){ 353 stmt = new TMssqlDeclare(psql.dbvendor); 354 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 355 stmt = new TMssqlDeclare(psql.dbvendor); 356 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 357 TDeclareSqlNode declareNode = (TDeclareSqlNode)sqlNode; 358 switch(declareNode.getDeclareType()){ 359 case variable: 360 stmt = new TDb2SqlVariableDeclaration(psql.dbvendor); 361 break; 362 case conditions: 363 stmt = new TDb2ConditionDeclaration(psql.dbvendor); 364 break; 365 case returnCode: 366 stmt = new TDb2ReturnCodesDeclaration(psql.dbvendor); 367 break; 368 case statement: 369 stmt = new TDb2StatementDeclaration(psql.dbvendor); 370 break; 371 case cursor: 372 stmt = new TDb2DeclareCursorStatement(psql.dbvendor); 373 break; 374 case handlers: 375 stmt = new TDb2HandlerDeclaration(psql.dbvendor); 376 break; 377 default: 378 break; 379 } 380 } 381 break; 382 case T_CompoundSqlNode: //db2 compound sql node 383 stmt = new TCommonBlock(psql.dbvendor); 384 break; 385 case(block): 386 switch (psql.dbvendor){ 387 case dbvmssql: 388 case dbvsybase: 389 // case dbvazuresql: 390 // Check if this is a TRY/CATCH block by examining tokens 391 if (isTryCatchBlock(sqlNode)) { 392 stmt = new TMssqlTryCatch(psql.dbvendor); 393 } else { 394 stmt = new TMssqlBlock(psql.dbvendor); 395 } 396 break; 397 case dbvoracle: 398 case dbvpostgresql: 399 case dbvteradata: 400 case dbvbigquery: 401 case dbvsnowflake: 402 case dbvmysql: 403 case dbvnetezza: 404 case dbvgreenplum: 405 case dbvgaussdb: 406 case dbvredshift: 407 case dbvhana: 408 409 stmt = new TCommonBlock(psql.dbvendor); 410 break; 411 default: 412 System.out.println("block type not implemented: "+psql.dbvendor.toString()); 413 break; 414 } 415// if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)){ 416// stmt = new TMssqlBlock(psql.dbvendor); 417// }else if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvpostgresql) 418// ||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvbigquery)){ 419// stmt = new TCommonBlock(psql.dbvendor); 420// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 421// stmt = new TCommonBlock(psql.dbvendor); 422// }else{ 423// System.out.println("block type not implemented: "+psql.dbvendor.toString()); 424// } 425 break; 426 case(MssqlTryCatchSqlNode): 427 stmt = new TMssqlTryCatch(psql.dbvendor); 428 break; 429 case(returnstmt): 430 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvhana)){ 431 stmt = new TMssqlReturn(psql.dbvendor); 432 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 433 stmt = new TDb2ReturnStmt(psql.dbvendor); 434 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 435 stmt = new TReturnStmt(psql.dbvendor); 436 } 437 break; 438 case(ifstmt): 439 switch (psql.dbvendor){ 440 case dbvmssql: 441 case dbvsybase: 442 stmt = new TMssqlIfElse(psql.dbvendor); 443 break; 444 case dbvmysql: 445 stmt = new TMySQLIfStmt(psql.dbvendor); 446 break; 447 case dbvbigquery: 448 case dbvdb2: 449 case dbvhana: 450 stmt = new TIfStmt(psql.dbvendor); 451 break; 452 } 453 454 455 break; 456 case (CreateProcedureSqlNode): 457 if ((psql.dbvendor == EDbVendor.dbvoracle)||(psql.dbvendor == EDbVendor.dbvgaussdb)){ 458 // plsql procedure declaration or specification 459 stmt = new TPlsqlCreateProcedure(EDbVendor.dbvoracle); 460 ((TPlsqlCreateProcedure)stmt).setKind(((TCreateProcedureSqlNode)sqlNode).getKind()); 461 }else if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)){ 462 stmt = new TMssqlCreateProcedure(psql.dbvendor); 463 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 464 stmt = new TCreateProcedureStmt(psql.dbvendor); 465 }else{ 466 System.out.println("create procedure not implemented: "+psql.dbvendor.toString()); 467 } 468 break; 469 case (CreateFunctionSqlNode): 470 switch (psql.dbvendor){ 471 case dbvoracle: 472 stmt = new TPlsqlCreateFunction(EDbVendor.dbvoracle); 473 ((TPlsqlCreateFunction)stmt).setKind(((TCreateFunctionSqlNode)sqlNode).getKind()); 474 break; 475 case dbvmssql: 476 case dbvsybase: 477 stmt = new TMssqlCreateFunction(psql.dbvendor); 478 break; 479 case dbvdb2: 480 case dbvgreenplum: 481 case dbvbigquery: 482 case dbvgaussdb: 483 stmt = new TCreateFunctionStmt(psql.dbvendor); 484 break; 485 case dbvhive: 486 stmt = new THiveCreateFunction(psql.dbvendor); 487 break; 488 default: 489 System.out.println("create function not implemented: "+psql.dbvendor.toString()); 490 break; 491 } 492 break; 493 case (ExecImmeNode): 494 stmt = new TExecImmeStmt(psql.dbvendor); 495 break; 496 case (ContinueSqlNode): 497 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)) { 498 stmt = new TMssqlContinue(psql.dbvendor); 499 }else if (psql.dbvendor == EDbVendor.dbvoracle){ 500 stmt = new TPlsqlContinue(psql.dbvendor); 501 } 502 break; 503 case (BreakSqlNode): 504 stmt = new TBreakStmt(psql.dbvendor); 505 break; 506 case (GrantSqlNode): 507 stmt = new TGrantStmt(psql.dbvendor); 508 break; 509 case (DenySqlNode): 510 stmt = new TDenyStmt(psql.dbvendor); 511 break; 512 case (RevokeSqlNode): 513 stmt = new TRevokeStmt(psql.dbvendor); 514 break; 515 case (FetchSqlNode): 516 if ((psql.dbvendor == EDbVendor.dbvmssql) 517 ||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvteradata)||(psql.dbvendor == EDbVendor.dbvhana)){ 518 stmt = new TMssqlFetch(psql.dbvendor); 519 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 520 stmt = new TDb2FetchCursorStmt(psql.dbvendor); 521 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 522 stmt = new TFetchStmt(psql.dbvendor); 523 } 524 break; 525 case (OpenSqlNode): 526 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvhana)){ 527 stmt = new TMssqlOpen(psql.dbvendor); 528 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 529 stmt = new TDb2OpenCursorStmt(psql.dbvendor); 530 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 531 stmt = new TOpenStmt(psql.dbvendor); 532 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 533 stmt = new TMssqlOpen(psql.dbvendor); 534 } 535 break; 536 case (CloseSqlNode): 537 if ((psql.dbvendor == EDbVendor.dbvmssql)||(psql.dbvendor == EDbVendor.dbvsybase)||(psql.dbvendor == EDbVendor.dbvhana)){ 538 stmt = new TMssqlClose(psql.dbvendor); 539 }else if (psql.dbvendor == EDbVendor.dbvdb2){ 540 stmt = new TDb2CloseCursorStmt(psql.dbvendor); 541 }else if (psql.dbvendor == EDbVendor.dbvteradata){ 542 stmt = new TCloseStmt(EDbVendor.dbvteradata); 543 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 544 stmt = new TCloseStmt(psql.dbvendor); 545 }else if (psql.dbvendor == EDbVendor.dbvredshift){ 546 stmt = new TCloseStmt(psql.dbvendor); 547 } 548 break; 549 case (CreateIndexSqlNode): 550 stmt = new TCreateIndexSqlStatement(psql.dbvendor); 551 break; 552 case (DropTableSqlNode): 553 stmt = new TDropTableSqlStatement(psql.dbvendor); 554 break; 555 case (DropIndexSqlNode): 556 stmt = new TDropIndexSqlStatement(psql.dbvendor); 557 break; 558 case (DropViewSqlNode): 559 stmt = new TDropViewSqlStatement(psql.dbvendor); 560 break; 561 case (DropDbObjectSqlNode): 562 stmt = new TMssqlDropDbObject(psql.dbvendor); 563 break; 564 case (AlterTableSqlNode): 565 stmt = new TAlterTableStatement(psql.dbvendor); 566 break; 567 case (alterViewSqlNode): 568 stmt = new TAlterViewStatement(psql.dbvendor); 569 break; 570 case (alterDatabaseSqlNode): 571 stmt = new TAlterDatabaseStmt(psql.dbvendor); 572 break; 573 case (alterIndexSqlNode): 574 stmt = new TAlterIndexStmt(psql.dbvendor); 575 break; 576 case (MssqlDeallocateSqlNode): 577 stmt = new TMssqlDeallocate(psql.dbvendor); 578 break; 579 case(ExecuteSqlNode): 580 switch (psql.dbvendor){ 581 case dbvteradata: 582 stmt = new TTeradataExecute(psql.dbvendor); 583 break; 584 case dbvpostgresql: 585 case dbvsnowflake: 586 case dbvnetezza: 587 case dbvredshift: 588 stmt = new TExecuteSqlStatement(psql.dbvendor); 589 break; 590 default: 591 stmt = new TMssqlExecute(psql.dbvendor); 592 break; 593 } 594 595 break; 596 case(ExecuteAsSqlNode): 597 stmt = new TMssqlExecuteAs(psql.dbvendor); 598 break; 599 case(BeginTranSqlNode): 600 stmt = new TBeginTran(psql.dbvendor); 601 break; 602 case(EndTranSqlNode): 603 stmt = new TEndTran(psql.dbvendor); 604 break; 605 case(MssqlRaiserrorSqlNode): 606 stmt = new TMssqlRaiserror(psql.dbvendor); 607 break; 608 case(MssqlLabelSqlNode): 609 stmt = new TMssqlLabel(psql.dbvendor); 610 break; 611 case(MssqlGotoSqlNode): 612 stmt = new TMssqlGoTo(psql.dbvendor); 613 break; 614 case(MssqlRevertSqlNode): 615 stmt = new TMssqlRevert(psql.dbvendor); 616 break; 617 case MssqlSendOnConversationSqlNode: 618 stmt = new TMssqlSendOnConversation(psql.dbvendor); 619 break; 620 case(MssqlEndConversationSqlNode): 621 stmt = new TMssqlEndConversation(psql.dbvendor); 622 break; 623 case(MssqlBeginDialogSqlNode): 624 stmt = new TMssqlBeginDialog(psql.dbvendor); 625 break; 626 case MssqlSetSqlNode: 627 stmt = new TMssqlSet(psql.dbvendor); 628 break; 629 case LoopSqlNode: 630 switch (psql.dbvendor){ 631 case dbvdb2: 632 stmt = new TDb2LoopStmt(EDbVendor.dbvdb2); 633 break; 634 default: 635 stmt = new TLoopStmt(psql.dbvendor); 636 break; 637 638 } 639 break; 640 case RepeatSqlNode: 641 stmt = new TRepeatStmt(psql.dbvendor); 642// if (psql.dbvendor == EDbVendor.dbvdb2){ 643// stmt = new TRepeatStmt(EDbVendor.dbvdb2); 644// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 645// stmt = new TMySQLRepeatStmt(EDbVendor.dbvmysql); 646// } 647 break; 648 case WhileSqlNode: 649 stmt = new TWhileStmt(psql.dbvendor); 650// if (psql.dbvendor == EDbVendor.dbvdb2){ 651// stmt = new TWhileStmt(EDbVendor.dbvdb2); 652// }else if (psql.dbvendor == EDbVendor.dbvmysql){ 653// stmt = new TMySQLWhileStmt(EDbVendor.dbvmysql); 654// } 655 break; 656 case ForSqlNode: 657 stmt = new TForStmt(dbvendor); 658 break; 659 case SetSqlNode: 660 switch (psql.dbvendor){ 661 case dbvhive: 662 stmt = new THiveSet(EDbVendor.dbvhive); 663 break; 664 case dbvmysql: 665 case dbvbigquery: 666 case dbvteradata: 667 case dbvgaussdb: 668 case dbvsparksql: 669 stmt = new TSetStmt(psql.dbvendor); 670 break; 671 default: 672 stmt = new TDb2SetVariableStmt(EDbVendor.dbvdb2); 673 break; 674 } 675 676 break; 677 case UnsetSqlNode: 678 stmt = new TUnsetStmt(psql.dbvendor); 679 break; 680 case caseExpression: 681 switch (psql.dbvendor){ 682 case dbvdb2: 683 stmt = new TDb2CaseStmt(EDbVendor.dbvdb2); 684 break; 685 case dbvmysql: 686 stmt = new TMySQLCaseStmt(EDbVendor.dbvmysql); 687 break; 688 case dbvteradata: 689 stmt = new TCaseStmt(EDbVendor.dbvmysql); 690 break; 691 default: 692 break; 693 } 694 695 break; 696 case(MssqlStmtStubSqlNode): 697 //TMssqlStmtStubSqlNode stmt1 = (TMssqlStmtStubSqlNode)sqlNode; 698 if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlset){ 699 stmt = new TMssqlSet(psql.dbvendor); 700 //((TMssqlSet)stmt).setSetType(TBaseType.mstSetCmd); 701 stmt.setStartToken(sqlNode); 702 stmt.setEndToken(sqlNode); 703 }else if (((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() == ESqlStatementType.sstmssqlupdatestatistics){ 704 stmt = new TMssqlUpdateStatistics(psql.dbvendor); 705 }else{ 706 stmt = new TMssqlStmtStub(psql.dbvendor); 707 ((TMssqlStmtStub)stmt).setSqlStatementType( ((TMssqlStmtStubSqlNode)sqlNode).getSqlStatementType() ); 708 } 709 break; 710 case T_TeradataStmtStubSqlNode: 711 switch (((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType()){ 712 case sstRevoke: 713 stmt = new TRevokeStmt(psql.dbvendor); 714 break; 715 default: 716 stmt = new TTeradataStmtStub(psql.dbvendor); 717 ((TTeradataStmtStub)stmt).sqlstatementtype = ( ((TTeradataStmtStubSqlNode)sqlNode).getSqlStatementType() ); 718 } 719 break; 720 case stubStmtSqlNode: 721 TStubStmtSqlNode stubNode = (TStubStmtSqlNode)sqlNode; 722 723 switch(stubNode.getSqlStatementType()){ 724 case sstdb2signal: 725 case sstsignal: 726 stmt = new TSignalStmt(psql.dbvendor); 727 break; 728 default: 729 break; 730 } 731 732 if (psql.dbvendor == EDbVendor.dbvdb2){ 733 switch(stubNode.getSqlStatementType()){ 734 case sstdb2iterate: 735 stmt = new TDb2IterateStmt(EDbVendor.dbvdb2); 736 break; 737 case sstdb2call: 738 stmt = new TDb2CallStmt(EDbVendor.dbvdb2); 739 break; 740 case sstdb2leave: 741 stmt = new TDb2LeaveStmt(EDbVendor.dbvdb2); 742 break; 743 case sstdb2signal: 744 break; 745 case sstdb2goto: 746 stmt = new TDb2GotoStmt(EDbVendor.dbvdb2); 747 break; 748 case sstdb2set: 749 stmt = new TDb2SetStmt(EDbVendor.dbvdb2); 750 break; 751 default: 752 stmt = new TDb2StmtStub(EDbVendor.dbvdb2); 753 ((TDb2StmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 754 break; 755 } 756 }else if (psql.dbvendor == EDbVendor.dbvmysql){ 757 stmt = new TMySQLStmtStub(EDbVendor.dbvmysql); 758 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 759 }else if (psql.dbvendor == EDbVendor.dbvbigquery){ 760 stmt = new TMySQLStmtStub(EDbVendor.dbvbigquery); 761 ((TMySQLStmtStub)stmt).setSqlStatementType( ((TStubStmtSqlNode)sqlNode).getSqlStatementType() ); 762 } 763 break; 764 case(dummyNode): 765 TDummy dummy = (TDummy)sqlNode; 766 767 switch (dummy.sqlstatementtype){ 768 case sstcommit: 769 stmt = new TCommitStmt(psql.dbvendor); 770 break; 771 case sstmssqlcommit: 772 stmt = new TMssqlCommit(psql.dbvendor); 773 break; 774 case sstmssqlrollback: 775 stmt = new TMssqlRollback(psql.dbvendor); 776 break; 777 case sstrollback: 778 stmt = new TRollbackStmt(psql.dbvendor); 779 break; 780 case sstmssqlsavetran: 781 stmt = new TMssqlSaveTran(psql.dbvendor); 782 break; 783 case sstmssqlprint: 784 stmt = new TMssqlPrint(psql.dbvendor); 785 break; 786 case sstmssqluse: 787 stmt = new TUseDatabase(psql.dbvendor); 788 break; 789 case sstmssqlgo: 790 stmt = new TMssqlGo(psql.dbvendor); 791 break; 792 case sstHelpProcedure: 793 stmt = new THelpProcedure(psql.dbvendor); 794 break; 795 case sstShowProcedure: 796 stmt = new TShowProcedure(psql.dbvendor); 797 break; 798 case sstRevoke: 799 stmt = new TRevokeStmt(psql.dbvendor); 800 break; 801 case sstAllocate: 802 stmt = new TAllocateStmt(psql.dbvendor); 803 break; 804 case sstDrop: 805 stmt = new TDropStmt(psql.dbvendor); 806 break; 807 case sstmssqlDropSecurityPolicy: 808 stmt = new TMssqlDropSecurityPolicy(psql.dbvendor); 809 break; 810 case sstbegintran: 811 stmt = new TBeginTran(psql.dbvendor); 812 break; 813 } 814 break; 815 case(ParseErrorNode): 816 stmt = new TParseErrorSqlStatement(psql.dbvendor); 817 break; 818 case (truncateTable): 819 stmt = new TTruncateStatement(psql.dbvendor); 820 break; 821 case(hiveLoadSqlNode): 822 stmt = new THiveLoad(EDbVendor.dbvhive); 823 break; 824 case (hiveExportSqlNode): 825 stmt = new THiveExportTable(EDbVendor.dbvhive); 826 break; 827 case (hiveImportSqlNode): 828 stmt = new THiveImportTable(EDbVendor.dbvhive); 829 break; 830 case (createDatabaseSqlNode): 831 stmt = new TCreateDatabaseSqlStatement(psql.dbvendor); 832 break; 833 case (hiveSwitchDBSqlNode): 834 stmt = new THiveSwitchDatabase(psql.dbvendor); 835 break; 836 case (hiveDropDBSqlNode): 837 stmt = new THiveDropDatabase(psql.dbvendor); 838 break; 839 case (hiveDescribeSqlNode): 840 stmt = new THiveDescribe(psql.dbvendor); 841 break; 842 case (hiveShowSqlNode): 843 stmt = new THiveShow(psql.dbvendor); 844 break; 845 case (msckSqlNode): 846 stmt = new TMSCKStmt(psql.dbvendor); 847 break; 848 case (hiveDropFunctionSqlNode): 849 stmt = new THiveDropFunction(psql.dbvendor); 850 break; 851 case (analyzeSqlNode): 852 stmt = new TAnalyzeStmt(psql.dbvendor); 853 break; 854 case (LockSqlNode): 855 stmt = new TLockTableStmt(psql.dbvendor); 856 break; 857 case (hiveCreateRoleSqlNode): 858 stmt = new THiveCreateRole(psql.dbvendor); 859 break; 860 case (hiveGrantSqlNode): 861 if (((THiveGrantSqlNode)sqlNode).isRevoke()){ 862 stmt = new THiveRevoke(EDbVendor.dbvhive); 863 }else{ 864 stmt = new THiveGrant(EDbVendor.dbvhive); 865 } 866 break; 867 case (hiveShowGrantSqlNode): 868 stmt = new THiveShowGrant(psql.dbvendor); 869 break; 870 case (hiveDropRoleSqlNode): 871 stmt = new THiveDropRole(psql.dbvendor); 872 break; 873 case (hiveShowRoleGrantSqlNode): 874 stmt = new THiveShowRoleGrant(psql.dbvendor); 875 break; 876 case (hiveGrantRoleSqlNode): 877 if(((THiveGrantRoleSqlNode)sqlNode).isRevoke()){ 878 stmt = new THiveRevokeRole(psql.dbvendor); 879 }else{ 880 stmt = new THiveGrantRole(psql.dbvendor); 881 } 882 883 break; 884// case hiveFromQuerySqlNode: 885// stmt = new THiveFromQuery(EDbVendor.dbvhive); 886// break; 887 case sybaseDumpTranSqlNode: 888 stmt = new TSybaseDumpTran(EDbVendor.dbvsybase); 889 break; 890 case sybaseUpdateIndexStatisticsSqlNode: 891 stmt = new TSybaseUpdateIndexStatistics(EDbVendor.dbvsybase); 892 break; 893 case sybaseWritetextSqlNode: 894 stmt = new TSybaseWritetext(EDbVendor.dbvsybase); 895 break; 896 case sybaseDeleteStatisticsSqlNode: 897 stmt = new TSybaseDeleteStatistics(EDbVendor.dbvsybase); 898 break; 899 case callSqlNode: 900 stmt = new TCallStatement(psql.dbvendor); 901 break; 902 case moveSqlNode: 903 stmt = new TMoveStmt(EDbVendor.dbvpostgresql); 904 break; 905 case MergeSqlNode: 906 stmt = new TMergeSqlStatement(psql.dbvendor) ; 907 break; 908 case dropSequenceSqlNode: 909 stmt = new TDropSequenceStmt(psql.dbvendor); 910 break; 911 case dropProcedureSqlNode: 912 stmt = new TDropProcedureStmt(psql.dbvendor); 913 break; 914 case OracleCompoundTriggerBody: 915 stmt = new TCompoundTriggerBody(psql.dbvendor); 916 break; 917 case createSynonymSqlNode: 918 stmt = new TCreateSynonymStmt(psql.dbvendor); 919 break; 920 case T_TeradataLockSqlNode: 921 stmt = new TTeradataLock(psql.dbvendor); 922 break; 923 case MssqlCreateXmlSchemaCollectionSqlNode: 924 stmt = new TMssqlCreateXmlSchemaCollectionStmt(psql.dbvendor); 925 break; 926 case DeallocatePrepareSqlNode: 927 stmt = new TMySQLDeallocatePrepareStmt(psql.dbvendor); 928 break; 929 case createSchemaSqlNode: 930 stmt = new TCreateSchemaSqlStatement(psql.dbvendor); 931 break; 932 case dropDatabaseSqlNode: 933 stmt = new TDropDatabaseStmt(psql.dbvendor); 934 break; 935 case dropSchemaSqlNode: 936 stmt = new TDropSchemaSqlStatement(psql.dbvendor); 937 break; 938 case MssqlBeginConversationTimerSqlNode: 939 stmt = new TMssqlBeginConversationTimer(psql.dbvendor); 940 break; 941 case getDiagSqlNode: 942 stmt = new TGetDiagStmt(psql.dbvendor); 943 break; 944 case dropFunctionSqlNode: 945 stmt = new TDropFunctionStmt(psql.dbvendor); 946 break; 947 case performanceSqlNode: 948 stmt = new TPerformanceStmt(psql.dbvendor); 949 break; 950 case PrepareSqlNode: 951 stmt = new TPrepareStmt(psql.dbvendor); 952 break; 953 case upsertSqlNode: 954 stmt = new TUpsertStmt(psql.dbvendor); 955 break; 956 case createviewstmt: 957 stmt = new TCreateViewSqlStatement(dbvendor); 958 break; 959 case LeaveSqlNode: 960 stmt = new TLeaveStmt(dbvendor); 961 break; 962 case TSignalSqlNode: 963 stmt = new TSignalStmt(dbvendor); 964 break; 965 case rolllbackSqlNode: 966 stmt = new TRollbackStmt(dbvendor); 967 break; 968 case commitSqlNode: 969 stmt = new TCommitStmt(dbvendor); 970 break; 971 case IterateSqlNode: 972 stmt = new TIterateStmt(dbvendor); 973 break; 974 case T_SetSessionSqlNode: 975 stmt = new TTeradataSetSession(dbvendor); 976 break; 977 case T_DisableEnableTriggerSqlNode: 978 stmt = new TDisableEnableTriggerStmt(dbvendor); 979 break; 980 case CommentSqlNode: 981 stmt = new TCommentOnSqlStmt(dbvendor); 982 break; 983 case CreateTypeSqlNode: 984 stmt = new TCreateTypeStmt(dbvendor); 985 break; 986 case TCreateStageSqlNode: 987 stmt = new TCreateStageStmt(dbvendor); 988 break; 989 case TCreateStreamSqlNode: 990 stmt = new TCreateStreamStmt(dbvendor); 991 break; 992 case TCreatePipeSqlNode: 993 stmt = new TCreatePipeStmt(dbvendor); 994 break; 995 case CollectStatisticsSqlNode: 996 stmt = new TTeradataCollectStatistics(dbvendor); 997 break; 998 case TResetSqlNode: 999 stmt = new TResetStmt(dbvendor); 1000 break; 1001 case TAlterSessionSqlNode: 1002 stmt = new TAlterSessionStatement(dbvendor); 1003 break; 1004 case TCreateTaskSqlNode: 1005 stmt = new TCreateTaskStmt(dbvendor); 1006 break; 1007 case TCreatePartitionFunctionSqlNode: 1008 stmt = new TCreatePartitionFunctionStmt(dbvendor); 1009 break; 1010 case TAlterPartitionFunctionSqlNode: 1011 stmt = new TAlterPartitionFunctionStmt(dbvendor); 1012 break; 1013 case TCreatePartitionSchemeSqlNode: 1014 stmt = new TCreatePartitionSchemeSqlStatement(dbvendor); 1015 break; 1016 case TAlterPartitionSchemeSqlNode: 1017 stmt = new TAlterPartitionSchemeSqlStatement(dbvendor); 1018 break; 1019 case TCreateRoutineLoadSqlNode: 1020 stmt = new TCreateRoutineLoadStmt(dbvendor); 1021 break; 1022 case TSubmitTaskSqlNode: 1023 stmt = new TSubmitTaskStmt(dbvendor); 1024 break; 1025 case TDropTaskSqlNode: 1026 stmt = new TStarrocksDropTaskStmt(dbvendor); 1027 break; 1028 case TBeginLoadTransactionSqlNode: 1029 stmt = new TBeginLoadTransactionStmt(dbvendor); 1030 break; 1031 case TCommitLoadTransactionSqlNode: 1032 stmt = new TCommitLoadTransactionStmt(dbvendor); 1033 break; 1034 case TAbortLoadTransactionSqlNode: 1035 stmt = new TAbortLoadTransactionStmt(dbvendor); 1036 break; 1037 case TShowLoadTransactionSqlNode: 1038 stmt = new TShowLoadTransactionStmt(dbvendor); 1039 break; 1040 case TExportSqlNode: 1041 stmt = new TStarrocksExportStmt(dbvendor); 1042 break; 1043 case TShowExportSqlNode: 1044 stmt = new TStarrocksShowExportStmt(dbvendor); 1045 break; 1046 case TCancelExportSqlNode: 1047 stmt = new TStarrocksCancelExportStmt(dbvendor); 1048 break; 1049 default: 1050 break; 1051 } 1052 1053 if (stmt != null){ 1054 stmt.rootNode = sqlNode; 1055 stmt.setStartToken(sqlNode); 1056 stmt.setEndToken(sqlNode); 1057 stmt.setLabelName(this.labelName); 1058 stmt.doParseStatement(psql); 1059 1060// if (stmt.getStartToken() == null){ 1061// stmt.setStartToken(sqlNode.getStartToken()); 1062// } 1063// if (stmt.getEndToken() == null){ 1064// stmt.setEndToken(sqlNode.getEndToken()); 1065// } 1066 }else{ 1067 // System.out.println("stmt is null:"+sqlNode.getNodeType()); 1068 } 1069 1070 } 1071 1072 /** 1073 * Check if the given block node represents a TRY/CATCH block 1074 * by examining the token pattern: BEGIN TRY ... or END CATCH 1075 */ 1076 private boolean isTryCatchBlock(TParseTreeNode sqlNode) { 1077 TSourceToken startToken = sqlNode.getStartToken(); 1078 TSourceToken endToken = sqlNode.getEndToken(); 1079 1080 if (startToken == null || endToken == null) { 1081 return false; 1082 } 1083 1084 // Check if end token is CATCH (indicates TRY/CATCH block) 1085 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("CATCH")) { 1086 return true; 1087 } 1088 1089 // Check if end token is TRY (TRY-only block without CATCH) 1090 if (endToken.astext != null && endToken.astext.equalsIgnoreCase("TRY")) { 1091 return true; 1092 } 1093 1094 // Check if start is BEGIN and next solid token is TRY 1095 if (startToken.astext != null && startToken.astext.equalsIgnoreCase("BEGIN")) { 1096 TSourceTokenList tokenList = startToken.container; 1097 if (tokenList != null) { 1098 for (int i = startToken.posinlist + 1; i < tokenList.size(); i++) { 1099 TSourceToken token = tokenList.get(i); 1100 if (token.tokentype != ETokenType.ttwhitespace && 1101 token.tokentype != ETokenType.ttreturn) { 1102 if (token.astext != null && token.astext.equalsIgnoreCase("TRY")) { 1103 return true; 1104 } 1105 break; // First non-whitespace token is not TRY 1106 } 1107 } 1108 } 1109 } 1110 1111 return false; 1112 } 1113} 1114