From 653aa603f501aa6e4865105a928cd13082ee7152 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 11 Dec 2020 17:54:10 -0500 Subject: Provide an error cursor for "can't subscript" error messages. Commit c7aba7c14 didn't add this, but after more fooling with the feature I feel that it'd be useful. To make this possible, refactor getSubscriptingRoutines() so that the caller is responsible for throwing any error. (In clauses.c, I just chose to make the most conservative assumption rather than throwing an error. We don't expect failures there anyway really, so the code space for an error message would be a poor investment.) --- src/backend/utils/cache/lsyscache.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/backend/utils/cache/lsyscache.c') diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index 7dd49454462..204bcd03c0b 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -3031,7 +3031,7 @@ get_typsubscript(Oid typid, Oid *typelemp) * getSubscriptingRoutines * * Given the type OID, fetch the type's subscripting methods struct. - * Fail if type is not subscriptable. + * Return NULL if type is not subscriptable. * * If typelemp isn't NULL, we also store the type's typelem value there. * This saves some callers an extra catalog lookup. @@ -3042,10 +3042,7 @@ getSubscriptingRoutines(Oid typid, Oid *typelemp) RegProcedure typsubscript = get_typsubscript(typid, typelemp); if (!OidIsValid(typsubscript)) - ereport(ERROR, - (errcode(ERRCODE_DATATYPE_MISMATCH), - errmsg("cannot subscript type %s because it does not support subscripting", - format_type_be(typid)))); + return NULL; return (const struct SubscriptRoutines *) DatumGetPointer(OidFunctionCall0(typsubscript)); -- cgit v1.2.3