001/* 002// This software is subject to the terms of the Eclipse Public License v1.0 003// Agreement, available at the following URL: 004// http://www.eclipse.org/legal/epl-v10.html. 005// You must accept the terms of that agreement to use this software. 006// 007// Copyright (C) 2010-2010 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.olap.fun; 011 012import mondrian.calc.*; 013import mondrian.calc.impl.AbstractMemberCalc; 014import mondrian.mdx.ResolvedFunCall; 015import mondrian.olap.*; 016import mondrian.resource.MondrianResource; 017 018/** 019 * Definition of the <code>StrToMember</code> MDX function. 020 * 021 * <p>Syntax: 022 * <blockquote><code>StrToMember(<String Expression>) 023 * </code></blockquote> 024 */ 025class StrToMemberFunDef extends FunDefBase { 026 public static final FunDef INSTANCE = new StrToMemberFunDef(); 027 028 private StrToMemberFunDef() { 029 super( 030 "StrToMember", 031 "Returns a member from a unique name String in MDX format.", 032 "fmS"); 033 } 034 035 public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) { 036 final StringCalc memberNameCalc = 037 compiler.compileString(call.getArg(0)); 038 return new AbstractMemberCalc(call, new Calc[] {memberNameCalc}) { 039 public Member evaluateMember(Evaluator evaluator) { 040 String memberName = 041 memberNameCalc.evaluateString(evaluator); 042 if (memberName == null) { 043 throw newEvalException( 044 MondrianResource.instance().NullValue.ex()); 045 } 046 return parseMember(evaluator, memberName, null); 047 } 048 }; 049 } 050} 051 052// End StrToMemberFunDef.java