From 3d99cdfcc7c0b4e09810498c8c5e78639fc4c926 Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Fri, 7 Apr 2017 12:18:34 +0200 Subject: [PATCH] Add basic read-only transaction tests --- .../regress/expected/multi_basic_queries.out | 10 ++++++++++ .../regress/expected/multi_router_planner.out | 20 +++++++++++++++++++ src/test/regress/expected/multi_utilities.out | 6 ++++++ src/test/regress/sql/multi_basic_queries.sql | 6 ++++++ src/test/regress/sql/multi_router_planner.sql | 9 +++++++++ src/test/regress/sql/multi_utilities.sql | 6 ++++++ 6 files changed, 57 insertions(+) diff --git a/src/test/regress/expected/multi_basic_queries.out b/src/test/regress/expected/multi_basic_queries.out index c225ed6ef..33d2c5fe2 100644 --- a/src/test/regress/expected/multi_basic_queries.out +++ b/src/test/regress/expected/multi_basic_queries.out @@ -22,6 +22,16 @@ SELECT avg(l_extendedprice) FROM lineitem; 38141.835375000000 (1 row) +-- Verify that we can do queries in read-only mode +BEGIN; +SET TRANSACTION READ ONLY; +SELECT count(*) FROM lineitem; + count +------- + 12000 +(1 row) + +COMMIT; -- Verify temp tables which are used for final result aggregation don't persist. SELECT count(*) FROM pg_class WHERE relname LIKE 'pg_merge_job_%' AND relkind = 'r'; count diff --git a/src/test/regress/expected/multi_router_planner.out b/src/test/regress/expected/multi_router_planner.out index af434a165..a5ad42622 100644 --- a/src/test/regress/expected/multi_router_planner.out +++ b/src/test/regress/expected/multi_router_planner.out @@ -2023,6 +2023,26 @@ DEBUG: Plan is router executable 41 | 1 | aznavour | 11814 (5 rows) +END; +-- queries inside read-only transactions can be router plannable +BEGIN; +SET TRANSACTION READ ONLY; +SELECT * + FROM articles_hash + WHERE author_id = 1 + ORDER BY id; +DEBUG: predicate pruning for shardId 840001 +DEBUG: Creating router plan +DEBUG: Plan is router executable + id | author_id | title | word_count +----+-----------+--------------+------------ + 1 | 1 | arsenous | 9572 + 11 | 1 | alamo | 1347 + 21 | 1 | arcading | 5890 + 31 | 1 | athwartships | 7271 + 41 | 1 | aznavour | 11814 +(5 rows) + END; -- cursor queries are router plannable BEGIN; diff --git a/src/test/regress/expected/multi_utilities.out b/src/test/regress/expected/multi_utilities.out index 541a38701..b8497059b 100644 --- a/src/test/regress/expected/multi_utilities.out +++ b/src/test/regress/expected/multi_utilities.out @@ -19,6 +19,12 @@ SELECT master_create_worker_shards('sharded_table', 2, 1); COPY sharded_table TO STDOUT; COPY (SELECT COUNT(*) FROM sharded_table) TO STDOUT; 0 +BEGIN; +SET TRANSACTION READ ONLY; +COPY sharded_table TO STDOUT; +COPY (SELECT COUNT(*) FROM sharded_table) TO STDOUT; +0 +COMMIT; -- cursors may not involve distributed tables DECLARE all_sharded_rows CURSOR FOR SELECT * FROM sharded_table; ERROR: DECLARE CURSOR can only be used in transaction blocks diff --git a/src/test/regress/sql/multi_basic_queries.sql b/src/test/regress/sql/multi_basic_queries.sql index 27160ea01..583ec0bc3 100644 --- a/src/test/regress/sql/multi_basic_queries.sql +++ b/src/test/regress/sql/multi_basic_queries.sql @@ -15,5 +15,11 @@ SELECT sum(l_extendedprice) FROM lineitem; SELECT avg(l_extendedprice) FROM lineitem; +-- Verify that we can do queries in read-only mode +BEGIN; +SET TRANSACTION READ ONLY; +SELECT count(*) FROM lineitem; +COMMIT; + -- Verify temp tables which are used for final result aggregation don't persist. SELECT count(*) FROM pg_class WHERE relname LIKE 'pg_merge_job_%' AND relkind = 'r'; diff --git a/src/test/regress/sql/multi_router_planner.sql b/src/test/regress/sql/multi_router_planner.sql index 4ad1f7798..c94507b17 100644 --- a/src/test/regress/sql/multi_router_planner.sql +++ b/src/test/regress/sql/multi_router_planner.sql @@ -906,6 +906,15 @@ SELECT * ORDER BY id; END; +-- queries inside read-only transactions can be router plannable +BEGIN; +SET TRANSACTION READ ONLY; +SELECT * + FROM articles_hash + WHERE author_id = 1 + ORDER BY id; +END; + -- cursor queries are router plannable BEGIN; DECLARE test_cursor CURSOR FOR diff --git a/src/test/regress/sql/multi_utilities.sql b/src/test/regress/sql/multi_utilities.sql index 5d1ac7bbf..80bd795bd 100644 --- a/src/test/regress/sql/multi_utilities.sql +++ b/src/test/regress/sql/multi_utilities.sql @@ -14,6 +14,12 @@ SELECT master_create_worker_shards('sharded_table', 2, 1); COPY sharded_table TO STDOUT; COPY (SELECT COUNT(*) FROM sharded_table) TO STDOUT; +BEGIN; +SET TRANSACTION READ ONLY; +COPY sharded_table TO STDOUT; +COPY (SELECT COUNT(*) FROM sharded_table) TO STDOUT; +COMMIT; + -- cursors may not involve distributed tables DECLARE all_sharded_rows CURSOR FOR SELECT * FROM sharded_table;