001package gudusoft.gsqlparser.stmt.mdx;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TExpression;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006import gudusoft.gsqlparser.nodes.mdx.TMdxCreateMeasureNode;
007import gudusoft.gsqlparser.stmt.dax.TDaxExprStmt;
008
009
010public class TMdxCreateMeasure extends TCustomSqlStatement {
011
012    private TMdxCreateMeasureNode createMeasureNode;
013
014    private String tableName;
015    private String measureName;
016    private TExpression daxExpression;
017
018    public TExpression getDaxExpression() {
019        return daxExpression;
020    }
021
022    public String getTableName() {
023        return tableName;
024    }
025
026    public String getMeasureName() {
027        return measureName;
028    }
029
030    public TMdxCreateMeasure(EDbVendor dbvendor) {
031        super(dbvendor);
032        sqlstatementtype = ESqlStatementType.sstmdxcreatemeasure;
033    }
034    public int doParseStatement(TCustomSqlStatement psql) {
035        if (rootNode == null) return -1;
036        super.doParseStatement(psql);
037
038        createMeasureNode = (TMdxCreateMeasureNode)rootNode;
039        this.measureName = createMeasureNode.getMeasureName();
040        this.tableName = createMeasureNode.getTableName();
041
042        TGSqlParser sqlParser = new TGSqlParser(EDbVendor.dbvdax);
043        TSourceToken startToken = createMeasureNode.getDaxExpression().getStartToken();
044        TSourceToken endToken = createMeasureNode.getDaxExpression().getEndToken();
045        TSourceTokenList tokenList = startToken.container;
046        String exprQuery = "";
047        for( int i=startToken.posinlist;i<=endToken.posinlist;i++){
048            if (tokenList.get(i).tokencode == ';') break;
049            exprQuery += tokenList.get(i).toString();
050        }
051
052        sqlParser.sqltext = exprQuery;
053        int iRet = sqlParser.parse();
054        if ((iRet == 0)&& (sqlParser.getSqlstatements().size() == 1)){
055            TDaxExprStmt exprStmt = (TDaxExprStmt)sqlParser.getSqlstatements().get(0);
056            this.daxExpression = exprStmt.getExpr();
057        }else{
058
059            for (int i=0; i<sqlParser.getSyntaxErrors().size();i++){
060                sqlParser.getSyntaxErrors().get(i).lineNo += startToken.lineNo - 1;
061                sqlParser.getSyntaxErrors().get(i).columnNo += startToken.columnNo;
062                this.parseerrormessagehandle(sqlParser.getSyntaxErrors().get(i));
063            }
064        }
065
066        return 0;
067    }
068
069      public void accept(TParseTreeVisitor v){
070        v.preVisit(this);
071        v.postVisit(this);
072    }
073
074    public void acceptChildren(TParseTreeVisitor v){
075        v.preVisit(this);
076        v.postVisit(this);
077    }
078
079}