001package gudusoft.gsqlparser.stmt.oracle;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TCreatePackageSqlNode;
005import gudusoft.gsqlparser.nodes.TObjectName;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007import gudusoft.gsqlparser.nodes.oracle.TInvokerRightsClause;
008import gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement;
009
010/**
011 * The CREATE PACKAGE statement creates or replaces the specification for a stored package,
012 * which is an encapsulated collection of related procedures, functions,
013 * and other program objects stored together in the database.
014 * The package specification declares these objects.
015 * The package body, specified subsequently, defines these objects.
016 * 
017 * @see gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement#declareStatements
018 * @see gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement#bodyStatements
019*/
020
021public class TPlsqlCreatePackage extends TCommonStoredProcedureSqlStatement {
022
023    public void setPackageNameStr(String packageNameStr) {
024        this.packageNameStr = packageNameStr;
025    }
026
027    public String getPackageNameStr() {
028        return packageNameStr;
029    }
030
031    // found in getRawStatement() method
032    private String packageNameStr;
033
034    private TObjectName endlabelName;
035
036
037    public TObjectName getEndlabelName() {
038
039        return endlabelName;
040    }
041
042    private TInvokerRightsClause invokerRightsClause;
043
044    public void setInvokerRightsClause(TInvokerRightsClause invokerRightsClause) {
045        this.invokerRightsClause = invokerRightsClause;
046    }
047
048    public TInvokerRightsClause getInvokerRightsClause() {
049
050        return invokerRightsClause;
051    }
052
053    @Override
054    public TObjectName getStoredProcedureName(){
055        return packageName;
056    }
057    /**
058     * This class represents package specification or create package body.
059     * @return
060     */
061    public int getKind() {
062        return kind;
063    }
064
065    private int kind = TBaseType.kind_create;
066
067    public TPlsqlCreatePackage(){
068        this(EDbVendor.dbvoracle);
069    }
070    
071     public TPlsqlCreatePackage(EDbVendor dbvendor){
072        super(dbvendor);
073        sqlstatementtype = ESqlStatementType.sstplsql_createpackage ;
074        }
075
076    void buildsql() {
077    }
078
079    void clear() {
080    }
081
082    String getasprettytext() {
083        return "";
084    }
085
086    void iterate(TVisitorAbs pvisitor) {
087    }
088
089    public int doParseStatement(TCustomSqlStatement psql) {
090        if (rootNode == null) return -1;
091        if (super.doParseStatement(psql) != 0) return -1;
092
093        TCreatePackageSqlNode createPackageNode = (TCreatePackageSqlNode)rootNode;
094
095        this.packageName = createPackageNode.getPackageName(); 
096        this.kind = createPackageNode.getKind();
097
098        invokerRightsClause = createPackageNode.getInvokerRightsClause();
099        setEndlabelName(createPackageNode.getLabelName());
100
101        if (createPackageNode.getDefinitions_or_declarations() != null){
102            createPackageNode.getDefinitions_or_declarations().doParse(this,ESqlClause.unknown);
103            for(int i=0;i<createPackageNode.getDefinitions_or_declarations().size();i++){
104                this.getDeclareStatements().add(createPackageNode.getDefinitions_or_declarations().getStatementSqlNode(i).getStmt());
105            }
106        }
107
108        if (createPackageNode.getStmts() != null){
109            createPackageNode.getStmts().doParse(this,ESqlClause.unknown);
110            for(int i=0;i<createPackageNode.getStmts().size();i++){
111                this.getBodyStatements().add(createPackageNode.getStmts().getStatementSqlNode(i).getStmt());
112            }
113        }
114
115        if (createPackageNode.getExceptionClause() != null){
116            createPackageNode.getExceptionClause().doParse(this,ESqlClause.unknown);
117           // this.setExceptionClause(createPackageNode.getExceptionClause());
118        }
119
120        endlabelName = createPackageNode.getEndlabelName();
121        return 0;
122    }
123
124  private TObjectName packageName;
125
126    public void setPackageName(TObjectName packageName) {
127        this.packageName = packageName;
128    }
129
130    /**
131     * Name of a package stored in the database.
132     * @return
133     */
134    public TObjectName getPackageName() {
135        return packageName;
136    }
137
138
139    public void accept(TParseTreeVisitor v){
140        v.preVisit(this);
141        v.postVisit(this);
142    }
143
144    public void acceptChildren(TParseTreeVisitor v){
145        v.preVisit(this);
146        if (this.getParameterDeclarations() != null) getParameterDeclarations().acceptChildren(v);
147        if (this.getDeclareStatements().size() > 0) this.getDeclareStatements().acceptChildren(v);
148        if ( this.getBodyStatements().size() > 0) getBodyStatements().acceptChildren(v);
149        if (getExceptionClause() != null) getExceptionClause().acceptChildren(v);
150
151        v.postVisit(this);
152    }
153
154    public void setKind(int kind) {
155        this.kind = kind;
156    }
157}