001package gudusoft.gsqlparser.stmt.teradata;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlClause;
005import gudusoft.gsqlparser.ESqlStatementType;
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.nodes.TCreateProcedureSqlNode;
008import gudusoft.gsqlparser.nodes.TObjectName;
009import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
010import gudusoft.gsqlparser.nodes.TSymbolTableItem;
011import gudusoft.gsqlparser.stmt.TStoredProcedureSqlStatement;
012
013/**
014 * Teradata create procedure.
015 *
016 * @deprecated As of v2.0.7.7,  replaced by  {@link gudusoft.gsqlparser.stmt.TCreateProcedureStmt}
017 *
018 */
019public class TTeradataCreateProcedure extends TStoredProcedureSqlStatement {
020
021    public TTeradataCreateProcedure(EDbVendor dbvendor) {
022        super(dbvendor);
023        sqlstatementtype = ESqlStatementType.sstteradatacreateprocedure;
024    }
025
026    /**
027     * The name that you give to the procedure that you are declaring or defining.
028     * @return
029     */
030    public TObjectName getProcedureName() {
031        return procedureName;
032    }
033
034    private TObjectName procedureName = null;
035
036
037    public int doParseStatement(TCustomSqlStatement psql) {
038        if (rootNode == null) return -1;
039        if(!(rootNode instanceof TCreateProcedureSqlNode)) return -1;
040        TCreateProcedureSqlNode createProcedureNode = (TCreateProcedureSqlNode)rootNode;
041
042        super.doParseStatement(psql);
043
044        procedureName = createProcedureNode.getProcedureName();
045        this.setParameterDeclarations(createProcedureNode.getParameters());
046
047        // push parameterDeclarations into symbolTable
048        if (this.getParameterDeclarations() != null){
049            for(int i=0;i< this.getParameterDeclarations().size();i++){
050               this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjParameter,this, this.getParameterDeclarations().getParameterDeclarationItem(i)));
051            }
052        }
053
054        if (createProcedureNode.getStmts() != null){
055           createProcedureNode.getStmts().doParse(this, ESqlClause.unknown);
056            for(int i=0;i<createProcedureNode.getStmts().size();i++){
057               this.getBodyStatements().add(createProcedureNode.getStmts().getStatementSqlNode(i).getStmt());
058            }
059        }
060
061        // pop parameterDeclarations from symbolTable
062        if (this.getParameterDeclarations() != null){
063            for(int i=0;i< this.getParameterDeclarations().size();i++){
064               this.getTopStatement().getSymbolTable().pop();
065            }
066        }
067
068        return 0;
069    }
070
071//    public void accept(TParseTreeVisitor v){
072//        v.preVisit(this);
073//        v.postVisit(this);
074//    }
075//
076//    public void acceptChildren(TParseTreeVisitor v){
077//        v.preVisit(this);
078//        if (getParameterDeclarations() != null) getParameterDeclarations().acceptChildren(v);
079//        if (getBodyStatements().size() > 0) getBodyStatements().acceptChildren(v);
080//        v.postVisit(this);
081//    }
082
083    public void setProcedureName(TObjectName procedureName) {
084        this.procedureName = procedureName;
085    }
086}