Package mondrian.calc
Interface Calc
- All Known Subinterfaces:
BooleanCalc
,DateTimeCalc
,DimensionCalc
,DoubleCalc
,HierarchyCalc
,IntegerCalc
,IterCalc
,LevelCalc
,ListCalc
,MemberCalc
,StringCalc
,TupleCalc
,VoidCalc
- All Known Implementing Classes:
AbstractBooleanCalc
,AbstractCalc
,AbstractDateTimeCalc
,AbstractDimensionCalc
,AbstractDoubleCalc
,AbstractHierarchyCalc
,AbstractIntegerCalc
,AbstractIterCalc
,AbstractLevelCalc
,AbstractListCalc
,AbstractMemberCalc
,AbstractStringCalc
,AbstractTupleCalc
,AbstractVoidCalc
,AggregateFunDef.AggregateCalc
,CacheCalc
,ConstantCalc
,GenericCalc
,GenericIterCalc
,HierarchyCurrentMemberFunDef.CalcImpl
,HierarchyCurrentMemberFunDef.FixedCalcImpl
,HierarchyDimensionFunDef.CalcImpl
,IterableListCalc
,LevelHierarchyFunDef.CalcImpl
,MemberArrayValueCalc
,MemberHierarchyFunDef.CalcImpl
,MemberLevelFunDef.CalcImpl
,MemberOrderKeyFunDef.CalcImpl
,MemberValueCalc
,NativizeSetFunDef.NativeListCalc
,SetFunDef.ExprIterCalc
,SetFunDef.SetListCalc
,TupleFunDef.CalcImpl
,TupleValueCalc
,ValueCalc
public interface Calc
Calc
is the base class for all calculable expressions.
Logical and physical expression languages
Mondrian has two expression languages:- The logical language of parsed MDX fragments (
Exp
). - The phyiscal language of compiled expressions (
Calc
).
<Member>.CurrentMember
function) are made
explicit in the physical language.
Compilation
Expressions are generally created from using an expression compiler (ExpCompiler
). There are often more than one evaluation strategy
for a given expression, and compilation process gives us an opportunity to
choose the optimal one.
Implementing expressions
TheCalc
interface has sub-interfaces for various types:
IntegerCalc
,
BooleanCalc
,
DoubleCalc
,
StringCalc
are scalar expressions;
MemberCalc
,
LevelCalc
,
HierarchyCalc
,
DimensionCalc
yield elements of the OLAP model.
Each of these sub-interfaces has an abstract implementation:
AbstractIntegerCalc
,
AbstractBooleanCalc
,
AbstractDoubleCalc
,
AbstractStringCalc
,
AbstractMemberCalc
,
AbstractLevelCalc
,
AbstractHierarchyCalc
,
AbstractDimensionCalc
.
GenericCalc
is an adapter which implements all of these interfaces
and will try to convert any given result to the correct type. Use it
sparingly: if you know the expected result type, it is better to write a
class which implements a specific TypeCalc
interface.- Since:
- Sep 26, 2005
- Author:
- jhyde
-
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(CalcWriter calcWriter) Prints this expression, by accepting a visitingCalcWriter
.boolean
Returns whether this expression depends upon a given hierarchy.Evaluates this expression.Returns style in which the result of evaluating this expression is returned.getType()
Returns the type of this expression.boolean
isWrapperFor
(Class<?> iface) <T> T
-
Method Details
-
evaluate
Evaluates this expression.- Parameters:
evaluator
- Provides dimensional context in which to evaluate this expression- Returns:
- Result of expression evaluation
-
dependsOn
Returns whether this expression depends upon a given hierarchy.If it does not depend on the hierarchy, then re-evaluating the expression with a different member of this context must produce the same answer.
Some examples:- The expression
depends on all dimensions except[Measures].[Unit Sales]
[Measures]
. - The boolean expression
depends on all hierarchies except [Measures] and [Time].([Measures].[Unit Sales], [Time].[1997]) > 1000
- The list expression
depends upon all hierarchies except [Store] and [Measures]. How so? Normally the scalar expression would depend upon all hierarchies except [Measures], but theFilter([Store].[USA].Children, [Measures].[Unit Sales] < 50)
Filter
function sets the [Store] context before evaluating the scalar expression, so it is not inherited from the surrounding context.
- Parameters:
hierarchy
- Hierarchy- Returns:
- Whether this expression's result depends upon the current member of the hierarchy
- The expression
-
getType
Type getType()Returns the type of this expression. -
accept
Prints this expression, by accepting a visitingCalcWriter
.- Parameters:
calcWriter
- Writer
-
getResultStyle
ResultStyle getResultStyle()Returns style in which the result of evaluating this expression is returned.One application of this method is for the compiler to figure out whether the compiled expression is returning a mutable list. If a mutable list is required, the compiler can create a mutable copy.
-
isWrapperFor
-
unwrap
-