Class SQLBoolean

java.lang.Object
org.apache.derby.iapi.types.DataType
org.apache.derby.iapi.types.SQLBoolean
All Implemented Interfaces:
Externalizable, Serializable, 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:
  • Field Details

    • BOOLEAN_LENGTH

      static final int BOOLEAN_LENGTH
      See Also:
    • BOOLEAN_TRUE

      private static final SQLBoolean BOOLEAN_TRUE
    • BOOLEAN_FALSE

      private static final SQLBoolean BOOLEAN_FALSE
    • UNKNOWN

      static final SQLBoolean UNKNOWN
    • BASE_MEMORY_USAGE

      private static final int BASE_MEMORY_USAGE
    • value

      private boolean value
    • isnull

      private boolean isnull
    • immutable

      private boolean immutable
  • Constructor Details

    • SQLBoolean

      public SQLBoolean()
    • SQLBoolean

      public SQLBoolean(boolean val)
    • SQLBoolean

      public SQLBoolean(Boolean obj)
    • SQLBoolean

      private SQLBoolean(boolean val, boolean isnull)
  • Method Details

    • 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)
    • getByte

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

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

      public int getInt()
      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:
      getInt in interface DataValueDescriptor
      Overrides:
      getInt in class DataType
      Returns:
      The data value as a int.
      See Also:
    • 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.
      See Also:
    • 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.
      See Also:
    • 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.
      See Also:
    • 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 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 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
    • getTypeName

      public String getTypeName()
      Description copied from interface: DataValueDescriptor
      Get the SQL name of the datatype
      Specified by:
      getTypeName in interface DataValueDescriptor
      Returns:
      The SQL name of the datatype
    • 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
    • getTypeFormatId

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

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

      public void readExternal(ObjectInput in) throws IOException
      Specified by:
      readExternal in interface Externalizable
      Throws:
      IOException
      See Also:
    • restoreToNull

      public void restoreToNull()
      Description copied from interface: Storable
      Restore this object to its (SQL)null value.
      Specified by:
      restoreToNull in interface Storable
      See Also:
    • 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:
    • getNewNull

      public DataValueDescriptor getNewNull()
      Description copied from interface: DataValueDescriptor
      Get a new null value of the same type as this data value.
      Specified by:
      getNewNull in interface DataValueDescriptor
      See Also:
    • setValueFromResultSet

      public void setValueFromResultSet(ResultSet resultSet, int colNumber, boolean isNullable) throws 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:
      SQLException - Thrown on error
      See Also:
    • setInto

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

      public void setValue(boolean theValue)
      Description copied from class: DataType
      Set the 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 - Contains the boolean value to set this to
      See Also:
    • setValue

      public void setValue(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
    • setBigDecimal

      public void setBigDecimal(BigDecimal bigDecimal) throws StandardException
      Description copied from class: DataType
      Only to be called when the application sets a value using BigDecimal
      Specified by:
      setBigDecimal in interface DataValueDescriptor
      Overrides:
      setBigDecimal in class DataType
      Parameters:
      bigDecimal - required to be a BigDecimal or null.
      Throws:
      StandardException
    • setValue

      public void setValue(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(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:
    • 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
    • equals

      The = operator as called from the language module, as opposed to the storage module.
      Specified by:
      equals in interface DataValueDescriptor
      Overrides:
      equals in class DataType
      Parameters:
      left - The value on the left side of the =
      right - The value on the right side of the =
      Returns:
      A SQL boolean value telling whether the two parameters are equal
      Throws:
      StandardException - Thrown on error
    • notEquals

      The <> operator as called from the language module, as opposed to the storage module.
      Specified by:
      notEquals in interface DataValueDescriptor
      Overrides:
      notEquals in class DataType
      Parameters:
      left - The value on the left side of the operator
      right - The value on the right side of the operator
      Returns:
      A SQL boolean value telling whether the two parameters are not equal
      Throws:
      StandardException - Thrown on error
    • lessThan

      The < operator as called from the language module, as opposed to the storage module.
      Specified by:
      lessThan in interface DataValueDescriptor
      Overrides:
      lessThan in class DataType
      Parameters:
      left - The value on the left side of the operator
      right - The value on the right side of the operator
      Returns:
      A SQL boolean value telling whether the left operand is less than the right operand
      Throws:
      StandardException - Thrown on error
    • greaterThan

      The > operator as called from the language module, as opposed to the storage module.
      Specified by:
      greaterThan in interface DataValueDescriptor
      Overrides:
      greaterThan in class DataType
      Parameters:
      left - The value on the left side of the operator
      right - The value on the right side of the operator
      Returns:
      A SQL boolean value telling whether the left operand is greater than the right operand
      Throws:
      StandardException - Thrown on error
    • lessOrEquals

      The <= operator as called from the language module, as opposed to the storage module.
      Specified by:
      lessOrEquals in interface DataValueDescriptor
      Overrides:
      lessOrEquals in class DataType
      Parameters:
      left - The value on the left side of the operator
      right - The value on the right side of the operator
      Returns:
      A SQL boolean value telling whether the left operand is less than or equal to the right operand
      Throws:
      StandardException - Thrown on error
    • greaterOrEquals

      public BooleanDataValue greaterOrEquals(DataValueDescriptor left, DataValueDescriptor right) throws StandardException
      The >= operator as called from the language module, as opposed to the storage module.
      Specified by:
      greaterOrEquals in interface DataValueDescriptor
      Overrides:
      greaterOrEquals in class DataType
      Parameters:
      left - The value on the left side of the operator
      right - The value on the right side of the operator
      Returns:
      A SQL boolean value telling whether the left operand is greater than or equal to the right operand
      Throws:
      StandardException - Thrown on error
    • 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(String sqlState, String tableName, 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(String sqlState, String tableName, 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:
    • 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(DataValueDescriptor leftOperand, DataValueDescriptor rightOperand, Boolean truth)
      same as above, but takes a Boolean, if it is null, unknownTruthValue is returned
    • 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 String toString()
      Overrides:
      toString in class Object
    • hashCode

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