2024-06-06 21:19:28 +00:00
|
|
|
SET session_timezone = 'UTC'; -- disable timezone randomization
|
2024-07-12 12:49:26 +00:00
|
|
|
SET enable_analyzer = 1; -- The old path formats the result with different whitespaces
|
2024-11-09 01:49:27 +00:00
|
|
|
SET output_format_pretty_single_large_number_tip_threshold = 0;
|
2024-06-06 21:19:28 +00:00
|
|
|
|
|
|
|
SELECT '-- Negative tests';
|
|
|
|
SELECT snowflakeIDToDateTime(); -- {serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH}
|
|
|
|
SELECT snowflakeIDToDateTime64(); -- {serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH}
|
|
|
|
SELECT snowflakeIDToDateTime('invalid_snowflake'); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime64('invalid_snowflake'); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime(123::UInt64, 'invalid_epoch'); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime64(123::UInt64, 'invalid_epoch'); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime(123::UInt64, materialize(42)); -- {serverError ILLEGAL_COLUMN}
|
|
|
|
SELECT snowflakeIDToDateTime64(123::UInt64, materialize(42)); -- {serverError ILLEGAL_COLUMN}
|
|
|
|
SELECT snowflakeIDToDateTime(123::UInt64, 42, 42); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime64(123::UInt64, 42, 42); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT}
|
|
|
|
SELECT snowflakeIDToDateTime(123::UInt64, 42, 'UTC', 'too_many_args'); -- {serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH}
|
|
|
|
SELECT snowflakeIDToDateTime64(123::UInt64, 42, 'UTC', 'too_many_args'); -- {serverError NUMBER_OF_ARGUMENTS_DOESNT_MATCH}
|
|
|
|
|
|
|
|
SELECT '-- Return type';
|
|
|
|
SELECT toTypeName(snowflakeIDToDateTime(123::UInt64));
|
|
|
|
SELECT toTypeName(snowflakeIDToDateTime64(123::UInt64));
|
|
|
|
|
|
|
|
SELECT '-- Non-const path';
|
|
|
|
-- Two const arguments are mapped to two non-const arguments ('getDefaultImplementationForConstants'), the non-const path is taken
|
|
|
|
|
|
|
|
WITH
|
|
|
|
7204436857747984384 AS sf
|
|
|
|
SELECT
|
|
|
|
sf,
|
|
|
|
snowflakeIDToDateTime(sf) as dt,
|
|
|
|
snowflakeIDToDateTime64(sf) as dt64
|
|
|
|
FORMAT
|
|
|
|
Vertical;
|
|
|
|
|
|
|
|
-- With Twitter Snowflake ID and Twitter epoch
|
|
|
|
WITH
|
|
|
|
1426981498778550272 AS sf,
|
|
|
|
1288834974657 AS epoch
|
|
|
|
SELECT
|
|
|
|
sf,
|
|
|
|
snowflakeIDToDateTime(sf, epoch) as dt,
|
|
|
|
snowflakeIDToDateTime64(sf, epoch) as dt64
|
|
|
|
FORMAT
|
|
|
|
Vertical;
|
|
|
|
|
|
|
|
-- non-default timezone
|
|
|
|
WITH
|
|
|
|
7204436857747984384 AS sf,
|
|
|
|
0 AS epoch, -- default epoch
|
|
|
|
'Asia/Shanghai' AS tz
|
|
|
|
SELECT
|
|
|
|
sf,
|
|
|
|
snowflakeIDToDateTime(sf, epoch, tz) as dt,
|
|
|
|
snowflakeIDToDateTime64(sf, epoch, tz) as dt64
|
|
|
|
FORMAT
|
|
|
|
Vertical;
|
|
|
|
|
|
|
|
SELECT '-- Const path';
|
|
|
|
|
|
|
|
-- The const path can only be tested by const snowflake + const epoch + non-const time-zone. The latter requires a special setting.
|
|
|
|
WITH
|
|
|
|
7204436857747984384 AS sf,
|
|
|
|
0 AS epoch, -- default epoch
|
|
|
|
materialize('Asia/Shanghai') AS tz
|
|
|
|
SELECT
|
|
|
|
sf,
|
|
|
|
snowflakeIDToDateTime(sf, epoch, tz) as dt,
|
|
|
|
snowflakeIDToDateTime64(sf, epoch, tz) as dt64
|
|
|
|
FORMAT
|
|
|
|
Vertical
|
|
|
|
SETTINGS
|
|
|
|
allow_nonconst_timezone_arguments = 1;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT '-- Can be combined with generateSnowflakeID';
|
|
|
|
|
|
|
|
WITH
|
|
|
|
generateSnowflakeID() AS snowflake
|
|
|
|
SELECT
|
|
|
|
snowflakeIDToDateTime(snowflake),
|
|
|
|
snowflakeIDToDateTime64(snowflake)
|
|
|
|
FORMAT
|
|
|
|
Null;
|