Class SQLBoolean

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

    public final class SQLBoolean
    extends DataType
    implements BooleanDataValue
    SQLBoolean satisfies the DataValueDescriptor interfaces (i.e., DataType). It implements a boolean 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 DataType is a subtype of DataType, SQLBoolean can play a role in either a DataType/Row or a DataType/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 Integer more than it probably wants to.

    See Also:
    Serialized Form
    • Field Detail

      • BOOLEAN_TRUE

        private static final SQLBoolean BOOLEAN_TRUE
      • BOOLEAN_FALSE

        private static final SQLBoolean BOOLEAN_FALSE
      • BASE_MEMORY_USAGE

        private static final int BASE_MEMORY_USAGE
      • value

        private boolean value
      • isnull

        private boolean isnull
      • immutable

        private boolean immutable
    • Constructor Detail

      • SQLBoolean

        public SQLBoolean()
      • SQLBoolean

        public SQLBoolean​(boolean val)
      • SQLBoolean

        public SQLBoolean​(java.lang.Boolean obj)
      • SQLBoolean

        private SQLBoolean​(boolean val,
                           boolean isnull)
    • Method Detail

      • isNull

        public boolean isNull()
        Description copied from interface: Storable
        Return whether the value is null or not.
        Specified by:
        isNull in interface Storable
        Returns:
        true if the value is null and false otherwise.
      • 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 BooleanDataValue
        Specified by:
        getBoolean in interface DataValueDescriptor
        Overrides:
        getBoolean in class DataType
        Returns:
        The data value as a boolean.
      • makeInt

        private static int makeInt​(boolean b)
      • typeToBigDecimal

        public int typeToBigDecimal()
        Implementation for BOOLEAN type. Convert to a BigDecimal using long
        Specified by:
        typeToBigDecimal in interface DataValueDescriptor
        Overrides:
        typeToBigDecimal in class DataType
        Returns:
        Types.CHAR for String conversion through getString Types.DECIMAL for BigDecimal through getObject or Types.BIGINT for long conversion through getLong
      • 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.
        Specified by:
        getString in interface DataValueDescriptor
        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.
        Specified by:
        getLength in interface DataValueDescriptor
        Returns:
        The length of the data value
      • recycle

        public DataValueDescriptor recycle()
        Recycle this SQLBoolean object if possible. If the object is immutable, create and return a new object.
        Specified by:
        recycle in interface DataValueDescriptor
        Overrides:
        recycle in class DataType
        Returns:
        a new SQLBoolean if this object is immutable; otherwise, this object with value set to null
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException
        Specified by:
        readExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
        See Also:
        Externalizable.readExternal(java.io.ObjectInput)
      • compare

        public int compare​(DataValueDescriptor other)
                    throws StandardException
        Description copied from interface: DataValueDescriptor
        Compare this Orderable with a given Orderable for the purpose of index positioning. This method treats nulls as ordered values - that is, it treats SQL null as equal to null and greater than all other values.
        Specified by:
        compare in interface DataValueDescriptor
        Parameters:
        other - The Orderable to compare this one to.
        Returns:
        <0 - this Orderable is less than other. 0 - this Orderable equals other. >0 - this Orderable is greater than other. The code should not explicitly look for -1, or 1.
        Throws:
        StandardException - thrown on error
      • compare

        public boolean compare​(int op,
                               DataValueDescriptor other,
                               boolean orderedNulls,
                               boolean unknownRV)
                        throws StandardException
        Description copied from interface: DataValueDescriptor
        Compare this Orderable with a given Orderable for the purpose of qualification and sorting. The caller gets to determine how nulls should be treated - they can either be ordered values or unknown values.
        Specified by:
        compare in interface DataValueDescriptor
        Overrides:
        compare in class DataType
        Parameters:
        op - Orderable.ORDER_OP_EQUALS means do an = comparison. Orderable.ORDER_OP_LESSTHAN means compare this < other. Orderable.ORDER_OP_LESSOREQUALS means compare this <= other.
        other - The DataValueDescriptor to compare this one to.
        orderedNulls - True means to treat nulls as ordered values, that is, treat SQL null as equal to null, and less than all other values. False means to treat nulls as unknown values, that is, the result of any comparison with a null is the UNKNOWN truth value.
        unknownRV - The return value to use if the result of the comparison is the UNKNOWN truth value. In other words, if orderedNulls is false, and a null is involved in the comparison, return unknownRV. This parameter is not used orderedNulls is true.
        Returns:
        true if the comparison is true (duh!)
        Throws:
        StandardException - thrown on error
      • 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.

        Specified by:
        cloneValue in interface DataValueDescriptor
        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.
        Specified by:
        setValueFromResultSet in interface DataValueDescriptor
        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
      • setValue

        public void setValue​(java.lang.Boolean theValue)
        Description copied from interface: BooleanDataValue
        Set the value of this BooleanDataValue.
        Specified by:
        setValue in interface BooleanDataValue
        Parameters:
        theValue - Contains the boolean value to set this BooleanDataValue to. Null means set this BooleanDataValue to null.
      • setValue

        public void setValue​(byte theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given byte 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​(short theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given short 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
      • 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​(float theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given float 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​(double theValue)
        Description copied from class: DataType
        Set the value of this DataValueDescriptor to the given double 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​(java.lang.String theValue)
                      throws StandardException
        Set the value of this BooleanDataValue to the given String. String is trimmed and upcased. If resultant string is not TRUE or FALSE, then an error is thrown.
        Specified by:
        setValue in interface DataValueDescriptor
        Overrides:
        setValue in class DataType
        Parameters:
        theValue - The value to set this BooleanDataValue to
        Throws:
        StandardException - Thrown on error
      • setObject

        void setObject​(java.lang.Object theValue)
        Description copied from class: DataType
        Set the value from an non-null object. Usually overridden. This implementation throws an exception. The object will have been correctly typed from the call to setObjectForCast.
        Overrides:
        setObject in class DataType
        See Also:
        DataValueDescriptor.setValue(int)
      • 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
      • and

        public BooleanDataValue and​(BooleanDataValue otherValue)
        The AND operator. This implements SQL semantics for AND with unknown truth values - consult any standard SQL reference for an explanation.
        Specified by:
        and in interface BooleanDataValue
        Parameters:
        otherValue - The other boolean to AND with this one
        Returns:
        this AND otherValue
      • or

        public BooleanDataValue or​(BooleanDataValue otherValue)
        The OR operator. This implements SQL semantics for OR with unknown truth values - consult any standard SQL reference for an explanation.
        Specified by:
        or in interface BooleanDataValue
        Parameters:
        otherValue - The other boolean to OR with this one
        Returns:
        this OR otherValue
      • is

        public BooleanDataValue is​(BooleanDataValue otherValue)
        The SQL IS operator - consult any standard SQL reference for an explanation. Implements the following truth table: otherValue | TRUE | FALSE | UNKNOWN this |---------------------------- | TRUE | TRUE | FALSE | FALSE FALSE | FALSE | TRUE | FALSE UNKNOWN | FALSE | FALSE | TRUE
        Specified by:
        is in interface BooleanDataValue
        Parameters:
        otherValue - BooleanDataValue to compare to. May be TRUE, FALSE, or UNKNOWN.
        Returns:
        whether this IS otherValue
      • isNot

        public BooleanDataValue isNot​(BooleanDataValue otherValue)
        Implements NOT IS. This reverses the sense of the is() call.
        Specified by:
        isNot in interface BooleanDataValue
        Parameters:
        otherValue - BooleanDataValue to compare to. May be TRUE, FALSE, or UNKNOWN.
        Returns:
        NOT( this IS otherValue )
      • throwExceptionIfFalse

        public BooleanDataValue throwExceptionIfFalse​(java.lang.String sqlState,
                                                      java.lang.String tableName,
                                                      java.lang.String constraintName)
                                               throws StandardException
        Throw an exception with the given SQLState if this BooleanDataValue is false. This method is useful for evaluating constraints.
        Specified by:
        throwExceptionIfFalse in interface BooleanDataValue
        Parameters:
        sqlState - The SQLState of the exception to throw if this SQLBoolean is false.
        tableName - The name of the table to include in the exception message.
        constraintName - The name of the failed constraint to include in the exception message.
        Returns:
        this
        Throws:
        StandardException - Thrown if this BooleanDataValue is false.
      • throwExceptionIfImmediateAndFalse

        public BooleanDataValue throwExceptionIfImmediateAndFalse​(java.lang.String sqlState,
                                                                  java.lang.String tableName,
                                                                  java.lang.String constraintName,
                                                                  Activation a,
                                                                  int savedUUIDIdx)
                                                           throws StandardException
        Description copied from interface: BooleanDataValue
        If this value is false and we have a deferred constraint, remember the violation and proceed, else throw. See also AndNoShortCircuitNode.
        Specified by:
        throwExceptionIfImmediateAndFalse in interface BooleanDataValue
        Parameters:
        sqlState - The SQLState of the exception to throw if this SQLBoolean is false.
        tableName - The name of the table to include in the exception message.
        constraintName - The name of the failed constraint to include in the exception message.
        a - The activation
        savedUUIDIdx - The saved object number of the constraint's UUID.
        Returns:
        this
        Throws:
        StandardException - Thrown if this BooleanDataValue is false.
      • 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()
      • truthValue

        public static SQLBoolean truthValue​(DataValueDescriptor leftOperand,
                                            DataValueDescriptor rightOperand,
                                            boolean truth)
        Return the SQL truth value for a comparison. This method first looks at the operands - if either is null, it returns the unknown truth value. This implements "normal" SQL null semantics, where if any operand is null, the result is null. Note that there are cases where these semantics are incorrect - for example, NULL AND FALSE is supposed to be FALSE, not NULL (the NULL truth value is the same as the UNKNOWN truth value). If neither operand is null, it returns a static final variable containing the SQLBoolean truth value. It returns different values depending on whether the truth value is supposed to be nullable. This method always returns a pre-allocated static final SQLBoolean. This is practical because there are so few possible return values. Using pre-allocated values allows us to avoid constructing new SQLBoolean values during execution.
        Parameters:
        leftOperand - The left operand of the binary comparison
        rightOperand - The right operand of the binary comparison
        truth - The truth value of the comparison
        Returns:
        A SQLBoolean containing the desired truth value.
      • truthValue

        public static SQLBoolean truthValue​(boolean value)
        Get a truth value.
        Parameters:
        value - The value of the SQLBoolean
        Returns:
        A SQLBoolean with the given truth value
      • unknownTruthValue

        public static SQLBoolean unknownTruthValue()
        Return an unknown truth value. Check to be sure the return value is nullable.
        Returns:
        A SQLBoolean representing the UNKNOWN truth value
      • equals

        public boolean equals​(boolean val)
        Determine whether this SQLBoolean contains the given boolean value. This method is used by generated code to determine when to do short-circuiting for an AND or OR.
        Specified by:
        equals in interface BooleanDataValue
        Parameters:
        val - The value to look for
        Returns:
        true if the given value equals the value in this SQLBoolean, false if not
      • getImmutable

        public BooleanDataValue getImmutable()
        Return an immutable BooleanDataValue with the same value as this.
        Specified by:
        getImmutable in interface BooleanDataValue
        Returns:
        An immutable BooleanDataValue with the same value as this.
      • 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.
        Specified by:
        estimateMemoryUsage in interface DataValueDescriptor
        Returns:
        the estimated memory usage