Skip to content

Commit 44e0ebe

Browse files
committed
tests for function postprocess_child_table_and_atts()
1 parent 6c6e05c commit 44e0ebe

File tree

2 files changed

+105
-2
lines changed

2 files changed

+105
-2
lines changed

expected/pathman_permissions.out

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ SELECT prepend_range_partition('permissions.user1_table');
7777
permissions.user1_table_4
7878
(1 row)
7979

80-
SELECT attname, attacl from pg_attribute
80+
SELECT attname, attacl FROM pg_attribute
8181
WHERE attrelid = (SELECT "partition" FROM pathman_partition_list
8282
WHERE parent = 'permissions.user1_table'::REGCLASS
8383
ORDER BY range_min::int ASC /* prepend */
@@ -166,6 +166,73 @@ NOTICE: 10 rows copied from permissions.user2_table_2
166166
3
167167
(1 row)
168168

169+
/* Switch to #1 */
170+
SET ROLE user1;
171+
CREATE TABLE permissions.dropped_column(a int, val int not null, b int, c int);
172+
INSERT INTO permissions.dropped_column SELECT i,i,i,i FROM generate_series(1, 30) i;
173+
GRANT SELECT(val), INSERT(val) ON permissions.dropped_column TO user2;
174+
SELECT create_range_partitions('permissions.dropped_column', 'val', 1, 10);
175+
NOTICE: sequence "dropped_column_seq" does not exist, skipping
176+
create_range_partitions
177+
-------------------------
178+
3
179+
(1 row)
180+
181+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
182+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
183+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
184+
AND attacl IS NOT NULL
185+
ORDER BY attrelid::regclass::text; /* check ACL for each column */
186+
attrelid | attname | attacl
187+
------------------------------+---------+------------------
188+
permissions.dropped_column_1 | val | {user2=ar/user1}
189+
permissions.dropped_column_2 | val | {user2=ar/user1}
190+
permissions.dropped_column_3 | val | {user2=ar/user1}
191+
(3 rows)
192+
193+
ALTER TABLE permissions.dropped_column DROP COLUMN a; /* DROP "a" */
194+
SELECT append_range_partition('permissions.dropped_column');
195+
append_range_partition
196+
------------------------------
197+
permissions.dropped_column_4
198+
(1 row)
199+
200+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
201+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
202+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
203+
AND attacl IS NOT NULL
204+
ORDER BY attrelid::regclass::text; /* check ACL for each column (+1 partition) */
205+
attrelid | attname | attacl
206+
------------------------------+---------+------------------
207+
permissions.dropped_column_1 | val | {user2=ar/user1}
208+
permissions.dropped_column_2 | val | {user2=ar/user1}
209+
permissions.dropped_column_3 | val | {user2=ar/user1}
210+
permissions.dropped_column_4 | val | {user2=ar/user1}
211+
(4 rows)
212+
213+
ALTER TABLE permissions.dropped_column DROP COLUMN b; /* DROP "b" */
214+
SELECT append_range_partition('permissions.dropped_column');
215+
append_range_partition
216+
------------------------------
217+
permissions.dropped_column_5
218+
(1 row)
219+
220+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
221+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
222+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
223+
AND attacl IS NOT NULL
224+
ORDER BY attrelid::regclass::text; /* check ACL for each column (+1 partition) */
225+
attrelid | attname | attacl
226+
------------------------------+---------+------------------
227+
permissions.dropped_column_1 | val | {user2=ar/user1}
228+
permissions.dropped_column_2 | val | {user2=ar/user1}
229+
permissions.dropped_column_3 | val | {user2=ar/user1}
230+
permissions.dropped_column_4 | val | {user2=ar/user1}
231+
permissions.dropped_column_5 | val | {user2=ar/user1}
232+
(5 rows)
233+
234+
DROP TABLE permissions.dropped_column CASCADE;
235+
NOTICE: drop cascades to 5 other objects
169236
/* Finally reset user */
170237
RESET ROLE;
171238
DROP OWNED BY user1;

sql/pathman_permissions.sql

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ GRANT UPDATE(a) ON permissions.user1_table TO user2; /* per-column ACL */
6262
/* Should be able to prepend a partition */
6363
SET ROLE user2;
6464
SELECT prepend_range_partition('permissions.user1_table');
65-
SELECT attname, attacl from pg_attribute
65+
SELECT attname, attacl FROM pg_attribute
6666
WHERE attrelid = (SELECT "partition" FROM pathman_partition_list
6767
WHERE parent = 'permissions.user1_table'::REGCLASS
6868
ORDER BY range_min::int ASC /* prepend */
@@ -104,6 +104,42 @@ INSERT INTO permissions.user2_table SELECT generate_series(1, 30);
104104
SELECT drop_partitions('permissions.user2_table');
105105

106106

107+
/* Switch to #1 */
108+
SET ROLE user1;
109+
CREATE TABLE permissions.dropped_column(a int, val int not null, b int, c int);
110+
INSERT INTO permissions.dropped_column SELECT i,i,i,i FROM generate_series(1, 30) i;
111+
112+
GRANT SELECT(val), INSERT(val) ON permissions.dropped_column TO user2;
113+
114+
SELECT create_range_partitions('permissions.dropped_column', 'val', 1, 10);
115+
116+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
117+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
118+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
119+
AND attacl IS NOT NULL
120+
ORDER BY attrelid::regclass::text; /* check ACL for each column */
121+
122+
ALTER TABLE permissions.dropped_column DROP COLUMN a; /* DROP "a" */
123+
SELECT append_range_partition('permissions.dropped_column');
124+
125+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
126+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
127+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
128+
AND attacl IS NOT NULL
129+
ORDER BY attrelid::regclass::text; /* check ACL for each column (+1 partition) */
130+
131+
ALTER TABLE permissions.dropped_column DROP COLUMN b; /* DROP "b" */
132+
SELECT append_range_partition('permissions.dropped_column');
133+
134+
SELECT attrelid::regclass, attname, attacl FROM pg_attribute
135+
WHERE attrelid = ANY (SELECT "partition" FROM pathman_partition_list
136+
WHERE parent = 'permissions.dropped_column'::REGCLASS)
137+
AND attacl IS NOT NULL
138+
ORDER BY attrelid::regclass::text; /* check ACL for each column (+1 partition) */
139+
140+
DROP TABLE permissions.dropped_column CASCADE;
141+
142+
107143
/* Finally reset user */
108144
RESET ROLE;
109145

0 commit comments

Comments
 (0)