001package gudusoft.gsqlparser.stmt.mssql; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.TIfSqlNode; 005import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 006import gudusoft.gsqlparser.nodes.TExpression; 007import gudusoft.gsqlparser.nodes.mssql.TMssqlCreateTriggerUpdateColumnList; 008 009/** 010 * This class represents if and while SQL statement of SQL Server. 011 */ 012public class TMssqlIfElse extends TCustomSqlStatement { 013 public TMssqlIfElse (EDbVendor dbvendor){ 014 super(dbvendor); 015 sqlstatementtype = ESqlStatementType.sstmssqlif ; 016 } 017 018 void buildsql() { 019 } 020 021 void clear() { 022 } 023 024 String getasprettytext() { 025 return ""; 026 } 027 028 void iterate(TVisitorAbs pvisitor) { 029 } 030 031 private int stmtType = TBaseType.condition_statement_if; 032 private TExpression condition = null; 033 private TMssqlCreateTriggerUpdateColumnList updateColumnList = null; 034 private TCustomSqlStatement stmt = null; 035 036 public TCustomSqlStatement getElseStmt() { 037 return elseStmt; 038 } 039 040 public TCustomSqlStatement getStmt() { 041 return stmt; 042 } 043 044 private TCustomSqlStatement elseStmt = null; 045 046 047 public TExpression getCondition() { 048 return condition; 049 } 050 051 public TMssqlCreateTriggerUpdateColumnList getUpdateColumnList() { 052 return updateColumnList; 053 } 054 055 /** 056 * if or while SQL statement this class represents for. 057 * @return 058 */ 059 public int getStmtType() { 060 return stmtType; 061 } 062 063 public int doParseStatement(TCustomSqlStatement psql) { 064 if (rootNode == null) return -1; 065 TIfSqlNode ifSqlNode = (TIfSqlNode)rootNode; 066 super.doParseStatement(psql); 067 this.stmtType = ifSqlNode.getStmtType(); 068 this.condition = ifSqlNode.getCondition(); 069 if (this.condition != null){ 070 this.condition.doParse(this,ESqlClause.unknown); 071 } 072 this.updateColumnList = ifSqlNode.getUpdateColumnList(); 073 if (updateColumnList != null){ 074 for(int i = 0 ;i<updateColumnList.size();i++){ 075 if (psql.getAncestorStmt().sqlstatementtype == ESqlStatementType.sstcreatetrigger){ 076 psql.getAncestorStmt().tables.getTable(0).getLinkedColumns().addObjectName(updateColumnList.getCreateTriggerUpdateColumn(i).getColumnName()); 077 updateColumnList.getCreateTriggerUpdateColumn(i).getColumnName().setSourceTable(psql.getAncestorStmt().tables.getTable(0)); 078 } 079 //psql.tables.getTable(0) 080 } 081 } 082 083 ifSqlNode.getStmtSqlNode().doParse(this,ESqlClause.unknown); 084 stmt = ifSqlNode.getStmtSqlNode().getStmt(); 085 if (this.getEndToken() == null){ 086 this.setEndToken(stmt.getEndToken()); 087 } 088 089 if (ifSqlNode.getElseStmtSqlNode() != null){ 090 ifSqlNode.getElseStmtSqlNode().doParse(this,ESqlClause.unknown); 091 elseStmt = ifSqlNode.getElseStmtSqlNode().getStmt(); 092 if (this.getEndToken() == null){ 093 this.setEndToken(elseStmt.getEndToken()); 094 } 095 } 096 097 return 0; 098 } 099 100 public void accept(TParseTreeVisitor v){ 101 v.preVisit(this); 102 v.postVisit(this); 103 } 104 105 public void acceptChildren(TParseTreeVisitor v){ 106 v.preVisit(this); 107 if (this.condition != null) condition.acceptChildren(v); 108 stmt.acceptChildren(v); 109 if (elseStmt != null) elseStmt.acceptChildren(v); 110 v.postVisit(this); 111 } 112 113 public void setStmtType(int stmtType) { 114 this.stmtType = stmtType; 115 } 116 117 public void setCondition(TExpression condition) { 118 this.condition = condition; 119 } 120 121 public void setUpdateColumnList(TMssqlCreateTriggerUpdateColumnList updateColumnList) { 122 this.updateColumnList = updateColumnList; 123 } 124 125 public void setStmt(TCustomSqlStatement stmt) { 126 this.stmt = stmt; 127 } 128 129 public void setElseStmt(TCustomSqlStatement elseStmt) { 130 this.elseStmt = elseStmt; 131 } 132}