On Thu, Jun 27, 2024 at 7:48 PM Amit Langote <amitlangot...@gmail.com> wrote: > > > > I've attempted that in the attached 0001, which removes > > JsonExpr.coercion_expr and a bunch of code around it. > > > > 0002 is now the original patch minus the changes to make > > JSON_EXISTS(), JSON_QUERY(), and JSON_VALUE() behave as we would like, > > because the changes in 0001 covers them. The changes for JsonBehavior > > expression coercion as they were in the last version of the patch are > > still needed, but I decided to move those into 0001 so that the > > changes for query functions are all in 0001 and those for constructors > > in 0002. It would be nice to get rid of that coerce_to_target_type() > > call to coerce the "behavior expression" to RETURNING type, but I'm > > leaving that as a task for another day. > > Updated 0001 to remove outdated references, remove some more unnecessary code. >
i found some remaining references of "coercion_expr" should be removed. src/include/nodes/primnodes.h /* JsonExpr's collation, if coercion_expr is NULL. */ src/include/nodes/execnodes.h /* * 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. */ int jump_eval_coercion; src/backend/jit/llvm/llvmjit_expr.c /* coercion_expr code */ LLVMPositionBuilderAtEnd(b, b_coercion); if (jsestate->jump_eval_coercion >= 0) LLVMBuildBr(b, opblocks[jsestate->jump_eval_coercion]); else LLVMBuildUnreachable(b); src/backend/executor/execExprInterp.c /* * Checks if an error occurred either when evaluating JsonExpr.coercion_expr or * in ExecEvalJsonCoercion(). If so, this sets JsonExprState.error to trigger * the ON ERROR handling steps. */ void ExecEvalJsonCoercionFinish(ExprState *state, ExprEvalStep *op) { } if (jbv == NULL) { /* Will be coerced with coercion_expr, if any. */ *op->resvalue = (Datum) 0; *op->resnull = true; } src/backend/executor/execExpr.c /* * Jump to coerce the NULL using coercion_expr if present. Coercing NULL * is only interesting when the RETURNING type is a domain whose * constraints must be checked. jsexpr->coercion_expr containing a * CoerceToDomain node must have been set in that case. */ /* * Jump to coerce the NULL using coercion_expr if present. Coercing NULL * is only interesting when the RETURNING type is a domain whose * constraints must be checked. jsexpr->coercion_expr containing a * CoerceToDomain node must have been set in that case. */