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}