Class SQLLongint

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable, java.lang.Comparable, Formatable, Storable, TypedFormat, DataValueDescriptor, NumberDataValue, Orderable

    public final class SQLLongint
    extends NumberDataType
    SQLLongint satisfies the DataValueDescriptor interfaces (i.e., OrderableDataType). It implements a bigint column, e.g. for * storing a column value; it can be specified when constructed to not allow nulls. Nullability cannot be changed after construction, as it affects the storage size and mechanism.

    Because OrderableDataType is a subtype of DataType, SQLLongint can play a role in either a DataType/Row or a OrderableDataType/Row, interchangeably.

    We assume the store has a flag for nullness of the value, and simply return a 0-length array for the stored form when the value is null.

    PERFORMANCE: There are likely alot of performance improvements possible for this implementation -- it new's Long more than it probably wants to.

    See Also:
    Serialized Form
    • Field Detail

      • BASE_MEMORY_USAGE

        private static final int BASE_MEMORY_USAGE
      • value

        private long value
      • isnull

        private boolean isnull
    • Constructor Detail

      • SQLLongint

        public SQLLongint()
        no-arg constructor, required by Formattable
      • SQLLongint

        public SQLLongint​(long val)
      • SQLLongint

        private SQLLongint​(long val,
                           boolean isnull)
      • SQLLongint

        public SQLLongint​(java.lang.Long obj)
    • Method Detail

      • getLong

        public long getLong()
        Description copied from class: DataType
        Gets the value in the data value descriptor as a long. Throws an exception if the data value is not receivable as a long.
        Specified by:
        getLong in interface DataValueDescriptor
        Overrides:
        getLong in class DataType
        Returns:
        The data value as a long.
      • getFloat

        public float getFloat()
        Description copied from class: DataType
        Gets the value in the data value descriptor as a float. Throws an exception if the data value is not receivable as a float.
        Specified by:
        getFloat in interface DataValueDescriptor
        Overrides:
        getFloat in class DataType
        Returns:
        The data value as a float.
      • getDouble

        public double getDouble()
        Description copied from class: DataType
        Gets the value in the data value descriptor as a double. Throws an exception if the data value is not receivable as a double.
        Specified by:
        getDouble in interface DataValueDescriptor
        Overrides:
        getDouble in class DataType
        Returns:
        The data value as a double.
      • getBoolean

        public boolean getBoolean()
        Description copied from class: DataType
        Gets the value in the data value descriptor as a boolean. Throws an exception if the data value is not receivable as a boolean.
        Specified by:
        getBoolean in interface DataValueDescriptor
        Overrides:
        getBoolean in class DataType
        Returns:
        The data value as a boolean.
      • getString

        public java.lang.String getString()
        Description copied from interface: DataValueDescriptor
        Gets the value in the data value descriptor as a String. Throws an exception if the data value is not a string.
        Returns:
        The data value as a String.
      • getObject

        public java.lang.Object getObject()
        Description copied from class: DataType
        Gets the value in the data value descriptor as a int. Throws an exception if the data value is not receivable as a int.
        Specified by:
        getObject in interface DataValueDescriptor
        Overrides:
        getObject in class DataType
        Returns:
        The data value as a int.
      • getLength

        public int getLength()
        Description copied from interface: DataValueDescriptor
        Gets the length of the data value. The meaning of this is implementation-dependent. For string types, it is the number of characters in the string. For numeric types, it is the number of bytes used to store the number. This is the actual length of this value, not the length of the type it was defined as. For example, a VARCHAR value may be shorter than the declared VARCHAR (maximum) length.
        Returns:
        The length of the data value
      • getTypeName

        public java.lang.String getTypeName()
        Description copied from interface: DataValueDescriptor
        Get the SQL name of the datatype
        Returns:
        The SQL name of the datatype
      • getTypeFormatId

        public int getTypeFormatId()
        Return my format identifier.
        Returns:
        The identifier. (A UUID stuffed in an array of 16 bytes).
        See Also:
        TypedFormat.getTypeFormatId()
      • isNull

        public boolean isNull()
        Description copied from interface: Storable
        Return whether the value is null or not.
        Returns:
        true if the value is null and false otherwise.
        See Also:
        Storable.isNull()
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        Externalizable.readExternal(java.io.ObjectInput)
      • restoreToNull

        public void restoreToNull()
        Description copied from interface: Storable
        Restore this object to its (SQL)null value.
        See Also:
        Storable.restoreToNull()
      • cloneValue

        public DataValueDescriptor cloneValue​(boolean forceMaterialization)
        Description copied from interface: DataValueDescriptor
        Clone this DataValueDescriptor. Results in a new object that has the same value as this but can be modified independently.

        Even though the objects can be modified independently regardless of the value of forceMaterialization, both the clone and the original may be dependent on the store state if forceMaterialization is set to false. An example is if you need to access the value you just read using cloneValue after the current transaction has ended, or after the source result set has been closed.

        Parameters:
        forceMaterialization - any streams representing the data value will be materialized if true, the data value will be kept as a stream if possible if false
        Returns:
        A clone of the DataValueDescriptor with the same initial value as this.
        See Also:
        DataValueDescriptor.cloneValue(boolean)
      • setValueFromResultSet

        public void setValueFromResultSet​(java.sql.ResultSet resultSet,
                                          int colNumber,
                                          boolean isNullable)
                                   throws java.sql.SQLException
        Description copied from interface: DataValueDescriptor
        Set the value based on the value for the specified DataValueDescriptor from the specified ResultSet.
        Parameters:
        resultSet - The specified ResultSet.
        colNumber - The 1-based column # into the resultSet.
        isNullable - Whether or not the column is nullable (No need to call wasNull() if not)
        Throws:
        java.sql.SQLException - Thrown on error
        See Also:
        DataValueDescriptor.setValueFromResultSet(java.sql.ResultSet, int, boolean)
      • setInto

        public final void setInto​(java.sql.PreparedStatement ps,
                                  int position)
                           throws java.sql.SQLException
        Set the value into a PreparedStatement.
        Specified by:
        setInto in interface DataValueDescriptor
        Overrides:
        setInto in class DataType
        Throws:
        java.sql.SQLException - Error setting value in PreparedStatement
      • setInto

        public final void setInto​(java.sql.ResultSet rs,
                                  int position)
                           throws java.sql.SQLException
        Set this value into a ResultSet for a subsequent ResultSet.insertRow or ResultSet.updateRow. This method will only be called for non-null values.
        Specified by:
        setInto in interface DataValueDescriptor
        Overrides:
        setInto in class DataType
        Throws:
        java.sql.SQLException - thrown by the ResultSet object
      • setValue

        public void setValue​(java.lang.String theValue)
                      throws StandardException
        Description copied from class: DataType
        Set the value of this DataValueDescriptor. At DataType level just throws an error lower classes will override
        Specified by:
        setValue in interface DataValueDescriptor
        Overrides:
        setValue in class DataType
        Parameters:
        theValue - The BigDecimal value to set this DataValueDescriptor to
        Throws:
        StandardException - thrown if string not accepted
      • setValue

        public void setValue​(long theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given long value At DataType level just throws an error lower classes will override
        Specified by:
        setValue in interface DataValueDescriptor
        Overrides:
        setValue in class DataType
        Parameters:
        theValue - The value to set this DataValueDescriptor to
      • setValue

        public void setValue​(int theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given int value At DataType level just throws an error lower classes will override
        Specified by:
        setValue in interface DataValueDescriptor
        Overrides:
        setValue in class DataType
        Parameters:
        theValue - The value to set this DataValueDescriptor to
      • setFrom

        protected void setFrom​(DataValueDescriptor theValue)
                        throws StandardException
        Description copied from class: DataType
        Set the value of this DataValueDescriptor based on the value of the specified DataValueDescriptor.
        Overrides:
        setFrom in class DataType
        Parameters:
        theValue - The DataValueDescriptor that holds the value to which we want to set this DataValueDescriptor's value.
        Throws:
        StandardException
      • typePrecedence

        public int typePrecedence()
        Description copied from class: DataType
        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.
        Specified by:
        typePrecedence in interface DataValueDescriptor
        Overrides:
        typePrecedence in class DataType
        Returns:
        The precedence of this type.
        See Also:
        DataValueDescriptor.typePrecedence()
      • times

        public NumberDataValue times​(NumberDataValue left,
                                     NumberDataValue right,
                                     NumberDataValue result)
                              throws StandardException
        This method implements the * operator for "bigint * bigint".
        Parameters:
        left - The first value to be multiplied
        right - The second value to be multiplied
        result - The result of a previous call to this method, null if not called yet
        Returns:
        A SQLLongint containing the result of the multiplication
        Throws:
        StandardException - Thrown on error
      • minus

        public NumberDataValue minus​(NumberDataValue result)
                              throws StandardException
        This method implements the unary minus operator for bigint.
        Parameters:
        result - The result of a previous call to this method, null if not called yet
        Returns:
        A SQLLongint containing the result of the negation
        Throws:
        StandardException - Thrown on error
      • isNegative

        protected boolean isNegative()
        This method implements the isNegative method.
        Specified by:
        isNegative in class NumberDataType
        Returns:
        A boolean. if this.value is negative, return true.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • estimateMemoryUsage

        public int estimateMemoryUsage()
        Description copied from interface: DataValueDescriptor
        Estimate the memory usage in bytes of the data value and the overhead of the class.
        Returns:
        the estimated memory usage