=== Applying patches on top of PostgreSQL commit ID 53a49365052026907afff7613929710d1e7f0da0 === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Sat Feb 1 06:54:26 UTC 2025 On branch cf/4761 nothing to commit, working tree clean === applying patch ./date_trunc_interval_version-v2.patch Applied patch to 'doc/src/sgml/func.sgml' cleanly. Applied patch to 'src/backend/utils/adt/timestamp.c' cleanly. Applied patch to 'src/include/catalog/pg_proc.dat' cleanly. Applied patch to 'src/test/regress/expected/timestamptz.out' with conflicts. Applied patch to 'src/test/regress/sql/timestamptz.sql' with conflicts. U src/test/regress/expected/timestamptz.out U src/test/regress/sql/timestamptz.sql diff --cc src/test/regress/expected/timestamptz.out index 2a69953ff2,25d2e65808..0000000000 --- a/src/test/regress/expected/timestamptz.out +++ b/src/test/regress/expected/timestamptz.out @@@ -780,8 -719,61 +780,66 @@@ SELECT date_trunc('day', timestamp wit Thu Feb 15 20:00:00 2001 PST (1 row) ++<<<<<<< ours +SELECT date_trunc('ago', timestamp with time zone 'infinity', 'GMT') AS invalid_zone_trunc; +ERROR: unit "ago" not recognized for type timestamp with time zone ++======= + SELECT date_trunc('7 day'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS week_trunc; + week_trunc + ------------------------------ + Mon Feb 23 00:00:00 2004 PST + (1 row) + + SELECT date_trunc('3 month'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Australia/Sydney') as sydney_trunc; -- zone name + sydney_trunc + ------------------------------ + Sun Dec 31 05:00:00 2000 PST + (1 row) + + SELECT date_trunc('12 hour'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'GMT') as gmt_trunc; -- fixed-offset abbreviation + gmt_trunc + ------------------------------ + Fri Feb 16 04:00:00 2001 PST + (1 row) + + SELECT date_trunc('6 hour'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'VET') as vet_trunc; -- variable-offset abbreviation + vet_trunc + ------------------------------ + Fri Feb 16 08:00:00 2001 PST + (1 row) + + SELECT date_trunc('6 minutes'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'VET') as vet_trunc; -- variable-offset abbreviation + vet_trunc + ------------------------------ + Fri Feb 16 12:36:00 2001 PST + (1 row) + + SELECT date_trunc('10 second'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS tensec_trunc; + tensec_trunc + ------------------------------ + Sun Feb 29 15:44:10 2004 PST + (1 row) + + SELECT date_trunc('500 msecond'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS halfsec_trunc; + halfsec_trunc + -------------------------------- + Sun Feb 29 15:44:17.5 2004 PST + (1 row) + + -- errors + SELECT date_trunc('1 month 7 day'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval1; + ERROR: interval has to be a divisor of a day, week or century. + SELECT date_trunc('1 month 01:00:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval2; + ERROR: interval has to be a divisor of a day, week or century. + SELECT date_trunc('1 day 00:30:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval3; + ERROR: interval has to be a divisor of a day, week or century. + SELECT date_trunc('7 month'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval4; + ERROR: interval has to be a divisor of a day, week or century. + SELECT date_trunc('3 day'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval5; + ERROR: interval has to be a divisor of a day, week or century. + SELECT date_trunc('00:23:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval6; + ERROR: interval has to be a divisor of a day, week or century. ++>>>>>>> theirs -- verify date_bin behaves the same as date_trunc for relevant intervals SELECT str, diff --cc src/test/regress/sql/timestamptz.sql index caca3123f1,701cd79094..0000000000 --- a/src/test/regress/sql/timestamptz.sql +++ b/src/test/regress/sql/timestamptz.sql @@@ -216,16 -199,27 +216,36 @@@ SELECT d1 FROM TIMESTAMPTZ_TB SELECT d1 - timestamp with time zone '1997-01-02' AS diff FROM TIMESTAMPTZ_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; ++<<<<<<< ours +SELECT date_trunc( 'week', timestamp with time zone '2004-02-29 15:44:17.71393' ) AS week_trunc; +SELECT date_trunc( 'ago', timestamp with time zone 'infinity' ) AS invalid_trunc; + ++======= + SELECT date_trunc('week', timestamp with time zone '2004-02-29 15:44:17.71393') AS week_trunc; ++>>>>>>> theirs SELECT date_trunc('day', timestamp with time zone '2001-02-16 20:38:40+00', 'Australia/Sydney') as sydney_trunc; -- zone name SELECT date_trunc('day', timestamp with time zone '2001-02-16 20:38:40+00', 'GMT') as gmt_trunc; -- fixed-offset abbreviation SELECT date_trunc('day', timestamp with time zone '2001-02-16 20:38:40+00', 'VET') as vet_trunc; -- variable-offset abbreviation +SELECT date_trunc('ago', timestamp with time zone 'infinity', 'GMT') AS invalid_zone_trunc; + + + SELECT date_trunc('7 day'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS week_trunc; + SELECT date_trunc('3 month'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Australia/Sydney') as sydney_trunc; -- zone name + SELECT date_trunc('12 hour'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'GMT') as gmt_trunc; -- fixed-offset abbreviation + SELECT date_trunc('6 hour'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'VET') as vet_trunc; -- variable-offset abbreviation + SELECT date_trunc('6 minutes'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'VET') as vet_trunc; -- variable-offset abbreviation + SELECT date_trunc('10 second'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS tensec_trunc; + SELECT date_trunc('500 msecond'::interval, timestamp with time zone '2004-02-29 15:44:17.71393') AS halfsec_trunc; + + -- errors + SELECT date_trunc('1 month 7 day'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval1; + SELECT date_trunc('1 month 01:00:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval2; + SELECT date_trunc('1 day 00:30:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval3; + SELECT date_trunc('7 month'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval4; + SELECT date_trunc('3 day'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval5; + SELECT date_trunc('00:23:00'::interval, timestamp with time zone '2001-02-16 20:38:40+00', 'Europe/Warsaw') AS bad_interval6; + -- verify date_bin behaves the same as date_trunc for relevant intervals SELECT str,