should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,315 @@
# name: test/sql/function/timestamp/make_date.test
# description: Test the MAKE_DATE/TIME/TIMESTAMP functions
# group: [timestamp]
statement ok
PRAGMA enable_verification
#
# Dates
#
statement ok
CREATE TABLE IF NOT EXISTS dates (d date);
statement ok
INSERT INTO dates VALUES
(NULL),
('-99999-01-01'),
('-1993-08-14'),
('1992-01-01 (BC)'),
('-1992-01-01'),
('0044-03-15 (BC)'),
('0000-01-01'),
('0020-01-01'),
('1992-01-01'),
('1992-01-20'),
('1992-02-01'),
('1992-02-02'),
('1992-02-12'),
('1992-02-20'),
('1992-03-03'),
('1992-03-20'),
('1992-04-20'),
('1992-05-05'),
('1992-05-20'),
('1992-06-20'),
('1992-07-20'),
('1992-08-20'),
('1992-09-20'),
('1992-10-20'),
('1992-11-20'),
('1992-12-02'),
('1992-12-20'),
('1993-03-20'),
('1993-03-03'),
('1994-05-05'),
('1993-08-14'),
('2000-12-31'),
('2000-02-12'),
('2001-01-01'),
('2007-01-01'),
('2008-01-01'),
('2008-01-02'),
('2008-02-01'),
('2020-08-09'),
('2020-08-10'),
('2020-09-27'),
('99999-01-01')
query I
SELECT d
FROM (SELECT d, make_date(year(d), month(d), day(d)) md FROM dates) tbl
WHERE md IS DISTINCT FROM d;
----
query I
SELECT d
FROM (SELECT d, make_date(date_part(['year', 'month', 'day'], d)) md FROM dates) tbl
WHERE md IS DISTINCT FROM d;
----
# Null parts
query I
SELECT md
FROM (SELECT make_date(NULL, month(d), day(d)) md FROM dates) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (SELECT make_date(year(d), NULL, day(d)) md FROM dates) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (SELECT make_date(year(d), month(d), NULL) md FROM dates) t
WHERE md IS NOT NULL
----
# round trip
query I
SELECT *
FROM dates
WHERE d <> make_date((d - date '1970-01-01')::INT)
----
# Constants
query IIII
SELECT
make_date(2021, 12, 30),
make_date(NULL, 12, 30),
make_date(2021, NULL, 30),
make_date(2021, 12, NULL)
;
----
2021-12-30 NULL NULL NULL
#
# Timestamps
#
statement ok
CREATE TABLE timestamps(ts TIMESTAMP)
statement ok
INSERT INTO timestamps VALUES
('1001-03-15 (BC) 20:38:40'),
('0044-03-15 (BC) 20:38:40'),
('1962-07-31 12:20:48.123456'),
('1969-01-01 01:03:20.45432'),
('1992-01-01 01:01:01.400'),
('1992-01-01 01:01:02.200'),
('1992-01-01 01:01:02.400'),
('1993-08-14 08:22:33.42'),
('2001-04-20 14:42:11.0'),
('2001-04-20 14:42:11.123'),
('2004-01-31 12:00:00.000050'),
('2004-01-31 12:00:00.050'),
('2004-02-01 12:00:00.000050'),
('2004-02-01 12:00:00.050'),
('2004-02-29 13:05:47.123456'),
('2008-01-01 00:00:01.5'),
('2008-01-01 00:00:01.594'),
('2008-01-01 00:00:01.794'),
('2008-01-01 00:00:01.88926'),
('2008-01-01 00:00:01.894'),
('2008-01-01 00:00:01.98926'),
('2008-01-01 00:00:01.99926'),
('2008-01-01 00:00:11.1'),
('2019-01-06 04:03:02.123456'),
('2019-01-06 04:03:02.5'),
('2020-01-01 00:00:01.88926'),
('2020-12-31 21:25:58.745232'),
('2021-04-15 14:55:17.915'),
('2021-04-15 14:55:17.915000'),
('2021-05-02 12:11:49.5'),
('2021-12-01 13:54:48.123456'),
('1993-08-14 08:22:33'),
(NULL)
;
query II
SELECT ts, mts
FROM (SELECT ts, make_timestamp(year(ts), month(ts), day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) mts
FROM timestamps) t
WHERE mts IS DISTINCT FROM ts;
----
# Null parts
query I
SELECT md
FROM (
SELECT make_timestamp(NULL, month(ts), day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
FROM timestamps) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (
SELECT make_timestamp(year(ts), NULL, day(ts), hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
FROM timestamps) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (
SELECT make_timestamp(year(ts), month(ts), NULL, hour(ts), minute(ts), microsecond(ts) / 1000000.0) md
FROM timestamps) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (
SELECT make_timestamp(year(ts), month(ts), day(ts), NULL, minute(ts), microsecond(ts) / 1000000.0) md
FROM timestamps) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (
SELECT make_timestamp(year(ts), month(ts), day(ts), hour(ts), NULL, microsecond(ts) / 1000000.0) md
FROM timestamps) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (
SELECT make_timestamp(year(ts), month(ts), day(ts), hour(ts), minute(ts), NULL) md
FROM timestamps) t
WHERE md IS NOT NULL
----
# Constants
query IIIIIII
SELECT
make_timestamp(2021, 12, 30, 12, 41, 46.123456),
make_timestamp(NULL, 12, 30, 12, 41, 46.123456),
make_timestamp(2021, NULL, 30, 12, 41, 46.123456),
make_timestamp(2021, 12, NULL, 12, 41, 46.123456),
make_timestamp(2021, 12, 30, NULL, 41, 46.123456),
make_timestamp(2021, 12, 30, 12, NULL, 46.123456),
make_timestamp(2021, 12, 30, 12, 41, NULL)
;
----
2021-12-30 12:41:46.123456 NULL NULL NULL NULL NULL NULL
# From microseconds
query II
SELECT make_timestamp(0), make_timestamp(1684509234845000);
----
1970-01-01 00:00:00 2023-05-19 15:13:54.845
statement error
SELECT make_timestamp(9223372036854775807); -- Infinity
----
Conversion Error: Timestamp microseconds out of range
# From nanoseconds
query II
SELECT make_timestamp_ns(0), make_timestamp_ns(1684509234845000123);
----
1970-01-01 00:00:00 2023-05-19 15:13:54.845000123
# Maximum value for make_timestamp_ns().
query I
SELECT make_timestamp_ns(9223372036854775806);
----
2262-04-11 23:47:16.854775806
statement error
SELECT make_timestamp_ns(9223372036854775807); -- Infinity
----
Conversion Error: Timestamp microseconds out of range
#
# Times
#
statement ok
CREATE TABLE times(t TIME)
statement ok
INSERT INTO times VALUES
(NULL),
('00:00:01'),
('00:01:20'),
('01:00:00'),
('02:30:01'),
('06:30:00'),
('12:00:30.1234'),
('12:20:48.123456'),
('12:11:49.5'),
('14:55:17.915000'),
('21:15:22'),
('20:08:10.001'),
('20:08:10.33'),
('20:08:10.998'),
('21:25:58.745232')
;
query II
SELECT t, mt
FROM (SELECT t, make_time(hour(t), minute(t), microsecond(t) / 1000000.0) mt
FROM times) tbl
WHERE mt IS DISTINCT FROM t;
----
# Null parts
query I
SELECT md
FROM (SELECT make_time(NULL, minute(d), microsecond(d) / 1000000.0) md FROM dates) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (SELECT make_time(hour(d), NULL, microsecond(d) / 1000000.0) md FROM dates) t
WHERE md IS NOT NULL
----
query I
SELECT md
FROM (SELECT make_time(hour(d), minute(d), NULL) md FROM dates) t
WHERE md IS NOT NULL
----
# Constants
query IIII
SELECT
make_time(12, 41, 46.123456),
make_time(NULL, 41, 46.123456),
make_time(12, NULL, 46.123456),
make_time(12, 41, NULL)
;
----
12:41:46.123456 NULL NULL NULL
# Overflow
statement error
SELECT make_timestamp(294247, 1, 10, 4, 0, 54.775807);
----
Conversion Error: Date and time not in timestamp range