/*
* This software is subject to the terms of the Eclipse Public License v1.0
* Agreement, available at the following URL:
* http://www.eclipse.org/legal/epl-v10.html.
* You must accept the terms of that agreement to use this software.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package mondrian.olap.fun;
import mondrian.calc.*;
import mondrian.calc.impl.AbstractDimensionCalc;
import mondrian.mdx.ResolvedFunCall;
import mondrian.olap.*;
/**
* Definition of the <code><Hierarchy>.Dimension</code> MDX
* builtin function.
*
* @author jhyde
* @since Mar 23, 2006
*/
public class HierarchyDimensionFunDef extends FunDefBase {
static final HierarchyDimensionFunDef instance =
new HierarchyDimensionFunDef();
private HierarchyDimensionFunDef() {
super(
"Dimension",
"Returns the dimension that contains a specified hierarchy.",
"pdh");
}
public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
final HierarchyCalc hierarchyCalc =
compiler.compileHierarchy(call.getArg(0));
return new CalcImpl(call, hierarchyCalc);
}
public static class CalcImpl extends AbstractDimensionCalc {
private final HierarchyCalc hierarchyCalc;
public CalcImpl(Exp exp, HierarchyCalc hierarchyCalc) {
super(exp, new Calc[] {hierarchyCalc});
this.hierarchyCalc = hierarchyCalc;
}
public Dimension evaluateDimension(Evaluator evaluator) {
Hierarchy hierarchy =
hierarchyCalc.evaluateHierarchy(evaluator);
return hierarchy.getDimension();
}
}
}
// End HierarchyDimensionFunDef.java