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