提交 40e2d338 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Implement ValueTime.convertScale()

上级 dfc350ac
......@@ -154,6 +154,25 @@ public class ValueTime extends Value {
return DISPLAY_SIZE;
}
@Override
public Value convertScale(boolean onlyToSmallerScale, int targetScale) {
if (targetScale >= MAXIMUM_SCALE) {
return this;
}
if (targetScale < 0) {
throw DbException.getInvalidValueException("scale", targetScale);
}
long n = nanos;
long n2 = DateTimeUtils.convertScale(n, targetScale);
if (n2 == n) {
return this;
}
if (n2 >= DateTimeUtils.NANOS_PER_DAY) {
n2 = DateTimeUtils.NANOS_PER_DAY - 1;
}
return fromNanos(n2);
}
@Override
protected int compareSecure(Value o, CompareMode mode) {
return Long.compare(nanos, ((ValueTime) o).nanos);
......
......@@ -85,7 +85,7 @@ public class SupportedTypes {
s.myString = Long.toHexString(rand.nextLong());
s.myUtilDate = new java.util.Date(rand.nextLong());
s.mySqlDate = new java.sql.Date(rand.nextLong());
s.mySqlTime = new java.sql.Time(rand.nextLong());
s.mySqlTime = new java.sql.Time(rand.nextLong() / 1_000 * 1_000);
s.mySqlTimestamp = new java.sql.Timestamp(rand.nextLong());
return s;
}
......
......@@ -57,3 +57,32 @@ SELECT TIME FROM TEST;
DROP TABLE TEST;
> ok
CREATE TABLE TEST(T TIME, T0 TIME(0), T1 TIME(1), T2 TIME(2), T3 TIME(3), T4 TIME(4), T5 TIME(5), T6 TIME(6),
T7 TIME(7), T8 TIME(8), T9 TIME(9));
> ok
INSERT INTO TEST VALUES ('08:00:00.123456789', '08:00:00.123456789', '08:00:00.123456789', '08:00:00.123456789',
'08:00:00.123456789', '08:00:00.123456789', '08:00:00.123456789', '08:00:00.123456789', '08:00:00.123456789',
'08:00:00.123456789', '08:00:00.123456789');
> update count: 1
SELECT * FROM TEST;
> T T0 T1 T2 T3 T4 T5 T6 T7 T8 T9
> -------- -------- ---------- ----------- ------------ ------------- -------------- --------------- ---------------- ----------------- ------------------
> 08:00:00 08:00:00 08:00:00.1 08:00:00.12 08:00:00.123 08:00:00.1235 08:00:00.12346 08:00:00.123457 08:00:00.1234568 08:00:00.12345679 08:00:00.123456789
> rows: 1
DELETE FROM TEST;
> update count: 1
INSERT INTO TEST(T0) VALUES ('23:59:59.999999999');
> update count: 1
SELECT T0 FROM TEST;
> T0
> ------------------
> 23:59:59.999999999
DROP TABLE TEST;
> ok
......@@ -6927,7 +6927,7 @@ SELECT XD+1, XD-1, XD-XD FROM TEST;
> rows: 4
SELECT ID, CAST(XT AS DATE) T2D, CAST(XTS AS DATE) TS2D,
CAST(XD AS TIME) D2T, CAST(XTS AS TIME) TS2T,
CAST(XD AS TIME) D2T, CAST(XTS AS TIME(9)) TS2T,
CAST(XT AS TIMESTAMP) D2TS, CAST(XD AS TIMESTAMP) D2TS FROM TEST;
> ID T2D TS2D D2T TS2T D2TS D2TS
> ---- ---------- ---------- -------- ------------------ --------------------- ---------------------
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论