Interface RelDataType

All Known Implementing Classes:
AbstractSqlType, ArraySqlType, BasicSqlType, DynamicRecordType, DynamicRecordTypeImpl, DynamicTupleRecordType, IntervalSqlType, JavaRecordType, MapSqlType, MeasureSqlType, MultisetSqlType, ObjectSqlType, RelCrossType, RelDataTypeFactoryImpl.JavaType, RelDataTypeImpl, RelRecordType, SingleColumnAliasRelDataType

public interface RelDataType
RelDataType represents the type of a scalar expression or entire row returned from a relational expression.

This is a somewhat "fat" interface which unions the attributes of many different type classes into one. Inelegant, but since our type system was defined before the advent of Java generics, it avoids a lot of typecasting.

  • Field Details

  • Method Details

    • isStruct

      @Pure boolean isStruct()
      Queries whether this is a structured type.
      Returns:
      whether this type has fields; examples include rows and user-defined structured types in SQL, and classes in Java
    • getFieldList

      List<RelDataTypeField> getFieldList()
      Gets the fields in a struct type. The field count is equal to the size of the returned list.
      Returns:
      read-only list of fields
    • getFieldNames

      List<String> getFieldNames()
      Returns the names of the fields in a struct type. The field count is equal to the size of the returned list.
      Returns:
      read-only list of field names
    • getFieldCount

      int getFieldCount()
      Returns the number of fields in a struct type.

      This method is equivalent to getFieldList().size().

    • getStructKind

      StructKind getStructKind()
      Returns the rule for resolving the fields of a structured type, or StructKind.NONE if this is not a structured type.
      Returns:
      the StructKind that determines how this type's fields are resolved
    • getField

      @Nullable RelDataTypeField getField(String fieldName, boolean caseSensitive, boolean elideRecord)
      Looks up a field by name.

      NOTE: Be careful choosing the value of caseSensitive:

      • If the field name was supplied by an end-user (e.g. as a column alias in SQL), use your session's case-sensitivity setting.
      • Only hard-code true if you are sure that the field name is internally generated.
      • Hard-coding false is almost certainly wrong.
      Parameters:
      fieldName - Name of field to find
      caseSensitive - Whether match is case-sensitive
      elideRecord - Whether to find fields nested within records
      Returns:
      named field, or null if not found
    • isNullable

      @Pure boolean isNullable()
      Queries whether this type allows null values.
      Returns:
      whether type allows null values
    • getComponentType

      @Pure @Nullable RelDataType getComponentType()
      Gets the component type if this type is a collection, otherwise null.
      Returns:
      canonical type descriptor for components
    • getKeyType

      @Nullable RelDataType getKeyType()
      Gets the key type if this type is a map, otherwise null.
      Returns:
      canonical type descriptor for key
    • getValueType

      @Nullable RelDataType getValueType()
      Gets the value type if this type is a map, otherwise null.
      Returns:
      canonical type descriptor for value
    • getMeasureElementType

      default @Nullable RelDataType getMeasureElementType()
      Gets the element type if this type is a measure, otherwise null.
      Returns:
      canonical type descriptor for the value used in the measure
    • getCharset

      @Pure @Nullable Charset getCharset()
      Gets this type's character set, or null if this type cannot carry a character set or has no character set defined.
      Returns:
      charset of type
    • getCollation

      @Pure @Nullable SqlCollation getCollation()
      Gets this type's collation, or null if this type cannot carry a collation or has no collation defined.
      Returns:
      collation of type
    • getIntervalQualifier

      @Pure @Nullable SqlIntervalQualifier getIntervalQualifier()
      Gets this type's interval qualifier, or null if this is not an interval type.
      Returns:
      interval qualifier
    • getPrecision

      int getPrecision()
      Gets the JDBC-defined precision for values of this type. Note that this is not always the same as the user-specified precision. For example, the type INTEGER has no user-specified precision, but this method returns 10 for an INTEGER type.

      Returns PRECISION_NOT_SPECIFIED (-1) if precision is not applicable for this type.

      Returns:
      number of decimal digits for exact numeric types; number of decimal digits in mantissa for approximate numeric types; number of decimal digits for fractional seconds of datetime types; length in characters for character types; length in bytes for binary types; length in bits for bit types; 1 for BOOLEAN; -1 if precision is not valid for this type
    • getScale

      int getScale()
      Gets the scale of this type. Returns SCALE_NOT_SPECIFIED (-1) if scale is not valid for this type.
      Returns:
      number of digits of scale
    • getSqlTypeName

      SqlTypeName getSqlTypeName()
      Gets the SqlTypeName of this type.
      Returns:
      SqlTypeName, never null
    • getSqlIdentifier

      @Pure @Nullable SqlIdentifier getSqlIdentifier()
      Gets the SqlIdentifier associated with this type. For a predefined type, this is a simple identifier based on getSqlTypeName(). For a user-defined type, this is a compound identifier which uniquely names the type.
      Returns:
      SqlIdentifier, or null if this is not an SQL type
    • toString

      String toString()
      Gets a string representation of this type without detail such as character set and nullability.
      Overrides:
      toString in class Object
      Returns:
      abbreviated type string
    • getFullTypeString

      String getFullTypeString()
      Gets a string representation of this type with full detail such as character set and nullability. The string must serve as a "digest" for this type, meaning two types can be considered identical iff their digests are equal.
      Returns:
      full type string
    • getFamily

      RelDataTypeFamily getFamily()
      Gets a canonical object representing the family of this type. Two values can be compared if and only if their types are in the same family.
      Returns:
      canonical object representing type family, never null
    • getPrecedenceList

      RelDataTypePrecedenceList getPrecedenceList()
      Returns the precedence list for this type.
    • getComparability

      RelDataTypeComparability getComparability()
      Returns the category of comparison operators that make sense when applied to values of this type.
    • isDynamicStruct

      boolean isDynamicStruct()
      Returns whether this type has dynamic structure (for "schema-on-read" table).
    • equalsSansFieldNames

      @API(since="1.24", status=INTERNAL) default boolean equalsSansFieldNames(@Nullable RelDataType that)
      Returns whether the field types are equal with each other by ignoring the field names. If it is not a struct, just return the result of #equals(Object).