001package gudusoft.gsqlparser.nodes;
002
003
004import gudusoft.gsqlparser.EDbObjectType;
005import gudusoft.gsqlparser.TSourceTokenList;
006import gudusoft.gsqlparser.nodes.mssql.TProcedureOption;
007import gudusoft.gsqlparser.nodes.oracle.TInvokerRightsClause;
008import gudusoft.gsqlparser.TBaseType;
009import gudusoft.gsqlparser.nodes.oracle.TParallelEnableClause;
010
011/**
012 * Internal use in the parser.
013*/
014
015public class TCreateProcedureSqlNode extends TParseTreeNode {
016
017    private TTypeName returnDataType = null;
018
019    public void setReturnDataType(TTypeName returnDataType) {
020        this.returnDataType = returnDataType;
021    }
022
023    public TTypeName getReturnDataType() {
024
025        return returnDataType;
026    }
027
028    private TConstant functionBody = null;
029
030    public TSourceTokenList getFunctionBodyTokenList() {
031        return functionBodyTokenList;
032    }
033
034    private TSourceTokenList functionBodyTokenList = null;
035
036    public void setFunctionBody(TConstant functionBody) {
037        this.functionBody = functionBody;
038    }
039    public void setFunctionBody(TDummy functionBody) {
040        // used in netezza
041        if (functionBody.node1 != null){
042            if (functionBody.node1 instanceof TConstant){
043                this.functionBody = (TConstant)functionBody.node1;
044            }
045        }else if ((functionBody.st1 != null)&&(functionBody.st2 != null)){
046             functionBodyTokenList = new TSourceTokenList();
047             for(int i=functionBody.st1.posinlist; i< functionBody.st2.posinlist;i++){
048                 functionBodyTokenList.add(functionBody.st1.container.get(i));
049             }
050        }
051
052    }
053
054    public TConstant getFunctionBody() {
055        return functionBody;
056    }
057    private TConstant procedureLanguage;
058
059    public void setProcedureLanguage(TConstant procedureLanguage) {
060        this.procedureLanguage = procedureLanguage;
061    }
062
063    public TConstant getProcedureLanguage() {
064        return procedureLanguage;
065    }
066    private TConstant objfile;
067    private TConstant linkSymbol;
068
069    public TConstant getLinkSymbol() {
070        return linkSymbol;
071    }
072
073    public TConstant getObjfile() {
074        return objfile;
075    }
076
077    public void setFunctionOption(TCreateFunctionOption option){
078        switch (option.getOptionType()){
079            case block:
080                functionBody = option.getFunctionBody();
081                break;
082            case stmts:
083                //setStmts(option.getSqlNodes());
084                functionBody = option.getFunctionBody();
085                break;
086            case language:
087                procedureLanguage = option.getLanguage();
088                break;
089            case objfile:
090                objfile = option.getObjfile();
091                linkSymbol = option.getLinkSymbol();
092                break;
093            default:
094                break;
095        }
096    }
097
098    public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){
099        if (options == null) return;
100        for(int i=0;i<options.size();i++){
101            setFunctionOption(options.getElement(i));
102        }
103    }
104
105    private TObjectName endlabelName;
106
107    public void setEndlabelName(TObjectName endlabelName) {
108        this.endlabelName = endlabelName;
109    }
110
111    public TObjectName getEndlabelName() {
112
113        return endlabelName;
114    }
115
116    private TPTNodeList <TProcedureOption> procedureOptions;
117
118    public void setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) {
119        this.procedureOptions = procedureOptions;
120    }
121
122    public TPTNodeList<TProcedureOption> getProcedureOptions() {
123
124        return procedureOptions;
125    }
126
127    private boolean isForReplication;
128
129    public void setForReplication(boolean isForReplication) {
130        this.isForReplication = isForReplication;
131    }
132
133    public boolean isForReplication() {
134
135        return isForReplication;
136    }
137
138    private TObjectName labelName;
139
140    public void setLabelName(TObjectName labelName) {
141        this.labelName = labelName;
142    }
143
144    public TObjectName getLabelName() {
145
146        return labelName;
147    }
148
149    private TInvokerRightsClause invokerRightsClause;
150
151    public void setInvokerRightsClause(TInvokerRightsClause invokerRightsClause) {
152        this.invokerRightsClause = invokerRightsClause;
153    }
154
155    public TInvokerRightsClause getInvokerRightsClause() {
156
157        return invokerRightsClause;
158    }
159
160    private TParallelEnableClause parallelEnableClause;
161    public void setParallelEnableClause(TParallelEnableClause parallelEnableClause) {
162        this.parallelEnableClause = parallelEnableClause;
163    }
164    public TParallelEnableClause getParallelEnableClause() {
165
166        return parallelEnableClause;
167    }
168
169    private TDummy defaultCollation = null;
170    public TDummy getDefaultCollation() {
171        return defaultCollation;
172    }
173
174    public TDummy accessibleByClause = null;
175    public void setAccessibleByClause(TDummy accessibleByClause) {
176        this.accessibleByClause = accessibleByClause;
177    }
178    public TDummy getAccessibleByClause() {
179        return accessibleByClause;
180    }
181
182    public void setDefaultInvokerAccessByDummy(TDummy dummy){
183        if (dummy == null) return;
184        switch (dummy.int1){
185            case 1: // default_invoker_accessible_item_lists
186                for(int i=0;i<dummy.arrayList1.size();i++) {
187                    TDummy dummyItem = (TDummy) dummy.arrayList1.get(0);
188                    String itemName = dummyItem.toString().toLowerCase();
189                    if (itemName.startsWith("default")) {
190                        defaultCollation = dummyItem;
191                    } else if (itemName.startsWith("auth")) {
192                        this.invokerRightsClause = (TInvokerRightsClause) dummyItem.node1;
193                    } else if (itemName.startsWith("accessible")) {
194                        this.accessibleByClause =dummyItem;
195                    }
196                }
197                break;
198            case 2: // parallel_enable_clause
199                this.parallelEnableClause = (TParallelEnableClause)dummy.node1;
200                break;
201            case 3: // RW_PACKAGE
202                break;
203        }
204    }
205
206    private TCallSpec callSpec = null;
207
208    public void setCallSpec(TCallSpec callSpec) {
209        this.callSpec = callSpec;
210    }
211
212    public TCallSpec getCallSpec() {
213
214        return callSpec;
215    }
216
217    public TObjectName getProcedureName() {
218        return procedureName;
219    }
220
221    private TObjectName procedureName = null;
222
223    public TParameterDeclarationList getParameters() {
224        return parameters;
225    }
226
227    private TParameterDeclarationList parameters = null;
228
229    public void setParameters(TParameterDeclarationList parameters) {
230        this.parameters = parameters;
231    }
232
233    public void setParametersByDummy(TDummy node) {
234        if (node == null) return;
235        if (node.node1 != null){
236            this.parameters = (TParameterDeclarationList)node.node1;
237        }
238    }
239
240    private TStatementListSqlNode innerStmts = null; //oracle plsql
241
242    public void setInnerStmts(TStatementListSqlNode innerStmts) {
243        this.innerStmts = innerStmts;
244    }
245
246    private TStatementSqlNode stmt = null;//mysql single stmt in function body
247
248    public void setStmt(TStatementSqlNode stmt) {
249        this.stmt = stmt;
250    }
251
252    public TStatementSqlNode getStmt() {
253
254        return stmt;
255    }
256
257    private TBlockSqlNode blcok = null;    // MySQL
258
259    public void setBlcok(TBlockSqlNode blcok) {
260        this.blcok = blcok;
261    }
262
263    public TBlockSqlNode getBlcok() {
264
265        return blcok;
266    }
267
268    public void init(Object arg1)
269    {
270       procedureName = (TObjectName)arg1;
271       //procedureName.setObjectType(TObjectName.ttobjProcedureName);
272       procedureName.setDbObjectType(EDbObjectType.procedure);
273       procedureName.splitNameInQuotedIdentifier();
274    }
275    
276    public int getKind() {
277        return kind;
278    }
279
280    public void setKind(int kind) {
281        this.kind = kind;
282
283    }
284
285    private int kind = TBaseType.kind_create;
286
287    public TExceptionClause getExceptionClause() {
288        return exceptionClause;
289    }
290
291    public void setExceptionClause(TExceptionClause exceptionClause) {
292        this.exceptionClause = exceptionClause;
293    }
294
295    private TExceptionClause exceptionClause = null; //plsql exception
296
297    public TStatementListSqlNode getInnerStmts() {
298        return innerStmts;
299    }
300
301    public TStatementListSqlNode getStmts() {
302        return stmts;
303    }
304
305    private TStatementListSqlNode stmts = null;
306
307    public TStatementListSqlNode getDeclareStmts() {
308        return declareStmts;
309    }
310
311    public void setDeclareStmts(TStatementListSqlNode declareStmts) {
312        this.declareStmts = declareStmts;
313
314    }
315
316    private TStatementListSqlNode declareStmts = null;
317
318    public void setStmts(TStatementListSqlNode stmts) {
319        this.stmts = stmts;
320    }
321
322    private TCompoundSqlNode compoundSqls = null;
323
324    public void setCompoundSqls(TCompoundSqlNode compoundSqls) {
325        this.compoundSqls = compoundSqls;
326    }
327
328    public TCompoundSqlNode getCompoundSqls() {
329
330        return compoundSqls;
331    }
332}