aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-12-11 17:54:10 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2020-12-11 18:58:21 -0500
commit653aa603f501aa6e4865105a928cd13082ee7152 (patch)
tree158acf06d799a63fa44fc83e9800a3896ad66255 /src/backend/optimizer
parentd2a2808eb444986d2fe716a48e21993329142f3d (diff)
downloadpostgresql-653aa603f501aa6e4865105a928cd13082ee7152.tar.gz
postgresql-653aa603f501aa6e4865105a928cd13082ee7152.zip
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.)
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r--src/backend/optimizer/util/clauses.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index e3a81a7a02a..8f5cbf99f43 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -848,7 +848,7 @@ contain_nonstrict_functions_walker(Node *node, void *context)
return true;
/* Otherwise we must look up the subscripting support methods */
sbsroutines = getSubscriptingRoutines(sbsref->refcontainertype, NULL);
- if (!sbsroutines->fetch_strict)
+ if (!(sbsroutines && sbsroutines->fetch_strict))
return true;
/* else fall through to check args */
}
@@ -1144,7 +1144,8 @@ contain_leaked_vars_walker(Node *node, void *context)
/* Consult the subscripting support method info */
sbsroutines = getSubscriptingRoutines(sbsref->refcontainertype,
NULL);
- if (!(sbsref->refassgnexpr != NULL ?
+ if (!sbsroutines ||
+ !(sbsref->refassgnexpr != NULL ?
sbsroutines->store_leakproof :
sbsroutines->fetch_leakproof))
{