pgsql: SQL/JSON: Some fixes to JsonBehavior expression casting
От | Amit Langote |
---|---|
Тема | pgsql: SQL/JSON: Some fixes to JsonBehavior expression casting |
Дата | |
Msg-id | E1sYcAU-001pLr-6Q@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
SQL/JSON: Some fixes to JsonBehavior expression casting 1. Remove the special case handling when casting the JsonBehavior expressions to types with typmod, like 86d33987 did for the casting of SQL/JSON constructor functions. 2. Fix casting for fixed-length character and bit string types by using assignment-level casts. This is again similar to what 86d33987 did, but for ON ERROR / EMPTY expressions. 3. Use runtime coercion for the boolean ON ERROR constants so that using fixed-length character string types, for example, for an EXISTS column doesn't cause a "value too long for type character(n)" when the parser tries to coerce the default ON ERROR value "false" to that type, that is, even when clause is not specified. 4. Simplify the conditions of when to use runtime coercion vs creating the cast expression in the parser itself. jsonb-valued expressions are now always coerced at runtime and boolean expressions too if the target type is a string type for the reasons mentioned above. Tests are taken from a patch that Jian He posted. Reported-by: Jian He <jian.universality@gmail.com> Author: Jian He <jian.universality@gmail.com> Author: Amit Langote <amitlangote09@gmail.com> Discussion: https://postgr.es/m/CACJufxEo4sUjKCYtda0_qt9tazqqKPmF1cqhW9KBOUeJFqQd2g@mail.gmail.com Backpatch-through: 17 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/74c96699be3f53c058c8794c07952221b9625b4f Modified Files -------------- src/backend/parser/parse_expr.c | 100 ++++++++++++++++------- src/test/regress/expected/sqljson_jsontable.out | 29 +++++-- src/test/regress/expected/sqljson_queryfuncs.out | 66 +++++++++++---- src/test/regress/sql/sqljson_jsontable.sql | 5 +- src/test/regress/sql/sqljson_queryfuncs.sql | 16 +++- 5 files changed, 164 insertions(+), 52 deletions(-)
В списке pgsql-committers по дате отправления: