Search in sources :

Example 36 with ValueDate

use of org.h2.value.ValueDate in project SpringStudy by myounghaklee.

the class TestDate method testValueDate.

private void testValueDate() {
    assertEquals("2000-01-01", LegacyDateTimeUtils.fromDate(null, null, Date.valueOf("2000-01-01")).getString());
    assertEquals("0000-00-00", ValueDate.fromDateValue(0).getString());
    assertEquals("9999-12-31", ValueDate.parse("9999-12-31").getString());
    assertEquals("-9999-12-31", ValueDate.parse("-9999-12-31").getString());
    ValueDate d1 = ValueDate.parse("2001-01-01");
    assertEquals("2001-01-01", LegacyDateTimeUtils.toDate(null, null, d1).toString());
    assertEquals("DATE '2001-01-01'", d1.getTraceSQL());
    assertEquals("DATE '2001-01-01'", d1.toString());
    assertEquals(Value.DATE, d1.getValueType());
    long dv = d1.getDateValue();
    assertEquals((int) ((dv >>> 32) ^ dv), d1.hashCode());
    TypeInfo type = d1.getType();
    assertEquals(d1.getString().length(), type.getDisplaySize());
    assertEquals(ValueDate.PRECISION, type.getPrecision());
    ValueDate d1b = ValueDate.parse("2001-01-01");
    assertTrue(d1 == d1b);
    Value.clearCache();
    d1b = ValueDate.parse("2001-01-01");
    assertFalse(d1 == d1b);
    assertTrue(d1.equals(d1));
    assertTrue(d1.equals(d1b));
    assertTrue(d1b.equals(d1));
    assertEquals(0, d1.compareTo(d1b, null, null));
    assertEquals(0, d1b.compareTo(d1, null, null));
    ValueDate d2 = ValueDate.parse("2002-02-02");
    assertFalse(d1.equals(d2));
    assertFalse(d2.equals(d1));
    assertEquals(-1, d1.compareTo(d2, null, null));
    assertEquals(1, d2.compareTo(d1, null, null));
}
Also used : ValueDate(org.h2.value.ValueDate) TypeInfo(org.h2.value.TypeInfo)

Example 37 with ValueDate

use of org.h2.value.ValueDate in project SpringStudy by myounghaklee.

the class ValueDataType method write.

@Override
public void write(WriteBuffer buff, Value v) {
    if (v == ValueNull.INSTANCE) {
        buff.put((byte) 0);
        return;
    }
    int type = v.getValueType();
    switch(type) {
        case Value.BOOLEAN:
            buff.put(v.getBoolean() ? BOOLEAN_TRUE : BOOLEAN_FALSE);
            break;
        case Value.TINYINT:
            buff.put(TINYINT).put(v.getByte());
            break;
        case Value.SMALLINT:
            buff.put(SMALLINT).putShort(v.getShort());
            break;
        case Value.ENUM:
        case Value.INTEGER:
            {
                int x = v.getInt();
                if (x < 0) {
                    buff.put(INT_NEG).putVarInt(-x);
                } else if (x < 16) {
                    buff.put((byte) (INT_0_15 + x));
                } else {
                    buff.put(type == Value.INTEGER ? INTEGER : ENUM).putVarInt(x);
                }
                break;
            }
        case Value.BIGINT:
            writeLong(buff, v.getLong());
            break;
        case Value.NUMERIC:
            {
                BigDecimal x = v.getBigDecimal();
                if (BigDecimal.ZERO.equals(x)) {
                    buff.put(NUMERIC_0_1);
                } else if (BigDecimal.ONE.equals(x)) {
                    buff.put((byte) (NUMERIC_0_1 + 1));
                } else {
                    int scale = x.scale();
                    BigInteger b = x.unscaledValue();
                    int bits = b.bitLength();
                    if (bits <= 63) {
                        if (scale == 0) {
                            buff.put(NUMERIC_SMALL_0).putVarLong(b.longValue());
                        } else {
                            buff.put(NUMERIC_SMALL).putVarInt(scale).putVarLong(b.longValue());
                        }
                    } else {
                        byte[] bytes = b.toByteArray();
                        buff.put(NUMERIC).putVarInt(scale).putVarInt(bytes.length).put(bytes);
                    }
                }
                break;
            }
        case Value.DECFLOAT:
            {
                ValueDecfloat d = (ValueDecfloat) v;
                buff.put((byte) DECFLOAT);
                if (d.isFinite()) {
                    BigDecimal x = d.getBigDecimal();
                    byte[] bytes = x.unscaledValue().toByteArray();
                    buff.putVarInt(x.scale()).putVarInt(bytes.length).put(bytes);
                } else {
                    int c;
                    if (d == ValueDecfloat.NEGATIVE_INFINITY) {
                        c = -3;
                    } else if (d == ValueDecfloat.POSITIVE_INFINITY) {
                        c = -2;
                    } else {
                        c = -1;
                    }
                    buff.putVarInt(0).putVarInt(c);
                }
                break;
            }
        case Value.TIME:
            writeTimestampTime(buff.put(TIME), ((ValueTime) v).getNanos());
            break;
        case Value.TIME_TZ:
            {
                ValueTimeTimeZone t = (ValueTimeTimeZone) v;
                long nanosOfDay = t.getNanos();
                buff.put((byte) TIME_TZ).putVarInt((int) (nanosOfDay / DateTimeUtils.NANOS_PER_SECOND)).putVarInt((int) (nanosOfDay % DateTimeUtils.NANOS_PER_SECOND));
                writeTimeZone(buff, t.getTimeZoneOffsetSeconds());
                break;
            }
        case Value.DATE:
            buff.put(DATE).putVarLong(((ValueDate) v).getDateValue());
            break;
        case Value.TIMESTAMP:
            {
                ValueTimestamp ts = (ValueTimestamp) v;
                buff.put(TIMESTAMP).putVarLong(ts.getDateValue());
                writeTimestampTime(buff, ts.getTimeNanos());
                break;
            }
        case Value.TIMESTAMP_TZ:
            {
                ValueTimestampTimeZone ts = (ValueTimestampTimeZone) v;
                buff.put((byte) TIMESTAMP_TZ).putVarLong(ts.getDateValue());
                writeTimestampTime(buff, ts.getTimeNanos());
                writeTimeZone(buff, ts.getTimeZoneOffsetSeconds());
                break;
            }
        case Value.JAVA_OBJECT:
            writeBinary(JAVA_OBJECT, buff, v);
            break;
        case Value.VARBINARY:
            {
                byte[] b = v.getBytesNoCopy();
                int len = b.length;
                if (len < 32) {
                    buff.put((byte) (VARBINARY_0_31 + len)).put(b);
                } else {
                    buff.put(VARBINARY).putVarInt(len).put(b);
                }
                break;
            }
        case Value.BINARY:
            writeBinary((byte) BINARY, buff, v);
            break;
        case Value.UUID:
            {
                ValueUuid uuid = (ValueUuid) v;
                buff.put(UUID).putLong(uuid.getHigh()).putLong(uuid.getLow());
                break;
            }
        case Value.VARCHAR:
            {
                String s = v.getString();
                int len = s.length();
                if (len < 32) {
                    buff.put((byte) (VARCHAR_0_31 + len)).putStringData(s, len);
                } else {
                    writeString(buff.put(VARCHAR), s);
                }
                break;
            }
        case Value.VARCHAR_IGNORECASE:
            writeString(buff.put(VARCHAR_IGNORECASE), v.getString());
            break;
        case Value.CHAR:
            writeString(buff.put(CHAR), v.getString());
            break;
        case Value.DOUBLE:
            {
                double x = v.getDouble();
                if (x == 1.0d) {
                    buff.put((byte) (DOUBLE_0_1 + 1));
                } else {
                    long d = Double.doubleToLongBits(x);
                    if (d == ValueDouble.ZERO_BITS) {
                        buff.put(DOUBLE_0_1);
                    } else {
                        buff.put(DOUBLE).putVarLong(Long.reverse(d));
                    }
                }
                break;
            }
        case Value.REAL:
            {
                float x = v.getFloat();
                if (x == 1.0f) {
                    buff.put((byte) (REAL_0_1 + 1));
                } else {
                    int f = Float.floatToIntBits(x);
                    if (f == ValueReal.ZERO_BITS) {
                        buff.put(REAL_0_1);
                    } else {
                        buff.put(REAL).putVarInt(Integer.reverse(f));
                    }
                }
                break;
            }
        case Value.BLOB:
            {
                buff.put(BLOB);
                ValueBlob lob = (ValueBlob) v;
                LobData lobData = lob.getLobData();
                if (lobData instanceof LobDataDatabase) {
                    LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
                    buff.putVarInt(-3).putVarInt(lobDataDatabase.getTableId()).putVarLong(lobDataDatabase.getLobId()).putVarLong(lob.octetLength());
                } else {
                    byte[] small = ((LobDataInMemory) lobData).getSmall();
                    buff.putVarInt(small.length).put(small);
                }
                break;
            }
        case Value.CLOB:
            {
                buff.put(CLOB);
                ValueClob lob = (ValueClob) v;
                LobData lobData = lob.getLobData();
                if (lobData instanceof LobDataDatabase) {
                    LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
                    buff.putVarInt(-3).putVarInt(lobDataDatabase.getTableId()).putVarLong(lobDataDatabase.getLobId()).putVarLong(lob.octetLength()).putVarLong(lob.charLength());
                } else {
                    byte[] small = ((LobDataInMemory) lobData).getSmall();
                    buff.putVarInt(small.length).put(small).putVarLong(lob.charLength());
                }
                break;
            }
        case Value.ARRAY:
        case Value.ROW:
            {
                Value[] list = ((ValueCollectionBase) v).getList();
                buff.put(type == Value.ARRAY ? ARRAY : ROW).putVarInt(list.length);
                for (Value x : list) {
                    write(buff, x);
                }
                break;
            }
        case Value.GEOMETRY:
            writeBinary(GEOMETRY, buff, v);
            break;
        case Value.INTERVAL_YEAR:
        case Value.INTERVAL_MONTH:
        case Value.INTERVAL_DAY:
        case Value.INTERVAL_HOUR:
        case Value.INTERVAL_MINUTE:
            {
                ValueInterval interval = (ValueInterval) v;
                int ordinal = type - Value.INTERVAL_YEAR;
                if (interval.isNegative()) {
                    ordinal = ~ordinal;
                }
                buff.put(INTERVAL).put((byte) ordinal).putVarLong(interval.getLeading());
                break;
            }
        case Value.INTERVAL_SECOND:
        case Value.INTERVAL_YEAR_TO_MONTH:
        case Value.INTERVAL_DAY_TO_HOUR:
        case Value.INTERVAL_DAY_TO_MINUTE:
        case Value.INTERVAL_DAY_TO_SECOND:
        case Value.INTERVAL_HOUR_TO_MINUTE:
        case Value.INTERVAL_HOUR_TO_SECOND:
        case Value.INTERVAL_MINUTE_TO_SECOND:
            {
                ValueInterval interval = (ValueInterval) v;
                int ordinal = type - Value.INTERVAL_YEAR;
                if (interval.isNegative()) {
                    ordinal = ~ordinal;
                }
                buff.put(INTERVAL).put((byte) (ordinal)).putVarLong(interval.getLeading()).putVarLong(interval.getRemaining());
                break;
            }
        case Value.JSON:
            writeBinary((byte) JSON, buff, v);
            break;
        default:
            throw DbException.getInternalError("type=" + v.getValueType());
    }
}
Also used : LobData(org.h2.value.lob.LobData) ValueUuid(org.h2.value.ValueUuid) LobDataDatabase(org.h2.value.lob.LobDataDatabase) ValueTimestampTimeZone(org.h2.value.ValueTimestampTimeZone) ValueBlob(org.h2.value.ValueBlob) ValueTimeTimeZone(org.h2.value.ValueTimeTimeZone) DataUtils.readString(org.h2.mvstore.DataUtils.readString) ValueClob(org.h2.value.ValueClob) ValueInterval(org.h2.value.ValueInterval) ValueBigint(org.h2.value.ValueBigint) ValueTinyint(org.h2.value.ValueTinyint) ValueSmallint(org.h2.value.ValueSmallint) BigDecimal(java.math.BigDecimal) ValueDecfloat(org.h2.value.ValueDecfloat) ValueTimestamp(org.h2.value.ValueTimestamp) Value(org.h2.value.Value) BigInteger(java.math.BigInteger)

