pg_stat_statements: Add tests with extended query protocol

There are currently no tests in the tree checking that queries using the
extended query protocol are able to map with their query ID.

This can be achieved for some paths of the extended query protocol with
the psql meta-commands \bind or \bind_named, so let's add some tests
based on both.

I have found that to be a useful addition while working on a different
issue.

Discussion: https://postgr.es/m/ZuEt6MOEBSlifBfn@paquier.xyz
This commit is contained in:
Michael Paquier 2024-09-13 09:41:06 +09:00
parent 05036a3155
commit 7b1ddbae36
4 changed files with 81 additions and 1 deletions

View File

@ -19,7 +19,7 @@ LDFLAGS_SL += $(filter -lm, $(LIBS))
REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/pg_stat_statements/pg_stat_statements.conf
REGRESS = select dml cursors utility level_tracking planning \
user_activity wal entry_timestamp privileges cleanup \
user_activity wal entry_timestamp privileges extended cleanup \
oldextversions
# Disabled because these tests require "shared_preload_libraries=pg_stat_statements",
# which typical installcheck users do not have (e.g. buildfarm clients).

View File

@ -0,0 +1,62 @@
-- Tests with extended query protocol
SET pg_stat_statements.track_utility = FALSE;
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
t
---
t
(1 row)
SELECT $1 \parse stmt1
SELECT $1, $2 \parse stmt2
SELECT $1, $2, $3 \parse stmt3
SELECT $1 \bind 'unnamed_val1' \g
?column?
--------------
unnamed_val1
(1 row)
\bind_named stmt1 'stmt1_val1' \g
?column?
------------
stmt1_val1
(1 row)
\bind_named stmt2 'stmt2_val1' 'stmt2_val2' \g
?column? | ?column?
------------+------------
stmt2_val1 | stmt2_val2
(1 row)
\bind_named stmt3 'stmt3_val1' 'stmt3_val2' 'stmt3_val3' \g
?column? | ?column? | ?column?
------------+------------+------------
stmt3_val1 | stmt3_val2 | stmt3_val3
(1 row)
\bind_named stmt3 'stmt3_val4' 'stmt3_val5' 'stmt3_val6' \g
?column? | ?column? | ?column?
------------+------------+------------
stmt3_val4 | stmt3_val5 | stmt3_val6
(1 row)
\bind_named stmt2 'stmt2_val3' 'stmt2_val4' \g
?column? | ?column?
------------+------------
stmt2_val3 | stmt2_val4
(1 row)
\bind_named stmt1 'stmt1_val1' \g
?column?
------------
stmt1_val1
(1 row)
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
calls | rows | query
-------+------+----------------------------------------------------
3 | 3 | SELECT $1
2 | 2 | SELECT $1, $2
2 | 2 | SELECT $1, $2, $3
1 | 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t
(4 rows)

View File

@ -51,6 +51,7 @@ tests += {
'wal',
'entry_timestamp',
'privileges',
'extended',
'cleanup',
'oldextversions',
],

View File

@ -0,0 +1,17 @@
-- Tests with extended query protocol
SET pg_stat_statements.track_utility = FALSE;
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
SELECT $1 \parse stmt1
SELECT $1, $2 \parse stmt2
SELECT $1, $2, $3 \parse stmt3
SELECT $1 \bind 'unnamed_val1' \g
\bind_named stmt1 'stmt1_val1' \g
\bind_named stmt2 'stmt2_val1' 'stmt2_val2' \g
\bind_named stmt3 'stmt3_val1' 'stmt3_val2' 'stmt3_val3' \g
\bind_named stmt3 'stmt3_val4' 'stmt3_val5' 'stmt3_val6' \g
\bind_named stmt2 'stmt2_val3' 'stmt2_val4' \g
\bind_named stmt1 'stmt1_val1' \g
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";