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/backend/jit/llvm/llvmjit_expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/backend/jit/llvm/llvmjit_expr.c') diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 9e0efd26687..306aea82d3b 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -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]); -- cgit v1.2.3