Class BasicSqlType

All Implemented Interfaces:
Serializable, Cloneable, RelDataType, RelDataTypeFamily

public class BasicSqlType extends AbstractSqlType
BasicSqlType represents a standard atomic SQL type (excluding interval types).

Instances of this class are immutable.

See Also:
  • Field Details

  • Constructor Details

    • BasicSqlType

      public BasicSqlType(RelDataTypeSystem typeSystem, SqlTypeName typeName)
      Constructs a type with no parameters. This should only be called from a factory method.
      Parameters:
      typeSystem - Type system
      typeName - Type name
    • BasicSqlType

      protected BasicSqlType(RelDataTypeSystem typeSystem, SqlTypeName typeName, boolean nullable)
    • BasicSqlType

      public BasicSqlType(RelDataTypeSystem typeSystem, SqlTypeName typeName, int precision)
      Constructs a type with precision/length but no scale.
      Parameters:
      typeSystem - Type system
      typeName - Type name
      precision - Precision (called length for some types)
    • BasicSqlType

      public BasicSqlType(RelDataTypeSystem typeSystem, SqlTypeName typeName, int precision, int scale)
      Constructs a type with precision/length and scale.
      Parameters:
      typeSystem - Type system
      typeName - Type name
      precision - Precision (called length for some types)
      scale - Scale
  • Method Details

    • checkPrecScale

      protected static void checkPrecScale(SqlTypeName typeName, boolean precisionSpecified, boolean scaleSpecified)
      Throws if typeName does not allow the given combination of precision and scale.
    • getPrecision

      public int getPrecision()
      Description copied from interface: RelDataType
      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 RelDataType.PRECISION_NOT_SPECIFIED (-1) if precision is not applicable for this type.

      Specified by:
      getPrecision in interface RelDataType
      Overrides:
      getPrecision in class RelDataTypeImpl
      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

      public int getScale()
      Description copied from interface: RelDataType
      Gets the scale of this type. Returns RelDataType.SCALE_NOT_SPECIFIED (-1) if scale is not valid for this type.
      Specified by:
      getScale in interface RelDataType
      Overrides:
      getScale in class RelDataTypeImpl
      Returns:
      number of digits of scale
    • getCharset

      public @Nullable Charset getCharset()
      Description copied from interface: RelDataType
      Gets this type's character set, or null if this type cannot carry a character set or has no character set defined.
      Specified by:
      getCharset in interface RelDataType
      Overrides:
      getCharset in class RelDataTypeImpl
      Returns:
      charset of type
    • getCollation

      public @Nullable SqlCollation getCollation()
      Description copied from interface: RelDataType
      Gets this type's collation, or null if this type cannot carry a collation or has no collation defined.
      Specified by:
      getCollation in interface RelDataType
      Overrides:
      getCollation in class RelDataTypeImpl
      Returns:
      collation of type
    • 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;
    • getLimit

      public @Nullable Object getLimit(boolean sign, SqlTypeName.Limit limit, boolean beyond)
      Returns a value which is a limit for this type.

      For example,

      Limits
      Datatype sign limit beyond precision scale Returns
      Integer true true false -1 -1 2147483647 (2 ^ 31 -1 = MAXINT)
      Integer true true true -1 -1 2147483648 (2 ^ 31 = MAXINT + 1)
      Integer false true false -1 -1 -2147483648 (-2 ^ 31 = MININT)
      Boolean true true false -1 -1 TRUE
      Varchar true true false 10 -1 'ZZZZZZZZZZ'
      Parameters:
      sign - If true, returns upper limit, otherwise lower limit
      limit - If true, returns value at or near to overflow; otherwise value at or near to underflow
      beyond - If true, returns the value just beyond the limit, otherwise the value at the limit
      Returns:
      Limit value