summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2018-12-31 17:39:15 +0000
committerTom Lane2018-12-31 17:39:15 +0000
commitb2edbbd02d3070c234225da7b2ec10298652658a (patch)
tree914fca79c0374393a91333b99941da4d6b8e38cd
parent60d99797bfb07f8042a8b82c161500f6e4a500ec (diff)
Fix oversight in commit b5415e3c2187ab304390524f5ae66b4bd2c58279.
While rearranging code in tidpath.c, I overlooked the fact that we ought to check restriction_is_securely_promotable when trying to use a join clause as a TID qual. Since tideq itself is leakproof, this wouldn't really allow any interesting leak AFAICT, but it still seems like we had better check it. For consistency with the corresponding logic in indxpath.c, also check rinfo->pseudoconstant. I'm not sure right now that it's possible for that to be set in a join clause, but if it were, a match couldn't be made anyway.
-rw-r--r--src/backend/optimizer/path/tidpath.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/backend/optimizer/path/tidpath.c b/src/backend/optimizer/path/tidpath.c
index 335de0a4c1d..4d39fa128d7 100644
--- a/src/backend/optimizer/path/tidpath.c
+++ b/src/backend/optimizer/path/tidpath.c
@@ -329,9 +329,14 @@ BuildParameterizedTidPaths(PlannerInfo *root, RelOptInfo *rel, List *clauses)
*
* We currently consider only TidEqual join clauses. In principle we
* might find a suitable ScalarArrayOpExpr in the rel's joininfo list,
- * but it seems unlikely to be worth checking for.
+ * but it seems unlikely to be worth expending the cycles to check.
+ * And we definitely won't find a CurrentOfExpr here. Hence, we don't
+ * use TidQualFromRestrictInfo; but this must match that function
+ * otherwise.
*/
- if (!IsTidEqualClause(rinfo, rel))
+ if (rinfo->pseudoconstant ||
+ !restriction_is_securely_promotable(rinfo, rel) ||
+ !IsTidEqualClause(rinfo, rel))
continue;
/*