Обсуждение: extend JSON_TABLE top level path expression

Поиск
Список
Период
Сортировка

extend JSON_TABLE top level path expression

От
jian he
Дата:
hi.

now you can
SELECT * FROM JSON_TABLE(jsonb '{"a": 123}', '$' || '.' || 'a' COLUMNS
(foo int PATH '$'));

previously, top level path expression (in the above example ('$' || '.' || 'a'))
is hard coded as String A_Const. see gram.y:

if (!IsA($5, A_Const) ||
    castNode(A_Const, $5)->val.node.type != T_String)
    ereport(ERROR,
            errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
            errmsg("only string constants are supported in JSON_TABLE
path specification"),
            parser_errposition(@5));

with the attached patch, this restriction is removed.
but JSON_TABLE COLUMN path expression is still required as String constant.
(maybe we can do the same but that requires grammar changes).

In transformJsonTable:
``tf->docexpr = transformExpr(pstate, (Node *) jfe, EXPR_KIND_FROM_FUNCTION);``

already did the parse analytics job for top level path expression, the same way
as JSON_QUERY.
we just need to take care of initializing and evaluating the top level path
expression.


--
jian
https://www.enterprisedb.com/

Вложения

Re: extend JSON_TABLE top level path expression

От
jian he
Дата:
hi.

https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-TABLE
JSON_TABLE (
    context_item, path_expression [ AS json_path_name ] [ PASSING {
value AS varname } [, ...] ]

I quickly realized I didn't have tests that path_expression is not String
A_Const and PASSING clause is not NULL.  so I changed existing tests
to cover this
scenario.

The rest of the patch remains the same as v1.


--
jian
https://www.enterprisedb.com/

Вложения