mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
Improve generateRandom() for Date32; fix tests 01087_table_function_generate, 01277_fromUnixTimestamp64, 01691_DateTime64_clamp and 01702_toDateTime_from_string_clamping
This commit is contained in:
parent
0b102c6d1f
commit
b412ea5f6d
@ -19,8 +19,10 @@
|
||||
#define DATE_LUT_MAX (0xFFFFFFFFU - 86400)
|
||||
#define DATE_LUT_MAX_DAY_NUM 0xFFFF
|
||||
|
||||
#define DAYNUM_OFFSET_EPOCH 25567
|
||||
|
||||
/// Max int value of Date32, DATE LUT cache size minus daynum_offset_epoch
|
||||
#define DATE_LUT_MAX_EXTEND_DAY_NUM (DATE_LUT_SIZE - 25567)
|
||||
#define DATE_LUT_MAX_EXTEND_DAY_NUM (DATE_LUT_SIZE - DAYNUM_OFFSET_EPOCH)
|
||||
|
||||
/// A constant to add to time_t so every supported time point becomes non-negative and still has the same remainder of division by 3600.
|
||||
/// If we treat "remainder of division" operation in the sense of modular arithmetic (not like in C++).
|
||||
|
@ -538,7 +538,7 @@ template <typename Name> struct ConvertImpl<DataTypeFloat64, DataTypeDateTime, N
|
||||
|
||||
const time_t LUT_MIN_TIME = -2208988800l; // 1900-01-01 UTC
|
||||
|
||||
const time_t LUT_MAX_TIME = 10382256000l; // 2299-12-31 UTC
|
||||
const time_t LUT_MAX_TIME = 10413791999l; // 2299-12-31 UTC
|
||||
|
||||
/** Conversion of numeric to DateTime64
|
||||
*/
|
||||
|
@ -220,7 +220,10 @@ ColumnPtr fillColumnWithRandomData(
|
||||
{
|
||||
auto column = ColumnInt32::create();
|
||||
column->getData().resize(limit);
|
||||
fillBufferWithRandomData(reinterpret_cast<char *>(column->getData().data()), limit * sizeof(Int32), rng);
|
||||
|
||||
for (size_t i = 0; i < limit; ++i)
|
||||
column->getData()[i] = (rng() % static_cast<UInt64>(DATE_LUT_SIZE)) - DAYNUM_OFFSET_EPOCH;
|
||||
|
||||
return column;
|
||||
}
|
||||
case TypeIndex::UInt32: [[fallthrough]];
|
||||
|
@ -70,16 +70,16 @@ DateTime64(3, \'UTC\') DateTime64(6, \'UTC\') DateTime64(6, \'UTC\')
|
||||
1992-12-28 09:26:04.030 1971-07-29 06:20:38.230976 1980-03-26 15:49:55.428516
|
||||
2051-12-11 07:09:13.162 1982-01-12 00:25:45.754492 2010-05-17 07:01:28.452864
|
||||
Date32
|
||||
1934-01-06
|
||||
2039-08-16
|
||||
2103-11-03
|
||||
2064-08-14
|
||||
2187-08-21
|
||||
2099-04-08
|
||||
1947-06-22
|
||||
2012-01-19
|
||||
2170-07-09
|
||||
2263-01-17
|
||||
2120-04-24
|
||||
1908-10-02
|
||||
2105-09-04
|
||||
2129-03-23
|
||||
1921-04-05
|
||||
2020-04-14
|
||||
2251-12-25
|
||||
2266-03-27
|
||||
2161-02-18
|
||||
2172-07-24
|
||||
-
|
||||
Float32 Float64
|
||||
-1.3551149e32 1.2262973812461839e235
|
||||
|
@ -4,6 +4,6 @@ Asia/Makassar 1234567891011 2009-02-14 07:31:31.011 1970-01-15 14:56:07.891011 1
|
||||
non-const column
|
||||
1234567891011 2009-02-13 23:31:31.011 1970-01-15 06:56:07.891011 1970-01-01 00:20:34.567891011
|
||||
upper range bound
|
||||
9904447342 2283-11-10 19:22:22.123 2283-11-10 19:22:22.123456 1925-01-01 00:00:00.413905173
|
||||
10413688942 2299-12-30 19:22:22.123 2299-12-30 19:22:22.123456 1900-01-01 00:00:00.413905173
|
||||
lower range bound
|
||||
-1420066799 1925-01-01 01:00:00.877 1925-01-01 01:00:00.876544 1925-01-01 01:00:00.876543211
|
||||
-2208985199 1900-01-01 01:00:00.877 1900-01-01 01:00:00.876544 1900-01-01 01:00:00.876543211
|
||||
|
@ -46,10 +46,10 @@ SELECT
|
||||
|
||||
SELECT 'upper range bound';
|
||||
WITH
|
||||
9904447342 AS timestamp,
|
||||
CAST(9904447342123 AS Int64) AS milli,
|
||||
CAST(9904447342123456 AS Int64) AS micro,
|
||||
CAST(9904447342123456789 AS Int64) AS nano,
|
||||
10413688942 AS timestamp,
|
||||
CAST(10413688942123 AS Int64) AS milli,
|
||||
CAST(10413688942123456 AS Int64) AS micro,
|
||||
CAST(10413688942123456789 AS Int64) AS nano,
|
||||
'UTC' AS tz
|
||||
SELECT
|
||||
timestamp,
|
||||
@ -59,13 +59,13 @@ SELECT
|
||||
|
||||
SELECT 'lower range bound';
|
||||
WITH
|
||||
-1420066799 AS timestamp,
|
||||
CAST(-1420066799123 AS Int64) AS milli,
|
||||
CAST(-1420066799123456 AS Int64) AS micro,
|
||||
CAST(-1420066799123456789 AS Int64) AS nano,
|
||||
-2208985199 AS timestamp,
|
||||
CAST(-2208985199123 AS Int64) AS milli,
|
||||
CAST(-2208985199123456 AS Int64) AS micro,
|
||||
CAST(-2208985199123456789 AS Int64) AS nano,
|
||||
'UTC' AS tz
|
||||
SELECT
|
||||
timestamp,
|
||||
fromUnixTimestamp64Milli(milli, tz),
|
||||
fromUnixTimestamp64Micro(micro, tz),
|
||||
fromUnixTimestamp64Nano(nano, tz);
|
||||
fromUnixTimestamp64Nano(nano, tz);
|
||||
|
@ -18,10 +18,10 @@ SELECT toDateTime64(toFloat32(bitShiftLeft(toUInt64(1),33)), 2, 'Asia/Istanbul')
|
||||
SELECT toDateTime64(toFloat64(bitShiftLeft(toUInt64(1),33)), 2, 'Asia/Istanbul') FORMAT Null;
|
||||
-- These are outsize of extended range and hence clamped
|
||||
SELECT toDateTime64(-1 * bitShiftLeft(toUInt64(1), 35), 2, 'Asia/Istanbul');
|
||||
1925-01-01 02:00:00.00
|
||||
1900-01-01 01:56:56.00
|
||||
SELECT CAST(-1 * bitShiftLeft(toUInt64(1), 35) AS DateTime64(3, 'Asia/Istanbul'));
|
||||
1925-01-01 02:00:00.000
|
||||
1900-01-01 01:56:56.000
|
||||
SELECT CAST(bitShiftLeft(toUInt64(1), 35) AS DateTime64(3, 'Asia/Istanbul'));
|
||||
2282-12-31 03:00:00.000
|
||||
2299-12-31 23:59:59.000
|
||||
SELECT toDateTime64(bitShiftLeft(toUInt64(1), 35), 2, 'Asia/Istanbul');
|
||||
2282-12-31 03:00:00.00
|
||||
2299-12-31 23:59:59.00
|
||||
|
@ -1,4 +1,4 @@
|
||||
1940-10-09 21:13:17.6
|
||||
2283-11-11 23:46:43.6
|
||||
2283-11-11 23:46:40.1
|
||||
1925-01-01 00:00:00.9
|
||||
2284-06-04 23:46:43.6
|
||||
2299-12-31 23:40:00.1
|
||||
1900-01-01 00:00:00.9
|
||||
|
@ -1,4 +1,4 @@
|
||||
SELECT toString(toDateTime('-922337203.6854775808', 1, 'Asia/Istanbul'));
|
||||
SELECT toString(toDateTime('9922337203.6854775808', 1, 'Asia/Istanbul'));
|
||||
SELECT toDateTime64(CAST('10000000000.1' AS Decimal64(1)), 1, 'Asia/Istanbul');
|
||||
SELECT toDateTime64(CAST('-10000000000.1' AS Decimal64(1)), 1, 'Asia/Istanbul');
|
||||
SELECT toDateTime64(CAST('10500000000.1' AS Decimal64(1)), 1, 'Asia/Istanbul');
|
||||
SELECT toDateTime64(CAST('-10500000000.1' AS Decimal64(1)), 1, 'Asia/Istanbul');
|
||||
|
Loading…
Reference in New Issue
Block a user