001package gudusoft.gsqlparser.stmt.mdx;
002/*
003 * Date: 11-12-29
004 */
005
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.EDbVendor;
008import gudusoft.gsqlparser.ESqlStatementType;
009import gudusoft.gsqlparser.nodes.TPTNodeList;
010import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
011import gudusoft.gsqlparser.nodes.mdx.TMdxDrillthroughNode;
012import gudusoft.gsqlparser.nodes.mdx.TMdxExpNode;
013
014public class TMdxDrillthrough extends TCustomSqlStatement {
015
016    private TMdxDrillthroughNode drillthroughNode;
017    private TMdxSelect subQuery;
018
019    public TMdxDrillthrough(EDbVendor dbvendor) {
020        super(dbvendor);
021        sqlstatementtype = ESqlStatementType.sstmdxdrillthrough;
022    }
023    public int doParseStatement(TCustomSqlStatement psql) {
024        if (rootNode == null) return -1;
025        super.doParseStatement(psql);
026
027        drillthroughNode = (TMdxDrillthroughNode)rootNode;
028        subQuery = new TMdxSelect(EDbVendor.dbvmdx);
029        subQuery.rootNode = drillthroughNode.getSelectNode();
030        subQuery.doParseStatement(this);
031
032        return 0;
033    }
034
035    public TMdxSelect getSubQuery(){
036        return subQuery;
037    }
038
039    public TPTNodeList<TMdxExpNode> getReturnAttrs(){
040        return drillthroughNode.getReturnAttrs();
041    };
042
043    public void accept(TParseTreeVisitor v){
044        v.preVisit(this);
045        v.postVisit(this);
046    }
047
048    public void acceptChildren(TParseTreeVisitor v){
049        v.preVisit(this);
050        subQuery.accept(v);
051        if (getReturnAttrs() != null){
052            getReturnAttrs().acceptChildren(v);
053        }
054        v.postVisit(this);
055    }
056
057}