001package gudusoft.gsqlparser.stmt.vertica; 002 003 004import gudusoft.gsqlparser.*; 005import gudusoft.gsqlparser.nodes.*; 006import gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement; 007import gudusoft.gsqlparser.stmt.mssql.TMssqlReturn; 008 009public class TVerticaCreateFunction extends TCommonStoredProcedureSqlStatement { 010 011 private TObjectName functionName = null; 012 private TTypeName returnDataType = null; 013 014 015 016 public TVerticaCreateFunction(EDbVendor dbvendor) { 017 super(dbvendor); 018 sqlstatementtype = ESqlStatementType.sstcreatefunction; 019 } 020 021 022 023 private TConstant procedureLanguage; 024 025 public TConstant getProcedureLanguage() { 026 return procedureLanguage; 027 } 028 private TMssqlReturn returnStmt = null; 029 030 public TMssqlReturn getReturnStmt() { 031 return returnStmt; 032 } 033 034 public int doParseStatement(TCustomSqlStatement psql) { 035 if (rootNode == null) return -1; 036 TCreateFunctionSqlNode createFunctionNode = (TCreateFunctionSqlNode)rootNode; 037 038 //super.doParseStatement(psql); 039 if (super.doParseStatement(psql) != 0) return -1; 040 functionName = createFunctionNode.getFunctionName(); 041 procedureLanguage = createFunctionNode.getProcedureLanguage(); 042 043 044 this.setParameterDeclarations(createFunctionNode.getParameters()); 045 046 // push parameterDeclarations into symbolTable 047 if (this.getParameterDeclarations() != null){ 048 for(int i=0;i< this.getParameterDeclarations().size();i++){ 049 this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjParameter,this, this.getParameterDeclarations().getParameterDeclarationItem(i))); 050 } 051 } 052 returnStmt = new TMssqlReturn(this.dbvendor); 053 returnStmt.rootNode = createFunctionNode.getReturnSqlNode(); 054 returnStmt.doParseStatement(this); 055 this.getBodyStatements().add(returnStmt); 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 065 return 0; 066 } 067 068 public TObjectName getFunctionName() { 069 return functionName; 070 } 071 072 public TTypeName getReturnDataType() { 073 return returnDataType; 074 } 075 076 public TObjectName getStoredProcedureName(){ 077 return functionName; 078 } 079 080 public void accept(TParseTreeVisitor v){ 081 v.preVisit(this); 082 v.postVisit(this); 083 } 084 085 public void acceptChildren(TParseTreeVisitor v){ 086 v.preVisit(this); 087 if (getParameterDeclarations() != null) getParameterDeclarations().accept(v); 088 v.postVisit(this); 089 } 090 091 public void setFunctionName(TObjectName functionName) { 092 this.functionName = functionName; 093 } 094 095 public void setReturnDataType(TTypeName returnDataType) { 096 this.returnDataType = returnDataType; 097 } 098 099 100 public void setProcedureLanguage(TConstant procedureLanguage) { 101 this.procedureLanguage = procedureLanguage; 102 } 103}