Example 38 with ValueDate

use of org.h2.value.ValueDate in project SpringStudy by myounghaklee.

the class Percentile method interpolate.

private static Value interpolate(Value v0, Value v1, BigDecimal factor, int dataType, SessionLocal session, CompareMode compareMode) {
    if (v0.compareTo(v1, session, compareMode) == 0) {
        return v0;
    }
    switch(dataType) {
        case Value.TINYINT:
        case Value.SMALLINT:
        case Value.INTEGER:
            return ValueNumeric.get(interpolateDecimal(BigDecimal.valueOf(v0.getInt()), BigDecimal.valueOf(v1.getInt()), factor));
        case Value.BIGINT:
            return ValueNumeric.get(interpolateDecimal(BigDecimal.valueOf(v0.getLong()), BigDecimal.valueOf(v1.getLong()), factor));
        case Value.NUMERIC:
        case Value.DECFLOAT:
            return ValueNumeric.get(interpolateDecimal(v0.getBigDecimal(), v1.getBigDecimal(), factor));
        case Value.REAL:
        case Value.DOUBLE:
            return ValueNumeric.get(interpolateDecimal(BigDecimal.valueOf(v0.getDouble()), BigDecimal.valueOf(v1.getDouble()), factor));
        case Value.TIME:
            {
                ValueTime t0 = (ValueTime) v0, t1 = (ValueTime) v1;
                BigDecimal n0 = BigDecimal.valueOf(t0.getNanos());
                BigDecimal n1 = BigDecimal.valueOf(t1.getNanos());
                return ValueTime.fromNanos(interpolateDecimal(n0, n1, factor).longValue());
            }
        case Value.TIME_TZ:
            {
                ValueTimeTimeZone t0 = (ValueTimeTimeZone) v0, t1 = (ValueTimeTimeZone) v1;
                BigDecimal n0 = BigDecimal.valueOf(t0.getNanos());
                BigDecimal n1 = BigDecimal.valueOf(t1.getNanos());
                BigDecimal offset = BigDecimal.valueOf(t0.getTimeZoneOffsetSeconds()).multiply(BigDecimal.ONE.subtract(factor)).add(BigDecimal.valueOf(t1.getTimeZoneOffsetSeconds()).multiply(factor));
                int intOffset = offset.intValue();
                BigDecimal intOffsetBD = BigDecimal.valueOf(intOffset);
                BigDecimal bd = interpolateDecimal(n0, n1, factor);
                if (offset.compareTo(intOffsetBD) != 0) {
                    bd = bd.add(offset.subtract(intOffsetBD).multiply(BigDecimal.valueOf(DateTimeUtils.NANOS_PER_SECOND)));
                }
                long timeNanos = bd.longValue();
                if (timeNanos < 0L) {
                    timeNanos += DateTimeUtils.NANOS_PER_SECOND;
                    intOffset++;
                } else if (timeNanos >= DateTimeUtils.NANOS_PER_DAY) {
                    timeNanos -= DateTimeUtils.NANOS_PER_SECOND;
                    intOffset--;
                }
                return ValueTimeTimeZone.fromNanos(timeNanos, intOffset);
            }
        case Value.DATE:
            {
                ValueDate d0 = (ValueDate) v0, d1 = (ValueDate) v1;
                BigDecimal a0 = BigDecimal.valueOf(DateTimeUtils.absoluteDayFromDateValue(d0.getDateValue()));
                BigDecimal a1 = BigDecimal.valueOf(DateTimeUtils.absoluteDayFromDateValue(d1.getDateValue()));
                return ValueDate.fromDateValue(DateTimeUtils.dateValueFromAbsoluteDay(interpolateDecimal(a0, a1, factor).longValue()));
            }
        case Value.TIMESTAMP:
            {
                ValueTimestamp ts0 = (ValueTimestamp) v0, ts1 = (ValueTimestamp) v1;
                BigDecimal a0 = timestampToDecimal(ts0.getDateValue(), ts0.getTimeNanos());
                BigDecimal a1 = timestampToDecimal(ts1.getDateValue(), ts1.getTimeNanos());
                BigInteger[] dr = interpolateDecimal(a0, a1, factor).toBigInteger().divideAndRemainder(IntervalUtils.NANOS_PER_DAY_BI);
                long absoluteDay = dr[0].longValue();
                long timeNanos = dr[1].longValue();
                if (timeNanos < 0) {
                    timeNanos += DateTimeUtils.NANOS_PER_DAY;
                    absoluteDay--;
                }
                return ValueTimestamp.fromDateValueAndNanos(DateTimeUtils.dateValueFromAbsoluteDay(absoluteDay), timeNanos);
            }
        case Value.TIMESTAMP_TZ:
            {
                ValueTimestampTimeZone ts0 = (ValueTimestampTimeZone) v0, ts1 = (ValueTimestampTimeZone) v1;
                BigDecimal a0 = timestampToDecimal(ts0.getDateValue(), ts0.getTimeNanos());
                BigDecimal a1 = timestampToDecimal(ts1.getDateValue(), ts1.getTimeNanos());
                BigDecimal offset = BigDecimal.valueOf(ts0.getTimeZoneOffsetSeconds()).multiply(BigDecimal.ONE.subtract(factor)).add(BigDecimal.valueOf(ts1.getTimeZoneOffsetSeconds()).multiply(factor));
                int intOffset = offset.intValue();
                BigDecimal intOffsetBD = BigDecimal.valueOf(intOffset);
                BigDecimal bd = interpolateDecimal(a0, a1, factor);
                if (offset.compareTo(intOffsetBD) != 0) {
                    bd = bd.add(offset.subtract(intOffsetBD).multiply(BigDecimal.valueOf(DateTimeUtils.NANOS_PER_SECOND)));
                }
                BigInteger[] dr = bd.toBigInteger().divideAndRemainder(IntervalUtils.NANOS_PER_DAY_BI);
                long absoluteDay = dr[0].longValue();
                long timeNanos = dr[1].longValue();
                if (timeNanos < 0) {
                    timeNanos += DateTimeUtils.NANOS_PER_DAY;
                    absoluteDay--;
                }
                return ValueTimestampTimeZone.fromDateValueAndNanos(DateTimeUtils.dateValueFromAbsoluteDay(absoluteDay), timeNanos, intOffset);
            }
        case Value.INTERVAL_YEAR:
        case Value.INTERVAL_MONTH:
        case Value.INTERVAL_DAY:
        case Value.INTERVAL_HOUR:
        case Value.INTERVAL_MINUTE:
        case Value.INTERVAL_SECOND:
        case Value.INTERVAL_YEAR_TO_MONTH:
        case Value.INTERVAL_DAY_TO_HOUR:
        case Value.INTERVAL_DAY_TO_MINUTE:
        case Value.INTERVAL_DAY_TO_SECOND:
        case Value.INTERVAL_HOUR_TO_MINUTE:
        case Value.INTERVAL_HOUR_TO_SECOND:
        case Value.INTERVAL_MINUTE_TO_SECOND:
            return IntervalUtils.intervalFromAbsolute(IntervalQualifier.valueOf(dataType - Value.INTERVAL_YEAR), interpolateDecimal(new BigDecimal(IntervalUtils.intervalToAbsolute((ValueInterval) v0)), new BigDecimal(IntervalUtils.intervalToAbsolute((ValueInterval) v1)), factor).toBigInteger());
        default:
            // Use the same rules as PERCENTILE_DISC
            return (factor.compareTo(HALF) > 0 ? v1 : v0);
    }
}
Also used : ValueTime(org.h2.value.ValueTime) ValueTimestamp(org.h2.value.ValueTimestamp) ValueTimestampTimeZone(org.h2.value.ValueTimestampTimeZone) ValueDate(org.h2.value.ValueDate) ValueTimeTimeZone(org.h2.value.ValueTimeTimeZone) BigDecimal(java.math.BigDecimal)

