001package gudusoft.gsqlparser.nodes; 002/* 003 * Date: 2010-10-18 004 * Time: 16:54:42 005 */ 006 007import gudusoft.gsqlparser.ESqlClause; 008import gudusoft.gsqlparser.TCustomSqlStatement; 009 010public class TTeradataWithClauseItem extends TParseTreeNode { 011 private TExpressionList exprList = null; 012 private TOrderByItemList byItemList = null; 013 014 public TOrderByItemList getByItemList() { 015 return byItemList; 016 } 017 018 public TExpressionList getExprList() { 019 return exprList; 020 } 021 022 public void init(Object arg1,Object arg2){ 023 this.exprList = (TExpressionList)arg1; 024 if (arg2 != null){ 025 026 this.byItemList = (TOrderByItemList)arg2; 027 } 028 } 029 030 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 031 // create view v1 as select * from b with data; 032 // with data 不是这里所指的 TTeradataWithClauseItem, 参考 with_clause rule in lzyaccteradata.y file 033 // 应该是 with_no_data rule,被解析成了 with_clause,因此在这里做一下判断,如果为这里sample sql中的 with data 034 // 则不进行doParse(),防止 data 被误认为是 column. 035 // https://e.gitee.com/gudusoft/issues/list?issue=IBM5BJ#note_39540658 036 037 boolean withDataClause = false; 038 if(this.exprList != null){ 039 if (this.exprList.size() == 1){ 040 TExpression expr = this.exprList.getExpression(0); 041 if (expr.toString().equalsIgnoreCase("data")){ 042 withDataClause = true; 043 return; 044 } 045 } 046 this.exprList.doParse(psql,plocation); 047 } 048 049 if (this.byItemList != null){ 050 this.byItemList.doParse(psql,plocation); 051 } 052 } 053 054 public void setExprList(TExpressionList exprList) { 055 this.exprList = exprList; 056 } 057 058 public void setByItemList(TOrderByItemList byItemList) { 059 this.byItemList = byItemList; 060 } 061}