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}