001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005import gudusoft.gsqlparser.nodes.TCreateMacroSqlNode;
006
007
008public class TCreateMacro extends TStoredProcedureSqlStatement {
009    private TExpression expr;
010
011    public TExpression getExpr() {
012        return expr;
013    }
014    private TObjectName macroName;
015
016    public void setMacroName(TObjectName macroName) {
017        this.macroName = macroName;
018
019    }
020
021    public TObjectName getMacroName() {
022
023        return macroName;
024    }
025
026    public TCreateMacro(EDbVendor dbvendor) {
027        super(dbvendor);
028        sqlstatementtype = ESqlStatementType.sstteradatacreatemacro;
029    }
030
031    public int doParseStatement(TCustomSqlStatement psql) {
032        if (rootNode == null) return -1;
033        TCreateMacroSqlNode createMacroSqlNode = (TCreateMacroSqlNode)rootNode;
034
035        super.doParseStatement(psql);
036
037        this.macroName = createMacroSqlNode.getMacroName();
038        this.macroName.setDbObjectType(EDbObjectType.macro);
039        this.setParameterDeclarations(createMacroSqlNode.getParameters());
040
041        if (this.getParameterDeclarations() != null){
042            for(int i=0;i< this.getParameterDeclarations().size();i++){
043                this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjParameter,this, this.getParameterDeclarations().getParameterDeclarationItem(i)));
044            }
045        }
046
047        TStatementListSqlNode stmts =createMacroSqlNode.getStmts();
048        if (stmts != null){
049            stmts.doParse(this, ESqlClause.unknown);
050            for(int i=0;i<stmts.size();i++){
051                this.getBodyStatements().add(stmts.getStatementSqlNode(i).getStmt());
052            }
053        }
054
055        this.expr = createMacroSqlNode.getExpr();
056        if (this.expr != null){
057            // hive
058            this.expr.doParse(this,ESqlClause.unknown);
059        }
060
061        if (this.getParameterDeclarations() != null){
062            for(int i=0;i< this.getParameterDeclarations().size();i++){
063                this.getTopStatement().getSymbolTable().pop();
064            }
065        }
066
067        return 0;
068    }
069
070    public void accept(TParseTreeVisitor v){
071        v.preVisit(this);
072        v.postVisit(this);
073    }
074
075    public void acceptChildren(TParseTreeVisitor v){
076        v.preVisit(this);
077        getBodyStatements().acceptChildren(v);
078        v.postVisit(this);
079    }
080
081
082}