Skip to content

Commit afe9b9e

Browse files
committed
Add regression test for ATTACH PARTITION
This test case uses a SQL function as partitioning operator, whose evaluation results in the table's relcache being rebuilt partway through the execution of an ATTACH PARTITION command. It is extracted from 39808e8, which fixed a bug where this test case failed on master and REL_11_STABLE, but passed on REL_10_STABLE. The partitioning code has changed a lot during v11 development, so this makes sure that any patch applied to REL_10_STABLE fixing a partition-related bug does not break it again. Author: Amit Langote Reviewed-by: Michaël Paquier, Álvaro Herrera Discussion: https://postgr.es/m/CAKcux6=nTz9KSfTr_6Z2mpzLJ_09JN-rK6=dWic6gGyTSWueyQ@mail.gmail.com
1 parent 101b21e commit afe9b9e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/test/regress/expected/alter_table.out

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3669,3 +3669,18 @@ alter table temp_part_parent attach partition temp_part_child
36693669
for values in (1, 2); -- ok
36703670
drop table perm_part_parent cascade;
36713671
drop table temp_part_parent cascade;
3672+
-- test case where the partitioning operator is a SQL function whose
3673+
-- evaluation results in the table's relcache being rebuilt partway through
3674+
-- the execution of an ATTACH PARTITION command
3675+
create function at_test_sql_partop (int4, int4) returns int language sql
3676+
as $$ select case when $1 = $2 then 0 when $1 > $2 then 1 else -1 end; $$;
3677+
create operator class at_test_sql_partop for type int4 using btree as
3678+
operator 1 < (int4, int4), operator 2 <= (int4, int4),
3679+
operator 3 = (int4, int4), operator 4 >= (int4, int4),
3680+
operator 5 > (int4, int4), function 1 at_test_sql_partop(int4, int4);
3681+
create table at_test_sql_partop (a int) partition by range (a at_test_sql_partop);
3682+
create table at_test_sql_partop_1 (a int);
3683+
alter table at_test_sql_partop attach partition at_test_sql_partop_1 for values from (0) to (10);
3684+
drop table at_test_sql_partop;
3685+
drop operator class at_test_sql_partop using btree;
3686+
drop function at_test_sql_partop;

src/test/regress/sql/alter_table.sql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2388,3 +2388,19 @@ alter table temp_part_parent attach partition temp_part_child
23882388
for values in (1, 2); -- ok
23892389
drop table perm_part_parent cascade;
23902390
drop table temp_part_parent cascade;
2391+
2392+
-- test case where the partitioning operator is a SQL function whose
2393+
-- evaluation results in the table's relcache being rebuilt partway through
2394+
-- the execution of an ATTACH PARTITION command
2395+
create function at_test_sql_partop (int4, int4) returns int language sql
2396+
as $$ select case when $1 = $2 then 0 when $1 > $2 then 1 else -1 end; $$;
2397+
create operator class at_test_sql_partop for type int4 using btree as
2398+
operator 1 < (int4, int4), operator 2 <= (int4, int4),
2399+
operator 3 = (int4, int4), operator 4 >= (int4, int4),
2400+
operator 5 > (int4, int4), function 1 at_test_sql_partop(int4, int4);
2401+
create table at_test_sql_partop (a int) partition by range (a at_test_sql_partop);
2402+
create table at_test_sql_partop_1 (a int);
2403+
alter table at_test_sql_partop attach partition at_test_sql_partop_1 for values from (0) to (10);
2404+
drop table at_test_sql_partop;
2405+
drop operator class at_test_sql_partop using btree;
2406+
drop function at_test_sql_partop;

0 commit comments

Comments
 (0)