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