Class TupleType

java.lang.Object
mondrian.olap.type.TupleType
All Implemented Interfaces:
Type

public class TupleType extends Object implements Type
Tuple type.
Since:
Feb 17, 2005
Author:
jhyde
  • Field Details

    • elementTypes

      public final Type[] elementTypes
  • Constructor Details

    • TupleType

      public TupleType(Type[] elementTypes)
      Creates a type representing a tuple whose fields are the given types.
      Parameters:
      elementTypes - Array of types of the members in this tuple
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • usesDimension

      public boolean usesDimension(Dimension dimension, boolean definitely)
      Description copied from interface: Type
      Returns whether this type contains a given dimension.

      For example:

      • DimensionType([Gender]) uses only the [Gender] dimension.
      • TupleType(MemberType([Gender]), MemberType([Store])) uses [Gender] and [Store] dimensions.

      The definitely parameter comes into play when the dimensional information is incomplete. For example, when applied to TupleType(MemberType(null), MemberType([Store])), usesDimension([Gender], false) returns true because it is possible that the expression returns a member of the [Gender] dimension; but usesDimension([Gender], true) returns true because it is possible that the expression returns a member of the [Gender] dimension.

      Specified by:
      usesDimension in interface Type
      Parameters:
      dimension - Dimension
      definitely - If true, returns true only if this type definitely uses the dimension
      Returns:
      whether this Type uses the given Dimension
    • usesHierarchy

      public boolean usesHierarchy(Hierarchy hierarchy, boolean definitely)
      Description copied from interface: Type
      Returns whether this type contains a given hierarchy.

      For example:

      • HierarchyType([Customer].[Gender]) uses only the [Customer].[Gender] hierarchy.
      • TupleType(MemberType([Customer].[Gender]), MemberType([Store].[Store])) uses [Gender] and [Store] dimensions.

      The definitely parameter comes into play when the dimensional information is incomplete. For example, when applied to TupleType(MemberType([Customer]), MemberType([Store])), usesDimension([Customer].[Gender], false) returns true because the expression returns a member of one hierarchy of the [Customer] dimension and that might be a member of the [Customer].[Gender] hierarchy; but usesDimension([Customer].[Gender], true) returns false because might return a member of a different hierarchy, such as [Customer].[State].

      Specified by:
      usesHierarchy in interface Type
      Parameters:
      hierarchy - Hierarchy
      definitely - If true, returns true only if this type definitely uses the hierarchy
      Returns:
      whether this Type uses the given Hierarchy
    • getHierarchies

      public List<Hierarchy> getHierarchies()
    • getArity

      public int getArity()
      Description copied from interface: Type
      Returns the number of fields in a tuple type, or a set of tuples. For most other types, in particular member type, returns 1.
      Specified by:
      getArity in interface Type
      Returns:
      Arity of type
    • getDimension

      public Dimension getDimension()
      Description copied from interface: Type
      Returns the Dimension of this Type, or null if not known. If not applicable, throws.
      Specified by:
      getDimension in interface Type
      Returns:
      the Dimension of this Type, or null if not known.
    • getHierarchy

      public Hierarchy getHierarchy()
      Description copied from interface: Type
      Returns the Hierarchy of this Type, or null if not known. If not applicable, throws.
      Specified by:
      getHierarchy in interface Type
      Returns:
      the Hierarchy of this type, or null if not known
    • getLevel

      public Level getLevel()
      Description copied from interface: Type
      Returns the Level of this Type, or null if not known. If not applicable, throws.
      Specified by:
      getLevel in interface Type
      Returns:
      the Level of this Type
    • getValueType

      public Type getValueType()
    • computeCommonType

      public Type computeCommonType(Type type, int[] conversionCount)
      Description copied from interface: Type
      Returns a Type which is more general than this and the given Type. The type returned is broad enough to hold any value of either type, but no broader. If there is no such type, returns null.

      Some examples:

      • The common type for StringType and NumericType is ScalarType.
      • The common type for NumericType and DecimalType(4, 2) is NumericType.
      • DimensionType and NumericType have no common type.

      If conversionCount is not null, implicit conversions such as HierarchyType to DimensionType are considered; the parameter is incremented by the number of conversions performed.

      Some examples:

      • The common type for HierarchyType(hierarchy=Time.Weekly) and LevelType(dimension=Time), if conversions are allowed, is HierarchyType(dimension=Time).

      One use of common types is to determine the types of the arguments to the Iif function. For example, the call

      Iif(1 > 2, [Measures].[Unit Sales], 5)
      has type ScalarType, because DecimalType(-1, 0) is a subtype of ScalarType, and MeasureType can be converted implicitly to ScalarType.
      Specified by:
      computeCommonType in interface Type
      Parameters:
      type - Type
      conversionCount - Number of conversions; output parameter that is incremented each time a conversion is performed; if null, conversions are not considered
      Returns:
      More general type
    • isInstance

      public boolean isInstance(Object value)
      Description copied from interface: Type
      Returns whether a value is valid for a type.
      Specified by:
      isInstance in interface Type
      Parameters:
      value - Value
      Returns:
      Whether value is valid for this type
    • checkHierarchies

      public static void checkHierarchies(MemberType[] memberTypes)
      Checks that there are no duplicate dimensions in a list of member types. If so, the member types will form a valid tuple type. If not, throws MondrianException.
      Parameters:
      memberTypes - Array of member types