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