From 14a254fb52423c57059851abafbd1247261f7f03 Mon Sep 17 00:00:00 2001
From: Noah Misch <noah@leadboat.com>
Date: Tue, 7 Jun 2016 23:36:22 -0400
Subject: [PATCH] Test parallel query essentials in "make check".
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Clément Prévost and Peter Eisentraut
---
 src/test/regress/expected/select_parallel.out | 54 +++++++++++++++++++
 src/test/regress/parallel_schedule            |  2 +-
 src/test/regress/serial_schedule              |  1 +
 src/test/regress/sql/select_parallel.sql      | 29 ++++++++++
 4 files changed, 85 insertions(+), 1 deletion(-)
 create mode 100644 src/test/regress/expected/select_parallel.out
 create mode 100644 src/test/regress/sql/select_parallel.sql

diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out
new file mode 100644
index 00000000000..b19dc1b2f0e
--- /dev/null
+++ b/src/test/regress/expected/select_parallel.out
@@ -0,0 +1,54 @@
+--
+-- PARALLEL
+--
+-- Serializable isolation would disable parallel query, so explicitly use an
+-- arbitrary other level.
+begin isolation level repeatable read;
+-- setup parallel test
+set parallel_setup_cost=0;
+set parallel_tuple_cost=0;
+explain (costs off)
+  select count(*) from a_star;
+                     QUERY PLAN                      
+-----------------------------------------------------
+ Finalize Aggregate
+   ->  Gather
+         Workers Planned: 1
+         ->  Partial Aggregate
+               ->  Append
+                     ->  Parallel Seq Scan on a_star
+                     ->  Parallel Seq Scan on b_star
+                     ->  Parallel Seq Scan on c_star
+                     ->  Parallel Seq Scan on d_star
+                     ->  Parallel Seq Scan on e_star
+                     ->  Parallel Seq Scan on f_star
+(11 rows)
+
+select count(*) from a_star;
+ count 
+-------
+    50
+(1 row)
+
+set force_parallel_mode=1;
+explain (costs off)
+  select stringu1::int2 from tenk1 where unique1 = 1;
+                  QUERY PLAN                   
+-----------------------------------------------
+ Gather
+   Workers Planned: 1
+   Single Copy: true
+   ->  Index Scan using tenk1_unique1 on tenk1
+         Index Cond: (unique1 = 1)
+(5 rows)
+
+do $$begin
+  -- Provoke error in worker.  The original message CONTEXT contains a worker
+  -- PID that must be hidden in the test output.  PL/pgSQL conveniently
+  -- substitutes its own CONTEXT.
+  select stringu1::int2 from tenk1 where unique1 = 1;
+end$$;
+ERROR:  invalid input syntax for integer: "BAAAAA"
+CONTEXT:  SQL statement "select stringu1::int2 from tenk1 where unique1 = 1"
+PL/pgSQL function inline_code_block line 5 at SQL statement
+rollback;
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index c03f6352b76..4ebad04d060 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -92,7 +92,7 @@ test: brin gin gist spgist privileges init_privs security_label collate matview
 test: alter_generic alter_operator misc psql async dbsize misc_functions
 
 # rules cannot run concurrently with any test that creates a view
-test: rules psql_crosstab
+test: rules psql_crosstab select_parallel
 
 # ----------
 # Another group of parallel tests
diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule
index e25660cdd65..5c7038d6e1b 100644
--- a/src/test/regress/serial_schedule
+++ b/src/test/regress/serial_schedule
@@ -125,6 +125,7 @@ test: dbsize
 test: misc_functions
 test: rules
 test: psql_crosstab
+test: select_parallel
 test: select_views
 test: portals_p2
 test: foreign_key
diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql
new file mode 100644
index 00000000000..1cd4a700f19
--- /dev/null
+++ b/src/test/regress/sql/select_parallel.sql
@@ -0,0 +1,29 @@
+--
+-- PARALLEL
+--
+
+-- Serializable isolation would disable parallel query, so explicitly use an
+-- arbitrary other level.
+begin isolation level repeatable read;
+
+-- setup parallel test
+set parallel_setup_cost=0;
+set parallel_tuple_cost=0;
+
+explain (costs off)
+  select count(*) from a_star;
+select count(*) from a_star;
+
+set force_parallel_mode=1;
+
+explain (costs off)
+  select stringu1::int2 from tenk1 where unique1 = 1;
+
+do $$begin
+  -- Provoke error in worker.  The original message CONTEXT contains a worker
+  -- PID that must be hidden in the test output.  PL/pgSQL conveniently
+  -- substitutes its own CONTEXT.
+  select stringu1::int2 from tenk1 where unique1 = 1;
+end$$;
+
+rollback;
-- 
GitLab