{
Oid reloid;
LOCKMODE lockmode;
- ResultRelInfo *resultRelInfos;
- int i;
/*
- * First determine the lock type we need. Scan to see if target relation
- * is either a result relation or a FOR UPDATE/FOR SHARE relation.
+ * Determine the lock type we need. First, scan to see if target
+ * relation is a result relation.
*/
lockmode = AccessShareLock;
- resultRelInfos = estate->es_result_relations;
- for (i = 0; i < estate->es_num_result_relations; i++)
- {
- if (resultRelInfos[i].ri_RangeTableIndex == scanrelid)
- {
- lockmode = NoLock;
- break;
- }
- }
+ if (ExecRelationIsTargetRelation(estate, scanrelid))
+ lockmode = NoLock;
+ /* If not, check if it's a FOR UPDATE/FOR SHARE relation */
if (lockmode == AccessShareLock)
{
ListCell *l;
/* OK, open the relation and acquire lock as needed */
reloid = getrelid(scanrelid, estate->es_range_table);
-
return heap_open(reloid, lockmode);
}