001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.*; 004 005/** 006* WhenClause item used in case expr of {@link TCaseExpression}. 007 * <p> 008 * <ul> 009 * <li>WHEN comparison_expr THEN return_expr</li> 010 * 011 * <li>comparison_expr: {@link #getComparison_expr()}</li> 012 * <li>return_expr: {@link #getReturn_expr()}</li> 013 * 014 * 015 * </ul> 016 017 * <p> in db2/plsql case statement 018 * <ul> 019 * <li>WHEN comparison_expr THEN statement_list</li> 020 * 021 * <li>comparison_expr: {@link #getComparison_expr()}</li> 022 * <li>statement_list: {@link #getStatement_list()}</li> 023 * 024 * 025 * </ul> 026 * 027 * @see TCaseExpression 028*/ 029public class TWhenClauseItem extends TParseTreeNode { 030 private TExpression comparison_expr = null; 031 private TExpression return_expr = null; 032 private TStatementListSqlNode stmts = null; // plsql 033 private TExpressionList conditionList = null; 034 035 public TExpressionList getConditionList() { 036 return conditionList; 037 } 038 039 private TConstantList count_fraction_description_list = null; 040 041 /** 042 * teradata: count,fraction description list of sample clause 043 * @return 044 */ 045 public TConstantList getCount_fraction_description_list() { 046 return count_fraction_description_list; 047 } 048 049 public TExpression getComparison_expr() { 050 return comparison_expr; 051 } 052 053 public TExpression getReturn_expr() { 054 return return_expr; 055 } 056 057 /** 058 * 059 * @return statement list if it's in a plsql/db2 case statement. 060 */ 061 public TStatementList getStatement_list() { 062 if (statement_list == null){ 063 statement_list = new TStatementList(); 064 } 065 return statement_list; 066 } 067 068 private TStatementList statement_list = null; 069 070 public void init(Object arg1,Object arg2) 071 { 072 if (arg1 instanceof TExpression){ 073 comparison_expr = (TExpression)arg1; 074 if (comparison_expr.getExpressionType() == EExpressionType.assignment_t){ 075 //comparison_expr.setExpressionType(TExpression.simple_comparison_conditions); 076 comparison_expr.setExpressionType(EExpressionType.simple_comparison_t); 077 } 078 }else if (arg1 instanceof TExpressionList){ 079 //postgresql 080 conditionList = (TExpressionList)arg1; 081 } 082 if (arg2 instanceof TExpression ){ 083 return_expr = (TExpression)arg2; 084 }else if (arg2 instanceof TConstantList){ 085 this.count_fraction_description_list = (TConstantList)arg2; 086 } 087 else{ 088 stmts = (TStatementListSqlNode)arg2; 089 } 090 } 091 092 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 093 if (comparison_expr != null){ 094 comparison_expr.doParse(psql,plocation); 095 }else if (conditionList != null){ 096 conditionList.doParse(psql,plocation); 097 } 098 if (return_expr != null ){ 099 return_expr.doParse(psql,plocation); 100 }else if (stmts != null){ 101 stmts.doParse(psql, plocation); 102 for (int i=0;i<stmts.size();i++){ 103 getStatement_list().add(stmts.getStatementSqlNode(i).getStmt()); 104 } 105 } 106 } 107 108 public void accept(TParseTreeVisitor v){ 109 v.preVisit(this); 110 v.postVisit(this); 111 } 112 113 public void acceptChildren(TParseTreeVisitor v){ 114 v.preVisit(this); 115 if (comparison_expr != null){ 116 comparison_expr.acceptChildren(v); 117 }else if (conditionList != null){ 118 conditionList.acceptChildren(v); 119 } 120 if (return_expr != null ){ 121 return_expr.acceptChildren(v); 122 }else if (stmts != null){ 123 getStatement_list().acceptChildren(v); 124 } 125 v.postVisit(this); 126 } 127 128 public void setComparison_expr(TExpression comparison_expr) { 129 this.comparison_expr = comparison_expr; 130 } 131 132 public void setReturn_expr(TExpression return_expr) { 133 this.return_expr = return_expr; 134 } 135 136 public void setConditionList(TExpressionList conditionList) { 137 this.conditionList = conditionList; 138 } 139 140 public void setCount_fraction_description_list(TConstantList count_fraction_description_list) { 141 this.count_fraction_description_list = count_fraction_description_list; 142 } 143 144 public void setStatement_list(TStatementList statement_list) { 145 this.statement_list = statement_list; 146 } 147}