pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi
3+ messages / 1 participants
[nested] [flat]

* pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi
@ 2025-10-09 01:21 Amit Langote <amitlan@postgresql.org>
  0 siblings, 0 replies; 3+ messages in thread

From: Amit Langote @ 2025-10-09 01:21 UTC (permalink / raw)
  To: pgsql-committers@lists.postgresql.org

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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ef5e60a9d352a97791af632e0d26a572bc88e921

Modified Files
--------------
src/backend/nodes/nodeFuncs.c                  |  8 +---
src/backend/parser/parse_expr.c                | 57 ++++++++++++++++++++++----
src/test/regress/expected/collate.icu.utf8.out | 49 ++++++++++++++++++++++
src/test/regress/sql/collate.icu.utf8.sql      | 13 ++++++
4 files changed, 113 insertions(+), 14 deletions(-)



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi
@ 2025-10-09 02:07 Amit Langote <amitlan@postgresql.org>
  0 siblings, 0 replies; 3+ messages in thread

From: Amit Langote @ 2025-10-09 02:07 UTC (permalink / raw)
  To: pgsql-committers@lists.postgresql.org

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

Branch
------
REL_17_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/09f86a42f25cd32d8d268484252671341033b2c0

Modified Files
--------------
src/backend/nodes/nodeFuncs.c                  |  8 +---
src/backend/parser/parse_expr.c                | 57 ++++++++++++++++++++++----
src/test/regress/expected/collate.icu.utf8.out | 49 ++++++++++++++++++++++
src/test/regress/sql/collate.icu.utf8.sql      | 15 ++++++-
4 files changed, 114 insertions(+), 15 deletions(-)



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi
@ 2025-10-09 02:07 Amit Langote <amitlan@postgresql.org>
  0 siblings, 0 replies; 3+ messages in thread

From: Amit Langote @ 2025-10-09 02:07 UTC (permalink / raw)
  To: pgsql-committers@lists.postgresql.org

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

Branch
------
REL_18_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/dc9125111b4a0b955c8a4a44ce2bbac72479e11f

Modified Files
--------------
src/backend/nodes/nodeFuncs.c                  |  8 +---
src/backend/parser/parse_expr.c                | 57 ++++++++++++++++++++++----
src/test/regress/expected/collate.icu.utf8.out | 49 ++++++++++++++++++++++
src/test/regress/sql/collate.icu.utf8.sql      | 13 ++++++
4 files changed, 113 insertions(+), 14 deletions(-)



^ permalink  raw  reply  [nested|flat] 3+ messages in thread


end of thread, other threads:[~2025-10-09 02:07 UTC | newest]

Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2025-10-09 01:21 pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi Amit Langote <amitlan@postgresql.org>
2025-10-09 02:07 pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi Amit Langote <amitlan@postgresql.org>
2025-10-09 02:07 pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi Amit Langote <amitlan@postgresql.org>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox