public override MdxExpression Process(MdxExpression expr) { if (expr == null) { return(null); } MdxExpression filter = new MdxUnaryExpression ("NOT" , new MdxFunctionExpression ("ISANCESTOR" , new MdxObjectReferenceExpression(args.Member.UniqueName) , new MdxObjectReferenceExpression(args.Member.HierarchyUniqueName + ".CURRENTMEMBER") ) ); var tupleBase = GenTupleBase(); if (tupleBase.Members.Count > 0) { filter = new MdxBinaryExpression (filter , new MdxUnaryExpression ("NOT" , new MdxBinaryExpression (GenTupleBaseCurrent() , GenTupleBase() , "IS" ) ) , "OR" ); } return(new MdxFunctionExpression ("FILTER" , expr , filter )); }
// $ANTLR end "expression_power" // $ANTLR start "expression_unary" // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:266:1: expression_unary returns [MdxExpression value] : ( '-' e1= expression_range_is | '+' e2= expression_range_is | NOT t1= expression_range_is | e3= expression_range_is ); public MdxExpression expression_unary() // throws RecognitionException [1] { MdxExpression value = default(MdxExpression); MdxExpression e1 = default(MdxExpression); MdxExpression e2 = default(MdxExpression); MdxExpression t1 = default(MdxExpression); MdxExpression e3 = default(MdxExpression); try { // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:267:2: ( '-' e1= expression_range_is | '+' e2= expression_range_is | NOT t1= expression_range_is | e3= expression_range_is ) int alt38 = 4; switch ( input.LA(1) ) { case 69: { alt38 = 1; } break; case 68: { alt38 = 2; } break; case NOT: { alt38 = 3; } break; case PROPERTIES: case DIMENSION: case INTEGER: case RANET_EXPRESSION: case STRING: case FLOAT: case CASE: case ID: case QUOTED_ID: case 61: case 74: { alt38 = 4; } break; default: NoViableAltException nvae_d38s0 = new NoViableAltException("", 38, 0, input); throw nvae_d38s0; } switch (alt38) { case 1 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:267:4: '-' e1= expression_range_is { Match(input,69,FOLLOW_69_in_expression_unary1438); PushFollow(FOLLOW_expression_range_is_in_expression_unary1442); e1 = expression_range_is(); state.followingStackPointer--; value = new MdxUnaryExpression("-",e1); } break; case 2 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:268:4: '+' e2= expression_range_is { Match(input,68,FOLLOW_68_in_expression_unary1449); PushFollow(FOLLOW_expression_range_is_in_expression_unary1453); e2 = expression_range_is(); state.followingStackPointer--; value = new MdxUnaryExpression("+",e2); } break; case 3 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:269:4: NOT t1= expression_range_is { Match(input,NOT,FOLLOW_NOT_in_expression_unary1461); PushFollow(FOLLOW_expression_range_is_in_expression_unary1465); t1 = expression_range_is(); state.followingStackPointer--; value = new MdxUnaryExpression("NOT",t1); } break; case 4 : // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:270:4: e3= expression_range_is { PushFollow(FOLLOW_expression_range_is_in_expression_unary1475); e3 = expression_range_is(); state.followingStackPointer--; value = e3; } break; } } catch (RecognitionException re) { ReportError(re); Recover(input,re); } finally { } return value; }