Re: SQL/JSON features for v15

Nikita Glukhov <n.gluhov@postgrespro.ru>

From: Nikita Glukhov <n.gluhov@postgrespro.ru>
To: Tom Lane <tgl@sss.pgh.pa.us>, Robert Haas <robertmhaas@gmail.com>
Cc: Andres Freund <andres@anarazel.de>, "Jonathan S. Katz" <jkatz@postgresql.org>, Andrew Dunstan <andrew@dunslane.net>, Amit Langote <amitlangote09@gmail.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Michael Paquier <michael@paquier.xyz>, John Naylor <john.naylor@enterprisedb.com>
Date: 2022-09-01T13:54:42Z
Lists: pgsql-hackers

Attachments

On 31.08.2022 23:39, Nikita Glukhov wrote:

> And here is a quick POC patch with an example for COPY and float4

I decided to go further and use new API in SQL/JSON functions
(even if it does not make real sense now).

I have added function for checking expressions trees, special
executor steps for handling errors in FuncExpr, CoerceViaIO,
CoerceToDomain which are passed through ExprState.edata.

Of course, there is still a lot of work:
   1. JIT for new expression steps
   2. Removal of subsidary ExprStates (needs another solution for
     ErrorData passing)
   3. Checking of domain constraint expressions
   4. Error handling in coercion to bytea
   5. Error handling in json_populate_type()
   6. Error handling in jsonb::type casts
   7. ...


Also I have added lazy creation of JSON_VALUE coercions, which was
not present in previous patches.  It really greatly speeds up JIT
and reduces memory consumption.  But it requires using of subsidary
ExprStates.


jsonb_sqljson test now fails because of points 4, 5, 6.

--
Nikita Glukhov
Postgres Professional:http://www.postgrespro.com
The Russian Postgres Company

Commits

  1. JSON_TABLE: Add support for NESTED paths and columns

  2. Add basic JSON_TABLE() functionality

  3. Add SQL/JSON query functions

  4. Add soft error handling to some expression nodes

  5. Adjust populate_record_field() to handle errors softly

  6. Refactor code used by jsonpath executor to fetch variables

  7. Add more SQL/JSON constructor functions

  8. SQL/JSON: support the IS JSON predicate

  9. SQL/JSON: add standard JSON constructor functions

  10. Revert SQL/JSON features

  11. Numeric error suppression in jsonpath