]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Fix internal error from CollateExpr in SQL/JSON DEFAULT expressions
authorAmit Langote <amitlan@postgresql.org>
Thu, 9 Oct 2025 05:07:52 +0000 (01:07 -0400)
committerAmit Langote <amitlan@postgresql.org>
Thu, 9 Oct 2025 05:07:52 +0000 (01:07 -0400)
commitdc9125111b4a0b955c8a4a44ce2bbac72479e11f
treea9ebd67275e4a40fb41652fce4ceb4410ac38737
parent9ea4a2b4f1cccba37935522920a933c67421476b
Fix internal error from CollateExpr in SQL/JSON DEFAULT expressions

SQL/JSON functions such as JSON_VALUE could fail with "unrecognized
node type" errors when a DEFAULT clause contained an explicit COLLATE
expression. That happened because assign_collations_walker() could
invoke exprSetCollation() on a JsonBehavior expression whose DEFAULT
still contained a CollateExpr, which exprSetCollation() does not
handle.

For example:

  SELECT JSON_VALUE('{"a":1}', '$.c' RETURNING text
                    DEFAULT 'A' COLLATE "C" ON EMPTY);

Fix by validating in transformJsonBehavior() that the DEFAULT
expression's collation matches the enclosing JSON expression’s
collation. In exprSetCollation(), replace the recursive call on the
JsonBehavior expression with an assertion that its collation already
matches the target, since the parser now enforces that condition.

Reported-by: Jian He <jian.universality@gmail.com>
Author: Jian He <jian.universality@gmail.com>
Reviewed-by: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/CACJufxHVwYYSyiVQ6o+PsRX6zQ7rAFinh_fv1kCfTsT1xG4Zeg@mail.gmail.com
Backpatch-through: 17
src/backend/nodes/nodeFuncs.c
src/backend/parser/parse_expr.c
src/test/regress/expected/collate.icu.utf8.out
src/test/regress/sql/collate.icu.utf8.sql