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