summaryrefslogtreecommitdiff
path: root/src/include/nodes/execnodes.h
diff options
context:
space:
mode:
authorAmit Langote <amitlan@postgresql.org>2024-06-28 21:58:13 +0900
committerAmit Langote <amitlan@postgresql.org>2024-06-28 21:58:13 +0900
commit716bd12d22c53d1943d41309f2dd061ec601dd5e (patch)
tree93a8030f6b2c690795c0d8bdb405206f476ee7b7 /src/include/nodes/execnodes.h
parentc2d93c3802b205d135d1ae1d7ac167d74e08a274 (diff)
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 <alvherre@alvh.no-ip.org> Reviewed-by: Jian He <jian.universality@gmail.com> Discussion: Discussion: https://postgr.es/m/202405271326.5a5rprki64aw%40alvherre.pgsql
Diffstat (limited to 'src/include/nodes/execnodes.h')
-rw-r--r--src/include/nodes/execnodes.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h
index 8bc421e7c05..b62c96f2064 100644
--- a/src/include/nodes/execnodes.h
+++ b/src/include/nodes/execnodes.h
@@ -1052,9 +1052,8 @@ typedef struct JsonExprState
/*
* Address of the step to coerce the result value of jsonpath evaluation
- * to the RETURNING type using JsonExpr.coercion_expr. -1 if no coercion
- * is necessary or if either JsonExpr.use_io_coercion or
- * JsonExpr.use_json_coercion is true.
+ * to the RETURNING type. -1 if no coercion if JsonExpr.use_io_coercion
+ * is true.
*/
int jump_eval_coercion;