Skip to content

Commit d8e5b54

Browse files
committed
Refactor columnar tests to use helper functions for storage ID retrieval and stripe counting
1 parent bc8ab44 commit d8e5b54

24 files changed

Lines changed: 448 additions & 122 deletions

src/test/regress/expected/columnar_create.out

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,9 @@ SELECT COUNT(*) FROM columnar_temp WHERE i < 5;
214214
4
215215
(1 row)
216216

217-
SELECT columnar.get_storage_id(oid) AS columnar_temp_storage_id
218-
FROM pg_class WHERE relname='columnar_temp' \gset
217+
SELECT COALESCE(columnar_test_helpers.get_storage_id_if_visible('columnar_temp'::regclass), 0)
218+
AS columnar_temp_storage_id
219+
\gset
219220
BEGIN;
220221
DROP TABLE columnar_temp;
221222
-- show that we drop stripes properly

src/test/regress/expected/columnar_drop.out

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,35 @@
1212
-- 'postgres' directory is excluded from comparison to have the same result.
1313
-- store postgres database oid
1414
SELECT oid postgres_oid FROM pg_database WHERE datname = 'postgres' \gset
15-
SELECT count(distinct storage_id) AS columnar_stripes_before_drop FROM columnar.stripe \gset
15+
SELECT columnar_test_helpers.safe_visible_stripe_count() AS columnar_stripes_before_drop \gset
1616
-- DROP columnar tables
1717
DROP TABLE contestant;
1818
DROP TABLE contestant_compressed;
1919
-- make sure DROP deletes metadata
20-
SELECT :columnar_stripes_before_drop - count(distinct storage_id) FROM columnar.stripe;
21-
?column?
20+
SELECT :columnar_stripes_before_drop - columnar_test_helpers.safe_visible_stripe_count() AS dropped;
21+
dropped
2222
---------------------------------------------------------------------
23-
2
23+
2
2424
(1 row)
2525

2626
-- Create a columnar table under a schema and drop it.
2727
CREATE SCHEMA test_schema;
2828
CREATE TABLE test_schema.test_table(data int) USING columnar;
2929
INSERT INTO test_schema.test_table VALUES (1);
30-
SELECT count(*) AS columnar_stripes_before_drop FROM columnar.stripe \gset
30+
-- capture schema OID (via catalog), then save it to a var
31+
SELECT oid AS test_schema_oid FROM pg_catalog.pg_namespace WHERE nspname = 'test_schema' \gset
32+
-- baseline, scoped to that schema OID
33+
SELECT columnar_test_helpers.safe_visible_stripe_count_by_oid(:test_schema_oid) AS columnar_stripes_before_drop \gset
34+
-- drop the schema
3135
DROP SCHEMA test_schema CASCADE;
3236
NOTICE: drop cascades to table test_schema.test_table
33-
SELECT :columnar_stripes_before_drop - count(distinct storage_id) FROM columnar.stripe;
34-
?column?
37+
-- delta using the saved OID (works even though the schema name no longer exists)
38+
SELECT :columnar_stripes_before_drop
39+
- columnar_test_helpers.safe_visible_stripe_count_by_oid(:test_schema_oid)
40+
AS dropped;
41+
dropped
3542
---------------------------------------------------------------------
36-
1
43+
1
3744
(1 row)
3845

3946
SELECT current_database() datname \gset

