Re: SQL/JSON: functions
Andrew Dunstan <andrew@dunslane.net>
On 12/9/21 09:04, Himanshu Upadhyaya wrote:
>
>
>
> Few comments For 0002-SQL-JSON-constructors-v59.patch:
> 1)
> + if (IsA(node, JsonConstructorExpr))
> + {
> + JsonConstructorExpr *ctor = (JsonConstructorExpr *) node;
> + ListCell *lc;
> + bool is_jsonb =
> + ctor->returning->format->format ==
> JS_FORMAT_JSONB;
> +
> + /* Check argument_type => json[b] conversions */
> + foreach(lc, ctor->args)
> + {
> + Oid typid =
> exprType(lfirst(lc));
> +
> + if (is_jsonb ?
> + !to_jsonb_is_immutable(typid) :
> + !to_json_is_immutable(typid))
> + return true;
> + }
> +
> + /* Check all subnodes */
> + }
> can have ctor as const pointer?
I guess we could, although I'm not sure it's an important advance.
>
> 2)
> +typedef struct JsonFormat
> +{
> + NodeTag type;
> + JsonFormatType format; /* format type */
> + JsonEncoding encoding; /* JSON encoding */
> + int location; /* token
> location, or -1 if unknown */
> +} JsonFormat;
>
> I think it will be good if we can have a JsonformatType(defined in
> patch 0001-Common-SQL-JSON-clauses-v59.patch) member named as
> format_type or formatType instead of format?
> There are places in the patch where we access it as "if
> (format->format == JS_FORMAT_DEFAULT)". "format->format" looks little
> difficult to understand.
> "format->format_type == JS_FORMAT_DEFAULT" will be easy to follow.
That's a fair criticism.
>
> 3)
> + if (have_jsonb)
> + {
> + returning->typid = JSONBOID;
> + returning->format->format = JS_FORMAT_JSONB;
> + }
> + else if (have_json)
> + {
> + returning->typid = JSONOID;
> + returning->format->format = JS_FORMAT_JSON;
> + }
> + else
> + {
> + /* XXX TEXT is default by the standard, but we
> return JSON */
> + returning->typid = JSONOID;
> + returning->format->format = JS_FORMAT_JSON;
> + }
>
> why we need a separate "else if (have_json)" statement in the below
> code, "else" is also doing the same thing?
I imagine it's more or less a placeholder in case we want to do
something else in the default case. But I agree it's confusing.
>
> 4)
> -test: json jsonb json_encoding jsonpath jsonpath_encoding jsonb_jsonpath
> +test: json jsonb json_encoding jsonpath jsonpath_encoding
> jsonb_jsonpath sqljson
>
> can we rename sqljson sql test file to json_constructor?
Not really - the later patches in the series add to it, so it ends up
being more than just constructor tests.
Thanks for reviewing,
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
JSON_TABLE: Add support for NESTED paths and columns
- bb766cde63b4 17.0 landed
-
Add basic JSON_TABLE() functionality
- de3600452b61 17.0 landed
-
Add SQL/JSON query functions
- 6185c9737cf4 17.0 landed
-
Add soft error handling to some expression nodes
- aaaf9449ec6b 17.0 landed
-
Adjust populate_record_field() to handle errors softly
- 1edb3b491bee 17.0 landed
-
Refactor code used by jsonpath executor to fetch variables
- faa2b953ba3b 17.0 landed
-
Add more SQL/JSON constructor functions
- 03734a7fed7d 17.0 landed
-
SQL/JSON: support the IS JSON predicate
- 6ee30209a6f1 16.0 landed
-
SQL/JSON: add standard JSON constructor functions
- 7081ac46ace8 16.0 landed
-
Improve readability of SQL/JSON documentation.
- b46bcf7a4b6f 15.0 landed
-
Documentation for SQL/JSON features
- a6baa4baddd5 15.0 landed
-
RETURNING clause for JSON() and JSON_SCALAR()
- 49082c2cc3d8 15.0 landed
-
SQL JSON functions
- 606948b058dc 15.0 landed
-
SQL/JSON query functions
- 1a36bc9dba8e 15.0 landed
-
IS JSON predicate
- 33a377608fc2 15.0 landed
-
SQL/JSON constructors
- f4fb45d15c59 15.0 landed
-
Common SQL/JSON clauses
- f79b803dcc98 15.0 landed
- 865fe4d5df56 15.0 landed
-
Doc: remove obsolete entries in table of BRIN strategy numbers.
- 0ce4cd04da55 14.0 cited
-
Doc: standardize markup a bit more.
- 47046763c3ed 13.0 cited
-
Make pg_regress.c unset PGDATABASE during make installcheck.
- 5ee96b3e2221 13.0 cited
-
Fix handling of GENERATED columns in CREATE TABLE LIKE INCLUDING DEFAULTS.
- b81a9c2fc525 13.0 cited