aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2024-04-16 16:21:31 +1200
committerDavid Rowley <drowley@postgresql.org>2024-04-16 16:21:31 +1200
commitbea97cd02ebb347ab469b78673c2b33a72109669 (patch)
tree3649cbfb67ca118da5101eac3a6287b83f294035 /src
parent768ceeeaa127a8001d60ad6a62846a8be3f35d93 (diff)
downloadpostgresql-bea97cd02ebb347ab469b78673c2b33a72109669.tar.gz
postgresql-bea97cd02ebb347ab469b78673c2b33a72109669.zip
Improve test coverage in bump.c
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.m3i5eju6zylabvln@awork3.anarazel.de
Diffstat (limited to 'src')
-rw-r--r--src/test/regress/expected/sysviews.out23
-rw-r--r--src/test/regress/expected/tuplesort.out13
-rw-r--r--src/test/regress/sql/sysviews.sql15
-rw-r--r--src/test/regress/sql/tuplesort.sql9
4 files changed, 60 insertions, 0 deletions
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index 9be7aca2b8a..634dc8d8b8c 100644
--- a/src/test/regress/expected/sysviews.out
+++ b/src/test/regress/expected/sysviews.out
@@ -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
diff --git a/src/test/regress/expected/tuplesort.out b/src/test/regress/expected/tuplesort.out
index 0e8b5bf4a39..6dd97e7427a 100644
--- a/src/test/regress/expected/tuplesort.out
+++ b/src/test/regress/expected/tuplesort.out
@@ -344,6 +344,19 @@ 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;
+ left | b
+------------+---
+ bbbbbbbbbb | 2
+ aaaaaaaaaa | 1
+(2 rows)
+
+----
-- test forward and backward scans for in-memory and disk based tuplesort
----
-- in-memory
diff --git a/src/test/regress/sql/sysviews.sql b/src/test/regress/sql/sysviews.sql
index 6b4e24601d9..c4f59ddc89a 100644
--- a/src/test/regress/sql/sysviews.sql
+++ b/src/test/regress/sql/sysviews.sql
@@ -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;
diff --git a/src/test/regress/sql/tuplesort.sql b/src/test/regress/sql/tuplesort.sql
index 658fe98dc56..8476e594e6c 100644
--- a/src/test/regress/sql/tuplesort.sql
+++ b/src/test/regress/sql/tuplesort.sql
@@ -147,6 +147,15 @@ 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
----