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(&lt;String Expression&gt;)
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