On Fri, Apr 5, 2024 at 8:35 PM Amit Langote <amitlangot...@gmail.com> wrote: > Here's one. Main changes: > > * Fixed a bug in get_table_json_columns() which caused nested columns > to be deparsed incorrectly, something Jian reported upthread. > * Simplified the algorithm in JsonTablePlanNextRow() > > I'll post another revision or two maybe tomorrow, but posting what I > have now in case Jian wants to do more testing.
i am using the upthread view validation function. by comparing `execute the view definition` and `select * from the_view`, I did find 2 issues. * problem in transformJsonBehavior, JSON_BEHAVIOR_DEFAULT branch. I think we can fix this problem later, since sql/json query function already committed? CREATE DOMAIN jsonb_test_domain AS text CHECK (value <> 'foo'); normally, we do: SELECT JSON_VALUE(jsonb '{"d1": "H"}', '$.a2' returning jsonb_test_domain DEFAULT 'foo' ON ERROR); but parsing back view def, we do: SELECT JSON_VALUE(jsonb '{"d1": "H"}', '$.a2' returning jsonb_test_domain DEFAULT 'foo'::text::jsonb_test_domain ON ERROR); then I found the following two queries should not be error out. SELECT JSON_VALUE(jsonb '{"d1": "H"}', '$.a2' returning jsonb_test_domain DEFAULT 'foo1'::text::jsonb_test_domain ON ERROR); SELECT JSON_VALUE(jsonb '{"d1": "H"}', '$.a2' returning jsonb_test_domain DEFAULT 'foo1'::jsonb_test_domain ON ERROR); -------------------------------------------------------------------------------------------------------------------- * problem with type "char". the view def output is not the same as the select * from v1. create or replace view v1 as SELECT col FROM s, JSON_TABLE(jsonb '{"d": ["hello", "hello1"]}', '$' as c1 COLUMNS(col "char" path '$.d' without wrapper keep quotes))sub; \sv v1 CREATE OR REPLACE VIEW public.v1 AS SELECT sub.col FROM s, JSON_TABLE( '{"d": ["hello", "hello1"]}'::jsonb, '$' AS c1 COLUMNS ( col "char" PATH '$."d"' ) ) sub one under the hood called JSON_QUERY_OP, another called JSON_VALUE_OP. I will do extensive checking for other types later, so far, other than these two issues, get_json_table_columns is pretty solid, I've tried nested columns with nested columns, it just works.