java.io.Externalizable, java.io.Serializable, java.lang.Comparable, Formatable, Storable, TypedFormat, DataValueDescriptor, DateTimeDataValue, Orderablepublic final class SQLDate extends DataType implements DateTimeDataValue
The date is stored as int (year << 16 + month << 8 + day) Null is represented by an encodedDate value of 0. Some of the static methods in this class are also used by SQLTime and SQLTimestamp so check those classes if you change the date encoding PERFORMANCE OPTIMIZATION: The java.sql.Date object is only instantiated when needed do to the overhead of Date.valueOf(), etc. methods.
| Modifier and Type | Field | Description |
|---|---|---|
private static int |
BASE_MEMORY_USAGE |
|
private int |
encodedDate |
|
private static char[] |
END_OF_STRING |
|
private static char |
IBM_EUR_SEPARATOR |
|
private static char[] |
IBM_EUR_SEPARATOR_ONLY |
|
private static char |
IBM_USA_SEPARATOR |
|
private static char[] |
IBM_USA_SEPARATOR_ONLY |
|
(package private) static char |
ISO_SEPARATOR |
|
private static char[] |
ISO_SEPARATOR_ONLY |
UNKNOWN_LOGICAL_LENGTHDAY_FIELD, DAY_INTERVAL, FRAC_SECOND_INTERVAL, HOUR_FIELD, HOUR_INTERVAL, MINUTE_FIELD, MINUTE_INTERVAL, MONTH_FIELD, MONTH_INTERVAL, QUARTER_INTERVAL, SECOND_FIELD, SECOND_INTERVAL, WEEK_INTERVAL, YEAR_FIELD, YEAR_INTERVALORDER_OP_EQUALS, ORDER_OP_GREATEROREQUALS, ORDER_OP_GREATERTHAN, ORDER_OP_LESSOREQUALS, ORDER_OP_LESSTHAN| Modifier | Constructor | Description |
|---|---|---|
|
SQLDate() |
no-arg constructor required by Formattable
|
private |
SQLDate(int encodedDate) |
|
|
SQLDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder) |
Construct a date from a string.
|
|
SQLDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder,
java.util.Calendar cal) |
Construct a date from a string.
|
|
SQLDate(java.sql.Date value) |
| Modifier and Type | Method | Description |
|---|---|---|
DataValueDescriptor |
cloneValue(boolean forceMaterialization) |
Clone this DataValueDescriptor.
|
boolean |
compare(int op,
DataValueDescriptor other,
boolean orderedNulls,
boolean unknownRV) |
Compare this Orderable with a given Orderable for the purpose of
qualification and sorting.
|
int |
compare(DataValueDescriptor other) |
Orderable interface
|
static DateTimeDataValue |
computeDateFunction(DataValueDescriptor operand,
DataValueFactory dvf) |
Implement the date SQL function: construct a SQL date from a string, number, or timestamp.
|
(package private) static int |
computeEncodedDate(int y,
int m,
int d) |
|
(package private) static int |
computeEncodedDate(java.util.Calendar cal) |
computeEncodedDate extracts the year, month and date from
a Calendar value and encodes them as
year << 16 + month << 8 + date
Use this function will help to remember to add 1 to month
which is 0 based in the Calendar class
|
private static int |
computeEncodedDate(java.util.Date value) |
Compute the encoded date given a date
|
(package private) static int |
computeEncodedDate(java.util.Date value,
java.util.Calendar currentCal) |
|
(package private) static void |
dateToString(int year,
int month,
int day,
java.lang.StringBuffer sb) |
Convert a date to the JDBC representation and append it to a string buffer.
|
(package private) static java.lang.String |
encodedDateToString(int encodedDate) |
Get the String version from the encodedDate.
|
int |
estimateMemoryUsage() |
Estimate the memory usage in bytes of the data value and the overhead of the class.
|
java.sql.Date |
getDate(java.util.Calendar cal) |
Get the value field.
|
NumberDataValue |
getDate(NumberDataValue result) |
Get the day of the month.
|
(package private) static int |
getDay(int encodedDate) |
Get the day from the encodedDate.
|
(package private) int |
getEncodedDate() |
|
NumberDataValue |
getHours(NumberDataValue result) |
Get the hour of the day out of a time or timestamp.
|
int |
getLength() |
Gets the length of the data value.
|
NumberDataValue |
getMinutes(NumberDataValue result) |
Get the minute of the hour out of a time or timestamp.
|
(package private) static int |
getMonth(int encodedDate) |
Get the month from the encodedDate,
January is one.
|
NumberDataValue |
getMonth(NumberDataValue result) |
Get the month number out of a date.
|
DataValueDescriptor |
getNewNull() |
Get a new null value of the same type as this data value.
|
java.lang.Object |
getObject() |
getObject returns the date value
|
NumberDataValue |
getSeconds(NumberDataValue result) |
Get the second of the minute out of a time or timestamp.
|
java.lang.String |
getString() |
Gets the value in the data value descriptor as a String.
|
private long |
getTimeInMillis(java.util.Calendar cal) |
Convert the date into a milli-seconds since the epoch
with the time set to 00:00 based upon the passed in Calendar.
|
java.sql.Timestamp |
getTimestamp(java.util.Calendar cal) |
getTimestamp returns a timestamp with the date value
time is set to 00:00:00.0
|
int |
getTypeFormatId() |
Return my format identifier.
|
java.lang.String |
getTypeName() |
Get the SQL name of the datatype
|
(package private) static int |
getYear(int encodedDate) |
Get the year from the encodedDate.
|
NumberDataValue |
getYear(NumberDataValue result) |
Get the year number out of a date.
|
int |
hashCode() |
|
boolean |
isNull() |
Check if the value is null.
|
(package private) NumberDataValue |
nullValueInt() |
|
private void |
parseDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder,
java.util.Calendar cal) |
|
private void |
parseDate(java.util.Date value) |
|
void |
readExternal(java.io.ObjectInput in) |
|
void |
restoreToNull() |
Restore this object to its (SQL)null value.
|
(package private) static void |
setDateInCalendar(java.util.Calendar cal,
int encodedDate) |
Set the date portion of a date-time value into
the passed in Calendar object from its encodedDate
value.
|
protected void |
setFrom(DataValueDescriptor theValue) |
Set the value of this DataValueDescriptor based on the value
of the specified DataValueDescriptor.
|
void |
setInto(java.sql.PreparedStatement ps,
int position) |
Adding this method to ensure that super class' setInto method doesn't get called
that leads to the violation of JDBC spec( untyped nulls ) when batching is turned on.
|
(package private) void |
setObject(java.lang.Object theValue) |
Set the value from a correctly typed Date object.
|
(package private) static NumberDataValue |
setSource(int value,
NumberDataValue source) |
This helper routine tests the nullability of various parameters
and sets up the result appropriately.
|
void |
setValue(java.lang.String theValue) |
Set the value of this DataValueDescriptor.
|
void |
setValue(java.sql.Date value,
java.util.Calendar cal) |
Set the value of this DataValueDescriptor.
|
void |
setValue(java.sql.Timestamp value,
java.util.Calendar cal) |
Set the value of this DataValueDescriptor.
|
void |
setValueFromResultSet(java.sql.ResultSet resultSet,
int colNumber,
boolean isNullable) |
Set the value based on the value for the specified DataValueDescriptor
from the specified ResultSet.
|
DateTimeDataValue |
timestampAdd(int intervalType,
NumberDataValue intervalCount,
java.sql.Date currentDate,
DateTimeDataValue resultHolder) |
Add a number of intervals to a datetime value.
|
NumberDataValue |
timestampDiff(int intervalType,
DateTimeDataValue time1,
java.sql.Date currentDate,
NumberDataValue resultHolder) |
Finds the difference between two datetime values as a number of intervals.
|
java.lang.String |
toString() |
|
private SQLTimestamp |
toTimestamp() |
|
int |
typePrecedence() |
Each built-in type in JSQL has a precedence.
|
void |
writeExternal(java.io.ObjectOutput out) |
checkHostVariable, cloneHolder, coalesce, compare, compare, compareTo, dataTypeConversion, equals, equals, flip, genericSetObject, getBoolean, getByte, getBytes, getDouble, getFloat, getInt, getLong, getShort, getStream, getTime, getTraceString, getTypeName, greaterOrEquals, greaterThan, hasStream, in, invalidFormat, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, outOfRange, readExternalFromArray, recycle, setBigDecimal, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, throwLangSetMismatch, throwLangSetMismatch, typeToBigDecimalcheckHostVariable, cloneHolder, coalesce, compare, compare, equals, getBoolean, getByte, getBytes, getDouble, getFloat, getInt, getLong, getShort, getStream, getTime, getTraceString, greaterOrEquals, greaterThan, hasStream, in, isNotNull, isNullOp, lessOrEquals, lessThan, normalize, notEquals, readExternalFromArray, recycle, setBigDecimal, setInto, setObjectForCast, setToNull, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, typeToBigDecimalprivate int encodedDate
private static final int BASE_MEMORY_USAGE
static final char ISO_SEPARATOR
private static final char[] ISO_SEPARATOR_ONLY
private static final char IBM_USA_SEPARATOR
private static final char[] IBM_USA_SEPARATOR_ONLY
private static final char IBM_EUR_SEPARATOR
private static final char[] IBM_EUR_SEPARATOR_ONLY
private static final char[] END_OF_STRING
public SQLDate()
public SQLDate(java.sql.Date value)
throws StandardException
StandardExceptionprivate SQLDate(int encodedDate)
public SQLDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder)
throws StandardException
dateStr - isJdbcEscape - if true then only the JDBC date escape syntax is allowedlocaleFinder - StandardException - if the syntax is invalid or the value is
out of rangepublic SQLDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder,
java.util.Calendar cal)
throws StandardException
dateStr - isJdbcEscape - if true then only the JDBC date escape syntax is allowedlocaleFinder - StandardException - if the syntax is invalid or the value is
out of rangepublic int estimateMemoryUsage()
DataValueDescriptorestimateMemoryUsage in interface DataValueDescriptorint getEncodedDate()
public java.lang.String getString()
DataValueDescriptorgetString in interface DataValueDescriptorpublic java.sql.Timestamp getTimestamp(java.util.Calendar cal)
getTimestamp in interface DataValueDescriptorgetTimestamp in class DataTypecal - calendar for object creationprivate long getTimeInMillis(java.util.Calendar cal)
static void setDateInCalendar(java.util.Calendar cal,
int encodedDate)
public java.lang.Object getObject()
getObject in interface DataValueDescriptorgetObject in class DataTypepublic int getLength()
DataValueDescriptorgetLength in interface DataValueDescriptorpublic java.lang.String getTypeName()
DataValueDescriptorgetTypeName in interface DataValueDescriptorpublic int getTypeFormatId()
getTypeFormatId in interface TypedFormatTypedFormat.getTypeFormatId()public void writeExternal(java.io.ObjectOutput out)
throws java.io.IOException
writeExternal in interface java.io.Externalizablejava.io.IOException - error writing datapublic void readExternal(java.io.ObjectInput in)
throws java.io.IOException
readExternal in interface java.io.Externalizablejava.io.IOException - Thrown on error reading the objectExternalizable.readExternal(java.io.ObjectInput)public DataValueDescriptor cloneValue(boolean forceMaterialization)
DataValueDescriptor
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.
cloneValue in interface DataValueDescriptorforceMaterialization - any streams representing the data value will
be materialized if true, the data value will be kept as a
stream if possible if falseDataValueDescriptor with the same initial
value as this.DataValueDescriptor.cloneValue(boolean)public DataValueDescriptor getNewNull()
DataValueDescriptorgetNewNull in interface DataValueDescriptorDataValueDescriptor.getNewNull()public void restoreToNull()
StorablerestoreToNull in interface StorableStorable.restoreToNull()public void setValueFromResultSet(java.sql.ResultSet resultSet,
int colNumber,
boolean isNullable)
throws java.sql.SQLException,
StandardException
DataValueDescriptorsetValueFromResultSet in interface DataValueDescriptorresultSet - 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)java.sql.SQLException - Thrown on errorStandardException - Thrown on errorDataValueDescriptor.setValueFromResultSet(java.sql.ResultSet, int, boolean)public int compare(DataValueDescriptor other) throws StandardException
compare in interface DataValueDescriptorother - The Orderable to compare this one to.StandardException - thrown on failureOrderablepublic boolean compare(int op,
DataValueDescriptor other,
boolean orderedNulls,
boolean unknownRV)
throws StandardException
DataValueDescriptorcompare in interface DataValueDescriptorcompare in class DataTypeop - 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.StandardException - thrown on errorprivate void parseDate(java.util.Date value)
throws StandardException
StandardExceptionprivate void parseDate(java.lang.String dateStr,
boolean isJdbcEscape,
LocaleFinder localeFinder,
java.util.Calendar cal)
throws StandardException
StandardExceptionvoid setObject(java.lang.Object theValue)
throws StandardException
setObject in class DataTypeStandardExceptionprotected void setFrom(DataValueDescriptor theValue) throws StandardException
DataTypesetFrom in class DataTypetheValue - The DataValueDescriptor that holds the value to
which we want to set this DataValueDescriptor's value.StandardExceptionpublic void setValue(java.sql.Date value,
java.util.Calendar cal)
throws StandardException
DataTypesetValue in interface DataValueDescriptorsetValue in class DataTypevalue - The Date value to set this DataValueDescriptor tocal - The time zone from the calendar is used to construct the database date valueStandardExceptionDataValueDescriptor.setValue(int)public void setValue(java.sql.Timestamp value,
java.util.Calendar cal)
throws StandardException
DataTypesetValue in interface DataValueDescriptorsetValue in class DataTypevalue - The Timestamp value to set this DataValueDescriptor tocal - The time zone from the calendar is used to construct the database timestamp valueStandardExceptionDataValueDescriptor.setValue(int)public void setValue(java.lang.String theValue)
throws StandardException
DataTypesetValue in interface DataValueDescriptorsetValue in class DataTypetheValue - The BigDecimal value to set this DataValueDescriptor toStandardExceptionNumberDataValue nullValueInt()
public NumberDataValue getYear(NumberDataValue result) throws StandardException
DateTimeDataValuegetYear in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getYear(org.apache.derby.iapi.types.NumberDataValue)public NumberDataValue getMonth(NumberDataValue result) throws StandardException
DateTimeDataValuegetMonth in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getMonth(org.apache.derby.iapi.types.NumberDataValue)public NumberDataValue getDate(NumberDataValue result) throws StandardException
DateTimeDataValuegetDate in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getDate(org.apache.derby.iapi.types.NumberDataValue)public NumberDataValue getHours(NumberDataValue result) throws StandardException
DateTimeDataValuegetHours in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getHours(org.apache.derby.iapi.types.NumberDataValue)public NumberDataValue getMinutes(NumberDataValue result) throws StandardException
DateTimeDataValuegetMinutes in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getMinutes(org.apache.derby.iapi.types.NumberDataValue)public NumberDataValue getSeconds(NumberDataValue result) throws StandardException
DateTimeDataValuegetSeconds in interface DateTimeDataValueresult - The result of the previous call to this method, null
if not called yet.StandardException - Thrown on errorDateTimeDataValue.getSeconds(org.apache.derby.iapi.types.NumberDataValue)public java.lang.String toString()
toString in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.Objectpublic int typePrecedence()
DataTypetypePrecedence in interface DataValueDescriptortypePrecedence in class DataTypeDataValueDescriptor.typePrecedence()public final boolean isNull()
public java.sql.Date getDate(java.util.Calendar cal)
getDate in interface DataValueDescriptorgetDate in class DataTypecal - calendar for object creationstatic int getYear(int encodedDate)
encodedDate - the encoded datestatic int getMonth(int encodedDate)
encodedDate - the encoded datestatic int getDay(int encodedDate)
encodedDate - the encoded datestatic int computeEncodedDate(java.util.Calendar cal)
throws StandardException
cal - the CalendarStandardException - if the value is out of the DB2 date rangestatic int computeEncodedDate(int y,
int m,
int d)
throws StandardException
StandardExceptionstatic void dateToString(int year,
int month,
int day,
java.lang.StringBuffer sb)
year - month - 1 based (January == 1)day - sb - The string representation is appended to this StringBufferstatic java.lang.String encodedDateToString(int encodedDate)
static NumberDataValue setSource(int value, NumberDataValue source) throws StandardException
StandardException - Thrown on errorprivate static int computeEncodedDate(java.util.Date value)
throws StandardException
StandardExceptionstatic int computeEncodedDate(java.util.Date value,
java.util.Calendar currentCal)
throws StandardException
StandardExceptionpublic static DateTimeDataValue computeDateFunction(DataValueDescriptor operand, DataValueFactory dvf) throws StandardException
operand - Must be a date or a string convertible to a date.dvf - the DataValueFactoryStandardException - standard error policypublic void setInto(java.sql.PreparedStatement ps,
int position)
throws java.sql.SQLException,
StandardException
setInto in interface DataValueDescriptorsetInto in class DataTypejava.sql.SQLException - thrown by the PreparedStatement objectStandardException - thrown by me accessing my value.public DateTimeDataValue timestampAdd(int intervalType, NumberDataValue intervalCount, java.sql.Date currentDate, DateTimeDataValue resultHolder) throws StandardException
timestampAdd in interface DateTimeDataValueintervalType - One of FRAC_SECOND_INTERVAL, SECOND_INTERVAL, MINUTE_INTERVAL, HOUR_INTERVAL,
DAY_INTERVAL, WEEK_INTERVAL, MONTH_INTERVAL, QUARTER_INTERVAL, or YEAR_INTERVALintervalCount - The number of intervals to addcurrentDate - Used to convert time to timestampresultHolder - If non-null a DateTimeDataValue that can be used to hold the result. If null then
generate a new holderStandardExceptionprivate SQLTimestamp toTimestamp() throws StandardException
StandardExceptionpublic NumberDataValue timestampDiff(int intervalType, DateTimeDataValue time1, java.sql.Date currentDate, NumberDataValue resultHolder) throws StandardException
timestampDiff in interface DateTimeDataValueintervalType - One of FRAC_SECOND_INTERVAL, SECOND_INTERVAL, MINUTE_INTERVAL, HOUR_INTERVAL,
DAY_INTERVAL, WEEK_INTERVAL, MONTH_INTERVAL, QUARTER_INTERVAL, or YEAR_INTERVALtime1 - currentDate - Used to convert time to timestampresultHolder - If non-null a NumberDataValue that can be used to hold the result. If null then
generate a new holderStandardExceptionApache Derby V10.14 Internals - Copyright © 2004,2018 The Apache Software Foundation. All Rights Reserved.