diff --git a/src/test/regress/expected/variable.out b/src/test/regress/expected/variable.out new file mode 100644 index 0000000..54ff2ad --- /dev/null +++ b/src/test/regress/expected/variable.out @@ -0,0 +1,171 @@ +-- +-- VARIABLE (src/backend/commands/variable.c) +-- +-- Should fail. Ensure non-existent ROLEs throw error on SET ROLE / SET SESSION AUTHORIZATION +SET ROLE role_var1; +ERROR: role "role_var1" does not exist +SET SESSION AUTHORIZATION role_var1; +ERROR: role "role_var1" does not exist +/*-- SET SESSION AUTHORIZATION should throw an error when in hung transaction state +BEGIN TRANSACTION; +INVALID_COMMAND; +SET SESSION AUTHORIZATION role_var1; +ROLLBACK;*/ +BEGIN TRANSACTION; +INVALID_COMMAND; +ERROR: syntax error at or near "INVALID_COMMAND" +LINE 1: INVALID_COMMAND; + ^ +SET ROLE role_var1; +ERROR: current transaction is aborted, commands ignored until end of transaction block +ROLLBACK; +-- Should work. Valid values / methods used +SET SEED = 0.5; +SET SEED TO 0.4; +SELECT setseed(0.5); + setseed +--------- + +(1 row) + +-- Should fail. SET TRANSACTION NOT DEFERRABLE not possible within a Sub transaction +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; +SAVEPOINT savepoint_var1; +SET TRANSACTION NOT DEFERRABLE; +ERROR: SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction +ROLLBACK TO SAVEPOINT savepoint_var1; +ROLLBACK TRANSACTION; +-- Should fail. SET TRANSACTION DEFERRABLE not possible within a Sub transaction +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; +SAVEPOINT savepoint_var2; +SET TRANSACTION DEFERRABLE; +ERROR: SET TRANSACTION [NOT] DEFERRABLE cannot be called within a subtransaction +ROLLBACK TO SAVEPOINT savepoint_var2; +ROLLBACK TRANSACTION; +-- Should fail. SET TRANSACTION DEFERRABLE not possible if not first statement of transaction; +BEGIN TRANSACTION; +SELECT 1; + ?column? +---------- + 1 +(1 row) + +SET TRANSACTION NOT DEFERRABLE; +ERROR: SET TRANSACTION [NOT] DEFERRABLE must be called before any query +ROLLBACK TRANSACTION; +-- Should work. Ensure correct messages are displayed for all TRANSACTION ISOLATION LEVELs +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SHOW TRANSACTION ISOLATION LEVEL; + transaction_isolation +----------------------- + read committed +(1 row) + +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SHOW TRANSACTION ISOLATION LEVEL; + transaction_isolation +----------------------- + read uncommitted +(1 row) + +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SHOW TRANSACTION ISOLATION LEVEL; + transaction_isolation +----------------------- + repeatable read +(1 row) + +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; +SHOW TRANSACTION ISOLATION LEVEL; + transaction_isolation +----------------------- + serializable +(1 row) + +ROLLBACK TRANSACTION; +-- Should fail. Ensure that change in ISOLATION LEVEL should happen before first transaction +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SELECT 1; + ?column? +---------- + 1 +(1 row) + +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query +SHOW TRANSACTION ISOLATION LEVEL; +ERROR: current transaction is aborted, commands ignored until end of transaction block +ROLLBACK TRANSACTION; +-- Should fail. Ensure that change in ISOLATION LEVEL should not happen within a sub-transaction +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SAVEPOINT savepoint_var3; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +ERROR: SET TRANSACTION ISOLATION LEVEL must not be called in a subtransaction +ROLLBACK TO SAVEPOINT savepoint_var3; +ROLLBACK TRANSACTION; +-- Should fail. Invalid DATESTYLE arguments +SET DATESTYLE = ISO, SQL; +ERROR: invalid value for parameter "DateStyle": "iso, sql" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = SQL, ISO; +ERROR: invalid value for parameter "DateStyle": "sql, iso" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = ISO, POSTGRES; +ERROR: invalid value for parameter "DateStyle": "iso, postgres" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = POSTGRES, ISO; +ERROR: invalid value for parameter "DateStyle": "postgres, iso" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = ISO, GERMAN; +ERROR: invalid value for parameter "DateStyle": "iso, german" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = GERMAN, ISO; +ERROR: invalid value for parameter "DateStyle": "german, iso" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = DMY, MDY; +ERROR: invalid value for parameter "DateStyle": "dmy, mdy" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = DMY, YMD; +ERROR: invalid value for parameter "DateStyle": "dmy, ymd" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = YMD, DMY; +ERROR: invalid value for parameter "DateStyle": "ymd, dmy" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = YMD, EURO; +ERROR: invalid value for parameter "DateStyle": "ymd, euro" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = YMD, MDY; +ERROR: invalid value for parameter "DateStyle": "ymd, mdy" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = YMD, US; +ERROR: invalid value for parameter "DateStyle": "ymd, us" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = YMD, NONEURO; +ERROR: invalid value for parameter "DateStyle": "ymd, noneuro" +DETAIL: Conflicting "datestyle" specifications. +SET DATESTYLE = ISO, DEFAULT; +ERROR: syntax error at or near "DEFAULT" +LINE 1: SET DATESTYLE = ISO, DEFAULT; + ^ +SET DATESTYLE = DEFAULT, ISO; +ERROR: syntax error at or near "," +LINE 1: SET DATESTYLE = DEFAULT, ISO; + ^ +SET DATESTYLE = invalid_keyword; +ERROR: invalid value for parameter "DateStyle": "invalid_keyword" +DETAIL: Unrecognized key word: "invalid_keyword". +-- Should work. Valid value for SET TIMEZONE INTERVAL +SET DATESTYLE TO DEFAULT; +-- Should work. Valid value for SET TIMEZONE INTERVAL +SET TIME ZONE INTERVAL '+05:30' HOUR TO MINUTE; +-- Should fail. Invalid values for INTERVAL in SET TIMEZONE INTERVAL +SET TIME ZONE INTERVAL '1 month +05:30' HOUR TO MINUTE; +ERROR: invalid value for parameter "TimeZone": "INTERVAL '@ 1 mon 5 hours 30 mins'" +DETAIL: Cannot specify months in time zone interval. +SET TIME ZONE INTERVAL '1 day +05:30' HOUR TO MINUTE; +ERROR: invalid value for parameter "TimeZone": "INTERVAL '@ 1 day 5 hours 30 mins'" +DETAIL: Cannot specify days in time zone interval. +SET TIME ZONE INTERVAL '+05:30:60' HOUR; diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index 2af28b1..ebf61f2 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -83,7 +83,7 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi # ---------- # Another group of parallel tests # ---------- -test: privileges security_label collate matview +test: privileges security_label collate matview variable # ---------- # Another group of parallel tests diff --git a/src/test/regress/sql/variable.sql b/src/test/regress/sql/variable.sql new file mode 100644 index 0000000..b521448 --- /dev/null +++ b/src/test/regress/sql/variable.sql @@ -0,0 +1,101 @@ +-- +-- VARIABLE (src/backend/commands/variable.c) +-- + +-- Should fail. Ensure non-existent ROLEs throw error on SET ROLE / SET SESSION AUTHORIZATION +SET ROLE role_var1; +SET SESSION AUTHORIZATION role_var1; + +/*-- SET SESSION AUTHORIZATION should throw an error when in hung transaction state +BEGIN TRANSACTION; +INVALID_COMMAND; +SET SESSION AUTHORIZATION role_var1; +ROLLBACK;*/ + + +BEGIN TRANSACTION; +INVALID_COMMAND; +SET ROLE role_var1; +ROLLBACK; + +-- Should work. Valid values / methods used +SET SEED = 0.5; +SET SEED TO 0.4; +SELECT setseed(0.5); + +-- Should fail. SET TRANSACTION NOT DEFERRABLE not possible within a Sub transaction +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; +SAVEPOINT savepoint_var1; +SET TRANSACTION NOT DEFERRABLE; +ROLLBACK TO SAVEPOINT savepoint_var1; +ROLLBACK TRANSACTION; + +-- Should fail. SET TRANSACTION DEFERRABLE not possible within a Sub transaction +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY; +SAVEPOINT savepoint_var2; +SET TRANSACTION DEFERRABLE; +ROLLBACK TO SAVEPOINT savepoint_var2; +ROLLBACK TRANSACTION; + +-- Should fail. SET TRANSACTION DEFERRABLE not possible if not first statement of transaction; +BEGIN TRANSACTION; +SELECT 1; +SET TRANSACTION NOT DEFERRABLE; +ROLLBACK TRANSACTION; + +-- Should work. Ensure correct messages are displayed for all TRANSACTION ISOLATION LEVELs +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SHOW TRANSACTION ISOLATION LEVEL; +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SHOW TRANSACTION ISOLATION LEVEL; +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SHOW TRANSACTION ISOLATION LEVEL; +ROLLBACK TRANSACTION; +BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; +SHOW TRANSACTION ISOLATION LEVEL; +ROLLBACK TRANSACTION; + +-- Should fail. Ensure that change in ISOLATION LEVEL should happen before first transaction +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SELECT 1; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SHOW TRANSACTION ISOLATION LEVEL; +ROLLBACK TRANSACTION; + +-- Should fail. Ensure that change in ISOLATION LEVEL should not happen within a sub-transaction +BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; +SAVEPOINT savepoint_var3; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +ROLLBACK TO SAVEPOINT savepoint_var3; +ROLLBACK TRANSACTION; + +-- Should fail. Invalid DATESTYLE arguments +SET DATESTYLE = ISO, SQL; +SET DATESTYLE = SQL, ISO; +SET DATESTYLE = ISO, POSTGRES; +SET DATESTYLE = POSTGRES, ISO; +SET DATESTYLE = ISO, GERMAN; +SET DATESTYLE = GERMAN, ISO; +SET DATESTYLE = DMY, MDY; +SET DATESTYLE = DMY, YMD; +SET DATESTYLE = YMD, DMY; +SET DATESTYLE = YMD, EURO; +SET DATESTYLE = YMD, MDY; +SET DATESTYLE = YMD, US; +SET DATESTYLE = YMD, NONEURO; +SET DATESTYLE = ISO, DEFAULT; +SET DATESTYLE = DEFAULT, ISO; +SET DATESTYLE = invalid_keyword; + +-- Should work. Valid value for SET TIMEZONE INTERVAL +SET DATESTYLE TO DEFAULT; + +-- Should work. Valid value for SET TIMEZONE INTERVAL +SET TIME ZONE INTERVAL '+05:30' HOUR TO MINUTE; + +-- Should fail. Invalid values for INTERVAL in SET TIMEZONE INTERVAL +SET TIME ZONE INTERVAL '1 month +05:30' HOUR TO MINUTE; +SET TIME ZONE INTERVAL '1 day +05:30' HOUR TO MINUTE; +SET TIME ZONE INTERVAL '+05:30:60' HOUR;