Extend 'guc' regression test to check manipulations of datestyle as

well as vacuum_cost_delay.  Since datestyle is a string variable,
this exercises memory allocation issues that might not appear when
modifying an integer GUC variable.  Also, we can observe the side
effects of changing datestyle to check that assign hooks are called
at the right times.
This commit is contained in:
Tom Lane 2006-08-13 19:31:06 +00:00
parent d2ccc707af
commit a1dad99c63
2 changed files with 347 additions and 12 deletions

View File

@ -1,11 +1,32 @@
-- SET vacuum_cost_delay to some value -- pg_regress should ensure that this default value applies; however
-- we can't rely on any specific default value of vacuum_cost_delay
SHOW datestyle;
DateStyle
---------------
Postgres, MDY
(1 row)
-- SET to some nondefault value
SET vacuum_cost_delay TO 400; SET vacuum_cost_delay TO 400;
SET datestyle = 'ISO, YMD';
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
------------------- -------------------
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- SET LOCAL has no effect outside of a transaction -- SET LOCAL has no effect outside of a transaction
SET LOCAL vacuum_cost_delay TO 500; SET LOCAL vacuum_cost_delay TO 500;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
@ -14,6 +35,19 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SET LOCAL datestyle = 'SQL';
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- SET LOCAL within a transaction that commits -- SET LOCAL within a transaction that commits
BEGIN; BEGIN;
SET LOCAL vacuum_cost_delay TO 500; SET LOCAL vacuum_cost_delay TO 500;
@ -23,6 +57,19 @@ SHOW vacuum_cost_delay;
500ms 500ms
(1 row) (1 row)
SET LOCAL datestyle = 'SQL';
SHOW datestyle;
DateStyle
-----------
SQL, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
-------------------------
08/13/2006 12:34:56 PDT
(1 row)
COMMIT; COMMIT;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -30,6 +77,18 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- SET should be reverted after ROLLBACK -- SET should be reverted after ROLLBACK
BEGIN; BEGIN;
SET vacuum_cost_delay TO 600; SET vacuum_cost_delay TO 600;
@ -39,6 +98,19 @@ SHOW vacuum_cost_delay;
600ms 600ms
(1 row) (1 row)
SET datestyle = 'German';
SHOW datestyle;
DateStyle
-------------
German, DMY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
-------------------------
13.08.2006 12:34:56 PDT
(1 row)
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -46,20 +118,83 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- Some tests with subtransactions -- Some tests with subtransactions
BEGIN; BEGIN;
SET vacuum_cost_delay TO 700; SET vacuum_cost_delay TO 700;
SET datestyle = 'MDY';
SHOW datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
SAVEPOINT first_sp; SAVEPOINT first_sp;
SET vacuum_cost_delay TO 800; SET vacuum_cost_delay TO 800;
ROLLBACK TO first_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
------------------- -------------------
700ms 800ms
(1 row)
SET datestyle = 'German, DMY';
SHOW datestyle;
DateStyle
-------------
German, DMY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
-------------------------
13.08.2006 12:34:56 PDT
(1 row)
ROLLBACK TO first_sp;
SHOW datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row) (1 row)
SAVEPOINT second_sp; SAVEPOINT second_sp;
SET vacuum_cost_delay TO 900; SET vacuum_cost_delay TO 900;
SET datestyle = 'SQL, YMD';
SHOW datestyle;
DateStyle
-----------
SQL, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
-------------------------
08/13/2006 12:34:56 PDT
(1 row)
SAVEPOINT third_sp; SAVEPOINT third_sp;
SET vacuum_cost_delay TO 1000; SET vacuum_cost_delay TO 1000;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
@ -68,6 +203,19 @@ SHOW vacuum_cost_delay;
1s 1s
(1 row) (1 row)
SET datestyle = 'Postgres, MDY';
SHOW datestyle;
DateStyle
---------------
Postgres, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------------
Sun Aug 13 12:34:56 2006 PDT
(1 row)
ROLLBACK TO third_sp; ROLLBACK TO third_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -75,6 +223,18 @@ SHOW vacuum_cost_delay;
900ms 900ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
SQL, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
-------------------------
08/13/2006 12:34:56 PDT
(1 row)
ROLLBACK TO second_sp; ROLLBACK TO second_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -82,7 +242,37 @@ SHOW vacuum_cost_delay;
700ms 700ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay;
vacuum_cost_delay
-------------------
400ms
(1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- SET LOCAL with Savepoints -- SET LOCAL with Savepoints
BEGIN; BEGIN;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
@ -91,6 +281,18 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
SAVEPOINT sp; SAVEPOINT sp;
SET LOCAL vacuum_cost_delay TO 300; SET LOCAL vacuum_cost_delay TO 300;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
@ -99,6 +301,19 @@ SHOW vacuum_cost_delay;
300ms 300ms
(1 row) (1 row)
SET LOCAL datestyle = 'Postgres, MDY';
SHOW datestyle;
DateStyle
---------------
Postgres, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------------
Sun Aug 13 12:34:56 2006 PDT
(1 row)
ROLLBACK TO sp; ROLLBACK TO sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -106,7 +321,37 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay;
vacuum_cost_delay
-------------------
400ms
(1 row)
SHOW datestyle;
DateStyle
-----------
ISO, YMD
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- SET followed by SET LOCAL -- SET followed by SET LOCAL
BEGIN; BEGIN;
SET vacuum_cost_delay TO 400; SET vacuum_cost_delay TO 400;
@ -117,6 +362,20 @@ SHOW vacuum_cost_delay;
500ms 500ms
(1 row) (1 row)
SET datestyle = 'ISO, DMY';
SET LOCAL datestyle = 'Postgres, MDY';
SHOW datestyle;
DateStyle
---------------
Postgres, MDY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------------
Sun Aug 13 12:34:56 2006 PDT
(1 row)
COMMIT; COMMIT;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
vacuum_cost_delay vacuum_cost_delay
@ -124,16 +383,22 @@ SHOW vacuum_cost_delay;
400ms 400ms
(1 row) (1 row)
SHOW datestyle;
DateStyle
-----------
ISO, DMY
(1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
-- --
-- Test RESET. We use datestyle because the reset value is forced by -- Test RESET. We use datestyle because the reset value is forced by
-- pg_regress, so it doesn't depend on the installation's configuration. -- pg_regress, so it doesn't depend on the installation's configuration.
-- --
SHOW datestyle;
DateStyle
---------------
Postgres, MDY
(1 row)
SET datestyle = iso, ymd; SET datestyle = iso, ymd;
SHOW datestyle; SHOW datestyle;
DateStyle DateStyle
@ -141,6 +406,12 @@ SHOW datestyle;
ISO, YMD ISO, YMD
(1 row) (1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------
2006-08-13 12:34:56-07
(1 row)
RESET datestyle; RESET datestyle;
SHOW datestyle; SHOW datestyle;
DateStyle DateStyle
@ -148,3 +419,9 @@ SHOW datestyle;
Postgres, MDY Postgres, MDY
(1 row) (1 row)
SELECT '2006-08-13 12:34:56'::timestamptz;
timestamptz
------------------------------
Sun Aug 13 12:34:56 2006 PDT
(1 row)

View File

@ -1,67 +1,125 @@
-- SET vacuum_cost_delay to some value -- pg_regress should ensure that this default value applies; however
-- we can't rely on any specific default value of vacuum_cost_delay
SHOW datestyle;
-- SET to some nondefault value
SET vacuum_cost_delay TO 400; SET vacuum_cost_delay TO 400;
SET datestyle = 'ISO, YMD';
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- SET LOCAL has no effect outside of a transaction -- SET LOCAL has no effect outside of a transaction
SET LOCAL vacuum_cost_delay TO 500; SET LOCAL vacuum_cost_delay TO 500;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET LOCAL datestyle = 'SQL';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- SET LOCAL within a transaction that commits -- SET LOCAL within a transaction that commits
BEGIN; BEGIN;
SET LOCAL vacuum_cost_delay TO 500; SET LOCAL vacuum_cost_delay TO 500;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET LOCAL datestyle = 'SQL';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
COMMIT; COMMIT;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- SET should be reverted after ROLLBACK -- SET should be reverted after ROLLBACK
BEGIN; BEGIN;
SET vacuum_cost_delay TO 600; SET vacuum_cost_delay TO 600;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET datestyle = 'German';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- Some tests with subtransactions -- Some tests with subtransactions
BEGIN; BEGIN;
SET vacuum_cost_delay TO 700; SET vacuum_cost_delay TO 700;
SET datestyle = 'MDY';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
SAVEPOINT first_sp; SAVEPOINT first_sp;
SET vacuum_cost_delay TO 800; SET vacuum_cost_delay TO 800;
ROLLBACK TO first_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET datestyle = 'German, DMY';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK TO first_sp;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
SAVEPOINT second_sp; SAVEPOINT second_sp;
SET vacuum_cost_delay TO 900; SET vacuum_cost_delay TO 900;
SET datestyle = 'SQL, YMD';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
SAVEPOINT third_sp; SAVEPOINT third_sp;
SET vacuum_cost_delay TO 1000; SET vacuum_cost_delay TO 1000;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET datestyle = 'Postgres, MDY';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK TO third_sp; ROLLBACK TO third_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK TO second_sp; ROLLBACK TO second_sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- SET LOCAL with Savepoints -- SET LOCAL with Savepoints
BEGIN; BEGIN;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
SAVEPOINT sp; SAVEPOINT sp;
SET LOCAL vacuum_cost_delay TO 300; SET LOCAL vacuum_cost_delay TO 300;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET LOCAL datestyle = 'Postgres, MDY';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK TO sp; ROLLBACK TO sp;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
ROLLBACK; ROLLBACK;
SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- SET followed by SET LOCAL -- SET followed by SET LOCAL
BEGIN; BEGIN;
SET vacuum_cost_delay TO 400; SET vacuum_cost_delay TO 400;
SET LOCAL vacuum_cost_delay TO 500; SET LOCAL vacuum_cost_delay TO 500;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SET datestyle = 'ISO, DMY';
SET LOCAL datestyle = 'Postgres, MDY';
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
COMMIT; COMMIT;
SHOW vacuum_cost_delay; SHOW vacuum_cost_delay;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
-- --
-- Test RESET. We use datestyle because the reset value is forced by -- Test RESET. We use datestyle because the reset value is forced by
-- pg_regress, so it doesn't depend on the installation's configuration. -- pg_regress, so it doesn't depend on the installation's configuration.
-- --
SHOW datestyle;
SET datestyle = iso, ymd; SET datestyle = iso, ymd;
SHOW datestyle; SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
RESET datestyle; RESET datestyle;
SHOW datestyle; SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;