001package gudusoft.gsqlparser.stmt.mssql;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.compiler.TFrame;
005import gudusoft.gsqlparser.nodes.TBlockSqlNode;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007import gudusoft.gsqlparser.stmt.TBlockSqlStatement;
008
009public class TMssqlBlock extends TBlockSqlStatement {
010     public TMssqlBlock (EDbVendor dbvendor){
011        super(dbvendor);
012        sqlstatementtype = ESqlStatementType.sstmssqlblock ;
013        }
014
015    void buildsql() {
016    }
017
018    void clear() {
019    }
020
021    String getasprettytext() {
022        return "";
023    }
024
025    void iterate(TVisitorAbs pvisitor) {
026    }
027
028    public int doParseStatement(TCustomSqlStatement psql) {
029        if (rootNode == null) return -1;
030        TBlockSqlNode blockSqlNode = (TBlockSqlNode)rootNode;
031
032        super.doParseStatement(psql);
033        TFrame currentFrame = new TFrame(this.stmtScope);
034        currentFrame.pushMeToStack(getFrameStack());
035
036        if (blockSqlNode.getStmts() != null){
037            // sql server has empty block like this: BEGIN END
038            blockSqlNode.getStmts().doParse(this,ESqlClause.unknown);
039
040            for(int i=0;i<blockSqlNode.getStmts().size();i++){
041               this.getBodyStatements().add(blockSqlNode.getStmts().getStatementSqlNode(i).getStmt());
042            }
043        }
044
045        // Watcom / Sybase IQ EXCEPTION handler section — parse handler bodies
046        // and hang the clause off the statement so visitors and lineage see it.
047        if (blockSqlNode.getExceptionClause() != null) {
048            blockSqlNode.getExceptionClause().doParse(this, ESqlClause.unknown);
049            this.setExceptionClause(blockSqlNode.getExceptionClause());
050        }
051
052        currentFrame.popMeFromStack(getFrameStack());
053
054        return 0;
055    }
056
057    public void accept(TParseTreeVisitor v){
058        v.preVisit(this);
059
060        v.postVisit(this);
061    }
062
063    public void acceptChildren(TParseTreeVisitor v){
064        v.preVisit(this);
065        if (getBodyStatements().size() > 0) getBodyStatements().acceptChildren(v);
066        if (getExceptionClause() != null) getExceptionClause().acceptChildren(v);
067        v.postVisit(this);
068    }
069
070}