src/test/regress/expected/columnar_first_row_number.out

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CREATE SCHEMA columnar_first_row_number;
2-
SET search_path tO columnar_first_row_number;
2+
SET search_path to columnar_first_row_number;
33
CREATE TABLE col_table_1 (a int) USING columnar;
44
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 10) i;
55
BEGIN;
@@ -9,9 +9,13 @@ ROLLBACK;
99
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 12) i;
1010
ALTER TABLE col_table_1 SET (columnar.stripe_row_limit = 1000);
1111
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 2350) i;
12-
SELECT row_count, first_row_number FROM columnar.stripe a
13-
WHERE a.storage_id = columnar.get_storage_id('col_table_1'::regclass)
14-
ORDER BY stripe_num;
12+
WITH s AS (
13+
SELECT columnar.get_storage_id('col_table_1'::regclass) AS sid
14+
)
15+
SELECT a.row_count, a.first_row_number
16+
FROM columnar_internal.stripe a, s
17+
WHERE a.storage_id = s.sid
18+
ORDER BY a.stripe_num;
1519
row_count | first_row_number
1620
---------------------------------------------------------------------
1721
10 | 1
@@ -39,9 +43,13 @@ BEGIN;
3943
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 16) i;
4044
COMMIT;
4145
-- show that we start with first_row_number=1 after TRUNCATE
42-
SELECT row_count, first_row_number FROM columnar.stripe a
43-
WHERE a.storage_id = columnar.get_storage_id('col_table_1'::regclass)
44-
ORDER BY stripe_num;
46+
WITH s AS (
47+
SELECT columnar.get_storage_id('col_table_1'::regclass) AS sid
48+
)
49+
SELECT a.row_count, a.first_row_number
50+
FROM columnar_internal.stripe a, s
51+
WHERE a.storage_id = s.sid
52+
ORDER BY a.stripe_num;
4553
row_count | first_row_number
4654
---------------------------------------------------------------------
4755
32 | 1

src/test/regress/expected/columnar_indexes.out

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -599,8 +599,10 @@ begin;
599599
-- i) abort before flushing
600600
rollback;
601601
insert into uniq select generate_series(1,100);
602-
SELECT COUNT(*)=1 FROM columnar.stripe cs
603-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
602+
SELECT COUNT(*) = 1
603+
FROM columnar_internal.stripe AS st
604+
WHERE st.storage_id =
605+
columnar.get_storage_id('columnar_indexes.uniq'::regclass);
604606
?column?
605607
---------------------------------------------------------------------
606608
t
@@ -618,8 +620,10 @@ begin;
618620

619621
rollback;
620622
insert into uniq select generate_series(1,100);
621-
SELECT COUNT(*)=1 FROM columnar.stripe cs
622-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
623+
SELECT COUNT(*) = 1
624+
FROM columnar_internal.stripe AS st
625+
WHERE st.storage_id =
626+
columnar.get_storage_id('columnar_indexes.uniq'::regclass);
623627
?column?
624628
---------------------------------------------------------------------
625629
t
@@ -632,8 +636,10 @@ begin;
632636
-- i) abort before flushing
633637
rollback;
634638
insert into uniq select generate_series(1,100);
635-
SELECT COUNT(*)=1 FROM columnar.stripe cs
636-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
639+
SELECT COUNT(*) = 1
640+
FROM columnar_internal.stripe AS st
641+
WHERE st.storage_id =
642+
columnar.get_storage_id('columnar_indexes.uniq'::regclass);
637643
?column?
638644
---------------------------------------------------------------------
639645
t
@@ -651,8 +657,10 @@ begin;
651657

652658
rollback;
653659
insert into uniq select generate_series(1,100);
654-
SELECT COUNT(*)=1 FROM columnar.stripe cs
655-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
660+
SELECT COUNT(*) = 1
661+
FROM columnar_internal.stripe AS st
662+
WHERE st.storage_id =
663+
columnar.get_storage_id('columnar_indexes.uniq'::regclass);
656664
?column?
657665
---------------------------------------------------------------------
658666
t
@@ -668,17 +676,23 @@ begin;
668676
-- values. So the following insert should just work.
669677
insert into uniq select generate_series(1,100);
670678
-- didn't flush anything yet, but should see the in progress stripe-write
671-
SELECT stripe_num, first_row_number, row_count FROM columnar.stripe cs
672-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
679+
SELECT st.stripe_num, st.first_row_number, st.row_count
680+
FROM columnar_internal.stripe AS st
681+
WHERE st.storage_id =
682+
columnar.get_storage_id('columnar_indexes.uniq'::regclass)
683+
ORDER BY st.stripe_num;
673684
stripe_num | first_row_number | row_count
674685
---------------------------------------------------------------------
675686
2 | 150001 | 0
676687
(1 row)
677688

