Add missing NULL check when building Result Cache paths
authorDavid Rowley <drowley@postgresql.org>
Mon, 24 May 2021 00:37:11 +0000 (12:37 +1200)
committerDavid Rowley <drowley@postgresql.org>
Mon, 24 May 2021 00:37:11 +0000 (12:37 +1200)
Code added in 9e215378d to disable building of Result Cache paths when
not all join conditions are part of the parameterization of a unique
join failed to first check if the inner path's param_info was set before
checking the param_info's ppi_clauses.

Add a check for NULL values here and just bail on trying to build the
path if param_info is NULL. lateral_vars are not considered when
deciding if the join is unique, so we're not missing out on doing the
optimization when there are lateral_vars and no param_info.

Reported-by: Coverity, via Tom Lane
Discussion: https://postgr.es/m/457998.1621779290@sss.pgh.pa.us

src/backend/optimizer/path/joinpath.c

index d9d48827a9ab8a2e905b8251055de1d003f2c1c2..b67b5177707b9d7a8a244bb008cd60f363b3c60d 100644 (file)
@@ -530,8 +530,9 @@ get_resultcache_path(PlannerInfo *root, RelOptInfo *innerrel,
     * considering doing that?
     */
    if (extra->inner_unique &&
-       list_length(inner_path->param_info->ppi_clauses) <
-       list_length(extra->restrictlist))
+       (inner_path->param_info == NULL ||
+        list_length(inner_path->param_info->ppi_clauses) <
+        list_length(extra->restrictlist)))
        return NULL;
 
    /*