postgres.git / summary / log / commit / refs

commit    bea97cd02ebb347ab469b78673c2b33a72109669
Author:   David Rowley <drowley@postgresql.org>
Date:     Tue Apr 16 04:21:31 2024 +0000
First released in: 17.0

    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


src/test/regress/expected/sysviews.out | 23 +++++++++++++++++++++++ src/test/regress/expected/tuplesort.out | 13 +++++++++++++ src/test/regress/sql/sysviews.sql | 15 +++++++++++++++ src/test/regress/sql/tuplesort.sql | 9 +++++++++ 4 files changed, 60 insertions(+) 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 @@ -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 ---- 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 @@ -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 ---- [parent: 768ceeeaa127]