v47-0001-add-more-json_table-tests.no-cfbot
application/octet-stream
Filename: v47-0001-add-more-json_table-tests.no-cfbot
Type: application/octet-stream
Part: 0
Message:
Re: remaining sql/json patches
From 28610f6eedba94aa6838bf87acc1fd50bb2f3840 Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Mon, 1 Apr 2024 16:45:09 +0800
Subject: [PATCH v47 1/1] add more json_table tests
---
.../regress/expected/sqljson_jsontable.out | 73 +++++++++++++++++++
src/test/regress/sql/sqljson_jsontable.sql | 54 ++++++++++++++
2 files changed, 127 insertions(+)
diff --git a/src/test/regress/expected/sqljson_jsontable.out b/src/test/regress/expected/sqljson_jsontable.out
index fb4e1da9..60d9aed8 100644
--- a/src/test/regress/expected/sqljson_jsontable.out
+++ b/src/test/regress/expected/sqljson_jsontable.out
@@ -887,3 +887,76 @@ SELECT * FROM JSON_TABLE(jsonb '{"a": 123}', '$' || '.' || 'a' COLUMNS (foo int)
ERROR: only string constants are supported in JSON_TABLE path specification
LINE 1: SELECT * FROM JSON_TABLE(jsonb '{"a": 123}', '$' || '.' || '...
^
+create table s(js jsonb);
+insert into s select '{"a":{"za":[{"z1": [11,2222]},{"z21": [22, 234,2345]}]},"c": 3}';
+--passing clause apply to path_expression.
+--expepct zero rows, does not meet the filter expression
+SELECT sub.* FROM s, JSON_TABLE(js, '$.c ? (@ > $x)' PASSING 10 AS x COLUMNS(
+ xx text path '$'
+))sub;
+ xx
+----
+(0 rows)
+
+--passing clause apply to path_expression
+SELECT sub.* FROM s, JSON_TABLE(js, '$.c ? (@ < $x)' PASSING 10 AS x COLUMNS(
+ xx text path '$'
+))sub;
+ xx
+----
+ 3
+(1 row)
+
+--nested path with nested path
+SELECT sub.* FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1]' as n1 columns (NESTED PATH '$.z21[*]' as n2 COLUMNS (a12 int path '$')),
+ NESTED PATH '$.a.za[0]' as n4 columns (NESTED PATH '$.z1[*]' as n3 COLUMNS (a13 int path '$')))
+ )sub;
+ xx | a12 | a13
+----+------+------
+ 3 | 22 |
+ 3 | 234 |
+ 3 | 2345 |
+ 3 | | 11
+ 3 | | 2222
+(5 rows)
+
+--fail, passing variable cannot use in nested's nested path
+SELECT sub.*, x, y FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1]' as n1 columns (NESTED PATH '$.z21[*]' as n2 COLUMNS (a12 int path '$?(@ >= $"x")')),
+ NESTED PATH '$.a.za[0]' as n4 columns (NESTED PATH '$.z1[*]' as n3 COLUMNS (a13 int path '$?(@ >= $"y")')))
+ )sub;
+ERROR: could not find jsonpath variable "x"
+--not ok
+SELECT sub.*, x, y FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1].z21[*]' as n1 columns (n2 int path '$?(@ >= $"x")'),
+ NESTED PATH '$.a.za[0].z1[*]' as n4 columns (n3 int path '$')))sub;
+ERROR: could not find jsonpath variable "x"
+--ok
+SELECT sub.* FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1].z21[*] ?(@ >= $"x")' as n1 columns (n2 int path '$'),
+ NESTED PATH '$.a.za[0].z1[*] ?(@ >= $"y")' as n4 columns (n3 int path '$')))sub;
+ xx | n2 | n3
+----+------+------
+ 3 | 234 |
+ 3 | 2345 |
+ 3 | | 2222
+(3 rows)
+
+drop table s;
diff --git a/src/test/regress/sql/sqljson_jsontable.sql b/src/test/regress/sql/sqljson_jsontable.sql
index 22629188..638be2d1 100644
--- a/src/test/regress/sql/sqljson_jsontable.sql
+++ b/src/test/regress/sql/sqljson_jsontable.sql
@@ -407,3 +407,57 @@ FROM JSON_TABLE(
-- Should fail (not supported)
SELECT * FROM JSON_TABLE(jsonb '{"a": 123}', '$' || '.' || 'a' COLUMNS (foo int));
+
+create table s(js jsonb);
+insert into s select '{"a":{"za":[{"z1": [11,2222]},{"z21": [22, 234,2345]}]},"c": 3}';
+
+--passing clause apply to path_expression.
+--expepct zero rows, does not meet the filter expression
+SELECT sub.* FROM s, JSON_TABLE(js, '$.c ? (@ > $x)' PASSING 10 AS x COLUMNS(
+ xx text path '$'
+))sub;
+
+--passing clause apply to path_expression
+SELECT sub.* FROM s, JSON_TABLE(js, '$.c ? (@ < $x)' PASSING 10 AS x COLUMNS(
+ xx text path '$'
+))sub;
+
+--nested path with nested path
+SELECT sub.* FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1]' as n1 columns (NESTED PATH '$.z21[*]' as n2 COLUMNS (a12 int path '$')),
+ NESTED PATH '$.a.za[0]' as n4 columns (NESTED PATH '$.z1[*]' as n3 COLUMNS (a13 int path '$')))
+ )sub;
+
+
+--fail, passing variable cannot use in nested's nested path
+SELECT sub.*, x, y FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1]' as n1 columns (NESTED PATH '$.z21[*]' as n2 COLUMNS (a12 int path '$?(@ >= $"x")')),
+ NESTED PATH '$.a.za[0]' as n4 columns (NESTED PATH '$.z1[*]' as n3 COLUMNS (a13 int path '$?(@ >= $"y")')))
+ )sub;
+
+--not ok
+SELECT sub.*, x, y FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1].z21[*]' as n1 columns (n2 int path '$?(@ >= $"x")'),
+ NESTED PATH '$.a.za[0].z1[*]' as n4 columns (n3 int path '$')))sub;
+
+--ok
+SELECT sub.* FROM s,
+ (values(23)) x(x),
+ generate_series(13, 13) y,
+ JSON_TABLE(js, '$' PASSING x AS x, y AS y COLUMNS(
+ xx int path '$.c',
+ NESTED PATH '$.a.za[1].z21[*] ?(@ >= $"x")' as n1 columns (n2 int path '$'),
+ NESTED PATH '$.a.za[0].z1[*] ?(@ >= $"y")' as n4 columns (n3 int path '$')))sub;
+drop table s;
\ No newline at end of file
base-commit: f5a227895e178bf528b18f82bbe554435fb3e64f
prerequisite-patch-id: 98e54cda59b4c1906dac45238e194573d0037d2c
prerequisite-patch-id: 521030bebfaee72fe06021d0ca85739c7e95bacd
--
2.34.1