diff --git a/src/test/regress/expected/issue_6872.out b/src/test/regress/expected/issue_6872.out new file mode 100644 index 000000000..54e16aed9 --- /dev/null +++ b/src/test/regress/expected/issue_6872.out @@ -0,0 +1,105 @@ +CREATE SCHEMA issue_6872; +SET search_path to 'issue_6872'; +CREATE TABLE ref0(id int); +SELECT create_reference_table('ref0'); + create_reference_table +--------------------------------------------------------------------- + +(1 row) + +CREATE TABLE ref1(id int); +SELECT create_reference_table('ref1'); + create_reference_table +--------------------------------------------------------------------- + +(1 row) + +CREATE TABLE dist0(id int); +SELECT create_distributed_table('dist0','id'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +CREATE TABLE dist1(id int); +SELECT create_distributed_table('dist1','id'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +INSERT INTO dist0 SELECT i FROM generate_series(0,10) i; +INSERT INTO dist0 SELECT i FROM generate_series(1005,1025) i; +INSERT INTO dist0 SELECT * FROM dist0 ORDER BY id LIMIT 1; +INSERT INTO ref0 SELECT i FROM generate_series(0,10) i; +INSERT INTO ref0 SELECT i FROM generate_series(1010,1030) i; +INSERT INTO ref0 SELECT NULL FROM generate_series(0,1) i; +INSERT INTO ref0 SELECT * FROM ref0 ORDER BY id LIMIT 1; +INSERT INTO dist1 SELECT i FROM generate_series(0,10) i; +INSERT INTO dist1 SELECT i FROM generate_series(1015,1035) i; +INSERT INTO dist1 SELECT * FROM dist1 ORDER BY id LIMIT 1; +INSERT INTO ref1 SELECT i FROM generate_series(0,10) i; +INSERT INTO ref1 SELECT i FROM generate_series(1020,1040) i; +INSERT INTO ref1 SELECT NULL FROM generate_series(0,1) i; +INSERT INTO ref1 SELECT * FROM ref1 ORDER BY id LIMIT 1; +-- added to verify we fixed the issue https://github.com/citusdata/citus/issues/6872 +-- generated by Citus query generator tool +WITH cte_0 AS ( + SELECT + table_0.id + FROM + dist0 AS table_0 + INNER JOIN ref0 AS table_1 USING (id) + ORDER BY + id +) +SELECT + avg(avgsub.id) +FROM + ( + SELECT + table_2.id + FROM + ( + SELECT + table_3.id + FROM + cte_0 AS table_3 + ORDER BY + id + ) AS table_2 + WHERE + table_2.id IN ( + SELECT + table_4.id + FROM + dist0 AS table_4 + RIGHT JOIN ( + SELECT + table_6.id + FROM + dist0 AS table_6 + INNER JOIN ref1 AS table_7 USING (id) + ORDER BY + id + LIMIT + 28 + ) AS table_5 USING (id) + RIGHT JOIN dist1 AS table_8 USING (id) + WHERE + table_8.id = 6 + ORDER BY + id + ) + ) AS avgsub; + avg +--------------------------------------------------------------------- + 6.0000000000000000 +(1 row) + +DROP SCHEMA issue_6872 CASCADE; +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table ref0 +drop cascades to table ref1 +drop cascades to table dist0 +drop cascades to table dist1 diff --git a/src/test/regress/multi_schedule b/src/test/regress/multi_schedule index a78ee6088..1b8e7849c 100644 --- a/src/test/regress/multi_schedule +++ b/src/test/regress/multi_schedule @@ -95,7 +95,7 @@ test: multi_dropped_column_aliases foreign_key_restriction_enforcement test: binary_protocol test: alter_table_set_access_method test: alter_distributed_table -test: issue_5248 issue_5099 issue_5763 issue_6543 issue_6758 +test: issue_5248 issue_5099 issue_5763 issue_6543 issue_6758 issue_6872 test: object_propagation_debug test: undistribute_table test: run_command_on_all_nodes diff --git a/src/test/regress/sql/issue_6872.sql b/src/test/regress/sql/issue_6872.sql new file mode 100644 index 000000000..7934b6c45 --- /dev/null +++ b/src/test/regress/sql/issue_6872.sql @@ -0,0 +1,85 @@ +CREATE SCHEMA issue_6872; +SET search_path to 'issue_6872'; + +CREATE TABLE ref0(id int); +SELECT create_reference_table('ref0'); + +CREATE TABLE ref1(id int); +SELECT create_reference_table('ref1'); + +CREATE TABLE dist0(id int); +SELECT create_distributed_table('dist0','id'); + +CREATE TABLE dist1(id int); +SELECT create_distributed_table('dist1','id'); + +INSERT INTO dist0 SELECT i FROM generate_series(0,10) i; +INSERT INTO dist0 SELECT i FROM generate_series(1005,1025) i; +INSERT INTO dist0 SELECT * FROM dist0 ORDER BY id LIMIT 1; + +INSERT INTO ref0 SELECT i FROM generate_series(0,10) i; +INSERT INTO ref0 SELECT i FROM generate_series(1010,1030) i; +INSERT INTO ref0 SELECT NULL FROM generate_series(0,1) i; +INSERT INTO ref0 SELECT * FROM ref0 ORDER BY id LIMIT 1; + +INSERT INTO dist1 SELECT i FROM generate_series(0,10) i; +INSERT INTO dist1 SELECT i FROM generate_series(1015,1035) i; +INSERT INTO dist1 SELECT * FROM dist1 ORDER BY id LIMIT 1; + +INSERT INTO ref1 SELECT i FROM generate_series(0,10) i; +INSERT INTO ref1 SELECT i FROM generate_series(1020,1040) i; +INSERT INTO ref1 SELECT NULL FROM generate_series(0,1) i; +INSERT INTO ref1 SELECT * FROM ref1 ORDER BY id LIMIT 1; + +-- added to verify we fixed the issue https://github.com/citusdata/citus/issues/6872 +-- generated by Citus query generator tool +WITH cte_0 AS ( + SELECT + table_0.id + FROM + dist0 AS table_0 + INNER JOIN ref0 AS table_1 USING (id) + ORDER BY + id +) +SELECT + avg(avgsub.id) +FROM + ( + SELECT + table_2.id + FROM + ( + SELECT + table_3.id + FROM + cte_0 AS table_3 + ORDER BY + id + ) AS table_2 + WHERE + table_2.id IN ( + SELECT + table_4.id + FROM + dist0 AS table_4 + RIGHT JOIN ( + SELECT + table_6.id + FROM + dist0 AS table_6 + INNER JOIN ref1 AS table_7 USING (id) + ORDER BY + id + LIMIT + 28 + ) AS table_5 USING (id) + RIGHT JOIN dist1 AS table_8 USING (id) + WHERE + table_8.id = 6 + ORDER BY + id + ) + ) AS avgsub; + +DROP SCHEMA issue_6872 CASCADE;