mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
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
This commit is contained in:
@ -2010,7 +2010,7 @@ llvm_compile_expr(ExprState *state)
|
||||
v_jump_coercion = l_int32_const(lc, jsestate->jump_eval_coercion);
|
||||
LLVMAddCase(v_switch, v_jump_coercion, b_coercion);
|
||||
}
|
||||
/* coercion_expr code */
|
||||
/* jump_eval_coercion code */
|
||||
LLVMPositionBuilderAtEnd(b, b_coercion);
|
||||
if (jsestate->jump_eval_coercion >= 0)
|
||||
LLVMBuildBr(b, opblocks[jsestate->jump_eval_coercion]);
|
||||
|
Reference in New Issue
Block a user