Parent Directory | Revision Log | Patch
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DateTime.java 2005/05/02 05:18:08 165584 +++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DateTime.java 2005/05/02 06:25:59 165585 @@ -22,618 +22,595 @@ package org.apache.derby.client.am; /** * High performance converters from date/time byte encodings to JDBC Date, Time and Timestamp objects. - * <p> - * Using this class for direct date/time conversions from bytes offers - * superior performance over the alternative method of first constructing - * a Java String from the encoded bytes, and then using - * {@link java.sql.Date#valueOf java.sql.Date.valueOf()}, - * {@link java.sql.Time#valueOf java.sql.Time.valueOf()} or - * {@link java.sql.Timestamp#valueOf java.sql.Timestamp.valueOf()}. - * <p> + * <p/> + * Using this class for direct date/time conversions from bytes offers superior performance over the alternative method + * of first constructing a Java String from the encoded bytes, and then using {@link java.sql.Date#valueOf + * java.sql.Date.valueOf()}, {@link java.sql.Time#valueOf java.sql.Time.valueOf()} or {@link java.sql.Timestamp#valueOf + * java.sql.Timestamp.valueOf()}. + * <p/> */ -public class DateTime -{ +public class DateTime { - // Hide the default constructor - private DateTime () {} + // Hide the default constructor + private DateTime() { + } + + private static final int dateRepresentationLength = 10; + private static final int timeRepresentationLength = 8; + private static final int timestampRepresentationLength = 26; + + // ********************************************************* + // ********** Output converters (byte[] -> class) ********** + // ********************************************************* + + /** + * Expected character representation is DERBY string representation of a date, which is in one of the following + * format. + */ + public static final java.sql.Date dateBytesToDate(byte[] buffer, + int offset, + java.sql.Date recyclableDate) { + int year, month, day; + + String date = new String(buffer, offset, DateTime.dateRepresentationLength); + int yearIndx, monthIndx, dayIndx; + if (date.charAt(4) == '-') { + // JIS format: yyyy-mm-dd. + yearIndx = 0; + monthIndx = 5; + dayIndx = 8; + } else { + throw new java.lang.IllegalArgumentException("Unsupported date format!"); + } + + int zeroBase = ((int) '0'); + // Character arithmetic is used rather than + // the less efficient Integer.parseInt (date.substring()). + year = + 1000 * (((int) date.charAt(yearIndx)) - zeroBase) + + 100 * (((int) date.charAt(yearIndx + 1)) - zeroBase) + + 10 * (((int) date.charAt(yearIndx + 2)) - zeroBase) + + (((int) date.charAt(yearIndx + 3)) - zeroBase) - + 1900; + month = + 10 * (((int) date.charAt(monthIndx)) - zeroBase) + + (((int) date.charAt(monthIndx + 1)) - zeroBase) - + 1; + day = + 10 * (((int) date.charAt(dayIndx)) - zeroBase) + + (((int) date.charAt(dayIndx + 1)) - zeroBase); + + if (recyclableDate == null) { + return new java.sql.Date(year, month, day); + } else { + recyclableDate.setYear(year); + recyclableDate.setMonth(month); + recyclableDate.setDate(day); + return recyclableDate; + } + } + + /** + * Expected character representation is DERBY string representation of a time, which is in one of the following + * format: hh.mm.ss. + */ + public static final java.sql.Time timeBytesToTime(byte[] buffer, + int offset, + java.sql.Time recyclableTime) { + int hour, minute, second; + + String time = new String(buffer, offset, DateTime.timeRepresentationLength); + int zeroBase = ((int) '0'); + + // compute hour. + hour = + 10 * (((int) time.charAt(0)) - zeroBase) + + (((int) time.charAt(1)) - zeroBase); + // compute minute. + minute = + 10 * (((int) time.charAt(3)) - zeroBase) + + (((int) time.charAt(4)) - zeroBase); + // compute second. + second = + 10 * (((int) time.charAt(6)) - zeroBase) + + (((int) time.charAt(7)) - zeroBase); + + if (recyclableTime == null) { + return new java.sql.Time(hour, minute, second); + } else { + recyclableTime.setHours(hour); + recyclableTime.setMinutes(minute); + recyclableTime.setSeconds(second); + return recyclableTime; + } + } + + /** + * Expected character representation is DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final java.sql.Timestamp timestampBytesToTimestamp(byte[] buffer, + int offset, + java.sql.Timestamp recyclableTimestamp) { + int year, month, day, hour, minute, second, fraction; + + String timestamp = new String(buffer, offset, DateTime.timestampRepresentationLength); + int zeroBase = ((int) '0'); + + year = + 1000 * (((int) timestamp.charAt(0)) - zeroBase) + + 100 * (((int) timestamp.charAt(1)) - zeroBase) + + 10 * (((int) timestamp.charAt(2)) - zeroBase) + + (((int) timestamp.charAt(3)) - zeroBase) - + 1900; + month = + 10 * (((int) timestamp.charAt(5)) - zeroBase) + + (((int) timestamp.charAt(6)) - zeroBase) - + 1; + day = + 10 * (((int) timestamp.charAt(8)) - zeroBase) + + (((int) timestamp.charAt(9)) - zeroBase); + hour = + 10 * (((int) timestamp.charAt(11)) - zeroBase) + + (((int) timestamp.charAt(12)) - zeroBase); + minute = + 10 * (((int) timestamp.charAt(14)) - zeroBase) + + (((int) timestamp.charAt(15)) - zeroBase); + second = + 10 * (((int) timestamp.charAt(17)) - zeroBase) + + (((int) timestamp.charAt(18)) - zeroBase); + fraction = + 100000 * (((int) timestamp.charAt(20)) - zeroBase) + + 10000 * (((int) timestamp.charAt(21)) - zeroBase) + + 1000 * (((int) timestamp.charAt(22)) - zeroBase) + + 100 * (((int) timestamp.charAt(23)) - zeroBase) + + 10 * (((int) timestamp.charAt(24)) - zeroBase) + + (((int) timestamp.charAt(25)) - zeroBase); + + if (recyclableTimestamp == null) { + return new java.sql.Timestamp(year, month, day, hour, minute, second, fraction * 1000); + } else { + recyclableTimestamp.setYear(year); + recyclableTimestamp.setMonth(month); + recyclableTimestamp.setDate(day); + recyclableTimestamp.setHours(hour); + recyclableTimestamp.setMinutes(minute); + recyclableTimestamp.setSeconds(second); + recyclableTimestamp.setNanos(fraction * 1000); + return recyclableTimestamp; + } + } + + // ******************************************************** + // ********** Input converters (class -> byte[]) ********** + // ******************************************************** + + /** + * The returned character representation is in JDBC date format: <code>yyyy-mm-dd</code> date format in DERBY string + * representation of a date. + */ + public static final int dateToDateBytes(byte[] buffer, + int offset, + java.sql.Date date) throws ConversionException { + int year = date.getYear() + 1900; + if (year > 9999) { + throw new ConversionException("Year exceeds the maximum \"9999\"."); + } + int month = date.getMonth() + 1; + int day = date.getDate(); + + char[] dateChars = new char[DateTime.dateRepresentationLength]; + int zeroBase = (int) '0'; + dateChars[0] = (char) (year / 1000 + zeroBase); + dateChars[1] = (char) ((year % 1000) / 100 + zeroBase); + dateChars[2] = (char) ((year % 100) / 10 + zeroBase); + dateChars[3] = (char) (year % 10 + +zeroBase); + dateChars[4] = '-'; + dateChars[5] = (char) (month / 10 + zeroBase); + dateChars[6] = (char) (month % 10 + zeroBase); + dateChars[7] = '-'; + dateChars[8] = (char) (day / 10 + zeroBase); + dateChars[9] = (char) (day % 10 + zeroBase); + byte[] dateBytes = (new String(dateChars)).getBytes(); + System.arraycopy(dateBytes, 0, buffer, offset, DateTime.dateRepresentationLength); + + return DateTime.dateRepresentationLength; + } + + /** + * The returned character representation is in JDBC time escape format: <code>hh:mm:ss</code>, which is the same as + * JIS time format in DERBY string representation of a time. + */ + public static final int timeToTimeBytes(byte[] buffer, + int offset, + java.sql.Time time) { + int hour = time.getHours(); + int minute = time.getMinutes(); + int second = time.getSeconds(); + + char[] timeChars = new char[DateTime.timeRepresentationLength]; + int zeroBase = (int) '0'; + timeChars[0] = (char) (hour / 10 + zeroBase); + timeChars[1] = (char) (hour % 10 + +zeroBase); + timeChars[2] = ':'; + timeChars[3] = (char) (minute / 10 + zeroBase); + timeChars[4] = (char) (minute % 10 + zeroBase); + timeChars[5] = ':'; + timeChars[6] = (char) (second / 10 + zeroBase); + timeChars[7] = (char) (second % 10 + zeroBase); + byte[] timeBytes = (new String(timeChars)).getBytes(); + System.arraycopy(timeBytes, 0, buffer, offset, DateTime.timeRepresentationLength); + + return DateTime.timeRepresentationLength; + } + + /** + * The returned character representation is in DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final int timestampToTimestampBytes(byte[] buffer, + int offset, + java.sql.Timestamp timestamp) throws ConversionException { + int year = timestamp.getYear() + 1900; + if (year > 9999) { + throw new ConversionException("Year exceeds the maximum \"9999\"."); + } + int month = timestamp.getMonth() + 1; + int day = timestamp.getDate(); + int hour = timestamp.getHours(); + int minute = timestamp.getMinutes(); + int second = timestamp.getSeconds(); + int microsecond = timestamp.getNanos() / 1000; + + char[] timestampChars = new char[DateTime.timestampRepresentationLength]; + int zeroBase = (int) '0'; + timestampChars[0] = (char) (year / 1000 + zeroBase); + timestampChars[1] = (char) ((year % 1000) / 100 + zeroBase); + timestampChars[2] = (char) ((year % 100) / 10 + zeroBase); + timestampChars[3] = (char) (year % 10 + +zeroBase); + timestampChars[4] = '-'; + timestampChars[5] = (char) (month / 10 + zeroBase); + timestampChars[6] = (char) (month % 10 + zeroBase); + timestampChars[7] = '-'; + timestampChars[8] = (char) (day / 10 + zeroBase); + timestampChars[9] = (char) (day % 10 + zeroBase); + timestampChars[10] = '-'; + timestampChars[11] = (char) (hour / 10 + zeroBase); + timestampChars[12] = (char) (hour % 10 + zeroBase); + timestampChars[13] = '.'; + timestampChars[14] = (char) (minute / 10 + zeroBase); + timestampChars[15] = (char) (minute % 10 + zeroBase); + timestampChars[16] = '.'; + timestampChars[17] = (char) (second / 10 + zeroBase); + timestampChars[18] = (char) (second % 10 + zeroBase); + timestampChars[19] = '.'; + timestampChars[20] = (char) (microsecond / 100000 + zeroBase); + timestampChars[21] = (char) ((microsecond % 100000) / 10000 + zeroBase); + timestampChars[22] = (char) ((microsecond % 10000) / 1000 + zeroBase); + timestampChars[23] = (char) ((microsecond % 1000) / 100 + zeroBase); + timestampChars[24] = (char) ((microsecond % 100) / 10 + zeroBase); + timestampChars[25] = (char) (microsecond % 10 + zeroBase); + + byte[] timestampBytes = (new String(timestampChars)).getBytes(); + System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); + + return DateTime.timestampRepresentationLength; + } + + // ********************************************************* + // ******* CROSS output converters (byte[] -> class) ******* + // ********************************************************* + + /** + * Expected character representation is DERBY string representation of a date, which is in one of the following + * format. + */ + public static final java.sql.Timestamp dateBytesToTimestamp(byte[] buffer, + int offset, + java.sql.Timestamp recyclableTimestamp) { + int year, month, day; + + String date = new String(buffer, offset, DateTime.dateRepresentationLength); + int yearIndx, monthIndx, dayIndx; + + yearIndx = 0; + monthIndx = 5; + dayIndx = 8; + + int zeroBase = ((int) '0'); + // Character arithmetic is used rather than + // the less efficient Integer.parseInt (date.substring()). + year = + 1000 * (((int) date.charAt(yearIndx)) - zeroBase) + + 100 * (((int) date.charAt(yearIndx + 1)) - zeroBase) + + 10 * (((int) date.charAt(yearIndx + 2)) - zeroBase) + + (((int) date.charAt(yearIndx + 3)) - zeroBase) - + 1900; + month = + 10 * (((int) date.charAt(monthIndx)) - zeroBase) + + (((int) date.charAt(monthIndx + 1)) - zeroBase) - + 1; + day = + 10 * (((int) date.charAt(dayIndx)) - zeroBase) + + (((int) date.charAt(dayIndx + 1)) - zeroBase); + + if (recyclableTimestamp == null) { + return new java.sql.Timestamp(year, month, day, 0, 0, 0, 0); + } else { + recyclableTimestamp.setYear(year); + recyclableTimestamp.setMonth(month); + recyclableTimestamp.setDate(day); + recyclableTimestamp.setHours(0); + recyclableTimestamp.setMinutes(0); + recyclableTimestamp.setSeconds(0); + recyclableTimestamp.setNanos(0); + return recyclableTimestamp; + } + } + + /** + * Expected character representation is DERBY string representation of a time, which is in one of the following + * format. + */ + public static final java.sql.Timestamp timeBytesToTimestamp(byte[] buffer, + int offset, + java.sql.Timestamp recyclableTimestamp) { + int hour, minute, second; + + String time = new String(buffer, offset, DateTime.timeRepresentationLength); + int zeroBase = ((int) '0'); + + // compute hour. + hour = + 10 * (((int) time.charAt(0)) - zeroBase) + + (((int) time.charAt(1)) - zeroBase); + // compute minute. + minute = + 10 * (((int) time.charAt(3)) - zeroBase) + + (((int) time.charAt(4)) - zeroBase); + // compute second JIS format: hh:mm:ss. + second = + 10 * (((int) time.charAt(6)) - zeroBase) + + (((int) time.charAt(7)) - zeroBase); + + if (recyclableTimestamp == null) { + return new java.sql.Timestamp(0, 0, 1, hour, minute, second, 0); + } else { + recyclableTimestamp.setYear(0); + recyclableTimestamp.setMonth(0); + recyclableTimestamp.setDate(1); + recyclableTimestamp.setHours(hour); + recyclableTimestamp.setMinutes(minute); + recyclableTimestamp.setSeconds(second); + recyclableTimestamp.setNanos(0); + return recyclableTimestamp; + } + } + + /** + * Expected character representation is DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final java.sql.Date timestampBytesToDate(byte[] buffer, + int offset, + java.sql.Date recyclableDate) { + int year, month, day; + + String timestamp = new String(buffer, offset, DateTime.timestampRepresentationLength); + int zeroBase = ((int) '0'); + + year = + 1000 * (((int) timestamp.charAt(0)) - zeroBase) + + 100 * (((int) timestamp.charAt(1)) - zeroBase) + + 10 * (((int) timestamp.charAt(2)) - zeroBase) + + (((int) timestamp.charAt(3)) - zeroBase) - + 1900; + month = + 10 * (((int) timestamp.charAt(5)) - zeroBase) + + (((int) timestamp.charAt(6)) - zeroBase) - + 1; + day = + 10 * (((int) timestamp.charAt(8)) - zeroBase) + + (((int) timestamp.charAt(9)) - zeroBase); + + if (recyclableDate == null) { + return new java.sql.Date(year, month, day); + } else { + recyclableDate.setYear(year); + recyclableDate.setMonth(month); + recyclableDate.setDate(day); + return recyclableDate; + } + } + + /** + * Expected character representation is DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final java.sql.Time timestampBytesToTime(byte[] buffer, + int offset, + java.sql.Time recyclableTime) { + int hour, minute, second; + + String timestamp = new String(buffer, offset, DateTime.timestampRepresentationLength); + int zeroBase = ((int) '0'); + + hour = + 10 * (((int) timestamp.charAt(11)) - zeroBase) + + (((int) timestamp.charAt(12)) - zeroBase); + minute = + 10 * (((int) timestamp.charAt(14)) - zeroBase) + + (((int) timestamp.charAt(15)) - zeroBase); + second = + 10 * (((int) timestamp.charAt(17)) - zeroBase) + + (((int) timestamp.charAt(18)) - zeroBase); + + if (recyclableTime == null) { + return new java.sql.Time(hour, minute, second); + } else { + recyclableTime.setYear(hour); + recyclableTime.setMonth(minute); + recyclableTime.setDate(second); + return recyclableTime; + } + } + + // ********************************************************* + // ******* CROSS input converters (class -> byte[]) ******** + // ********************************************************* + + /** + * The returned character representation is in JDBC date escape format: <code>yyyy-mm-dd</code>, which is the same + * as JIS date format in DERBY string representation of a date. + */ + public static final int timestampToDateBytes(byte[] buffer, + int offset, + java.sql.Timestamp timestamp) throws ConversionException { + int year = timestamp.getYear() + 1900; + if (year > 9999) { + throw new ConversionException("Year exceeds the maximum \"9999\"."); + } + int month = timestamp.getMonth() + 1; + int day = timestamp.getDate(); + + char[] dateChars = new char[DateTime.dateRepresentationLength]; + int zeroBase = (int) '0'; + dateChars[0] = (char) (year / 1000 + zeroBase); + dateChars[1] = (char) ((year % 1000) / 100 + zeroBase); + dateChars[2] = (char) ((year % 100) / 10 + zeroBase); + dateChars[3] = (char) (year % 10 + +zeroBase); + dateChars[4] = '-'; + dateChars[5] = (char) (month / 10 + zeroBase); + dateChars[6] = (char) (month % 10 + zeroBase); + dateChars[7] = '-'; + dateChars[8] = (char) (day / 10 + zeroBase); + dateChars[9] = (char) (day % 10 + zeroBase); + byte[] dateBytes = (new String(dateChars)).getBytes(); + System.arraycopy(dateBytes, 0, buffer, offset, DateTime.dateRepresentationLength); + + return DateTime.dateRepresentationLength; + } + + /** + * The returned character representation is in JDBC time escape format: <code>hh:mm:ss</code>, which is the same as + * JIS time format in DERBY string representation of a time. + */ + public static final int timestampToTimeBytes(byte[] buffer, + int offset, + java.sql.Timestamp timestamp) { + int hour = timestamp.getHours(); + int minute = timestamp.getMinutes(); + int second = timestamp.getSeconds(); + + char[] timeChars = new char[DateTime.timeRepresentationLength]; + int zeroBase = (int) '0'; + timeChars[0] = (char) (hour / 10 + zeroBase); + timeChars[1] = (char) (hour % 10 + +zeroBase); + timeChars[2] = ':'; + timeChars[3] = (char) (minute / 10 + zeroBase); + timeChars[4] = (char) (minute % 10 + zeroBase); + timeChars[5] = ':'; + timeChars[6] = (char) (second / 10 + zeroBase); + timeChars[7] = (char) (second % 10 + zeroBase); + byte[] timeBytes = (new String(timeChars)).getBytes(); + System.arraycopy(timeBytes, 0, buffer, offset, DateTime.timeRepresentationLength); - private static final int dateRepresentationLength = 10; - private static final int timeRepresentationLength = 8; - private static final int timestampRepresentationLength = 26; - - // ********************************************************* - // ********** Output converters (byte[] -> class) ********** - // ********************************************************* - - /** - * Expected character representation is DERBY string representation - * of a date, which is in one of the following format. - */ - public static final java.sql.Date dateBytesToDate (byte[] buffer, - int offset, - java.sql.Date recyclableDate) - { - int year, month, day; - - String date = new String (buffer, offset, DateTime.dateRepresentationLength); - int yearIndx, monthIndx, dayIndx; - if (date.charAt (4) == '-') { - // JIS format: yyyy-mm-dd. - yearIndx = 0; - monthIndx = 5; - dayIndx = 8; - } - else throw new java.lang.IllegalArgumentException ("Unsupported date format!"); - - int zeroBase = ((int) '0'); - // Character arithmetic is used rather than - // the less efficient Integer.parseInt (date.substring()). - year = - 1000*(((int) date.charAt (yearIndx)) - zeroBase) + - 100*(((int) date.charAt (yearIndx+1)) - zeroBase) + - 10*(((int) date.charAt (yearIndx+2)) - zeroBase) + - (((int) date.charAt (yearIndx+3)) - zeroBase) - - 1900; - month = - 10*(((int) date.charAt (monthIndx)) - zeroBase) + - (((int) date.charAt (monthIndx+1)) - zeroBase) - - 1; - day = - 10*(((int) date.charAt (dayIndx)) - zeroBase) + - (((int) date.charAt (dayIndx+1)) - zeroBase); - - if (recyclableDate == null) - return new java.sql.Date (year, month, day); - else { - recyclableDate.setYear (year); - recyclableDate.setMonth (month); - recyclableDate.setDate (day); - return recyclableDate; - } - } - - /** - * Expected character representation is DERBY string representation - * of a time, which is in one of the following format: hh.mm.ss. - */ - public static final java.sql.Time timeBytesToTime (byte[] buffer, - int offset, - java.sql.Time recyclableTime) - { - int hour, minute, second; - - String time = new String (buffer, offset, DateTime.timeRepresentationLength); - int zeroBase = ((int) '0'); - - // compute hour. - hour = - 10*(((int) time.charAt (0)) - zeroBase) + - (((int) time.charAt (1)) - zeroBase); - // compute minute. - minute = - 10*(((int) time.charAt (3)) - zeroBase) + - (((int) time.charAt (4)) - zeroBase); - // compute second. - second = - 10*(((int) time.charAt (6)) - zeroBase) + - (((int) time.charAt (7)) - zeroBase); - - if (recyclableTime == null) - return new java.sql.Time (hour, minute, second); - else { - recyclableTime.setHours (hour); - recyclableTime.setMinutes (minute); - recyclableTime.setSeconds (second); - return recyclableTime; - } - } - - /** - * Expected character representation is DERBY string representation - * of a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - * - */ - public static final java.sql.Timestamp timestampBytesToTimestamp (byte[] buffer, - int offset, - java.sql.Timestamp recyclableTimestamp) - { - int year, month, day, hour, minute, second, fraction; - - String timestamp = new String (buffer, offset, DateTime.timestampRepresentationLength); - int zeroBase = ((int) '0'); - - year = - 1000*(((int) timestamp.charAt (0)) - zeroBase) + - 100*(((int) timestamp.charAt (1)) - zeroBase) + - 10*(((int) timestamp.charAt (2)) - zeroBase) + - (((int) timestamp.charAt (3)) - zeroBase) - - 1900; - month = - 10*(((int) timestamp.charAt (5)) - zeroBase) + - (((int) timestamp.charAt (6)) - zeroBase) - - 1; - day = - 10*(((int) timestamp.charAt (8)) - zeroBase) + - (((int) timestamp.charAt (9)) - zeroBase); - hour = - 10*(((int) timestamp.charAt (11)) - zeroBase) + - (((int) timestamp.charAt (12)) - zeroBase); - minute = - 10*(((int) timestamp.charAt (14)) - zeroBase) + - (((int) timestamp.charAt (15)) - zeroBase); - second = - 10*(((int) timestamp.charAt (17)) - zeroBase) + - (((int) timestamp.charAt (18)) - zeroBase); - fraction = - 100000*(((int) timestamp.charAt (20)) - zeroBase) + - 10000*(((int) timestamp.charAt (21)) - zeroBase) + - 1000*(((int) timestamp.charAt (22)) - zeroBase) + - 100*(((int) timestamp.charAt (23)) - zeroBase) + - 10*(((int) timestamp.charAt (24)) - zeroBase) + - (((int) timestamp.charAt (25)) - zeroBase); - - if (recyclableTimestamp == null) - return new java.sql.Timestamp (year, month, day, hour, minute, second, fraction*1000); - else { - recyclableTimestamp.setYear (year); - recyclableTimestamp.setMonth (month); - recyclableTimestamp.setDate (day); - recyclableTimestamp.setHours (hour); - recyclableTimestamp.setMinutes (minute); - recyclableTimestamp.setSeconds (second); - recyclableTimestamp.setNanos (fraction*1000); - return recyclableTimestamp; - } - } - - // ******************************************************** - // ********** Input converters (class -> byte[]) ********** - // ******************************************************** - - /** - * The returned character representation is in JDBC date format: - * <code>yyyy-mm-dd</code> date format in - * DERBY string representation of a date. - * - */ - public static final int dateToDateBytes (byte[] buffer, - int offset, - java.sql.Date date - ) throws ConversionException - { - int year = date.getYear () + 1900; - if (year > 9999) throw new ConversionException ("Year exceeds the maximum \"9999\"."); - int month = date.getMonth () + 1; - int day = date.getDate (); - - char[] dateChars = new char[DateTime.dateRepresentationLength]; - int zeroBase = (int) '0'; - dateChars[0] = (char) (year/1000 + zeroBase); - dateChars[1] = (char) ((year%1000)/100 + zeroBase); - dateChars[2] = (char) ((year%100)/10 + zeroBase); - dateChars[3] = (char) (year%10 + + zeroBase); - dateChars[4] = '-'; - dateChars[5] = (char) (month/10 + zeroBase); - dateChars[6] = (char) (month%10 + zeroBase); - dateChars[7] = '-'; - dateChars[8] = (char) (day/10 + zeroBase); - dateChars[9] = (char) (day%10 + zeroBase); - byte[] dateBytes = (new String(dateChars)).getBytes (); - System.arraycopy(dateBytes, 0, buffer, offset, DateTime.dateRepresentationLength); - - return DateTime.dateRepresentationLength; - } - - /** - * The returned character representation is in JDBC time escape format: - * <code>hh:mm:ss</code>, which is the same as JIS time format in - * DERBY string representation of a time. - * - */ - public static final int timeToTimeBytes (byte[] buffer, - int offset, - java.sql.Time time) - { - int hour = time.getHours(); - int minute = time.getMinutes(); - int second = time.getSeconds(); - - char[] timeChars = new char[DateTime.timeRepresentationLength]; - int zeroBase = (int) '0'; - timeChars[0] = (char) (hour/10 + zeroBase); - timeChars[1] = (char) (hour%10 + + zeroBase); - timeChars[2] = ':'; - timeChars[3] = (char) (minute/10 + zeroBase); - timeChars[4] = (char) (minute%10 + zeroBase); - timeChars[5] = ':'; - timeChars[6] = (char) (second/10 + zeroBase); - timeChars[7] = (char) (second%10 + zeroBase); - byte[] timeBytes = (new String(timeChars)).getBytes (); - System.arraycopy(timeBytes, 0, buffer, offset, DateTime.timeRepresentationLength); - - return DateTime.timeRepresentationLength; - } - - /** - * The returned character representation is in DERBY string representation of - * a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - */ - public static final int timestampToTimestampBytes (byte[] buffer, - int offset, - java.sql.Timestamp timestamp - ) throws ConversionException - { - int year = timestamp.getYear () + 1900; - if (year > 9999) throw new ConversionException ("Year exceeds the maximum \"9999\"."); - int month = timestamp.getMonth () + 1; - int day = timestamp.getDate (); - int hour = timestamp.getHours(); - int minute = timestamp.getMinutes(); - int second = timestamp.getSeconds(); - int microsecond = timestamp.getNanos()/1000; - - char[] timestampChars = new char[DateTime.timestampRepresentationLength]; - int zeroBase = (int) '0'; - timestampChars[0] = (char) (year/1000 + zeroBase); - timestampChars[1] = (char) ((year%1000)/100 + zeroBase); - timestampChars[2] = (char) ((year%100)/10 + zeroBase); - timestampChars[3] = (char) (year%10 + + zeroBase); - timestampChars[4] = '-'; - timestampChars[5] = (char) (month/10 + zeroBase); - timestampChars[6] = (char) (month%10 + zeroBase); - timestampChars[7] = '-'; - timestampChars[8] = (char) (day/10 + zeroBase); - timestampChars[9] = (char) (day%10 + zeroBase); - timestampChars[10] = '-'; - timestampChars[11] = (char) (hour/10 + zeroBase); - timestampChars[12] = (char) (hour%10 + zeroBase); - timestampChars[13] = '.'; - timestampChars[14] = (char) (minute/10 + zeroBase); - timestampChars[15] = (char) (minute%10 + zeroBase); - timestampChars[16] = '.'; - timestampChars[17] = (char) (second/10 + zeroBase); - timestampChars[18] = (char) (second%10 + zeroBase); - timestampChars[19] = '.'; - timestampChars[20] = (char) (microsecond/100000 + zeroBase); - timestampChars[21] = (char) ((microsecond%100000)/10000 + zeroBase); - timestampChars[22] = (char) ((microsecond%10000)/1000 + zeroBase); - timestampChars[23] = (char) ((microsecond%1000)/100 + zeroBase); - timestampChars[24] = (char) ((microsecond%100)/10 + zeroBase); - timestampChars[25] = (char) (microsecond%10 + zeroBase); - - byte[] timestampBytes = (new String(timestampChars)).getBytes (); - System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); - - return DateTime.timestampRepresentationLength; - } - - // ********************************************************* - // ******* CROSS output converters (byte[] -> class) ******* - // ********************************************************* - - /** - * Expected character representation is DERBY string representation - * of a date, which is in one of the following format. - */ - public static final java.sql.Timestamp dateBytesToTimestamp (byte[] buffer, - int offset, - java.sql.Timestamp recyclableTimestamp) - { - int year, month, day; - - String date = new String (buffer, offset, DateTime.dateRepresentationLength); - int yearIndx, monthIndx, dayIndx; - - yearIndx = 0; - monthIndx = 5; - dayIndx = 8; - - int zeroBase = ((int) '0'); - // Character arithmetic is used rather than - // the less efficient Integer.parseInt (date.substring()). - year = - 1000*(((int) date.charAt (yearIndx)) - zeroBase) + - 100*(((int) date.charAt (yearIndx+1)) - zeroBase) + - 10*(((int) date.charAt (yearIndx+2)) - zeroBase) + - (((int) date.charAt (yearIndx+3)) - zeroBase) - - 1900; - month = - 10*(((int) date.charAt (monthIndx)) - zeroBase) + - (((int) date.charAt (monthIndx+1)) - zeroBase) - - 1; - day = - 10*(((int) date.charAt (dayIndx)) - zeroBase) + - (((int) date.charAt (dayIndx+1)) - zeroBase); - - if (recyclableTimestamp == null) - return new java.sql.Timestamp (year, month, day, 0, 0, 0, 0); - else { - recyclableTimestamp.setYear (year); - recyclableTimestamp.setMonth (month); - recyclableTimestamp.setDate (day); - recyclableTimestamp.setHours (0); - recyclableTimestamp.setMinutes (0); - recyclableTimestamp.setSeconds (0); - recyclableTimestamp.setNanos (0); - return recyclableTimestamp; - } - } - - /** - * Expected character representation is DERBY string representation - * of a time, which is in one of the following format. - */ - public static final java.sql.Timestamp timeBytesToTimestamp (byte[] buffer, - int offset, - java.sql.Timestamp recyclableTimestamp) - { - int hour, minute, second; - - String time = new String (buffer, offset, DateTime.timeRepresentationLength); - int zeroBase = ((int) '0'); - - // compute hour. - hour = - 10*(((int) time.charAt (0)) - zeroBase) + - (((int) time.charAt (1)) - zeroBase); - // compute minute. - minute = - 10*(((int) time.charAt (3)) - zeroBase) + - (((int) time.charAt (4)) - zeroBase); - // compute second JIS format: hh:mm:ss. - second = - 10*(((int) time.charAt (6)) - zeroBase) + - (((int) time.charAt (7)) - zeroBase); - - if (recyclableTimestamp == null) - return new java.sql.Timestamp (0, 0, 1, hour, minute, second, 0); - else { - recyclableTimestamp.setYear (0); - recyclableTimestamp.setMonth (0); - recyclableTimestamp.setDate (1); - recyclableTimestamp.setHours (hour); - recyclableTimestamp.setMinutes (minute); - recyclableTimestamp.setSeconds (second); - recyclableTimestamp.setNanos (0); - return recyclableTimestamp; - } - } - - /** - * Expected character representation is DERBY string representation - * of a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - */ - public static final java.sql.Date timestampBytesToDate (byte[] buffer, - int offset, - java.sql.Date recyclableDate) - { - int year, month, day; - - String timestamp = new String (buffer, offset, DateTime.timestampRepresentationLength); - int zeroBase = ((int) '0'); - - year = - 1000*(((int) timestamp.charAt (0)) - zeroBase) + - 100*(((int) timestamp.charAt (1)) - zeroBase) + - 10*(((int) timestamp.charAt (2)) - zeroBase) + - (((int) timestamp.charAt (3)) - zeroBase) - - 1900; - month = - 10*(((int) timestamp.charAt (5)) - zeroBase) + - (((int) timestamp.charAt (6)) - zeroBase) - - 1; - day = - 10*(((int) timestamp.charAt (8)) - zeroBase) + - (((int) timestamp.charAt (9)) - zeroBase); - - if (recyclableDate == null) - return new java.sql.Date (year, month, day); - else { - recyclableDate.setYear (year); - recyclableDate.setMonth (month); - recyclableDate.setDate (day); - return recyclableDate; - } - } - - /** - * Expected character representation is DERBY string representation - * of a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - */ - public static final java.sql.Time timestampBytesToTime (byte[] buffer, - int offset, - java.sql.Time recyclableTime) - { - int hour, minute, second; - - String timestamp = new String (buffer, offset, DateTime.timestampRepresentationLength); - int zeroBase = ((int) '0'); - - hour = - 10*(((int) timestamp.charAt (11)) - zeroBase) + - (((int) timestamp.charAt (12)) - zeroBase); - minute = - 10*(((int) timestamp.charAt (14)) - zeroBase) + - (((int) timestamp.charAt (15)) - zeroBase); - second = - 10*(((int) timestamp.charAt (17)) - zeroBase) + - (((int) timestamp.charAt (18)) - zeroBase); - - if (recyclableTime == null) - return new java.sql.Time (hour, minute, second); - else { - recyclableTime.setYear (hour); - recyclableTime.setMonth (minute); - recyclableTime.setDate (second); - return recyclableTime; - } - } - - // ********************************************************* - // ******* CROSS input converters (class -> byte[]) ******** - // ********************************************************* - - /** - * The returned character representation is in JDBC date escape format: - * <code>yyyy-mm-dd</code>, which is the same as JIS date format in - * DERBY string representation of a date. - * - */ - public static final int timestampToDateBytes (byte[] buffer, - int offset, - java.sql.Timestamp timestamp - ) throws ConversionException - { - int year = timestamp.getYear () + 1900; - if (year > 9999) throw new ConversionException ("Year exceeds the maximum \"9999\"."); - int month = timestamp.getMonth () + 1; - int day = timestamp.getDate (); - - char[] dateChars = new char[DateTime.dateRepresentationLength]; - int zeroBase = (int) '0'; - dateChars[0] = (char) (year/1000 + zeroBase); - dateChars[1] = (char) ((year%1000)/100 + zeroBase); - dateChars[2] = (char) ((year%100)/10 + zeroBase); - dateChars[3] = (char) (year%10 + + zeroBase); - dateChars[4] = '-'; - dateChars[5] = (char) (month/10 + zeroBase); - dateChars[6] = (char) (month%10 + zeroBase); - dateChars[7] = '-'; - dateChars[8] = (char) (day/10 + zeroBase); - dateChars[9] = (char) (day%10 + zeroBase); - byte[] dateBytes = (new String(dateChars)).getBytes (); - System.arraycopy(dateBytes, 0, buffer, offset, DateTime.dateRepresentationLength); - - return DateTime.dateRepresentationLength; - } - - /** - * The returned character representation is in JDBC time escape format: - * <code>hh:mm:ss</code>, which is the same as JIS time format in - * DERBY string representation of a time. - * - */ - public static final int timestampToTimeBytes (byte[] buffer, - int offset, - java.sql.Timestamp timestamp) - { - int hour = timestamp.getHours(); - int minute = timestamp.getMinutes(); - int second = timestamp.getSeconds(); - - char[] timeChars = new char[DateTime.timeRepresentationLength]; - int zeroBase = (int) '0'; - timeChars[0] = (char) (hour/10 + zeroBase); - timeChars[1] = (char) (hour%10 + + zeroBase); - timeChars[2] = ':'; - timeChars[3] = (char) (minute/10 + zeroBase); - timeChars[4] = (char) (minute%10 + zeroBase); - timeChars[5] = ':'; - timeChars[6] = (char) (second/10 + zeroBase); - timeChars[7] = (char) (second%10 + zeroBase); - byte[] timeBytes = (new String(timeChars)).getBytes (); - System.arraycopy(timeBytes, 0, buffer, offset, DateTime.timeRepresentationLength); - - return DateTime.timeRepresentationLength; - } - - /** - * The returned character representation is in DERBY string representation of - * a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - * - */ - public static final int dateToTimestampBytes (byte[] buffer, - int offset, - java.sql.Date date - ) throws ConversionException - { - int year = date.getYear () + 1900; - if (year > 9999) throw new ConversionException ("Year exceeds the maximum \"9999\"."); - int month = date.getMonth () + 1; - int day = date.getDate (); - - char[] timestampChars = new char[DateTime.timestampRepresentationLength]; - int zeroBase = (int) '0'; - timestampChars[0] = (char) (year/1000 + zeroBase); - timestampChars[1] = (char) ((year%1000)/100 + zeroBase); - timestampChars[2] = (char) ((year%100)/10 + zeroBase); - timestampChars[3] = (char) (year%10 + + zeroBase); - timestampChars[4] = '-'; - timestampChars[5] = (char) (month/10 + zeroBase); - timestampChars[6] = (char) (month%10 + zeroBase); - timestampChars[7] = '-'; - timestampChars[8] = (char) (day/10 + zeroBase); - timestampChars[9] = (char) (day%10 + zeroBase); - timestampChars[10] = '-'; - timestampChars[11] = '0'; - timestampChars[12] = '0'; - timestampChars[13] = '.'; - timestampChars[14] = '0'; - timestampChars[15] = '0'; - timestampChars[16] = '.'; - timestampChars[17] = '0'; - timestampChars[18] = '0'; - timestampChars[19] = '.'; - timestampChars[20] = '0'; - timestampChars[21] = '0'; - timestampChars[22] = '0'; - timestampChars[23] = '0'; - timestampChars[24] = '0'; - timestampChars[25] = '0'; - - byte[] timestampBytes = (new String(timestampChars)).getBytes (); - System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); - - return DateTime.timestampRepresentationLength; - } - - /** - * The returned character representation is in DERBY string representation of - * a timestamp: <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. - * - */ - public static final int timeToTimestampBytes (byte[] buffer, - int offset, - java.sql.Time time - ) - { - int hour = time.getHours(); - int minute = time.getMinutes(); - int second = time.getSeconds(); - - char[] timestampChars = new char[DateTime.timestampRepresentationLength]; - int zeroBase = (int) '0'; - timestampChars[0] = '1'; - timestampChars[1] = '9'; - timestampChars[2] = '0'; - timestampChars[3] = '0'; - timestampChars[4] = '-'; - timestampChars[5] = '0'; - timestampChars[6] = '1'; - timestampChars[7] = '-'; - timestampChars[8] = '0'; - timestampChars[9] = '1'; - timestampChars[10] = '-'; - timestampChars[11] = (char) (hour/10 + zeroBase); - timestampChars[12] = (char) (hour%10 + zeroBase); - timestampChars[13] = '.'; - timestampChars[14] = (char) (minute/10 + zeroBase); - timestampChars[15] = (char) (minute%10 + zeroBase); - timestampChars[16] = '.'; - timestampChars[17] = (char) (second/10 + zeroBase); - timestampChars[18] = (char) (second%10 + zeroBase); - timestampChars[19] = '.'; - timestampChars[20] = '0'; - timestampChars[21] = '0'; - timestampChars[22] = '0'; - timestampChars[23] = '0'; - timestampChars[24] = '0'; - timestampChars[25] = '0'; + return DateTime.timeRepresentationLength; + } - byte[] timestampBytes = (new String(timestampChars)).getBytes (); - System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); + /** + * The returned character representation is in DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final int dateToTimestampBytes(byte[] buffer, + int offset, + java.sql.Date date) throws ConversionException { + int year = date.getYear() + 1900; + if (year > 9999) { + throw new ConversionException("Year exceeds the maximum \"9999\"."); + } + int month = date.getMonth() + 1; + int day = date.getDate(); + + char[] timestampChars = new char[DateTime.timestampRepresentationLength]; + int zeroBase = (int) '0'; + timestampChars[0] = (char) (year / 1000 + zeroBase); + timestampChars[1] = (char) ((year % 1000) / 100 + zeroBase); + timestampChars[2] = (char) ((year % 100) / 10 + zeroBase); + timestampChars[3] = (char) (year % 10 + +zeroBase); + timestampChars[4] = '-'; + timestampChars[5] = (char) (month / 10 + zeroBase); + timestampChars[6] = (char) (month % 10 + zeroBase); + timestampChars[7] = '-'; + timestampChars[8] = (char) (day / 10 + zeroBase); + timestampChars[9] = (char) (day % 10 + zeroBase); + timestampChars[10] = '-'; + timestampChars[11] = '0'; + timestampChars[12] = '0'; + timestampChars[13] = '.'; + timestampChars[14] = '0'; + timestampChars[15] = '0'; + timestampChars[16] = '.'; + timestampChars[17] = '0'; + timestampChars[18] = '0'; + timestampChars[19] = '.'; + timestampChars[20] = '0'; + timestampChars[21] = '0'; + timestampChars[22] = '0'; + timestampChars[23] = '0'; + timestampChars[24] = '0'; + timestampChars[25] = '0'; - return DateTime.timestampRepresentationLength; - } + byte[] timestampBytes = (new String(timestampChars)).getBytes(); + System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); + + return DateTime.timestampRepresentationLength; + } + + /** + * The returned character representation is in DERBY string representation of a timestamp: + * <code>yyyy-mm-dd-hh.mm.ss.ffffff</code>. + */ + public static final int timeToTimestampBytes(byte[] buffer, + int offset, + java.sql.Time time) { + int hour = time.getHours(); + int minute = time.getMinutes(); + int second = time.getSeconds(); + + char[] timestampChars = new char[DateTime.timestampRepresentationLength]; + int zeroBase = (int) '0'; + timestampChars[0] = '1'; + timestampChars[1] = '9'; + timestampChars[2] = '0'; + timestampChars[3] = '0'; + timestampChars[4] = '-'; + timestampChars[5] = '0'; + timestampChars[6] = '1'; + timestampChars[7] = '-'; + timestampChars[8] = '0'; + timestampChars[9] = '1'; + timestampChars[10] = '-'; + timestampChars[11] = (char) (hour / 10 + zeroBase); + timestampChars[12] = (char) (hour % 10 + zeroBase); + timestampChars[13] = '.'; + timestampChars[14] = (char) (minute / 10 + zeroBase); + timestampChars[15] = (char) (minute % 10 + zeroBase); + timestampChars[16] = '.'; + timestampChars[17] = (char) (second / 10 + zeroBase); + timestampChars[18] = (char) (second % 10 + zeroBase); + timestampChars[19] = '.'; + timestampChars[20] = '0'; + timestampChars[21] = '0'; + timestampChars[22] = '0'; + timestampChars[23] = '0'; + timestampChars[24] = '0'; + timestampChars[25] = '0'; + + byte[] timestampBytes = (new String(timestampChars)).getBytes(); + System.arraycopy(timestampBytes, 0, buffer, offset, DateTime.timestampRepresentationLength); + + return DateTime.timestampRepresentationLength; + } }
infrastructure at apache.org | ViewVC Help |
Powered by ViewVC 1.1.26 |