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