001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.EDeclareType;
005import gudusoft.gsqlparser.TBaseType;
006import gudusoft.gsqlparser.TSourceToken;
007
008import java.util.ArrayList;
009
010public class TDeclareSqlNode extends TParseTreeNode {
011
012    public void setWithReturnOnly(boolean withReturnOnly) {
013        this.withReturnOnly = withReturnOnly;
014    }
015
016    public boolean isWithReturnOnly() {
017        return withReturnOnly;
018    }
019
020    private boolean withReturnOnly = false;
021
022    private TSelectSqlNode selectSqlNode = null;
023    private TDeclareVariableList variables = null;
024    private TObjectName cursorName = null;
025    private EDeclareType declareType = EDeclareType.variable;
026
027    private TObjectName cursorStatement;
028
029    private  TBlockSqlNode handlerBlock;
030    private  TStatementSqlNode handleStmt;
031
032    public void setHandlerBlock(TBlockSqlNode handlerBlock) {
033        this.handlerBlock = handlerBlock;
034    }
035
036    public void setHandleStmt(TStatementSqlNode handleStmt) {
037        this.handleStmt = handleStmt;
038    }
039
040    public TBlockSqlNode getHandlerBlock() {
041        return handlerBlock;
042    }
043
044    public TStatementSqlNode getHandleStmt() {
045        return handleStmt;
046    }
047
048    public TObjectName getCursorStatement() {
049        return cursorStatement;
050    }
051
052    private TObjectName conditionName = null;//mysql
053    
054    public EDeclareType getDeclareType() {
055        return declareType;
056    }
057
058    public TObjectName getConditionName() {
059        return conditionName;
060    }
061
062    public TObjectName getCursorName() {
063        return cursorName;
064    }
065
066    public void setDeclareType(EDeclareType declareType) {
067        this.declareType = declareType;
068    }
069
070    public static EDeclareType getDeclareTypeByToken(TSourceToken st){
071        if (st == null) return EDeclareType.unknown ;
072        if (st.toString().equalsIgnoreCase("continue")){
073            return EDeclareType.continueHandlers;
074        }
075        else if (st.toString().equalsIgnoreCase("exit")){
076            return EDeclareType.exitHandlers;
077        }else
078            return EDeclareType.unknown;
079    }
080
081    private ArrayList<THandlerForCondition> handlerForConditions;
082
083    public void setHandlerForConditions(ArrayList<THandlerForCondition> handlerForConditions) {
084        this.handlerForConditions = handlerForConditions;
085    }
086
087    public ArrayList<THandlerForCondition> getHandlerForConditions() {
088        return handlerForConditions;
089    }
090
091    public TDeclareVariableList getVariables() {
092        return variables;
093    }
094
095    private TConstant stateValue;
096    private TConstant errorCode;
097
098    public TConstant getStateValue() {
099        return stateValue;
100    }
101
102    public TConstant getErrorCode() {
103        return errorCode;
104    }
105
106    public void init(Object arg1, Object arg2, Object arg3){
107        declareType = (EDeclareType)arg1;
108        switch (declareType){
109            case cursor:
110                this.cursorName = (TObjectName)arg2;
111                if (arg3 instanceof TSelectSqlNode){
112                    selectSqlNode = (TSelectSqlNode)arg3;
113                }else if (arg3 instanceof TObjectName){
114                    this.cursorStatement = (TObjectName)arg3;
115                }
116                break;
117            case conditions:
118                this.conditionName = (TObjectName)arg2;
119                TDummy d = (TDummy)arg3;
120                if (d.int1 == 1){
121                    this.stateValue = (TConstant) d.node1;
122                }else if (d.int1 == 2){
123                    this.errorCode = (TConstant)d.node1;
124                }
125                break;
126            default:
127                break;
128        }
129    }
130
131    public void init(Object arg1){
132        declareType = (EDeclareType)arg1;
133    }
134
135    public void init(Object arg1,Object arg2){
136        if (arg1 != null){
137            if (arg1 instanceof  EDeclareType){
138                declareType = (EDeclareType)arg1;
139                switch (declareType){
140                    case conditions:
141                        this.conditionName = (TObjectName)arg2;
142                        break;
143                    case tableType:
144                        variables = (TDeclareVariableList)arg2;
145                        break;
146                    default:
147                        break;
148                }
149            }else {
150                this.conditionName = (TObjectName)arg1;
151                this.declareType = EDeclareType.conditions;
152            }
153        }
154         if (arg2 instanceof TDeclareVariableList){
155            variables = (TDeclareVariableList)arg2;
156             this.declareType = EDeclareType.variable;
157         }else if (arg2 instanceof TSelectSqlNode){
158             this.cursorName = (TObjectName)arg1;
159             this.cursorName.setDbObjectType(this.dbvendor, EDbObjectType.cursor);
160             selectSqlNode = (TSelectSqlNode)arg2;
161             this.declareType = EDeclareType.cursor;
162         }else if (arg2 instanceof TStatementSqlNode){
163             //db2,teradata handler
164             this.stmtSqlNode = (TStatementSqlNode)arg2;
165            // this.handleStmt  = (TStatementSqlNode)arg2;
166         }
167     }
168
169    public TSelectSqlNode getSelectSqlNode() {
170        return selectSqlNode;
171    }
172
173    private TStatementSqlNode stmtSqlNode = null;
174
175    public TStatementSqlNode getStmtSqlNode() {
176        return stmtSqlNode;
177    }
178}