Class DynamicRecordTypeImpl

All Implemented Interfaces:
RelDataType, RelDataTypeFamily
Direct Known Subclasses:
DynamicTupleRecordType

public class DynamicRecordTypeImpl extends DynamicRecordType
Implementation of RelDataType for a dynamic table.

It's used during SQL validation, where the field list is mutable for the getField() call. After SQL validation, a normal RelDataTypeImpl with an immutable field list takes the place of the DynamicRecordTypeImpl instance.

  • Constructor Details

    • DynamicRecordTypeImpl

      public DynamicRecordTypeImpl(RelDataTypeFactory typeFactory)
      Creates a DynamicRecordTypeImpl.
  • Method Details

    • getFieldList

      public List<RelDataTypeField> getFieldList()
      Description copied from interface: RelDataType
      Gets the fields in a struct type. The field count is equal to the size of the returned list.
      Specified by:
      getFieldList in interface RelDataType
      Overrides:
      getFieldList in class RelDataTypeImpl
      Returns:
      read-only list of fields
    • getFieldCount

      public int getFieldCount()
      Description copied from interface: RelDataType
      Returns the number of fields in a struct type.

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

      Specified by:
      getFieldCount in interface RelDataType
      Overrides:
      getFieldCount in class RelDataTypeImpl
    • getField

      public @Nullable RelDataTypeField getField(String fieldName, boolean caseSensitive, boolean elideRecord)
      Description copied from interface: RelDataType
      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.
      Specified by:
      getField in interface RelDataType
      Overrides:
      getField in class RelDataTypeImpl
      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
    • getFieldNames

      public List<String> getFieldNames()
      Description copied from interface: RelDataType
      Returns the names of the fields in a struct type. The field count is equal to the size of the returned list.
      Specified by:
      getFieldNames in interface RelDataType
      Overrides:
      getFieldNames in class RelDataTypeImpl
      Returns:
      read-only list of field names
    • getSqlTypeName

      public SqlTypeName getSqlTypeName()
      Description copied from class: RelDataTypeImpl
      Gets the SqlTypeName of this type. Sub-classes must override the method to ensure the resulting value is non-nullable.
      Specified by:
      getSqlTypeName in interface RelDataType
      Overrides:
      getSqlTypeName in class RelDataTypeImpl
      Returns:
      SqlTypeName, never null
    • getPrecedenceList

      public RelDataTypePrecedenceList getPrecedenceList()
      Description copied from interface: RelDataType
      Returns the precedence list for this type.
      Specified by:
      getPrecedenceList in interface RelDataType
      Overrides:
      getPrecedenceList in class RelDataTypeImpl
    • generateTypeString

      protected void generateTypeString(StringBuilder sb, boolean withDetail)
      Description copied from class: RelDataTypeImpl
      Generates a string representation of this type.
      Specified by:
      generateTypeString in class RelDataTypeImpl
      Parameters:
      sb - StringBuilder into which to generate the string
      withDetail - when true, all detail information needed to compute a unique digest (and return from getFullTypeString) should be included;
    • isStruct

      public boolean isStruct()
      Description copied from interface: RelDataType
      Queries whether this is a structured type.
      Specified by:
      isStruct in interface RelDataType
      Overrides:
      isStruct in class RelDataTypeImpl
      Returns:
      whether this type has fields; examples include rows and user-defined structured types in SQL, and classes in Java
    • getFamily

      public RelDataTypeFamily getFamily()
      Description copied from interface: RelDataType
      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.
      Specified by:
      getFamily in interface RelDataType
      Overrides:
      getFamily in class RelDataTypeImpl
      Returns:
      canonical object representing type family, never null