001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.EExecType;
005import gudusoft.gsqlparser.EExpressionType;
006import gudusoft.gsqlparser.TBaseType;
007import gudusoft.gsqlparser.nodes.mssql.TExecuteOption;
008
009
010public class TExecuteSqlNode extends TParseTreeNode {
011
012    public void setLinkServerName(TObjectName linkServerName) {
013        this.linkServerName = linkServerName;
014    }
015
016    public TObjectName getLinkServerName() {
017        return linkServerName;
018    }
019
020    private TObjectName linkServerName;
021    private TObjectName moduleName = null;
022    private TObjectName returnStatus = null;
023    private TExecParameterList parameters = null;
024    private TExpressionList stringValues = null;
025    private int execType = TBaseType.metExecSp;
026
027    // postgresql
028    private TExpression stmtString;
029
030
031    public void setIntoVariable(TObjectName intoVariable) {
032        this.intoVariable = intoVariable;
033    }
034
035    public void setUsingVariables(TExpressionList usingVariables) {
036        this.usingVariables = usingVariables;
037    }
038
039    public void setStmtString(TExpression stmtString) {
040        this.stmtString = stmtString;
041    }
042
043    public TExpression getStmtString() {
044        return stmtString;
045    }
046
047    private TObjectName intoVariable;
048    private TExpressionList usingVariables;
049
050    public TObjectName getIntoVariable() {
051        return intoVariable;
052    }
053
054    public TExpressionList getUsingVariables() {
055        return usingVariables;
056    }
057
058
059
060    private TExecuteOption executeOption;
061
062    public void setExecuteOption(TExecuteOption executeOption) {
063        this.executeOption = executeOption;
064    }
065
066    public TExecuteOption getExecuteOption() {
067
068        return executeOption;
069    }
070
071    public void setExecType(int execType) {
072        this.execType = execType;
073    }
074
075    public int getExecType() {
076
077        return execType;
078    }
079
080    public TExpressionList getStringValues() {
081        return stringValues;
082    }
083
084    public TObjectName getModuleName() {
085        return moduleName;
086    }
087
088    public TExecParameterList getParameters() {
089        return parameters;
090    }
091
092    public TObjectName getReturnStatus() {
093        return returnStatus;
094    }
095
096//    public void init(Object arg1,Object arg2,Object arg3){
097//      if (arg1 instanceof TObjectName){
098//          this.moduleName = (TObjectName)arg1;
099//          this.moduleName.setObjectType(TObjectName.ttobjProcedureName);
100//          if (arg2 != null){
101//              if (arg2 instanceof TExpressionList){
102//              // oracle execute
103//                stringValues = (TExpressionList)arg2;
104//              }else{
105//                this.parameters = (TExecParameterList)arg2;
106//              }
107//          }
108//
109//          if (arg3 != null){
110//              this.returnStatus = (TObjectName)arg3;
111//          }
112//      }else if(arg1 instanceof TExpressionList){
113//          this.stringValues = (TExpressionList)arg1;
114//      }
115//    }
116
117    public EExecType getExecuteType() {
118        return executeType;
119    }
120
121    private EExecType executeType = EExecType.stmt;
122
123    public void init(Object arg1){
124        executeType = (EExecType)arg1;
125    }
126
127    public void init(Object arg1,Object arg2){
128        init(arg1);
129        switch (executeType){
130            case stmt:
131                break;
132            case module:
133                moduleName = (TObjectName)arg2;
134                //this.moduleName.setObjectType(TObjectName.ttobjProcedureName);
135                this.moduleName.setDbObjectType(EDbObjectType.procedure);
136                break;
137            case expr:
138                preparedValue = (TExpression)arg2;
139                stmtString = (TExpression)arg2;
140                if (preparedValue.getExpressionType() == EExpressionType.function_t){
141                    //
142                    TFunctionCall functionCall = preparedValue.getFunctionCall();
143                    this.moduleName = functionCall.getFunctionName();
144                    this.moduleName.setDbObjectTypeDirectly(EDbObjectType.procedure);
145                    this.executeType = EExecType.module;
146
147                    // EXECUTE module_abc(1,2,4);
148                    if (parameters == null){
149                        parameters = new TExecParameterList();
150                    }
151                    TExpressionList args = functionCall.getArgs();
152                    if (args != null){
153                        for(int i=0;i<args.size();i++){
154                            TExecParameter parameter = new TExecParameter();
155                            parameter.setParameterValue(args.getExpression(i));
156                            parameter.setStartToken(args.getExpression(i).getStartToken());
157                            parameter.setEndToken(args.getExpression(i).getEndToken());
158                            parameters.addExecParameter(parameter);
159                        }
160                    }
161                }
162
163
164
165                break;
166            case module_with_params:
167                moduleName = (TObjectName)arg2;
168                //this.moduleName.setObjectType(TObjectName.ttobjProcedureName);
169                this.moduleName.setDbObjectType(EDbObjectType.procedure);
170                break;
171            case exec_string_cmd:
172                stringValues = (TExpressionList)arg2;
173            default:
174                break;
175        }
176    }
177
178
179    public void init(Object arg1,Object arg2,Object arg3){
180        init(arg1,arg2);
181        switch (executeType){
182            case stmt:
183                break;
184            case module:
185                stringValues = (TExpressionList)arg3;
186                break;
187            case expr:
188                usingVariables = (TExpressionList)arg3;
189                break;
190            case module_with_params:
191                this.parameters = (TExecParameterList)arg3;
192                break;
193            case exec_string_cmd:
194                stringValues = (TExpressionList)arg3;
195                break;
196            default:
197                break;
198        }
199    }
200
201    public void init(Object arg1,Object arg2,Object arg3,Object arg4){
202        init(arg1,arg2,arg3);
203        switch (executeType){
204            case module_with_params:
205                this.returnStatus = (TObjectName) arg4;
206                break;
207            default:
208                break;
209        }
210    }
211
212//    public void init(Object arg1){
213//        if (arg1 instanceof  TObjectName){
214//            this.moduleName = (TObjectName)arg1;
215//            this.moduleName.setObjectType(TObjectName.ttobjProcedureName);
216//        }else if (arg1 instanceof TExpression){
217//            preparedValue = (TExpression)arg1;
218//            stmtString = (TExpression)arg1;
219//        }
220//    }
221//
222//
223//
224//    public void init(Object arg1,Object arg2){
225//        init(arg1);
226//        if (arg2 instanceof TExecParameterList){
227//            parameters = (TExecParameterList)arg2;
228//        }else if (arg2 instanceof TExpressionList){
229//            stringValues = (TExpressionList)arg2;
230//        }
231//    }
232
233    public TExpression getPreparedValue() {
234        return preparedValue;
235    }
236
237    private TExpression preparedValue;//couchbase
238}