clickhouse-java
clickhouse-java copied to clipboard
DateTime/Date limits not compatible with CH server limits
DATETIME64_MAX = LocalDateTime.of(LocalDate.of(2283, 11, 11), LocalTime.MAX).toEpochSecond(ZoneOffset.UTC);
In Java 11, the nanosecond part is lost because of converting to LocalDateTime, maybe it should be kept as Instant.
Also the limits for DATETIME64 and DATE does not align with the latest CH server limits, is there a strategy to support limits that change across server versions?
DATETIME64_MAX = LocalDateTime.of(LocalDate.of(2283, 11, 11), LocalTime.MAX).toEpochSecond(ZoneOffset.UTC);
DATETIME64_MIN = LocalDateTime.of(LocalDate.of(1925, 1, 1), LocalTime.MIN).toEpochSecond(ZoneOffset.UTC);
public static final int DATE32_MAX = (int)LocalDate.of(2283, 11, 11).toEpochDay();
public static final int DATE32_MIN = (int)LocalDate.of(1925, 1, 1).toEpochDay();
Supported range of values: [1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999] https://clickhouse.com/docs/en/sql-reference/data-types/datetime64/
Thanks @subkanthi. And the upper limit is different when scale is 9 🤦
As to support limits across server versions, I'm not sure if it's worthy of doing that, but let me investigate once I completed refactoring.
I can take a shot at fixing the MAX value if it's OK, recently have been looking at a lot of java datetime classes
Thanks for helping, that'd be great! I'm refactoring *Value classes and data processors to better support unsigned types along with performance improvement of handling arrays and tuples. There's no conflict if the changes are mainly about Date & DateTime.
There is no any issue with scale (8/9) for Date32 but DATE32_MIN and DATE32_MAX are out of supported by ClickHouse range [1900-01-01, 2299-12-31]. BTW attached pull request is for DateTime64 only and won't close Date32 issue.