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}