001package gudusoft.gsqlparser.stmt; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.TCaseExpression; 005import gudusoft.gsqlparser.nodes.TExpression; 006import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 007import gudusoft.gsqlparser.nodes.TWhenClauseItemList; 008 009/** 010 * The CASE statement chooses from a sequence of conditions, and execute a corresponding statement. 011 * @see TCaseExpression 012 */ 013 014public class TCaseStmt extends TCustomSqlStatement { 015 016 public TCaseStmt(){ 017 this(EDbVendor.dbvoracle); 018 } 019 020 public TCaseStmt(EDbVendor dbvendor){ 021 super(dbvendor); 022 sqlstatementtype = ESqlStatementType.sst_casestmt; 023 } 024 025 void buildsql() { 026 } 027 028 void clear() { 029 } 030 031 String getasprettytext() { 032 return ""; 033 } 034 035 void iterate(TVisitorAbs pvisitor) { 036 } 037 038 039 private TCaseExpression caseExpr = null; 040 041 public void init(Object arg1){ 042 caseExpr = (TCaseExpression)arg1; 043 } 044 045 /** 046 * 047 * @return check {@link TCaseExpression} for detailed. 048 */ 049 public TCaseExpression getCaseExpr() { 050 return caseExpr; 051 } 052 private TExpression expr = null; 053 054 public TExpression getExpr() { 055 return expr; 056 } 057 058 private TWhenClauseItemList whenClauseItemList = null; 059 060 public TWhenClauseItemList getWhenClauseItemList() { 061 return whenClauseItemList; 062 } 063 064 public TStatementList getDefaultStatementList() { 065 if (defaultStatementList == null){ 066 defaultStatementList = new TStatementList(); 067 } 068 return defaultStatementList; 069 } 070 071 private TStatementList defaultStatementList = null; 072 073 public int doParseStatement(TCustomSqlStatement psql) { 074 super.doParseStatement(psql); 075 switch (dbvendor){ 076 case dbvteradata: 077 caseExpr = (TCaseExpression)rootNode; 078 caseExpr.doParse(this,ESqlClause.unknown); 079 break; 080 case dbvbigquery: 081 TCaseExpression caseNode = (TCaseExpression)rootNode; 082 this.expr = caseNode.getInput_expr(); 083 if (this.expr != null){ 084 this.expr.doParse(this,ESqlClause.unknown); 085 } 086 this.whenClauseItemList = caseNode.getWhenClauseItemList(); 087 this.whenClauseItemList.doParse(this,ESqlClause.unknown); 088 089 if (caseNode.getElse_statement_node_list() != null){ 090 caseNode.getElse_statement_node_list().doParse(this,ESqlClause.unknown); 091 for (int i=0;i<caseNode.getElse_statement_node_list().size();i++){ 092 this.getDefaultStatementList().add(caseNode.getElse_statement_node_list().getStatementSqlNode(i).getStmt()); 093 } 094 } 095 break; 096 default: 097 caseExpr.doParse(this,ESqlClause.unknown); 098 break; 099 } 100 return 0; 101 } 102 103 public void accept(TParseTreeVisitor v){ 104 v.preVisit(this); 105 v.postVisit(this); 106 } 107 108 public void acceptChildren(TParseTreeVisitor v){ 109 v.preVisit(this); 110 v.postVisit(this); 111 } 112 113 public void setCaseExpr(TCaseExpression caseExpr) { 114 this.caseExpr = caseExpr; 115 } 116}