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