Example 39 with ValueDate

use of org.h2.value.ValueDate in project gridgain by gridgain.

the class TestDate method testDateTimeUtils.

private void testDateTimeUtils() {
    ValueTimestamp ts1 = ValueTimestamp.parse("-999-08-07 13:14:15.16");
    ValueTimestamp ts2 = ValueTimestamp.parse("19999-08-07 13:14:15.16");
    ValueTime t1 = (ValueTime) ts1.convertTo(Value.TIME);
    ValueTime t2 = (ValueTime) ts2.convertTo(Value.TIME);
    ValueDate d1 = (ValueDate) ts1.convertTo(Value.DATE);
    ValueDate d2 = (ValueDate) ts2.convertTo(Value.DATE);
    assertEquals("-999-08-07 13:14:15.16", ts1.getString());
    assertEquals("-999-08-07", d1.getString());
    assertEquals("13:14:15.16", t1.getString());
    assertEquals("19999-08-07 13:14:15.16", ts2.getString());
    assertEquals("19999-08-07", d2.getString());
    assertEquals("13:14:15.16", t2.getString());
    ValueTimestamp ts1a = DateTimeUtils.convertTimestamp(ts1.getTimestamp(), DateTimeUtils.createGregorianCalendar());
    ValueTimestamp ts2a = DateTimeUtils.convertTimestamp(ts2.getTimestamp(), DateTimeUtils.createGregorianCalendar());
    assertEquals("-999-08-07 13:14:15.16", ts1a.getString());
    assertEquals("19999-08-07 13:14:15.16", ts2a.getString());
    // test for bug on Java 1.8.0_60 in "Europe/Moscow" timezone.
    // Doesn't affect most other timezones
    long millis = 1407437460000L;
    long ms = DateTimeUtils.getTimeUTCWithoutDst(millis);
    ms += DateTimeUtils.getTimeZoneOffset(ms);
    long result1 = DateTimeUtils.nanosFromLocalMillis(ms);
    long result2 = DateTimeUtils.nanosFromLocalMillis(ms);
    assertEquals(result1, result2);
}
Also used : ValueTime(org.gridgain.internal.h2.value.ValueTime) ValueTimestamp(org.gridgain.internal.h2.value.ValueTimestamp) ValueDate(org.gridgain.internal.h2.value.ValueDate)