678689
commit;
679690
-- should have completed the stripe reservation
680-
SELECT stripe_num, first_row_number, row_count FROM columnar.stripe cs
681-
WHERE cs.storage_id = columnar.get_storage_id('columnar_indexes.uniq'::regclass);
691+
SELECT st.stripe_num, st.first_row_number, st.row_count
692+
FROM columnar_internal.stripe AS st
693+
WHERE st.storage_id =
694+
columnar.get_storage_id('columnar_indexes.uniq'::regclass)
695+
ORDER BY st.stripe_num;
682696
stripe_num | first_row_number | row_count
683697
---------------------------------------------------------------------
684698
2 | 150001 | 100

src/test/regress/expected/columnar_insert.out

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,14 @@ select
194194
2 | 0 | 6 | 750001
195195
(1 row)
196196

197-
SELECT relname, stripe_num, chunk_group_count, row_count FROM columnar.stripe a, pg_class b
198-
WHERE columnar.get_storage_id(b.oid)=a.storage_id AND relname = 'zero_col'
197+
SELECT c.relname, st.stripe_num, st.chunk_group_count, st.row_count
198+
FROM pg_catalog.pg_class AS c
199+
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
200+
JOIN pg_catalog.pg_am AS am ON am.oid = c.relam AND am.amname = 'columnar'
201+
JOIN LATERAL (SELECT columnar.get_storage_id(c.oid) AS sid) AS s ON true
202+
JOIN columnar_internal.stripe AS st ON st.storage_id = s.sid
203+
WHERE c.relname = 'zero_col'
204+
AND (c.relpersistence <> 't' OR c.relnamespace = pg_catalog.pg_my_temp_schema())
199205
ORDER BY 1,2,3,4;
200206
relname | stripe_num | chunk_group_count | row_count
201207
---------------------------------------------------------------------
@@ -206,15 +212,27 @@ ORDER BY 1,2,3,4;
206212
zero_col | 5 | 1 | 64
207213
(5 rows)
208214

209-
SELECT relname, stripe_num, value_count FROM columnar.chunk a, pg_class b
210-
WHERE columnar.get_storage_id(b.oid)=a.storage_id AND relname = 'zero_col'
215+
SELECT c.relname, ch.stripe_num, ch.value_count
216+
FROM pg_catalog.pg_class AS c
217+
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
218+
JOIN pg_catalog.pg_am AS am ON am.oid = c.relam AND am.amname = 'columnar'
219+
JOIN LATERAL (SELECT columnar.get_storage_id(c.oid) AS sid) AS s ON true
220+
JOIN columnar_internal.chunk AS ch ON ch.storage_id = s.sid
221+
WHERE c.relname = 'zero_col'
222+
AND (c.relpersistence <> 't' OR c.relnamespace = pg_catalog.pg_my_temp_schema())
211223
ORDER BY 1,2,3;
212224
relname | stripe_num | value_count
213225
---------------------------------------------------------------------
214226
(0 rows)
215227

216-
SELECT relname, stripe_num, chunk_group_num, row_count FROM columnar.chunk_group a, pg_class b
217-
WHERE columnar.get_storage_id(b.oid)=a.storage_id AND relname = 'zero_col'
228+
SELECT c.relname, cg.stripe_num, cg.chunk_group_num, cg.row_count
229+
FROM pg_catalog.pg_class AS c
230+
JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
231+
JOIN pg_catalog.pg_am AS am ON am.oid = c.relam AND am.amname = 'columnar'
232+
JOIN LATERAL (SELECT columnar.get_storage_id(c.oid) AS sid) AS s ON true
233+
JOIN columnar_internal.chunk_group AS cg ON cg.storage_id = s.sid
234+
WHERE c.relname = 'zero_col'
235+
AND (c.relpersistence <> 't' OR c.relnamespace = pg_catalog.pg_my_temp_schema())
218236
ORDER BY 1,2,3,4;
219237
relname | stripe_num | chunk_group_num | row_count
220238
---------------------------------------------------------------------

