Class TypeId

java.lang.Object
org.apache.derby.iapi.types.TypeId

public final class TypeId extends Object
TypeId describes the static information about a SQL type independent of any specific attributes of the type such as length. So the TypeId for CHARACTER describes the fundamental information about CHARACTER. A specific type (e.g. CHARACTER(10)) is described by a TypeDescriptor for a catlog type and a DataTypeDescriptor for a runtime type. (note a DataTypeDescriptor adds runtime attributes to the TypeDescriptor it has).

A TypeId is immutable.

The equals(Object) method can be used to determine if two typeIds are for the same type, which defines type id equality.

See Also:
  • Field Details

  • Constructor Details

    • TypeId

      public TypeId(int formatId, BaseTypeIdImpl baseTypeId)
      Constructor for a TypeId
      Parameters:
      formatId - Format id of specific type id.
      baseTypeId - The Base type id
  • Method Details

    • create

      private static TypeId create(int typeFormatId, int implTypeFormatId)
      Create a TypeId for the given format identifiers using a BaseTypeIdImpl. Used to create the static final variables of this class.
    • getAllBuiltinTypeIds

      public static TypeId[] getAllBuiltinTypeIds()
      Return all of the builtin type ids.
    • getBuiltInTypeId

      public static TypeId getBuiltInTypeId(int JDBCTypeId)
      Get a TypeId of the given JDBC type. This factory method is intended to be used for built-in types. For user-defined types, we will need a factory method that takes a Java type name.
      Parameters:
      JDBCTypeId - The JDBC Id of the type, as listed in java.sql.Types
      Returns:
      The appropriate TypeId, or null if there is no such TypeId.
    • getUserDefinedTypeId

      public static TypeId getUserDefinedTypeId(String className) throws StandardException
      Throws:
      StandardException
    • getUserDefinedTypeId

      public static TypeId getUserDefinedTypeId(String schemaName, String unqualifiedName, String className) throws StandardException
      This factory method is used for ANSI UDTs. If the className argument is null, then this TypeId will have to be bound.
      Parameters:
      schemaName - Schema that the type definition lives in.
      unqualifiedName - The second part of the ANSI dot-separated name for the type.
      className - The Java class which is bound to the schema-qualified name by the CREATE TYPE statement.
      Returns:
      A bound type TypeId describing this ANSI UDT.
      Throws:
      StandardException
    • getSQLTypeForJavaType

      public static TypeId getSQLTypeForJavaType(String javaTypeName) throws StandardException
      Get a TypeId for the class that corresponds to the given Java type name.
      Parameters:
      javaTypeName - The name of the Java type
      Returns:
      A TypeId for the SQL type that corresponds to the Java type, null if there is no corresponding type.
      Throws:
      StandardException
    • getBuiltInTypeId

      public static TypeId getBuiltInTypeId(String SQLTypeName)
      Given a SQL type name return the corresponding TypeId.
      Parameters:
      SQLTypeName - Name of SQL type
      Returns:
      TypeId or null if there is no corresponding SQL type.
    • getTypeId

      public static TypeId getTypeId(TypeDescriptor catalogType)
      Get the TypeId (fundemental type information) for a catalog type.
      Parameters:
      catalogType -
      Returns:
      TypeId that represents the base type, null if not applicable.
    • equals

      public boolean equals(Object that)
      we want equals to say if these are the same type id or not.
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • setTypeIdSpecificInstanceVariables

      private void setTypeIdSpecificInstanceVariables()
    • getJDBCTypeId

      public final int getJDBCTypeId()
      JDBC has its own idea of type identifiers which is different from the Derby internal type ids. The JDBC type ids are defined as public final static ints in java.sql.Types. This method translates a Derby internal TypeId to a JDBC type id. For java objects this returns JAVA_OBJECT in Java2 and OTHER in JDK 1.1. For Boolean datatypes, this returns Type.BOOLEAN in JDK1.4 and Type.BIT for jdks prior to 1.4
      Returns:
      The JDBC type Id for this type
    • getSQLTypeName

      public String getSQLTypeName()
      Returns the SQL name of the datatype. If it is a user-defined type, it returns the full Java path name for the datatype, meaning the dot-separated path including the package names.
      Returns:
      A String containing the SQL name of this type.
    • userType

      public final boolean userType()
      Tell whether this is a built-in type. NOTE: There are 3 "classes" of types: built-in - system provided types which are implemented internally (int, smallint, etc.) system built-in - system provided types, independent of implementation (date, time, etc.) user types - types implemented outside of the system (java.lang.Integer, asdf.asdf.asdf, etc.)
      Returns:
      true for built-in types, false for user-defined types.
    • getMaximumPrecision

      public int getMaximumPrecision()
      Get the maximum precision of the type. For types with variable precision, this is an arbitrary high precision.
      Returns:
      The maximum precision of the type
    • getMaximumScale

      public int getMaximumScale()
      Get the maximum scale of the type. For types with variable scale, this is an arbitrary high scale.
      Returns:
      The maximum scale of the type
    • setUserTypeIdInfo

      private void setUserTypeIdInfo()
    • isStringTypeId

      public boolean isStringTypeId()
      Does this TypeId represent a TypeId for a StringDataType.
      Returns:
      Whether or not this TypeId represents a TypeId for a StringDataType.
    • isDateTimeTimeStampTypeId

      public boolean isDateTimeTimeStampTypeId()
      Is this a TypeId for DATE/TIME/TIMESTAMP
      Returns:
      true if this is a DATE/TIME/TIMESTAMP
    • isRealTypeId

      public boolean isRealTypeId()
      Is this a TypeId for REAL
      Returns:
      true if this is a REAL
    • isFloatingPointTypeId

      public boolean isFloatingPointTypeId()
      Is this a TypeId for floating point (REAL/DOUBLE)
      Returns:
      true if this is a REAL or DOUBLE
    • isDoubleTypeId

      public boolean isDoubleTypeId()
      Is this a TypeId for DOUBLE
      Returns:
      true if this is a DOUBLE
    • isFixedStringTypeId

      public boolean isFixedStringTypeId()
      Is this a fixed string type?
      Returns:
      true if this is CHAR
    • isClobTypeId

      public boolean isClobTypeId()
      Is this a Clob?
      Returns:
      true if this is CLOB
    • isBlobTypeId

      public boolean isBlobTypeId()
      Is this a Blob?
      Returns:
      true if this is BLOB
    • isLongVarcharTypeId

      public boolean isLongVarcharTypeId()
      Is this a LongVarchar?
      Returns:
      true if this is LongVarchar
    • isLongVarbinaryTypeId

      public boolean isLongVarbinaryTypeId()
      Is this a LongVarbinary?
      Returns:
      true if this is LongVarbinary
    • isDateTimeTimeStampTypeID

      public boolean isDateTimeTimeStampTypeID()
      Is this DATE/TIME or TIMESTAMP?
      Returns:
      true if this DATE/TIME or TIMESTAMP
    • isTimestampId

      public boolean isTimestampId()
      Is this a TIMESTAMP?
      Returns:
      true if this is a TIMESTAMP
    • isXMLTypeId

      public boolean isXMLTypeId()
      Is this an XML doc?
      Returns:
      true if this is XML
    • orderable

      public boolean orderable(ClassFactory cf)
      Tell whether this type is orderable, that is, can participate in comparisons.
      Parameters:
      cf - A ClassFactory
      Returns:
      true for orderable types, false for non-orderable types.
    • typePrecedence

      public int typePrecedence()
      Each built-in type in JSQL has a precedence. This precedence determines how to do type promotion when using binary operators. For example, float has a higher precedence than int, so when adding an int to a float, the result type is float. The precedence for some types is arbitrary. For example, it doesn't matter what the precedence of the boolean type is, since it can't be mixed with other types. But the precedence for the number types is critical. The SQL standard requires that exact numeric types be promoted to approximate numeric when one operator uses both. Also, the precedence is arranged so that one will not lose precision when promoting a type. NOTE: char, varchar, and longvarchar must appear at the bottom of the hierarchy, but above USER_PRECEDENCE, since we allow the implicit conversion of those types to any other built-in system type.
      Returns:
      The precedence of this type.
    • getCorrespondingJavaTypeName

      public String getCorrespondingJavaTypeName()
      Get the name of the corresponding Java type. Each SQL type has a corresponding Java type. When a SQL value is passed to a Java method, it is translated to its corresponding Java type. For example, when a SQL date column is passed to a method, it is translated to a java.sql.Date.
      Returns:
      The name of the corresponding Java type.
    • getResultSetMetaDataTypeName

      public String getResultSetMetaDataTypeName()
      Get the name of the corresponding Java type. This method is used directly from EmbedResultSetMetaData (jdbc) to return the corresponding type (as choosen by getObject). It solves a specific problem for BLOB types where the getCorrespondingJavaTypeName() is used internall for casting which doesn't work if changed from byte[] to java.sql.Blob. So we do it here instread, to avoid unexpected sideeffects.
      Returns:
      The name of the corresponding Java type.
    • getMaximumMaximumWidth

      public int getMaximumMaximumWidth()
      Get the maximum maximum width of the type (that's not a typo). For types with variable length, this is the absolute maximum for the type.
      Returns:
      The maximum maximum width of the type
    • toParsableString

      public String toParsableString(DataTypeDescriptor dts)
      Converts this TypeId, given a data type descriptor (including length/precision), to a string. E.g. VARCHAR(30) For most data types, we just return the SQL type name.
      Parameters:
      dts - Data type descriptor that holds the length/precision etc. as necessary
      Returns:
      String version of datatype, suitable for running through the Parser.
    • isNumericTypeId

      public boolean isNumericTypeId()
      Is this a type id for a numeric type?
      Returns:
      Whether or not this a type id for a numeric type.
    • isDecimalTypeId

      public boolean isDecimalTypeId()
      Is this a type id for a decimal type?
      Returns:
      Whether or not this a type id for a decimal type.
    • isBooleanTypeId

      public boolean isBooleanTypeId()
      Is this a type id for a boolean type?
      Returns:
      Whether or not this a type id for a boolean type.
    • isRefTypeId

      public boolean isRefTypeId()
      Is this a type id for a ref type?
      Returns:
      Whether or not this a type id for a ref type.
    • isConcatableTypeId

      public boolean isConcatableTypeId()
      Is this a type id for a concatable type?
      Returns:
      Whether or not this a type id for a concatable type.
    • isBitTypeId

      public boolean isBitTypeId()
      Is this a type id for a bit type?
      Returns:
      Whether or not this a type id for a bit type.
    • isLOBTypeId

      public boolean isLOBTypeId()
      Is this a type id for a LOB type?
      Returns:
      Whether or not this a type id for a LOB type.
    • isLongConcatableTypeId

      public boolean isLongConcatableTypeId()
      Is this a type id for a long concatable type?
      Returns:
      Whether or not this a type id for a long concatable type.
    • isUserDefinedTypeId

      public boolean isUserDefinedTypeId()
      Is this a type id for a user defined type?
      Returns:
      Whether or not this a type id for a user defined type.
    • getTypeFormatId

      public int getTypeFormatId()
      Get the formatID which corresponds to this class.
      Returns:
      the formatID of this class
    • getNull

      public DataValueDescriptor getNull()
      Get SQL null value.
      Returns:
      SQL null value for this type.
    • streamStorable

      public boolean streamStorable()
      Is this type StreamStorable?
      Returns:
      true if this type has variable length.
    • getApproximateLengthInBytes

      public int getApproximateLengthInBytes(DataTypeDescriptor dts)
      Get the approximate length of this type in bytes. For most datatypes this is just going to be dts.getMaximumWidth(). Some types, such as bit, will override this.
      Parameters:
      dts - Data type descriptor that holds the length/precision etc. as necessary
      Returns:
      the length in bytes
    • getBaseTypeId

      public BaseTypeIdImpl getBaseTypeId()
      Get the base type id that is embedded in this type id. The base type id is an object with a minimal implementation of TypeId that is intended to be usable on the client side.
    • getPrecision

      public int getPrecision(DataTypeDescriptor leftType, DataTypeDescriptor rightType)
      Get the precision of the merge of two Decimals
      Parameters:
      leftType - the left type
      rightType - the left type
      Returns:
      the resultant precision
    • getScale

      public int getScale(DataTypeDescriptor leftType, DataTypeDescriptor rightType)
      Get the scale of the merge of two decimals
      Parameters:
      leftType - the left type
      rightType - the left type
      Returns:
      the resultant precision
    • variableLength

      public boolean variableLength()
      Does type hava a declared variable length (defined by the application). Examples are CHAR(10), CLOB(1M). Unbounded long types, like LONG VARCHAR return false here.
      Returns:
      boolean true if type is variable length false if not.