pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi
От | Amit Langote |
---|---|
Тема | pgsql: Fix internal error from CollateExpr in SQL/JSON DEFAULT expressi |
Дата | |
Msg-id | E1v6g3x-000lxf-2g@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
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(-)
В списке pgsql-committers по дате отправления: