From 1e79469e9af0c03aff63d7db497b18207a6175ea Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Tue, 24 May 2022 15:52:01 +0300 Subject: [PATCH] Add tests --- .../expected/citus_local_tables_mx.out | 77 +++++++++++++++++++ .../regress/expected/view_propagation.out | 4 + .../regress/sql/citus_local_tables_mx.sql | 32 ++++++++ 3 files changed, 113 insertions(+) diff --git a/src/test/regress/expected/citus_local_tables_mx.out b/src/test/regress/expected/citus_local_tables_mx.out index 8923d3e82..88f2a6731 100644 --- a/src/test/regress/expected/citus_local_tables_mx.out +++ b/src/test/regress/expected/citus_local_tables_mx.out @@ -773,6 +773,83 @@ SELECT logicalrelid, partmethod, partkey FROM pg_dist_partition parent_dropped_col_2 | h | {VAR :varno 1 :varattno 5 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 5 :location -1} (2 rows) +-- some tests for view propagation on citus local tables +CREATE TABLE view_tbl_1 (a int); +CREATE TABLE view_tbl_2 (a int); +CREATE SCHEMA viewsc; +-- create dependent views, in a different schema +-- the first one depends on a citus metadata table +CREATE VIEW viewsc.prop_view AS SELECT COUNT (*) FROM view_tbl_1 JOIN pg_dist_node ON view_tbl_1.a=pg_dist_node.nodeid; +CREATE VIEW viewsc.prop_view2 AS SELECT COUNT (*) FROM view_tbl_1; +SELECT citus_add_local_table_to_metadata('view_tbl_1'); + citus_add_local_table_to_metadata +--------------------------------------------------------------------- + +(1 row) + +-- verify the shard view is dropped, and created&propagated the correct view +SELECT viewname, definition FROM pg_views WHERE viewname LIKE 'prop_view%' ORDER BY viewname; + viewname | definition +--------------------------------------------------------------------- + prop_view | SELECT count(*) AS count + + | FROM (view_tbl_1 + + | JOIN pg_dist_node ON ((view_tbl_1.a = pg_dist_node.nodeid))); + prop_view2 | SELECT count(*) AS count + + | FROM view_tbl_1; +(2 rows) + +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,2) + (localhost,57638,t,2) +(2 rows) + +-- drop views +DROP VIEW viewsc.prop_view; +DROP VIEW viewsc.prop_view2; +-- verify dropped on workers +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,0) + (localhost,57638,t,0) +(2 rows) + +-- create a view that depends on a pg_ table +CREATE VIEW viewsc.prop_view3 AS SELECT COUNT (*) FROM view_tbl_1 JOIN pg_namespace ON view_tbl_1.a=pg_namespace.nspowner; +-- create a view that depends on two different tables, one of them is local for now +CREATE VIEW viewsc.prop_view4 AS SELECT COUNT (*) FROM view_tbl_1 JOIN view_tbl_2 ON view_tbl_1.a=view_tbl_2.a; +-- distribute the first table +SELECT create_distributed_table('view_tbl_1','a'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +-- verify the last view is not distributed +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,1) + (localhost,57638,t,1) +(2 rows) + +-- add the other table to metadata, so the local view gets distributed +SELECT citus_add_local_table_to_metadata('view_tbl_2'); + citus_add_local_table_to_metadata +--------------------------------------------------------------------- + +(1 row) + +-- verify both views are distributed +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,t,2) + (localhost,57638,t,2) +(2 rows) + -- cleanup at exit set client_min_messages to error; DROP SCHEMA citus_local_tables_mx CASCADE; diff --git a/src/test/regress/expected/view_propagation.out b/src/test/regress/expected/view_propagation.out index 30e163818..6b49120cc 100644 --- a/src/test/regress/expected/view_propagation.out +++ b/src/test/regress/expected/view_propagation.out @@ -570,6 +570,10 @@ BEGIN; SET LOCAL citus.force_max_query_parallelization TO ON; CREATE TABLE table_1_to_view_in_transaction(a int); SELECT create_distributed_table('table_1_to_view_in_transaction', 'a'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) CREATE TABLE table_2_to_view_in_transaction(a int); SELECT create_distributed_table('table_2_to_view_in_transaction', 'a'); create_distributed_table diff --git a/src/test/regress/sql/citus_local_tables_mx.sql b/src/test/regress/sql/citus_local_tables_mx.sql index 4e72c6c13..73f2a126e 100644 --- a/src/test/regress/sql/citus_local_tables_mx.sql +++ b/src/test/regress/sql/citus_local_tables_mx.sql @@ -409,6 +409,38 @@ SELECT logicalrelid, partmethod, partkey FROM pg_dist_partition WHERE logicalrelid IN ('parent_dropped_col'::regclass, 'parent_dropped_col_2'::regclass) ORDER BY logicalrelid; +-- some tests for view propagation on citus local tables +CREATE TABLE view_tbl_1 (a int); +CREATE TABLE view_tbl_2 (a int); +CREATE SCHEMA viewsc; +-- create dependent views, in a different schema +-- the first one depends on a citus metadata table +CREATE VIEW viewsc.prop_view AS SELECT COUNT (*) FROM view_tbl_1 JOIN pg_dist_node ON view_tbl_1.a=pg_dist_node.nodeid; +CREATE VIEW viewsc.prop_view2 AS SELECT COUNT (*) FROM view_tbl_1; +SELECT citus_add_local_table_to_metadata('view_tbl_1'); +-- verify the shard view is dropped, and created&propagated the correct view +SELECT viewname, definition FROM pg_views WHERE viewname LIKE 'prop_view%' ORDER BY viewname; + +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); +-- drop views +DROP VIEW viewsc.prop_view; +DROP VIEW viewsc.prop_view2; +-- verify dropped on workers +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + +-- create a view that depends on a pg_ table +CREATE VIEW viewsc.prop_view3 AS SELECT COUNT (*) FROM view_tbl_1 JOIN pg_namespace ON view_tbl_1.a=pg_namespace.nspowner; +-- create a view that depends on two different tables, one of them is local for now +CREATE VIEW viewsc.prop_view4 AS SELECT COUNT (*) FROM view_tbl_1 JOIN view_tbl_2 ON view_tbl_1.a=view_tbl_2.a; +-- distribute the first table +SELECT create_distributed_table('view_tbl_1','a'); +-- verify the last view is not distributed +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); +-- add the other table to metadata, so the local view gets distributed +SELECT citus_add_local_table_to_metadata('view_tbl_2'); +-- verify both views are distributed +SELECT run_command_on_workers($$SELECT COUNT(*) FROM pg_views WHERE viewname LIKE 'prop_view%';$$); + -- cleanup at exit set client_min_messages to error; DROP SCHEMA citus_local_tables_mx CASCADE;