001package gudusoft.gsqlparser.nodes.dax;
002
003
004import gudusoft.gsqlparser.EExpressionType;
005import gudusoft.gsqlparser.ESqlClause;
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.nodes.TExpression;
008import gudusoft.gsqlparser.nodes.TPTNodeList;
009import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
010
011public class TDaxReturn extends TDaxFunction {
012    private TPTNodeList <TDaxVar> variables;
013    private TExpression returnExpr;
014
015
016    public void init(Object arg1,Object arg2,Object arg3,Object arg4){
017        init(arg1,arg2,arg3);
018        variables = (TPTNodeList<TDaxVar>)arg4;
019    }
020
021    public  void  init(Object arg1,Object arg2,Object arg3){
022        init(arg1, arg2);
023        returnExpr = (TExpression)arg3;
024    }
025
026    public void doParse(TCustomSqlStatement psql, ESqlClause plocation){
027        psql.getDaxFunctionStack().push(this);
028        if (variables != null){
029            for(int i=0;i<variables.size();i++){
030                if (variables.getElement(i).getVariableName() != null){
031                    psql.getVariableStack().push(variables.getElement(i).getVariableName());
032                }
033//                variables.getElement(i).doParse(psql,plocation);
034            }
035        }
036        returnExpr.doParse(psql, plocation);
037        this.setReturnTable(this.getDefaultTable());
038
039        if (variables != null){
040            for(int i=0;i<variables.size();i++){
041                variables.getElement(i).doParse(psql,plocation);
042            }
043        }
044
045        if (variables != null){
046            for(int i=0;i<variables.size();i++){
047                if (variables.getElement(i).getVariableName() != null){
048                    psql.getVariableStack().pop();
049                }
050            }
051        }
052        psql.getDaxFunctionStack().pop();
053
054        if (this.getReturnTable() != null){
055            if (psql.getDaxFunctionStack().size() > 0){
056                TDaxFunction function = psql.getDaxFunctionStack().peek();
057                function.setDefaultTable(this.getReturnTable());
058            }
059        }
060    }
061
062    public void accept(TParseTreeVisitor v){
063        v.preVisit(this);
064        v.postVisit(this);
065    }
066
067    public void acceptChildren(TParseTreeVisitor v) {
068        v.preVisit(this);
069        v.postVisit(this);
070    }
071
072    public void setVariables(TPTNodeList<TDaxVar> variables) {
073        this.variables = variables;
074    }
075
076    public void setReturnExpr(TExpression returnExpr) {
077        this.returnExpr = returnExpr;
078    }
079
080    public TPTNodeList<TDaxVar> getVariables() {
081
082        return variables;
083    }
084
085    public TExpression getReturnExpr() {
086        return returnExpr;
087    }
088}