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