Improve test coverage in bump.c
authorDavid Rowley
Tue, 16 Apr 2024 04:21:31 +0000 (16:21 +1200)
committerDavid Rowley
Tue, 16 Apr 2024 04:21:31 +0000 (16:21 +1200)
There were no callers of BumpAllocLarge() in the regression tests, so
here we add a sort with a tuple large enough to use that path in bump.c.

Also, BumpStats() wasn't being called, so add a test to sysviews.sql to
call pg_backend_memory_contexts() while a bump context exists in the
backend.

Reported-by: Andres Freund
Discussion: https://postgr.es/m/20240414223305[email protected]

src/test/regress/expected/sysviews.out
src/test/regress/expected/tuplesort.out
src/test/regress/sql/sysviews.sql
src/test/regress/sql/tuplesort.sql

index 9be7aca2b8a04efd1e9cf19546ff610842e62594..634dc8d8b8cfd7ec2b01a0d0c0c2b7f266ce4ffe 100644 (file)
@@ -28,6 +28,29 @@ select name, ident, parent, level, total_bytes >= free_bytes
  TopMemoryContext |       |        |     0 | t
 (1 row)
 
+-- We can exercise some MemoryContext type stats functions.  Most of the
+-- column values are too platform-dependant to display.
+-- Ensure stats from the bump allocator look sane.  Bump isn't a commonly
+-- used context, but it is used in tuplesort.c, so open a cursor to keep
+-- the tuplesort alive long enough for us to query the context stats.
+begin;
+declare cur cursor for select left(a,10), b
+  from (values(repeat('a', 512 * 1024),1),(repeat('b', 512),2)) v(a,b)
+  order by v.a desc;
+fetch 1 from cur;
+    left    | b 
+------------+---
+ bbbbbbbbbb | 2
+(1 row)
+
+select name, parent, total_bytes > 0, total_nblocks, free_bytes > 0, free_chunks
+from pg_backend_memory_contexts where name = 'Caller tuples';
+     name      |     parent     | ?column? | total_nblocks | ?column? | free_chunks 
+---------------+----------------+----------+---------------+----------+-------------
+ Caller tuples | TupleSort sort | t        |             3 | t        |           0
+(1 row)
+
+rollback;
 -- At introduction, pg_config had 23 entries; it may grow
 select count(*) > 20 as ok from pg_config;
  ok 
index 0e8b5bf4a393359891c84d72d621b3fc2cf75b4f..6dd97e7427ae1446a2f9d2458e3899a75076a0ba 100644 (file)
@@ -343,6 +343,19 @@ ORDER BY ctid DESC LIMIT 5;
 (5 rows)
 
 ROLLBACK;
+----
+-- test sorting of large datums VALUES
+----
+-- Ensure the order is correct and values look intact
+SELECT LEFT(a,10),b FROM
+    (VALUES(REPEAT('a', 512 * 1024),1),(REPEAT('b', 512 * 1024),2)) v(a,b)
+ORDER BY v.a DESC;
+    left    | b 
+------------+---
+ bbbbbbbbbb | 2
+ aaaaaaaaaa | 1
+(2 rows)
+
 ----
 -- test forward and backward scans for in-memory and disk based tuplesort
 ----
index 6b4e24601d936af030110178791cd9038d2dbe0c..c4f59ddc89a18561f9ffaabe1ff5eca20b4bcdb5 100644 (file)
@@ -17,6 +17,21 @@ select count(*) >= 0 as ok from pg_available_extensions;
 select name, ident, parent, level, total_bytes >= free_bytes
   from pg_backend_memory_contexts where level = 0;
 
+-- We can exercise some MemoryContext type stats functions.  Most of the
+-- column values are too platform-dependant to display.
+
+-- Ensure stats from the bump allocator look sane.  Bump isn't a commonly
+-- used context, but it is used in tuplesort.c, so open a cursor to keep
+-- the tuplesort alive long enough for us to query the context stats.
+begin;
+declare cur cursor for select left(a,10), b
+  from (values(repeat('a', 512 * 1024),1),(repeat('b', 512),2)) v(a,b)
+  order by v.a desc;
+fetch 1 from cur;
+select name, parent, total_bytes > 0, total_nblocks, free_bytes > 0, free_chunks
+from pg_backend_memory_contexts where name = 'Caller tuples';
+rollback;
+
 -- At introduction, pg_config had 23 entries; it may grow
 select count(*) > 20 as ok from pg_config;
 
index 658fe98dc56fbcd9a077d54856a30f36d0c8c214..8476e594e6c15161ef45107a5bccab71411c038b 100644 (file)
@@ -146,6 +146,15 @@ FROM abbrev_abort_uuids
 ORDER BY ctid DESC LIMIT 5;
 ROLLBACK;
 
+----
+-- test sorting of large datums VALUES
+----
+
+-- Ensure the order is correct and values look intact
+SELECT LEFT(a,10),b FROM
+    (VALUES(REPEAT('a', 512 * 1024),1),(REPEAT('b', 512 * 1024),2)) v(a,b)
+ORDER BY v.a DESC;
+
 ----
 -- test forward and backward scans for in-memory and disk based tuplesort
 ----