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 dbvsybase: 081 // Watcom CASE statement (Mantis 4717): the node is its CASE; each WHEN and the ELSE hold statements. 082 caseExpr = (TCaseExpression)rootNode; 083 caseExpr.doParse(this,ESqlClause.unknown); 084 break; 085 case dbvsybaseiq: 086 // Watcom CASE statement (Mantis 4717): the node is its CASE; each WHEN and the ELSE hold statements. 087 caseExpr = (TCaseExpression)rootNode; 088 caseExpr.doParse(this,ESqlClause.unknown); 089 break; 090 case dbvsqlanywhere: 091 // Watcom CASE statement (Mantis 4717): the node is its CASE; each WHEN and the ELSE hold statements. 092 caseExpr = (TCaseExpression)rootNode; 093 caseExpr.doParse(this,ESqlClause.unknown); 094 break; 095 case dbvbigquery: 096 TCaseExpression caseNode = (TCaseExpression)rootNode; 097 this.expr = caseNode.getInput_expr(); 098 if (this.expr != null){ 099 this.expr.doParse(this,ESqlClause.unknown); 100 } 101 this.whenClauseItemList = caseNode.getWhenClauseItemList(); 102 this.whenClauseItemList.doParse(this,ESqlClause.unknown); 103 104 if (caseNode.getElse_statement_node_list() != null){ 105 caseNode.getElse_statement_node_list().doParse(this,ESqlClause.unknown); 106 for (int i=0;i<caseNode.getElse_statement_node_list().size();i++){ 107 this.getDefaultStatementList().add(caseNode.getElse_statement_node_list().getStatementSqlNode(i).getStmt()); 108 } 109 } 110 break; 111 default: 112 caseExpr.doParse(this,ESqlClause.unknown); 113 break; 114 } 115 return 0; 116 } 117 118 public void accept(TParseTreeVisitor v){ 119 v.preVisit(this); 120 v.postVisit(this); 121 } 122 123 public void acceptChildren(TParseTreeVisitor v){ 124 v.preVisit(this); 125 if (caseExpr != null) { 126 caseExpr.acceptChildren(v); 127 } else { 128 // BigQuery path: fields stored directly on TCaseStmt 129 if (expr != null) { 130 expr.acceptChildren(v); 131 } 132 if (whenClauseItemList != null) { 133 whenClauseItemList.acceptChildren(v); 134 } 135 if (defaultStatementList != null) { 136 defaultStatementList.acceptChildren(v); 137 } 138 } 139 v.postVisit(this); 140 } 141 142 public void setCaseExpr(TCaseExpression caseExpr) { 143 this.caseExpr = caseExpr; 144 } 145}