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