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