001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.TSourceToken;
005import gudusoft.gsqlparser.nodes.mssql.TProcedureOption;
006import gudusoft.gsqlparser.nodes.oracle.TInvokerRightsClause;
007import gudusoft.gsqlparser.nodes.oracle.TParallelEnableClause;
008import gudusoft.gsqlparser.nodes.oracle.TResultCacheClause;
009import gudusoft.gsqlparser.TBaseType;
010
011/**
012 * Internal use in the parser..
013*/
014public class TCreateFunctionSqlNode extends TParseTreeNode {
015    private String className;
016    private String resourceType;//jar, file
017    private String resourceURI;//
018
019    private TSelectSqlNode sqlQuery;
020
021    public void setSqlQuery(TSelectSqlNode sqlQuery) {
022        this.sqlQuery = sqlQuery;
023    }
024
025    public TSelectSqlNode getSqlQuery() {
026        return sqlQuery;
027    }
028
029    public String getClassName() {
030        return className;
031    }
032
033    public String getResourceType() {
034        return resourceType;
035    }
036
037    public String getResourceURI() {
038        return resourceURI;
039    }
040
041    public  void setSparkSqlResourceLocation(TDummy dummy){
042        this.resourceType = dummy.st1.toString();
043        this.resourceURI = dummy.st2.toString();
044    }
045
046    public void setClassNameByToken(TSourceToken st){
047        this.className = st.toString();
048    }
049
050    private TExpression sqlExpression;//bigquery
051
052    public void setSqlExpression(TExpression sqlExpression) {
053        this.sqlExpression = sqlExpression;
054    }
055
056    public TExpression getSqlExpression() {
057        return sqlExpression;
058    }
059
060    private TObjectName endlabelName;
061
062    public void setEndlabelName(TObjectName endlabelName) {
063        this.endlabelName = endlabelName;
064    }
065
066    public TObjectName getEndlabelName() {
067
068        return endlabelName;
069    }
070
071    public TConstant getSharedLibraryName() {
072        return sharedLibraryName;
073    }
074
075    public void setSharedLibraryName(TConstant sharedLibraryName) {
076
077        this.sharedLibraryName = sharedLibraryName;
078    }
079
080    private TConstant sharedLibraryName;
081
082    private TPTNodeList <TProcedureOption> procedureOptions;
083
084    public void setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) {
085        this.procedureOptions = procedureOptions;
086    }
087
088    public TPTNodeList<TProcedureOption> getProcedureOptions() {
089
090        return procedureOptions;
091    }
092
093    private boolean isDeterministic;
094    private TInvokerRightsClause invokerRightsClause;
095    private TParallelEnableClause parallelEnableClause;
096    private TResultCacheClause resultCacheClause;
097    private TObjectName implementionType;
098
099    public void setImplementionType(TObjectName implementionType) {
100        this.implementionType = implementionType;
101    }
102
103    public TObjectName getImplementionType() {
104
105        return implementionType;
106    }
107
108    public  void setFunctionCharacter(TDummy dummy){
109        if (dummy == null) return;
110        if (dummy.list1 != null){
111            setFuncHintList((TDummyList)dummy.list1);
112        }
113    }
114
115    public void setFuncHintList(TDummyList dummyList){
116
117        if (dummyList == null) return;
118
119        for(int i=0; i<dummyList.size();i++){
120            TDummy dummy = dummyList.getDummyItem(i);
121            if (dummy.st1 != null){
122                isDeterministic = true;
123            }else{
124                if (dummy.node1 instanceof TInvokerRightsClause){
125                    invokerRightsClause = (TInvokerRightsClause)(dummy.node1);
126                }else if (dummy.node1 instanceof  TParallelEnableClause){
127                    parallelEnableClause = (TParallelEnableClause)(dummy.node1);
128                }else if (dummy.node1 instanceof TResultCacheClause){
129                    resultCacheClause = (TResultCacheClause)(dummy.node1);
130                }
131            }
132        }
133    }
134
135    public boolean isDeterministic() {
136        return isDeterministic;
137    }
138
139    public TParallelEnableClause getParallelEnableClause() {
140        return parallelEnableClause;
141    }
142
143    public TResultCacheClause getResultCacheClause() {
144        return resultCacheClause;
145    }
146
147    public TInvokerRightsClause getInvokerRightsClause() {
148
149        return invokerRightsClause;
150    }
151
152    private TObjectName functionName = null;
153    private TObjectName asName;
154
155    public TObjectName getAsName() {
156        return asName;
157    }
158
159    public TObjectName getFunctionName() {
160        return functionName;
161    }
162
163    private TParameterDeclarationList parameters = null;
164
165    public void setParameters(TParameterDeclarationList parameters) {
166        this.parameters = parameters;
167    }
168
169    public void setParametersByDummy(TDummy node) {
170        if (node == null) return;
171        if (node.node1 != null){
172            this.parameters = (TParameterDeclarationList)node.node1;
173        }
174    }
175
176    public void init(Object arg1)
177   {
178      functionName = (TObjectName)arg1;
179      if (functionName.getDbObjectType() != EDbObjectType.function){
180          // not set yet, then do this here
181          functionName.setObjectType(TObjectName.ttobjFunctionName);
182      }
183
184      functionName.splitNameInQuotedIdentifier();
185   }
186
187    public void init(Object arg1,Object arg2)
188   {
189       init(arg1);
190       asName = (TObjectName)arg2;
191   }
192
193    public void setKind(int kind) {
194        this.kind = kind;
195    }
196
197    public int getKind() {
198        return kind;
199    }
200
201    private TCallSpec callSpec = null;
202
203    public TCallSpec getCallSpec() {
204        return callSpec;
205    }
206
207    public void setCallSpec(TCallSpec callSpec) {
208
209        this.callSpec = callSpec;
210    }
211
212    private int kind = TBaseType.kind_create;// what's kind of this function
213
214    private TBlockSqlNode blcok = null;    // sql server
215    private TStatementListSqlNode stmts = null; // plsql
216    private TStatementListSqlNode declareStmts = null; // plsql
217    private TStatementSqlNode stmt = null;//mysql single stmt in function body
218    private TConstant functionBody;
219
220    public void setFunctionBody(TConstant functionBody) {
221        this.functionBody = functionBody;
222        this.functionDefinition = functionBody;
223    }
224
225    public TConstant getFunctionBody() {
226        return functionBody;
227    }
228
229    public void setFunctionDefinition(TConstant functionDefinition) {
230        this.functionDefinition = functionDefinition;
231    }
232
233    public TConstant getFunctionDefinition() {
234
235        return functionDefinition;
236    }
237
238    private TConstant functionDefinition;
239
240    public void setStmt(TStatementSqlNode stmt) {
241        this.stmt = stmt;
242    }
243
244    public TStatementSqlNode getStmt() {
245
246        return stmt;
247    }
248
249    public TExceptionClause getExceptionClause() {
250        return exceptionClause;
251    }
252
253    public void setExceptionClause(TExceptionClause exceptionClause) {
254        this.exceptionClause = exceptionClause;
255    }
256
257    private TExceptionClause exceptionClause = null; //plsql exception
258
259    public TStatementListSqlNode getDeclareStmts() {
260        return declareStmts;
261    }
262
263    public void setDeclareStmts(TStatementListSqlNode declareStmts) {
264
265        this.declareStmts = declareStmts;
266    }
267
268    public TStatementListSqlNode getStmts() {
269        return stmts;
270    }
271
272    public void setStmts(TStatementListSqlNode stmts) {
273
274        this.stmts = stmts;
275    }
276
277    public TBlockSqlNode getBlcok() {
278        return blcok;
279    }
280
281    public TReturnSqlNode getReturnSqlNode() {
282        return returnSqlNode;
283    }
284
285    private TReturnSqlNode returnSqlNode = null;
286
287    public void setReturnSqlNode(TReturnSqlNode returnSqlNode) {
288        this.returnSqlNode = returnSqlNode;
289    }
290
291    public void setBlcok(TBlockSqlNode blcok) {
292        this.blcok = blcok;
293    }
294
295    public TParameterDeclarationList getParameters() {
296        return parameters;
297    }
298
299    private TTypeName returnDataType = null;
300
301    public void setReturnDataType(TTypeName returnDataType) {
302        this.returnDataType = returnDataType;
303    }
304
305    public TTypeName getReturnDataType() {
306
307        return returnDataType;
308    }
309
310    private TDummy returnTable = null;
311
312    public void setReturnTable(TDummy returnTable) {
313        this.returnTable = returnTable;
314    }
315
316    public TDummy getReturnTable() {
317
318        return returnTable;
319    }
320
321    private TCompoundSqlNode compoundSql = null;
322    private TReturnSqlNode returnSql = null;
323
324    public TCompoundSqlNode getCompoundSql() {
325        return compoundSql;
326    }
327
328    public void setReturnSql(TReturnSqlNode returnSql) {
329        this.returnSql = returnSql;
330    }
331
332    public TReturnSqlNode getReturnSql() {
333        return returnSql;
334    }
335
336    public void setBody(Object arg1){
337       if (arg1 instanceof TReturnSqlNode){
338           returnSql = (TReturnSqlNode)arg1;
339       }else if (arg1 instanceof TCompoundSqlNode){
340           compoundSql = (TCompoundSqlNode)arg1;
341       }
342    }
343
344
345    public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){
346        if (options == null) return;
347        for(int i=0;i<options.size();i++){
348            setFunctionOption(options.getElement(i));
349        }
350    }
351
352    private TConstant objfile;
353
354    public void setObjfile(TConstant objfile) {
355        this.objfile = objfile;
356    }
357
358    public void setLinkSymbol(TConstant linkSymbol) {
359        this.linkSymbol = linkSymbol;
360    }
361
362    private TConstant linkSymbol;
363
364    public TConstant getLinkSymbol() {
365        return linkSymbol;
366    }
367
368    public TConstant getObjfile() {
369        return objfile;
370    }
371
372    private TConstant procedureLanguage;
373
374    public TConstant getProcedureLanguage() {
375        return procedureLanguage;
376    }
377
378    private TObjectName labelName = null;
379
380    public void setLabelName(TObjectName labelName) {
381        this.labelName = labelName;
382    }
383
384    public TObjectName getLabelName() {
385        return labelName;
386    }
387
388    public void setFunctionOption(TCreateFunctionOption option){
389//        boolean isplpgsql = true;
390//        if (procedureLanguage != null){
391//            if (!(procedureLanguage.toString().equalsIgnoreCase("plpgsql"))){
392//                isplpgsql = false;
393//            }
394//        }
395        switch (option.getOptionType()){
396            case block:
397//                TBlockSqlNode blockSqlNode = option.getBlockSqlNode();
398//                labelName = blockSqlNode.getLabelName();
399//                setDeclareStmts(blockSqlNode.getDeclareStmts());
400//                setStmts(blockSqlNode.getStmts());
401//                setExceptionClause(blockSqlNode.getExceptionClause());
402                functionBody = option.getFunctionBody();
403                break;
404            case stmts:
405                //setStmts(option.getSqlNodes());
406                functionBody = option.getFunctionBody();
407                break;
408            case language:
409                procedureLanguage = option.getLanguage();
410                break;
411            case objfile:
412                objfile = option.getObjfile();
413                linkSymbol = option.getLinkSymbol();
414                break;
415            default:
416                break;
417        }
418    }
419
420}