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) 2006-2009 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.olap.fun; 011 012import mondrian.calc.*; 013import mondrian.calc.impl.AbstractCalc; 014import mondrian.mdx.ResolvedFunCall; 015import mondrian.olap.Evaluator; 016import mondrian.olap.Exp; 017 018/** 019 * Definition of the <code><Member>.OrderKey</code> MDX builtin 020 * function. 021 * 022 * <p>Syntax: 023 * <blockquote><code><Member>.OrderKey</code></blockquote> 024 * 025 * @author kvu 026 * @since Nov 10, 2008 027 */ 028public final class MemberOrderKeyFunDef extends FunDefBase { 029 static final MemberOrderKeyFunDef instance = 030 new MemberOrderKeyFunDef(); 031 032 /** 033 * Creates the singleton MemberOrderKeyFunDef. 034 */ 035 private MemberOrderKeyFunDef() { 036 super( 037 "OrderKey", "Returns the member order key.", "pvm"); 038 } 039 040 public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) { 041 final MemberCalc memberCalc = 042 compiler.compileMember(call.getArg(0)); 043 return new CalcImpl(call, memberCalc); 044 } 045 046 public static class CalcImpl extends AbstractCalc { 047 private final MemberCalc memberCalc; 048 049 /** 050 * Creates a CalcImpl. 051 * 052 * @param exp Source expression 053 * @param memberCalc Compiled expression to calculate member 054 */ 055 public CalcImpl(Exp exp, MemberCalc memberCalc) { 056 super(exp, new Calc[] {memberCalc}); 057 this.memberCalc = memberCalc; 058 } 059 060 public OrderKey evaluate(Evaluator evaluator) { 061 return new OrderKey(memberCalc.evaluateMember(evaluator)); 062 } 063 064 protected String getName() { 065 return "OrderKey"; 066 } 067 } 068} 069 070// End MemberOrderKeyFunDef.java