v42-0001-miscellaneous-fix-based-on-v42.no-cfbot

application/octet-stream

Filename: v42-0001-miscellaneous-fix-based-on-v42.no-cfbot
Type: application/octet-stream
Part: 0
Message: Re: remaining sql/json patches
From e0a1bc8fb79d7d9f16aeb7280d1e1ae8af480d7d Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Mon, 11 Mar 2024 17:03:06 +0800
Subject: [PATCH v42 1/1] miscellaneous fix based on v42. type cast enum to
 int, before print out. minor refactor ExecPrepareJsonItemCoercion, to make
 the error message more explicit.

---
 src/backend/executor/execExprInterp.c            | 8 +++++---
 src/backend/parser/parse_expr.c                  | 2 +-
 src/backend/utils/adt/jsonb.c                    | 2 +-
 src/backend/utils/adt/jsonpath_exec.c            | 2 +-
 src/backend/utils/adt/ruleutils.c                | 2 +-
 src/test/regress/expected/sqljson_queryfuncs.out | 2 +-
 6 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
index decf8566..122efea0 100644
--- a/src/backend/executor/execExprInterp.c
+++ b/src/backend/executor/execExprInterp.c
@@ -4341,7 +4341,7 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
 			}
 
 		default:
-			elog(ERROR, "unrecognized SQL/JSON expression op %d", jexpr->op);
+			elog(ERROR, "unrecognized SQL/JSON expression op %d", (int) jexpr->op);
 			return false;
 	}
 
@@ -4489,7 +4489,7 @@ ExecPrepareJsonItemCoercion(JsonbValue *item, JsonExprState *jsestate,
 			break;
 
 		default:
-			elog(ERROR, "unexpected jsonb value type %d", item->type);
+			elog(ERROR, "unexpected jsonb value type %d", (int) item->type);
 	}
 
 	/* If the expression is not a cast expression, throw an error. */
@@ -4498,7 +4498,9 @@ ExecPrepareJsonItemCoercion(JsonbValue *item, JsonExprState *jsestate,
 		if (throw_error)
 			ereport(ERROR,
 					errcode(ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE),
-					errmsg("SQL/JSON item cannot be cast to target type"));
+					errcode(ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE),
+					errmsg("SQL/JSON item cannot be cast to type %s",
+							format_type_be(jsestate->jsexpr->returning->typid)));
 
 		*resvalue = (Datum) 0;
 		*resnull = true;
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 53426fac..5610608b 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -4706,7 +4706,7 @@ GetJsonBehaviorConstExpr(JsonBehaviorType btype, int location)
 			break;
 
 		default:
-			elog(ERROR, "unrecognized SQL/JSON behavior %d", btype);
+			elog(ERROR, "unrecognized SQL/JSON behavior %d", (int) btype);
 			break;
 	}
 
diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c
index 8ffa26b7..a8cf307d 100644
--- a/src/backend/utils/adt/jsonb.c
+++ b/src/backend/utils/adt/jsonb.c
@@ -2183,7 +2183,7 @@ JsonbUnquote(Jsonb *jb)
 			return pstrdup("null");
 		else
 		{
-			elog(ERROR, "unrecognized jsonb value type %d", v.type);
+			elog(ERROR, "unrecognized jsonb value type %d", (int) v.type);
 			return NULL;
 		}
 	}
diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c
index 1d2d0245..7400a440 100644
--- a/src/backend/utils/adt/jsonpath_exec.c
+++ b/src/backend/utils/adt/jsonpath_exec.c
@@ -3818,7 +3818,7 @@ JsonPathQuery(Datum jb, JsonPath *jp, JsonWrapper wrapper, bool *empty,
 			 JsonContainerIsScalar(singleton->val.binary.data));
 	else
 	{
-		elog(ERROR, "unrecognized json wrapper %d", wrapper);
+		elog(ERROR, "unrecognized json wrapper %d", (int) wrapper);
 		wrap = false;
 	}
 
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index a38be6fb..16b50c5b 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -8613,7 +8613,7 @@ get_json_behavior(JsonBehavior *behavior, deparse_context *context,
 	};
 
 	if ((int) behavior->btype < 0 || behavior->btype >= lengthof(behavior_names))
-		elog(ERROR, "invalid json behavior type: %d", behavior->btype);
+		elog(ERROR, "invalid json behavior type: %d", (int) behavior->btype);
 
 	appendStringInfoString(context->buf, behavior_names[behavior->btype]);
 
diff --git a/src/test/regress/expected/sqljson_queryfuncs.out b/src/test/regress/expected/sqljson_queryfuncs.out
index f5b57465..b7b7d33e 100644
--- a/src/test/regress/expected/sqljson_queryfuncs.out
+++ b/src/test/regress/expected/sqljson_queryfuncs.out
@@ -203,7 +203,7 @@ SELECT JSON_VALUE(jsonb '123', '$' RETURNING text);
 
 /* jsonb bytea ??? */
 SELECT JSON_VALUE(jsonb '123', '$' RETURNING bytea ERROR ON ERROR);
-ERROR:  SQL/JSON item cannot be cast to target type
+ERROR:  SQL/JSON item cannot be cast to type bytea
 SELECT JSON_VALUE(jsonb '1.23', '$');
  json_value 
 ------------
-- 
2.34.1