From 716bd12d22c53d1943d41309f2dd061ec601dd5e Mon Sep 17 00:00:00 2001 From: Amit Langote Date: Fri, 28 Jun 2024 21:58:13 +0900 Subject: SQL/JSON: Always coerce JsonExpr result at runtime Instead of looking up casts at parse time for converting the result of JsonPath* query functions to the specified or the default RETURNING type, always perform the conversion at runtime using either the target type's input function or the function json_populate_type(). There are two motivations for this change: 1. json_populate_type() coerces to types with typmod such that any string values that exceed length limit cause an error instead of silent truncation, which is necessary to be standard-conforming. 2. It was possible to end up with a cast expression that doesn't support soft handling of errors causing bugs in the of handling ON ERROR clause. JsonExpr.coercion_expr which would store the cast expression is no longer necessary, so remove. Bump catversion because stored rules change because of the above removal. Reported-by: Alvaro Herrera Reviewed-by: Jian He Discussion: Discussion: https://postgr.es/m/202405271326.5a5rprki64aw%40alvherre.pgsql --- src/include/utils/jsonfuncs.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/include/utils/jsonfuncs.h') diff --git a/src/include/utils/jsonfuncs.h b/src/include/utils/jsonfuncs.h index 190e13284b2..93384d900a0 100644 --- a/src/include/utils/jsonfuncs.h +++ b/src/include/utils/jsonfuncs.h @@ -93,6 +93,7 @@ extern Datum json_populate_type(Datum json_val, Oid json_type, Oid typid, int32 typmod, void **cache, MemoryContext mcxt, bool *isnull, + bool omit_quotes, Node *escontext); #endif -- cgit v1.2.3