Package org.apache.calcite.rel.type
Interface RelDataType
-
- All Known Implementing Classes:
AbstractSqlType
,ArraySqlType
,BasicSqlType
,DynamicRecordType
,DynamicRecordTypeImpl
,IntervalSqlType
,JavaRecordType
,MapSqlType
,MultisetSqlType
,ObjectSqlType
,RelCrossType
,RelDataTypeFactoryImpl.JavaType
,RelDataTypeImpl
,RelRecordType
,SqlTypeFactoryImpl.UnknownSqlType
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
Fields Modifier and Type Field Description static int
PRECISION_NOT_SPECIFIED
static int
SCALE_NOT_SPECIFIED
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description java.nio.charset.Charset
getCharset()
Gets this type's character set, or null if this type cannot carry a character set or has no character set defined.SqlCollation
getCollation()
Gets this type's collation, or null if this type cannot carry a collation or has no collation defined.RelDataTypeComparability
getComparability()
RelDataType
getComponentType()
Gets the component type if this type is a collection, otherwise null.RelDataTypeFamily
getFamily()
Gets a canonical object representing the family of this type.RelDataTypeField
getField(java.lang.String fieldName, boolean caseSensitive, boolean elideRecord)
Looks up a field by name.int
getFieldCount()
Returns the number of fields in a struct type.java.util.List<RelDataTypeField>
getFieldList()
Gets the fields in a struct type.java.util.List<java.lang.String>
getFieldNames()
Returns the names of the fields in a struct type.java.lang.String
getFullTypeString()
Gets a string representation of this type with full detail such as character set and nullability.SqlIntervalQualifier
getIntervalQualifier()
Gets this type's interval qualifier, or null if this is not an interval type.RelDataType
getKeyType()
Gets the key type if this type is a map, otherwise null.RelDataTypePrecedenceList
getPrecedenceList()
int
getPrecision()
Gets the JDBC-defined precision for values of this type.int
getScale()
Gets the scale of this type.SqlIdentifier
getSqlIdentifier()
Gets theSqlIdentifier
associated with this type.SqlTypeName
getSqlTypeName()
Gets theSqlTypeName
of this type.StructKind
getStructKind()
Returns the rule for resolving the fields of a structured type, orStructKind.NONE
if this is not a structured type.RelDataType
getValueType()
Gets the value type if this type is a map, otherwise null.boolean
isDynamicStruct()
boolean
isNullable()
Queries whether this type allows null values.boolean
isStruct()
Queries whether this is a structured type.java.lang.String
toString()
Gets a string representation of this type without detail such as character set and nullability.
-
-
-
Field Detail
-
SCALE_NOT_SPECIFIED
static final int SCALE_NOT_SPECIFIED
- See Also:
- Constant Field Values
-
PRECISION_NOT_SPECIFIED
static final int PRECISION_NOT_SPECIFIED
- See Also:
- Constant Field Values
-
-
Method Detail
-
isStruct
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
java.util.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
java.util.List<java.lang.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, orStructKind.NONE
if this is not a structured type.- Returns:
- the StructKind that determines how this type's fields are resolved
-
getField
RelDataTypeField getField(java.lang.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 findcaseSensitive
- Whether match is case-sensitiveelideRecord
- Whether to find fields nested within records- Returns:
- named field, or null if not found
-
isNullable
boolean isNullable()
Queries whether this type allows null values.- Returns:
- whether type allows null values
-
getComponentType
RelDataType getComponentType()
Gets the component type if this type is a collection, otherwise null.- Returns:
- canonical type descriptor for components
-
getKeyType
RelDataType getKeyType()
Gets the key type if this type is a map, otherwise null.- Returns:
- canonical type descriptor for key
-
getValueType
RelDataType getValueType()
Gets the value type if this type is a map, otherwise null.- Returns:
- canonical type descriptor for value
-
getCharset
java.nio.charset.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
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
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. 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, or null if this is not an SQL predefined type
-
getSqlIdentifier
SqlIdentifier 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
java.lang.String toString()
Gets a string representation of this type without detail such as character set and nullability.- Overrides:
toString
in classjava.lang.Object
- Returns:
- abbreviated type string
-
getFullTypeString
java.lang.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
-
getPrecedenceList
RelDataTypePrecedenceList getPrecedenceList()
- Returns:
- precedence list for this type
-
getComparability
RelDataTypeComparability getComparability()
- Returns:
- the category of comparison operators which make sense when applied to values of this type
-
isDynamicStruct
boolean isDynamicStruct()
- Returns:
- whether it has dynamic structure (for "schema-on-read" table)
-
-