src/test/regress/expected/columnar_matview.out

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,14 @@ SELECT * FROM t_view a ORDER BY a;
6363
-- verify that we have created metadata entries for the materialized view
6464
SELECT columnar.get_storage_id(oid) AS storageid
6565
FROM pg_class WHERE relname='t_view' \gset
66-
SELECT count(*) FROM columnar.stripe WHERE storage_id=:storageid;
66+
SELECT columnar.get_storage_id('t_view'::regclass) AS storageid \gset
67+
SELECT count(*) FROM columnar_internal.stripe WHERE storage_id = :storageid;
6768
count
6869
---------------------------------------------------------------------
6970
1
7071
(1 row)
7172

72-
SELECT count(*) FROM columnar.chunk WHERE storage_id=:storageid;
73+
SELECT count(*) FROM columnar_internal.chunk WHERE storage_id = :storageid;
7374
count
7475
---------------------------------------------------------------------
7576
3
@@ -78,13 +79,13 @@ SELECT count(*) FROM columnar.chunk WHERE storage_id=:storageid;
7879
DROP TABLE t CASCADE;
7980
NOTICE: drop cascades to materialized view t_view
8081
-- dropping must remove metadata
81-
SELECT count(*) FROM columnar.stripe WHERE storage_id=:storageid;
82+
SELECT count(*) FROM columnar_internal.stripe WHERE storage_id = :storageid;
8283
count
8384
---------------------------------------------------------------------
8485
0
8586
(1 row)
8687

87-
SELECT count(*) FROM columnar.chunk WHERE storage_id=:storageid;
88+
SELECT count(*) FROM columnar_internal.chunk WHERE storage_id = :storageid;
8889
count
8990
---------------------------------------------------------------------
9091
0

src/test/regress/expected/columnar_recursive.out

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,19 @@ $$ LANGUAGE SQL;
1111
INSERT INTO t2 SELECT i, f(i) FROM generate_series(1, 5) i;
1212
-- there are no subtransactions, so above statement should batch
1313
-- INSERTs inside the UDF and create on stripe per table.
14-
SELECT relname, count(*) FROM columnar.stripe a, pg_class b
15-
WHERE columnar.get_storage_id(b.oid)=a.storage_id AND relname IN ('t1', 't2')
16-
GROUP BY relname
17-
ORDER BY relname;
14+
WITH rels(rel) AS (
15+
VALUES ('t1'::regclass), ('t2'::regclass)
16+
),
17+
sids AS (
18+
SELECT rel, columnar.get_storage_id(rel) AS sid
19+
FROM rels
20+
)
21+
SELECT c.relname, COUNT(*) AS count
22+
FROM columnar_internal.stripe st
23+
JOIN sids s ON st.storage_id = s.sid
24+
JOIN pg_catalog.pg_class c ON c.oid = s.rel
25+
GROUP BY c.relname
26+
ORDER BY c.relname;
1827
relname | count
1928
---------------------------------------------------------------------
2029
t1 | 1

src/test/regress/expected/columnar_rollback.out

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,15 @@
33
--
44
CREATE TABLE t(a int, b int) USING columnar;
55
CREATE VIEW t_stripes AS
6-
SELECT * FROM columnar.stripe a, pg_class b
7-
WHERE a.storage_id = columnar.get_storage_id(b.oid) AND b.relname = 't';
6+
SELECT st.stripe_num, st.first_row_number, st.row_count, st.chunk_group_count
7+
FROM columnar_internal.stripe AS st
8+
JOIN LATERAL (
9+
SELECT columnar.get_storage_id(
10+
(quote_ident(current_schema())||'.t')::regclass
11+
) AS sid
12+
) s ON true
13+
WHERE st.storage_id = s.sid
14+
ORDER BY st.stripe_num;
815
BEGIN;
916
INSERT INTO t SELECT i, i+1 FROM generate_series(1, 10) i;
1017
ROLLBACK;