Example 40 with ValueDate

use of org.h2.value.ValueDate in project gridgain by gridgain.

the class DateTimeUtils method convertDate.

/**
 * Convert the date to the specified time zone.
 *
 * @param value the date (might be ValueNull)
 * @param calendar the calendar
 * @return the date using the correct time zone
 */
public static Date convertDate(Value value, Calendar calendar) {
    if (value == ValueNull.INSTANCE) {
        return null;
    }
    ValueDate d = (ValueDate) value.convertTo(Value.DATE);
    Calendar cal = (Calendar) calendar.clone();
    cal.clear();
    cal.setLenient(true);
    long dateValue = d.getDateValue();
    long ms = convertToMillis(cal, yearFromDateValue(dateValue), monthFromDateValue(dateValue), dayFromDateValue(dateValue), 0, 0, 0, 0);
    return new Date(ms);
}
Also used : GregorianCalendar(java.util.GregorianCalendar) Calendar(java.util.Calendar) ValueDate(org.gridgain.internal.h2.value.ValueDate) Date(java.sql.Date) ValueDate(org.gridgain.internal.h2.value.ValueDate)

Aggregations

ValueDate (org.h2.value.ValueDate)23 ValueTimestamp (org.h2.value.ValueTimestamp)23 ValueTimestampTimeZone (org.h2.value.ValueTimestampTimeZone)23 ValueTime (org.h2.value.ValueTime)22 ValueTimeTimeZone (org.h2.value.ValueTimeTimeZone)18 Value (org.h2.value.Value)15 BigDecimal (java.math.BigDecimal)13 BigInteger (java.math.BigInteger)11 ValueDate (org.gridgain.internal.h2.value.ValueDate)9 ValueInterval (org.h2.value.ValueInterval)9 ValueTime (org.gridgain.internal.h2.value.ValueTime)6 ValueTimestamp (org.gridgain.internal.h2.value.ValueTimestamp)5 ValueBigint (org.h2.value.ValueBigint)5 ValueTimestampTimeZone (org.gridgain.internal.h2.value.ValueTimestampTimeZone)4 ValueSmallint (org.h2.value.ValueSmallint)4 ValueUuid (org.h2.value.ValueUuid)4 ResultSet (java.sql.ResultSet)3 SQLException (java.sql.SQLException)3 Value (org.gridgain.internal.h2.value.Value)3 SimpleResultSet (org.h2.tools.SimpleResultSet)3