*
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.147 2007/02/27 01:11:25 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.148 2007/07/27 19:09:04 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
 {
    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);
 }