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 boolean ifNotExists = false;
215
216    public boolean isIfNotExists() {
217        return ifNotExists;
218    }
219
220    public void setIfNotExists(boolean ifNotExists) {
221        this.ifNotExists = ifNotExists;
222    }
223
224    private TBlockSqlNode blcok = null;    // sql server
225    private TStatementListSqlNode stmts = null; // plsql
226    private TStatementListSqlNode declareStmts = null; // plsql
227    private TStatementSqlNode stmt = null;//mysql single stmt in function body
228    private TConstant functionBody;
229
230    public void setFunctionBody(TConstant functionBody) {
231        this.functionBody = functionBody;
232        this.functionDefinition = functionBody;
233    }
234
235    public TConstant getFunctionBody() {
236        return functionBody;
237    }
238
239    public void setFunctionDefinition(TConstant functionDefinition) {
240        this.functionDefinition = functionDefinition;
241    }
242
243    public TConstant getFunctionDefinition() {
244
245        return functionDefinition;
246    }
247
248    private TConstant functionDefinition;
249
250    public void setStmt(TStatementSqlNode stmt) {
251        this.stmt = stmt;
252    }
253
254    public TStatementSqlNode getStmt() {
255
256        return stmt;
257    }
258
259    public TExceptionClause getExceptionClause() {
260        return exceptionClause;
261    }
262
263    public void setExceptionClause(TExceptionClause exceptionClause) {
264        this.exceptionClause = exceptionClause;
265    }
266
267    private TExceptionClause exceptionClause = null; //plsql exception
268
269    public TStatementListSqlNode getDeclareStmts() {
270        return declareStmts;
271    }
272
273    public void setDeclareStmts(TStatementListSqlNode declareStmts) {
274
275        this.declareStmts = declareStmts;
276    }
277
278    public TStatementListSqlNode getStmts() {
279        return stmts;
280    }
281
282    public void setStmts(TStatementListSqlNode stmts) {
283
284        this.stmts = stmts;
285    }
286
287    public TBlockSqlNode getBlcok() {
288        return blcok;
289    }
290
291    public TReturnSqlNode getReturnSqlNode() {
292        return returnSqlNode;
293    }
294
295    private TReturnSqlNode returnSqlNode = null;
296
297    public void setReturnSqlNode(TReturnSqlNode returnSqlNode) {
298        this.returnSqlNode = returnSqlNode;
299    }
300
301    public void setBlcok(TBlockSqlNode blcok) {
302        this.blcok = blcok;
303    }
304
305    public TParameterDeclarationList getParameters() {
306        return parameters;
307    }
308
309    private TTypeName returnDataType = null;
310
311    public void setReturnDataType(TTypeName returnDataType) {
312        this.returnDataType = returnDataType;
313    }
314
315    public TTypeName getReturnDataType() {
316
317        return returnDataType;
318    }
319
320    private TDummy returnTable = null;
321
322    public void setReturnTable(TDummy returnTable) {
323        this.returnTable = returnTable;
324    }
325
326    public TDummy getReturnTable() {
327
328        return returnTable;
329    }
330
331    private TCompoundSqlNode compoundSql = null;
332    private TReturnSqlNode returnSql = null;
333
334    public TCompoundSqlNode getCompoundSql() {
335        return compoundSql;
336    }
337
338    public void setReturnSql(TReturnSqlNode returnSql) {
339        this.returnSql = returnSql;
340    }
341
342    public TReturnSqlNode getReturnSql() {
343        return returnSql;
344    }
345
346    public void setBody(Object arg1){
347       if (arg1 instanceof TReturnSqlNode){
348           returnSql = (TReturnSqlNode)arg1;
349       }else if (arg1 instanceof TCompoundSqlNode){
350           compoundSql = (TCompoundSqlNode)arg1;
351       }
352    }
353
354
355    public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){
356        if (options == null) return;
357        for(int i=0;i<options.size();i++){
358            setFunctionOption(options.getElement(i));
359        }
360    }
361
362    private TConstant objfile;
363
364    public void setObjfile(TConstant objfile) {
365        this.objfile = objfile;
366    }
367
368    public void setLinkSymbol(TConstant linkSymbol) {
369        this.linkSymbol = linkSymbol;
370    }
371
372    private TConstant linkSymbol;
373
374    public TConstant getLinkSymbol() {
375        return linkSymbol;
376    }
377
378    public TConstant getObjfile() {
379        return objfile;
380    }
381
382    private TConstant procedureLanguage;
383
384    public TConstant getProcedureLanguage() {
385        return procedureLanguage;
386    }
387
388    private TObjectName labelName = null;
389
390    public void setLabelName(TObjectName labelName) {
391        this.labelName = labelName;
392    }
393
394    public TObjectName getLabelName() {
395        return labelName;
396    }
397
398    public void setFunctionOption(TCreateFunctionOption option){
399//        boolean isplpgsql = true;
400//        if (procedureLanguage != null){
401//            if (!(procedureLanguage.toString().equalsIgnoreCase("plpgsql"))){
402//                isplpgsql = false;
403//            }
404//        }
405        switch (option.getOptionType()){
406            case block:
407//                TBlockSqlNode blockSqlNode = option.getBlockSqlNode();
408//                labelName = blockSqlNode.getLabelName();
409//                setDeclareStmts(blockSqlNode.getDeclareStmts());
410//                setStmts(blockSqlNode.getStmts());
411//                setExceptionClause(blockSqlNode.getExceptionClause());
412                functionBody = option.getFunctionBody();
413                break;
414            case stmts:
415                //setStmts(option.getSqlNodes());
416                functionBody = option.getFunctionBody();
417                break;
418            case language:
419                procedureLanguage = option.getLanguage();
420                break;
421            case objfile:
422                objfile = option.getObjfile();
423                linkSymbol = option.getLinkSymbol();
424                break;
425            default:
426                break;
427        }
428    }
429
430    // StarRocks-specific fields for CREATE [OR REPLACE] [GLOBAL] [AGGREGATE|TABLE] FUNCTION ... PROPERTIES (...)
431    private boolean starrocksGlobal = false;
432    private boolean starrocksAggregate = false;
433    private boolean starrocksTableFunction = false;
434    private boolean starrocksOrReplace = false;
435    private TTypeName starrocksIntermediateType = null;
436    private TPTNodeList starrocksProperties = null;
437
438    public boolean isStarrocksGlobal() { return starrocksGlobal; }
439    public void setStarrocksGlobal(boolean starrocksGlobal) { this.starrocksGlobal = starrocksGlobal; }
440
441    public boolean isStarrocksAggregate() { return starrocksAggregate; }
442    public void setStarrocksAggregate(boolean starrocksAggregate) { this.starrocksAggregate = starrocksAggregate; }
443
444    public boolean isStarrocksTableFunction() { return starrocksTableFunction; }
445    public void setStarrocksTableFunction(boolean starrocksTableFunction) { this.starrocksTableFunction = starrocksTableFunction; }
446
447    public boolean isStarrocksOrReplace() { return starrocksOrReplace; }
448    public void setStarrocksOrReplace(boolean starrocksOrReplace) { this.starrocksOrReplace = starrocksOrReplace; }
449
450    public TTypeName getStarrocksIntermediateType() { return starrocksIntermediateType; }
451    public void setStarrocksIntermediateType(TTypeName starrocksIntermediateType) { this.starrocksIntermediateType = starrocksIntermediateType; }
452
453    public TPTNodeList getStarrocksProperties() { return starrocksProperties; }
454    public void setStarrocksProperties(TPTNodeList starrocksProperties) { this.starrocksProperties = starrocksProperties; }
455
456}