SQL/JSON: support the IS JSON predicate
authorAlvaro Herrera <[email protected]>
Fri, 31 Mar 2023 20:34:04 +0000 (22:34 +0200)
committerAlvaro Herrera <[email protected]>
Fri, 31 Mar 2023 20:34:04 +0000 (22:34 +0200)
commit6ee30209a6f161d0a267a33f090c70c579c87c00
treeeda2b3a9f0a61f3fc484819b39abf1eb130e0d88
parenta2a0c7c29e47f39da905577659e66b0086b769cc
SQL/JSON: support the IS JSON predicate

This  introduces the SQL standard IS JSON predicate. It operates
on text and bytea values representing JSON, as well as on the json and
jsonb types. Each test has IS and IS NOT variants and supports a WITH
UNIQUE KEYS flag. The tests are:

IS JSON [VALUE]
IS JSON ARRAY
IS JSON OBJECT
IS JSON SCALAR

These should be self-explanatory.

The WITH UNIQUE KEYS flag makes these return false when duplicate keys
exist in any object within the value, not necessarily directly contained
in the outermost object.

Author: Nikita Glukhov <[email protected]>
Author: Teodor Sigaev <[email protected]>
Author: Oleg Bartunov <[email protected]>
Author: Alexander Korotkov <[email protected]>
Author: Amit Langote <[email protected]>
Author: Andrew Dunstan <[email protected]>

Reviewers have included (in no particular order) Andres Freund, Alexander
Korotkov, Pavel Stehule, Andrew Alsup, Erik Rijkers, Zihong Yu,
Himanshu Upadhyaya, Daniel Gustafsson, Justin Pryzby.

Discussion: https://postgr.es/m/CAF4Au4w2x-5LTnN_bxky-mq4=WOqsGsxSpENCzHRAzSnEd8+WQ@mail.gmail.com
Discussion: https://postgr.es/m/cd0bb935-0158-78a7-08b5-904886deac4b@postgrespro.ru
Discussion: https://postgr.es/m/20220616233130[email protected]
Discussion: https://postgr.es/m/abd9b83b-aa66-f230-3d6d-734817f0995d%40postgresql.org
25 files changed:
doc/src/sgml/func.sgml
src/backend/executor/execExpr.c
src/backend/executor/execExprInterp.c
src/backend/jit/llvm/llvmjit_expr.c
src/backend/jit/llvm/llvmjit_types.c
src/backend/nodes/makefuncs.c
src/backend/nodes/nodeFuncs.c
src/backend/parser/gram.y
src/backend/parser/parse_expr.c
src/backend/utils/adt/json.c
src/backend/utils/adt/jsonfuncs.c
src/backend/utils/adt/ruleutils.c
src/include/catalog/catversion.h
src/include/executor/execExpr.h
src/include/nodes/makefuncs.h
src/include/nodes/primnodes.h
src/include/parser/kwlist.h
src/include/utils/json.h
src/include/utils/jsonfuncs.h
src/interfaces/ecpg/test/expected/sql-sqljson.c
src/interfaces/ecpg/test/expected/sql-sqljson.stderr
src/interfaces/ecpg/test/expected/sql-sqljson.stdout
src/interfaces/ecpg/test/sql/sqljson.pgc
src/test/regress/expected/sqljson.out
src/test/regress/sql/sqljson.sql