Class TypeId


  • public final class TypeId
    extends java.lang.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:
    DataTypeDescriptor
    • Constructor Detail

      • 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 Detail

      • 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​(java.lang.String schemaName,
                                                  java.lang.String unqualifiedName,
                                                  java.lang.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​(java.lang.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​(java.lang.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​(java.lang.Object that)
        we want equals to say if these are the same type id or not.
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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.