001package gudusoft.gsqlparser.stmt.mysql;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005import gudusoft.gsqlparser.stmt.TStoredProcedureSqlStatement;
006
007/**
008 * MySQL create procedure.
009 *
010 * @deprecated since GSP Java version 2.3.9.3, use {@link gudusoft.gsqlparser.stmt.TCreateProcedureStmt} instead.
011 *
012 */
013public class TMySQLCreateProcedure extends TStoredProcedureSqlStatement{
014     public TMySQLCreateProcedure (EDbVendor dbvendor){
015        super(dbvendor);
016        sqlstatementtype = ESqlStatementType.sstmysqlcreateprocedure ;
017        }
018
019    void buildsql() {
020    }
021
022    void clear() {
023    }
024
025    String getasprettytext() {
026        return "";
027    }
028
029    void iterate(TVisitorAbs pvisitor) {
030    }
031
032    public TObjectName getStoredProcedureName(){
033        return procedureName;
034    }
035
036    /**
037     * The name that you give to the procedure that you are declaring or defining.
038     * @return
039     */
040    public TObjectName getProcedureName() {
041        return procedureName;
042    }
043
044    private TObjectName procedureName = null;
045    
046
047
048    public int doParseStatement(TCustomSqlStatement psql) {
049        if (rootNode == null) return -1;
050        TCreateProcedureSqlNode createProcedureNode = (TCreateProcedureSqlNode)rootNode;
051
052        super.doParseStatement(psql);
053
054        procedureName = createProcedureNode.getProcedureName();
055        if (getSqlEnv().getDefaultCatalogName() != null){
056            if (procedureName.getDatabaseToken() == null){
057                procedureName.setDatabaseToken(new TSourceToken(getSqlEnv().getDefaultCatalogName()));
058            }
059        }
060        this.setParameterDeclarations( createProcedureNode.getParameters());
061
062        // push parameterDeclarations into symbolTable
063        if (this.getParameterDeclarations() != null){
064            for(int i=0;i< this.getParameterDeclarations().size();i++){
065               this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjParameter,this, this.getParameterDeclarations().getParameterDeclarationItem(i)));
066            }
067        }
068
069        if (createProcedureNode.getStmt() != null){
070            createProcedureNode.getStmt().doParse(this,ESqlClause.unknown);
071            this.getBodyStatements().add(createProcedureNode.getStmt().getStmt());
072        }
073        else if((createProcedureNode.getBlcok() != null)&&(createProcedureNode.getBlcok().getStmts() != null)){
074            createProcedureNode.getBlcok().getStmts().doParse(this,ESqlClause.unknown);
075
076            for(int i=0;i<createProcedureNode.getBlcok().getStmts().size();i++){
077               this.getBodyStatements().add(createProcedureNode.getBlcok().getStmts().getStatementSqlNode(i).getStmt());
078            }
079
080        }
081
082
083        // pop parameterDeclarations from symbolTable
084        if (this.getParameterDeclarations() != null){
085            for(int i=0;i< this.getParameterDeclarations().size();i++){
086               this.getTopStatement().getSymbolTable().pop();
087            }
088        }
089
090        return 0;
091    }
092
093    public void accept(TParseTreeVisitor v){
094        v.preVisit(this);
095        v.postVisit(this);
096    }
097
098    public void acceptChildren(TParseTreeVisitor v){
099        v.preVisit(this);
100        if (getParameterDeclarations() != null) getParameterDeclarations().acceptChildren(v);
101        getBodyStatements().acceptChildren(v);
102        v.postVisit(this);
103    }
104
105    public void setProcedureName(TObjectName procedureName) {
106        this.procedureName = procedureName;
107    }
108}