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/parser/parse_node.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/backend/parser/parse_node.c') diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index e90f6c9d010..3e20dfff2e2 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -271,6 +271,12 @@ transformContainerSubscripts(ParseState *pstate, * functions and typelem. */ sbsroutines = getSubscriptingRoutines(containerType, &elementType); + if (!sbsroutines) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("cannot subscript type %s because it does not support subscripting", + format_type_be(containerType)), + parser_errposition(pstate, exprLocation(containerBase)))); /* * Detect whether any of the indirection items are slice specifiers. -- cgit v1.2.3