001package gudusoft.gsqlparser.stmt.dax;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlClause;
005import gudusoft.gsqlparser.ESqlStatementType;
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.nodes.*;
008import gudusoft.gsqlparser.nodes.dax.TDaxVar;
009
010/**
011 * DAX Evaluate query.
012 *
013 *  <pre>
014 * {@code
015 *  [DEFINE {  MEASURE <tableName>[<name>] = <expression> }
016 *  EVALUATE <table>
017 *  [ORDER BY {<expression> [{ASC | DESC}]}[,...]
018 *  [START AT {<value>|<parameter>} [,...]]]
019 * }
020 * </pre>
021 */
022public class TDaxEvaluateStmt extends TDaxStmt {
023    private TExpression tableExpr;
024    private TPTNodeList<TDaxVar> measureList;
025
026    public TPTNodeList<TDaxVar> getMeasureList() {
027        return measureList;
028    }
029
030    public void setTableExpr(TExpression tableExpr) {
031        this.tableExpr = tableExpr;
032    }
033
034    public void setOrderBy(TOrderBy orderBy) {
035        this.orderBy = orderBy;
036    }
037
038    public TOrderBy getOrderBy() {
039
040        return orderBy;
041    }
042
043    public TExpression getTableExpr() {
044        return tableExpr;
045    }
046
047    private TOrderBy orderBy;
048
049    public TDaxEvaluateStmt (EDbVendor dbvendor){
050        super(dbvendor);
051        sqlstatementtype = ESqlStatementType.sstdaxevaluate;
052    }
053
054
055    public int doParseStatement(TCustomSqlStatement psql) {
056        if (rootNode == null) return -1;
057        super.doParseStatement(psql);
058        TDummy dummy = (TDummy)rootNode;
059
060        if (dummy.node3 != null){
061            measureList = (TPTNodeList<TDaxVar>)dummy.node3;
062            for(int i=0;i<measureList.size();i++){
063                measureList.getElement(i).doParse(this,ESqlClause.unknown);
064            }
065        }
066
067        tableExpr = (TExpression)dummy.node1;
068        orderBy = (TOrderBy)dummy.node2;
069        tableExpr.doParse(this, ESqlClause.unknown);
070        if (orderBy != null) orderBy.doParse(this,ESqlClause.unknown);
071
072        return 0;
073    }
074
075
076    private boolean startWithDefine = false;
077
078    public void setStartWithDefine(boolean startWithDefine) {
079        this.startWithDefine = startWithDefine;
080    }
081
082    public boolean isStartWithDefine() {
083
084        return startWithDefine;
085    }
086
087    public void accept(TParseTreeVisitor v){
088        v.preVisit(this);
089        v.postVisit(this);
090    }
091
092
093    public void acceptChildren(TParseTreeVisitor v){
094        v.preVisit(this);
095        v.postVisit(this);
096    }
097}