src/test/regress/expected/columnar_test_helpers.out

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,76 @@ BEGIN
146146
RETURN NEXT;
147147
END LOOP;
148148
END; $$ language plpgsql;
149+
-- Count only stripes that belong to *visible* columnar tables:
150+
-- • permanent/unlogged tables from any schema
151+
-- • or temp tables from *my* session (exclude other sessions' temps)
152+
CREATE OR REPLACE FUNCTION safe_visible_stripe_count(ns regnamespace DEFAULT NULL)
153+
RETURNS bigint
154+
LANGUAGE sql
155+
STABLE
156+
AS $$
157+
WITH rels AS (
158+
SELECT c.oid
159+
FROM pg_catalog.pg_class c
160+
JOIN pg_catalog.pg_am am ON am.oid = c.relam
161+
WHERE am.amname = 'columnar'
162+
AND (c.relpersistence <> 't' OR c.relnamespace = pg_catalog.pg_my_temp_schema())
163+
AND ($1 IS NULL OR c.relnamespace = $1)
164+
),
165+
sids AS (
166+
-- Safe to call: we filtered out other sessions' temp rels above
167+
SELECT columnar.get_storage_id(oid) AS sid
168+
FROM rels
169+
)
170+
SELECT COUNT(DISTINCT st.storage_id)
171+
FROM columnar_internal.stripe AS st
172+
JOIN sids ON st.storage_id = sids.sid;
173+
$$;
174+
CREATE OR REPLACE FUNCTION safe_visible_stripe_count_by_oid(ns_oid oid DEFAULT NULL)
175+
RETURNS bigint
176+
LANGUAGE sql
177+
STABLE
178+
AS $$
179+
WITH rels AS (
180+
SELECT c.oid
181+
FROM pg_catalog.pg_class c
182+
JOIN pg_catalog.pg_am am ON am.oid = c.relam
183+
WHERE am.amname = 'columnar'
184+
AND (c.relpersistence <> 't' OR c.relnamespace = pg_catalog.pg_my_temp_schema())
185+
AND ($1 IS NULL OR c.relnamespace = $1)
186+
),
187+
sids AS (
188+
SELECT columnar.get_storage_id(oid) AS sid
189+
FROM rels
190+
)
191+
SELECT COUNT(DISTINCT st.storage_id)
192+
FROM columnar_internal.stripe AS st
193+
JOIN sids ON st.storage_id = sids.sid;
194+
$$;
195+
CREATE OR REPLACE FUNCTION get_storage_id_if_visible(rel regclass)
196+
RETURNS bigint
197+
LANGUAGE sql STABLE AS $$
198+
SELECT CASE
199+
WHEN c.relpersistence = 't'
200+
AND c.relnamespace <> pg_catalog.pg_my_temp_schema()
201+
THEN NULL -- other session’s temp → don’t touch
202+
ELSE columnar.get_storage_id(c.oid)
203+
END
204+
FROM pg_catalog.pg_class c
205+
WHERE c.oid = $1::oid
206+
$$;
207+
CREATE OR REPLACE FUNCTION columnar_test_helpers.chunks_for(rel regclass)
208+
RETURNS TABLE (
209+
stripe_num int,
210+
attr_num int,
211+
chunk_group_num int,
212+
minimum_value text,
213+
maximum_value text
214+
)
215+
LANGUAGE sql STABLE AS $$
216+
SELECT ch.stripe_num, ch.attr_num, ch.chunk_group_num,
217+
ch.minimum_value, ch.maximum_value
218+
FROM columnar_internal.chunk AS ch
219+
WHERE ch.storage_id = columnar.get_storage_id($1)
220+
ORDER BY ch.stripe_num, ch.attr_num, ch.chunk_group_num
221+
$$;

src/test/regress/expected/columnar_truncate.out

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ CREATE TABLE columnar_truncate_test_second (a int, b int) USING columnar;
77
-- COMPRESSED
88
CREATE TABLE columnar_truncate_test_compressed (a int, b int) USING columnar;
99
CREATE TABLE columnar_truncate_test_regular (a int, b int);
10-
SELECT count(distinct storage_id) AS columnar_data_files_before_truncate FROM columnar.stripe \gset
10+
SELECT columnar_test_helpers.safe_visible_stripe_count()
11+
AS columnar_data_files_before_truncate \gset
1112
INSERT INTO columnar_truncate_test select a, a from generate_series(1, 10) a;
1213
set columnar.compression = 'pglz';
1314
INSERT INTO columnar_truncate_test_compressed select a, a from generate_series(1, 10) a;

0 commit comments

Comments
 (0)