pg_stat_statements: Add tests with extended query protocol
authorMichael Paquier <[email protected]>
Fri, 13 Sep 2024 00:41:06 +0000 (09:41 +0900)
committerMichael Paquier <[email protected]>
Fri, 13 Sep 2024 00:41:06 +0000 (09:41 +0900)
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/[email protected]

contrib/pg_stat_statements/Makefile
contrib/pg_stat_statements/expected/extended.out [new file with mode: 0644]
contrib/pg_stat_statements/meson.build
contrib/pg_stat_statements/sql/extended.sql [new file with mode: 0644]

index c19ccad77ed4e4204238ec701b628405e1f49e93..1622b43ded65b128288ccf1da09bc2d194b95afe 100644 (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).
diff --git a/contrib/pg_stat_statements/expected/extended.out b/contrib/pg_stat_statements/expected/extended.out
new file mode 100644 (file)
index 0000000..bc8cb3f
--- /dev/null
@@ -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)
+
index 5cf926d1f85b6108458e2ac17fb04984910c8526..e14669ca15667f6e5a36044b315eb487111ac2ce 100644 (file)
@@ -51,6 +51,7 @@ tests += {
       'wal',
       'entry_timestamp',
       'privileges',
+      'extended',
       'cleanup',
       'oldextversions',
     ],
diff --git a/contrib/pg_stat_statements/sql/extended.sql b/contrib/pg_stat_statements/sql/extended.sql
new file mode 100644 (file)
index 0000000..5ba0678
--- /dev/null
@@ -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";