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}