Package org.apache.calcite.rel.type
Interface RelDataType
- All Known Implementing Classes:
AbstractSqlType
,ArraySqlType
,BasicSqlType
,DynamicRecordType
,DynamicRecordTypeImpl
,DynamicTupleRecordType
,FunctionSqlType
,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 Summary
Modifier and TypeFieldDescriptionstatic final int
static final int
-
Method Summary
Modifier and TypeMethodDescriptiondefault boolean
equalsSansFieldNames
(@Nullable RelDataType that) Returns whether the field types are equal with each other by ignoring the field names.default boolean
equalsSansFieldNamesAndNullability
(@Nullable RelDataType that) Same asequalsSansFieldNames(org.apache.calcite.rel.type.RelDataType)
, but ignore nullability also.@Nullable Charset
Gets this type's character set, or null if this type cannot carry a character set or has no character set defined.@Nullable SqlCollation
Gets this type's collation, or null if this type cannot carry a collation or has no collation defined.Returns the category of comparison operators that make sense when applied to values of this type.@Nullable RelDataType
Gets the component type if this type is a collection, otherwise null.Gets a canonical object representing the family of this type.@Nullable RelDataTypeField
Looks up a field by name.int
Returns the number of fields in a struct type.Gets the fields in a struct type.Returns the names of the fields in a struct type.Gets a string representation of this type with full detail such as character set and nullability.@Nullable SqlIntervalQualifier
Gets this type's interval qualifier, or null if this is not an interval type.@Nullable RelDataType
Gets the key type if this type is a map, otherwise null.default @Nullable RelDataType
Gets the element type if this type is a measure, otherwise null.Returns the precedence list for this type.int
Gets the JDBC-defined precision for values of this type.int
getScale()
Gets the scale of this type.@Nullable SqlIdentifier
Gets theSqlIdentifier
associated with this type.Gets theSqlTypeName
of this type.Returns the rule for resolving the fields of a structured type, orStructKind.NONE
if this is not a structured type.@Nullable RelDataType
Gets the value type if this type is a map, otherwise null.boolean
Returns whether this type has dynamic structure (for "schema-on-read" table).default boolean
Returns whether this type is a measure.boolean
Queries whether this type allows null values.boolean
isStruct()
Queries whether this is a structured type.toString()
Gets a string representation of this type without detail such as character set and nullability.
-
Field Details
-
SCALE_NOT_SPECIFIED
static final int SCALE_NOT_SPECIFIED- See Also:
-
PRECISION_NOT_SPECIFIED
static final int PRECISION_NOT_SPECIFIED- See Also:
-
-
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
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, orStructKind.NONE
if this is not a structured type.- Returns:
- the StructKind that determines how this type's fields are resolved
-
getField
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 findcaseSensitive
- Whether match is case-sensitiveelideRecord
- 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
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
Gets the element type if this type is a measure, otherwise null.- Returns:
- canonical type descriptor for the value used in the measure
-
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
Gets this type's collation, or null if this type cannot carry a collation or has no collation defined.- Returns:
- collation of type
-
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. ReturnsSCALE_NOT_SPECIFIED
(-1) if scale is not valid for this type.- Returns:
- number of digits of scale
-
getSqlTypeName
SqlTypeName getSqlTypeName()Gets theSqlTypeName
of this type.- Returns:
- SqlTypeName, never null
-
getSqlIdentifier
Gets theSqlIdentifier
associated with this type. For a predefined type, this is a simple identifier based ongetSqlTypeName()
. 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. -
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)
. -
equalsSansFieldNamesAndNullability
Same asequalsSansFieldNames(org.apache.calcite.rel.type.RelDataType)
, but ignore nullability also. -
isMeasure
default boolean isMeasure()Returns whether this type is a measure.
-