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                break;
174            case task:
175                moduleName = (TObjectName)arg2;
176                this.moduleName.setDbObjectType(EDbObjectType.task);
177                break;
178            case from_stage:
179                fromSource = (TParseTreeNode)arg2;
180                break;
181            default:
182                break;
183        }
184    }
185
186
187    public void init(Object arg1,Object arg2,Object arg3){
188        init(arg1,arg2);
189        switch (executeType){
190            case stmt:
191                break;
192            case module:
193                stringValues = (TExpressionList)arg3;
194                break;
195            case expr:
196                usingVariables = (TExpressionList)arg3;
197                break;
198            case module_with_params:
199                this.parameters = (TExecParameterList)arg3;
200                break;
201            case exec_string_cmd:
202                stringValues = (TExpressionList)arg3;
203                break;
204            case from_stage:
205                usingVariables = (TExpressionList)arg3;
206                break;
207            default:
208                break;
209        }
210    }
211
212    public void init(Object arg1,Object arg2,Object arg3,Object arg4){
213        init(arg1,arg2,arg3);
214        switch (executeType){
215            case module_with_params:
216                this.returnStatus = (TObjectName) arg4;
217                break;
218            default:
219                break;
220        }
221    }
222
223//    public void init(Object arg1){
224//        if (arg1 instanceof  TObjectName){
225//            this.moduleName = (TObjectName)arg1;
226//            this.moduleName.setObjectType(TObjectName.ttobjProcedureName);
227//        }else if (arg1 instanceof TExpression){
228//            preparedValue = (TExpression)arg1;
229//            stmtString = (TExpression)arg1;
230//        }
231//    }
232//
233//
234//
235//    public void init(Object arg1,Object arg2){
236//        init(arg1);
237//        if (arg2 instanceof TExecParameterList){
238//            parameters = (TExecParameterList)arg2;
239//        }else if (arg2 instanceof TExpressionList){
240//            stringValues = (TExpressionList)arg2;
241//        }
242//    }
243
244    public TExpression getPreparedValue() {
245        return preparedValue;
246    }
247
248    private TExpression preparedValue;//couchbase
249
250    // Snowflake: EXECUTE IMMEDIATE FROM @stage/path or FROM 'path'
251    private TParseTreeNode fromSource;
252
253    public TParseTreeNode getFromSource() {
254        return fromSource;
255    }
256
257    public void setFromSource(TParseTreeNode fromSource) {
258        this.fromSource = fromSource;
259    }
260
261    // MSSQL: EXEC ('sql') AS USER = 'name' or AS LOGIN = 'name'
262    private TObjectName executeAsUser;
263    private TObjectName executeAsLogin;
264
265    public TObjectName getExecuteAsUser() {
266        return executeAsUser;
267    }
268
269    public void setExecuteAsUser(TObjectName executeAsUser) {
270        this.executeAsUser = executeAsUser;
271    }
272
273    public TObjectName getExecuteAsLogin() {
274        return executeAsLogin;
275    }
276
277    public void setExecuteAsLogin(TObjectName executeAsLogin) {
278        this.executeAsLogin = executeAsLogin;
279    }
280}