From 419343efa9cd59e7c8450c85b5c923381d3282eb Mon Sep 17 00:00:00 2001 From: Ilya Staroverov Date: Tue, 27 Oct 2026 07:21:14 +0300 Subject: [PATCH v6 1/2] pg_stat_statements: Add tests for JSON_TABLE columns and PATH Add tests with several JSON_TABLE columns, with and without PATH, and with an explicit PATH equal to the one derived from the column name. As the column definitions of JSON_TABLE are not part of the query ID, all the queries of this test block with the same number of columns are merged into a single entry. Author: Ilya Staroverov Discussion: https://postgr.es/m/457969A9-5D24-422F-B09E-F388053DE028@localhost.localdomain --- .../pg_stat_statements/expected/sqljson.out | 36 +++++++++++++++++-- contrib/pg_stat_statements/sql/sqljson.sql | 12 +++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/contrib/pg_stat_statements/expected/sqljson.out b/contrib/pg_stat_statements/expected/sqljson.out index 43f0a560c6..7a592e18c3 100644 --- a/contrib/pg_stat_statements/expected/sqljson.out +++ b/contrib/pg_stat_statements/expected/sqljson.out @@ -653,12 +653,44 @@ SELECT * FROM pgss_sqljson_tab, ----+---+---+---+--- (0 rows) +-- several columns, with and without PATH +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int, b int)) jt; + js | t | b | a | b +----+---+---+---+--- +(0 rows) + +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (b int, a int)) jt; + js | t | b | b | a +----+---+---+---+--- +(0 rows) + +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int PATH '$.a', b int)) jt; + js | t | b | a | b +----+---+---+---+--- +(0 rows) + +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int, b int PATH '$.b')) jt; + js | t | b | a | b +----+---+---+---+--- +(0 rows) + +-- the same path as the one derived from the column name +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int PATH '$."a"')) jt; + js | t | b | a +----+---+---+--- +(0 rows) + SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", calls; calls | query -------+---------------------------------------------------------------------- - 4 | SELECT * FROM pgss_sqljson_tab, + + 5 | SELECT * FROM pgss_sqljson_tab, + | JSON_TABLE(js, $1 COLUMNS (a int PATH '$.a')) jt - 1 | SELECT * FROM pgss_sqljson_tab, + + 5 | SELECT * FROM pgss_sqljson_tab, + | JSON_TABLE(js, $1 COLUMNS (a int PATH '$.a', b int PATH '$.b')) jt 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t (3 rows) diff --git a/contrib/pg_stat_statements/sql/sqljson.sql b/contrib/pg_stat_statements/sql/sqljson.sql index 3c6d4cda95..9b6769ddf7 100644 --- a/contrib/pg_stat_statements/sql/sqljson.sql +++ b/contrib/pg_stat_statements/sql/sqljson.sql @@ -177,6 +177,18 @@ SELECT * FROM pgss_sqljson_tab, JSON_TABLE(js, '$[*]' COLUMNS (b int)) jt; SELECT * FROM pgss_sqljson_tab, JSON_TABLE(js, '$[*]' COLUMNS (a int PATH '$.a', b int PATH '$.b')) jt; +-- several columns, with and without PATH +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int, b int)) jt; +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (b int, a int)) jt; +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int PATH '$.a', b int)) jt; +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int, b int PATH '$.b')) jt; +-- the same path as the one derived from the column name +SELECT * FROM pgss_sqljson_tab, + JSON_TABLE(js, '$[*]' COLUMNS (a int PATH '$."a"')) jt; SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C", calls; -- NESTED PATH base-commit: 99ea4a55270d5ce48bc33b9daf5d641818e03b89 -- 2.43.0