Add regression tests for DISCARD

Started by Robins Tharakanover 12 years ago9 messages
#1Robins Tharakan
tharakan@gmail.com
1 attachment(s)

Hi,

Please find attached a patch that adds basic regression tests for DISCARD
command.

Any and all feedback is obviously welcome.
--
Robins Tharakan

Attachments:

regress_discard_v2.patchapplication/octet-stream; name=regress_discard_v2.patchDownload
diff --git a/src/test/regress/expected/discard.out b/src/test/regress/expected/discard.out
new file mode 100644
index 0000000..85f1227
--- /dev/null
+++ b/src/test/regress/expected/discard.out
@@ -0,0 +1,17 @@
+--
+-- DISCARD
+--
+DISCARD ALL;
+DISCARD TEMP;
+DISCARD TEMPORARY;
+DISCARD PLANS;
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ERROR:  DISCARD ALL cannot run inside a transaction block
+ROLLBACK;
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
+ERROR:  syntax error at or near "invalid_option"
+LINE 1: DISCARD invalid_option;
+                ^
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 2af28b1..92e286e 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 discard
 
 # ----------
 # Another group of parallel tests
diff --git a/src/test/regress/sql/discard.sql b/src/test/regress/sql/discard.sql
new file mode 100644
index 0000000..6d99631
--- /dev/null
+++ b/src/test/regress/sql/discard.sql
@@ -0,0 +1,19 @@
+--
+-- DISCARD
+--
+
+DISCARD ALL;
+
+DISCARD TEMP;
+
+DISCARD TEMPORARY;
+
+DISCARD PLANS;
+
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ROLLBACK;
+
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
#2Marko Kreen
markokr@gmail.com
In reply to: Robins Tharakan (#1)
Re: Add regression tests for DISCARD

On Mon, May 13, 2013 at 2:58 AM, Robins Tharakan <tharakan@gmail.com> wrote:

Please find attached a patch that adds basic regression tests for DISCARD
command.

Any and all feedback is obviously welcome.

Perhaps existing tests in guc.sql should be merged into it?

--
marko

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Robins Tharakan
tharakan@gmail.com
In reply to: Marko Kreen (#2)
1 attachment(s)
Re: Add regression tests for DISCARD

On 17 June 2013 18:14, Marko Kreen <markokr@gmail.com> wrote:

Perhaps existing tests in guc.sql should be merged into it?

Thanks Marko for pointing out about guc.sql.

Please find attached a patch to move DISCARD related tests from guc.sql to
discard.sql. It adds an extra test for a DISCARD PLANS line, although I
amn't sure on how to validate that its working.

Personally, I wouldn't call this a great patch, since most of the tests
were already running, although in a generic script. The separation of
DISCARD related tests to another file is arguably good for the long-term
though.

--
Robins Tharakan

Attachments:

regress_discard_v3.patchapplication/octet-stream; name=regress_discard_v3.patchDownload
diff --git a/src/test/regress/expected/discard.out b/src/test/regress/expected/discard.out
new file mode 100644
index 0000000..4125680
--- /dev/null
+++ b/src/test/regress/expected/discard.out
@@ -0,0 +1,132 @@
+--
+-- DISCARD
+--
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE temp_reset_user;
+SET SESSION AUTHORIZATION temp_reset_user;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+ foo_event
+(1 row)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+ foo
+(1 row)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+ foo
+(1 row)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 13ms
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+ tmp_foo
+(1 row)
+
+SELECT current_user = 'temp_reset_user';
+ ?column? 
+----------
+ t
+(1 row)
+
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+(0 rows)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+(0 rows)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+(0 rows)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 0
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+(0 rows)
+
+SELECT current_user = 'temp_reset_user';
+ ?column? 
+----------
+ f
+(1 row)
+
+DROP ROLE temp_reset_user;
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ERROR:  DISCARD ALL cannot run inside a transaction block
+ROLLBACK;
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
+ERROR:  syntax error at or near "invalid_option"
+LINE 1: DISCARD invalid_option;
+                ^
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out
index 271706d..3a2100c 100644
--- a/src/test/regress/expected/guc.out
+++ b/src/test/regress/expected/guc.out
@@ -505,106 +505,6 @@ SELECT '2006-08-13 12:34:56'::timestamptz;
 (1 row)
 
 --
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-  relname   
-------------
- reset_test
-(1 row)
-
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
- relname 
----------
-(0 rows)
-
---
--- Test DISCARD ALL
---
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
- foo_event
-(1 row)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
- foo
-(1 row)
-
-SELECT name FROM pg_cursors;
- name 
-------
- foo
-(1 row)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 13ms
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
- tmp_foo
-(1 row)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- t
-(1 row)
-
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
-(0 rows)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
-(0 rows)
-
-SELECT name FROM pg_cursors;
- name 
-------
-(0 rows)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 0
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
-(0 rows)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- f
-(1 row)
-
-DROP ROLE temp_reset_user;
---
 -- search_path should react to changes in pg_namespace
 --
 set search_path = foo, public, not_there_initially;
diff --git a/src/test/regress/sql/discard.sql b/src/test/regress/sql/discard.sql
new file mode 100644
index 0000000..4c7377c
--- /dev/null
+++ b/src/test/regress/sql/discard.sql
@@ -0,0 +1,61 @@
+--
+-- DISCARD
+--
+
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE temp_reset_user;
+SET SESSION AUTHORIZATION temp_reset_user;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'temp_reset_user';
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'temp_reset_user';
+DROP ROLE temp_reset_user;
+
+
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ROLLBACK;
+
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql
index 0c21792..e1be53b 100644
--- a/src/test/regress/sql/guc.sql
+++ b/src/test/regress/sql/guc.sql
@@ -144,43 +144,6 @@ RESET datestyle;
 SHOW datestyle;
 SELECT '2006-08-13 12:34:56'::timestamptz;
 
---
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-
---
--- Test DISCARD ALL
---
-
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
-DROP ROLE temp_reset_user;
 
 --
 -- search_path should react to changes in pg_namespace
#4Fabrízio de Royes Mello
fabriziomello@gmail.com
In reply to: Robins Tharakan (#3)
Re: Add regression tests for DISCARD

On Mon, Jul 1, 2013 at 5:59 PM, Robins Tharakan <tharakan@gmail.com> wrote:

Thanks Marko for pointing out about guc.sql.

Please find attached a patch to move DISCARD related tests from guc.sql to
discard.sql. It adds an extra test for a DISCARD PLANS line, although I
amn't sure on how to validate that its working.

Personally, I wouldn't call this a great patch, since most of the tests
were already running, although in a generic script. The separation of
DISCARD related tests to another file is arguably good for the long-term
though.

Robins,

You must add this new test case called "discard" to
src/test/regress/parallel_schedule and src/test/regress/serial_schedule,
because if we do "make check" the new "discard" test case is not executed.

Regards,

--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL

Show quoted text

Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Twitter: http://twitter.com/fabriziomello

#5Robins Tharakan
tharakan@gmail.com
In reply to: Fabrízio de Royes Mello (#4)
1 attachment(s)
Re: Add regression tests for DISCARD

Thanks Fabrizio.

Although parallel_schedule was a miss for this specific patch, however, I
guess I seem to have missed out serial_schedule completely (in all patches)
and then thanks for pointing this out. Subsequently Robert too noticed the
miss at the serial_schedule end.

Please find attached a patch, updated towards serial_schedule /
parallel_schedule as well as the role name change as per Robert's feedback
on CREATE OPERATOR thread.

--
Robins Tharakan

On 2 July 2013 09:32, Fabrízio de Royes Mello <fabriziomello@gmail.com>wrote:

Show quoted text

On Mon, Jul 1, 2013 at 5:59 PM, Robins Tharakan <tharakan@gmail.com>wrote:

Thanks Marko for pointing out about guc.sql.

Please find attached a patch to move DISCARD related tests from guc.sql
to discard.sql. It adds an extra test for a DISCARD PLANS line, although I
amn't sure on how to validate that its working.

Personally, I wouldn't call this a great patch, since most of the tests
were already running, although in a generic script. The separation of
DISCARD related tests to another file is arguably good for the long-term
though.

Robins,

You must add this new test case called "discard" to
src/test/regress/parallel_schedule and src/test/regress/serial_schedule,
because if we do "make check" the new "discard" test case is not executed.

Regards,

--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL

Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Twitter: http://twitter.com/fabriziomello

Attachments:

regress_discard_v5.patchapplication/octet-stream; name=regress_discard_v5.patchDownload
diff --git a/src/test/regress/expected/discard.out b/src/test/regress/expected/discard.out
new file mode 100644
index 0000000..43b0399
--- /dev/null
+++ b/src/test/regress/expected/discard.out
@@ -0,0 +1,132 @@
+--
+-- DISCARD
+--
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE regress_rol_discardall;
+SET SESSION AUTHORIZATION regress_rol_discardall;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+ foo_event
+(1 row)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+ foo
+(1 row)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+ foo
+(1 row)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 13ms
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+ tmp_foo
+(1 row)
+
+SELECT current_user = 'regress_rol_discardall';
+ ?column? 
+----------
+ t
+(1 row)
+
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+(0 rows)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+(0 rows)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+(0 rows)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 0
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+(0 rows)
+
+SELECT current_user = 'regress_rol_discardall';
+ ?column? 
+----------
+ f
+(1 row)
+
+DROP ROLE regress_rol_discardall;
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ERROR:  DISCARD ALL cannot run inside a transaction block
+ROLLBACK;
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
+ERROR:  syntax error at or near "invalid_option"
+LINE 1: DISCARD invalid_option;
+                ^
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out
index 271706d..3a2100c 100644
--- a/src/test/regress/expected/guc.out
+++ b/src/test/regress/expected/guc.out
@@ -505,106 +505,6 @@ SELECT '2006-08-13 12:34:56'::timestamptz;
 (1 row)
 
 --
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-  relname   
-------------
- reset_test
-(1 row)
-
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
- relname 
----------
-(0 rows)
-
---
--- Test DISCARD ALL
---
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
- foo_event
-(1 row)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
- foo
-(1 row)
-
-SELECT name FROM pg_cursors;
- name 
-------
- foo
-(1 row)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 13ms
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
- tmp_foo
-(1 row)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- t
-(1 row)
-
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
-(0 rows)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
-(0 rows)
-
-SELECT name FROM pg_cursors;
- name 
-------
-(0 rows)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 0
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
-(0 rows)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- f
-(1 row)
-
-DROP ROLE temp_reset_user;
---
 -- search_path should react to changes in pg_namespace
 --
 set search_path = foo, public, not_there_initially;
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 3e6b306..b2d6818 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 discard
 
 # ----------
 # Another group of parallel tests
diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule
index 3ad289f..d4eb215 100644
--- a/src/test/regress/serial_schedule
+++ b/src/test/regress/serial_schedule
@@ -139,3 +139,4 @@ test: largeobject
 test: with
 test: xml
 test: stats
+test: discard
diff --git a/src/test/regress/sql/discard.sql b/src/test/regress/sql/discard.sql
new file mode 100644
index 0000000..24368f1
--- /dev/null
+++ b/src/test/regress/sql/discard.sql
@@ -0,0 +1,61 @@
+--
+-- DISCARD
+--
+
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE regress_rol_discardall;
+SET SESSION AUTHORIZATION regress_rol_discardall;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'regress_rol_discardall';
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'regress_rol_discardall';
+DROP ROLE regress_rol_discardall;
+
+
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ROLLBACK;
+
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql
index 0c21792..e1be53b 100644
--- a/src/test/regress/sql/guc.sql
+++ b/src/test/regress/sql/guc.sql
@@ -144,43 +144,6 @@ RESET datestyle;
 SHOW datestyle;
 SELECT '2006-08-13 12:34:56'::timestamptz;
 
---
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-
---
--- Test DISCARD ALL
---
-
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
-DROP ROLE temp_reset_user;
 
 --
 -- search_path should react to changes in pg_namespace
#6Jeff Janes
jeff.janes@gmail.com
In reply to: Robins Tharakan (#5)
Re: Add regression tests for DISCARD

On Sat, Jul 6, 2013 at 8:49 PM, Robins Tharakan <tharakan@gmail.com> wrote:

Thanks Fabrizio.

Although parallel_schedule was a miss for this specific patch, however, I
guess I seem to have missed out serial_schedule completely (in all patches)
and then thanks for pointing this out. Subsequently Robert too noticed the
miss at the serial_schedule end.

Why does serial_schedule even exist? Couldn't we just run the
parallel schedule serially, like what happens when MAX_CONNECTIONS=1?

Cheers,

Jeff

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#7Robins Tharakan
tharakan@gmail.com
In reply to: Jeff Janes (#6)
Re: Add regression tests for DISCARD

On 7 July 2013 14:08, Jeff Janes <jeff.janes@gmail.com> wrote:

Why does serial_schedule even exist? Couldn't we just run the
parallel schedule serially, like what happens when MAX_CONNECTIONS=1?

Well, I am sure it works that way, without errors.
The 'why' still eludes me though, just that its required for this
submission.

--
Robins Tharakan

#8Fabrízio de Royes Mello
fabriziomello@gmail.com
In reply to: Robins Tharakan (#5)
Re: Add regression tests for DISCARD

On Sun, Jul 7, 2013 at 12:49 AM, Robins Tharakan <tharakan@gmail.com> wrote:

Thanks Fabrizio.

Although parallel_schedule was a miss for this specific patch, however, I
guess I seem to have missed out serial_schedule completely (in all patches)
and then thanks for pointing this out. Subsequently Robert too noticed the
miss at the serial_schedule end.

Please find attached a patch, updated towards serial_schedule /
parallel_schedule as well as the role name change as per Robert's feedback
on CREATE OPERATOR thread.

Ok.

Some basic checks on this patch:

- Removed unnecessary extra-lines: Yes
- Cleanly applies to Git-Head: Yes
- Documentation Updated: N/A
- Tests Updated: Yes
- All tests pass: Yes.
- Does it Work: Yes
- Do we want it?: Yes
- Is this a new feature: No
- Does it support pg_dump: No
- Does it follow coding guidelines: Yes
- Any visible issues: No
- Any corner cases missed out: No
- Performance tests required: No
- Any compiler warnings: No
- Are comments sufficient: Yes
- Others: N/A

Regards,

--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL

Show quoted text

Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Twitter: http://twitter.com/fabriziomello

#9Robert Haas
robertmhaas@gmail.com
In reply to: Robins Tharakan (#5)
Re: Add regression tests for DISCARD

On Sat, Jul 6, 2013 at 11:49 PM, Robins Tharakan <tharakan@gmail.com> wrote:

Thanks Fabrizio.

Although parallel_schedule was a miss for this specific patch, however, I
guess I seem to have missed out serial_schedule completely (in all patches)
and then thanks for pointing this out. Subsequently Robert too noticed the
miss at the serial_schedule end.

Please find attached a patch, updated towards serial_schedule /
parallel_schedule as well as the role name change as per Robert's feedback
on CREATE OPERATOR thread.

Aside from some reorganization, this patch just checks four new things:

- That DISCARD TEMPORARY works like DISCARD TEMP.
- That DISCARD PLANS does not throw an error.
- That DISCARD ALL fails from within a transaction.
- That DISCARD invalid_option fails.

The last of these fails with a parse error and therefore, per
discussion on the other thread, is not wanted. I'd be more inclined
to include the remaining three tests in the existing test file rather
than reorganize things into a new file. Reorganizing code makes
back-patching harder, and we do back-patch changes that update the
regression tests, and I don't think three new tests are are enough
justification to add a whole new file.

Possibly the test that DISCARD ALL fails from within a transaction
ought to be part of a more general category of tests for
PreventTransactionChain(). I notice that we currently have NO
regression tests that trip that function; we could consider testing
some of the others as well. But it's a bit tricky because the
CREATE/DROP DATABASE/TABLESPACE commands manipulate global objects -
which is a bit hairy - and COMMIT/ROLLBACK PREPARED require special
test setup. However, I think we could test CREATE INDEX CONCURRENTLY,
DROP INDEX CONCURRENTLY and CLUSTER in addition to DISCARD ALL. Or at
least some of those.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers