OSDN Git Service

Slight refactor for ExecOpenScanRelation(): we can use
authorNeil Conway <neilc@samurai.com>
Fri, 27 Jul 2007 19:09:04 +0000 (19:09 +0000)
committerNeil Conway <neilc@samurai.com>
Fri, 27 Jul 2007 19:09:04 +0000 (19:09 +0000)
ExecRelationIsTargetRelation() to check if the relation is a target
rel, rather than scanning through the result relation array ourselves.

src/backend/executor/execUtils.c

index 493df3e..91baffb 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * 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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -814,24 +814,16 @@ ExecOpenScanRelation(EState *estate, Index scanrelid)
 {
        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;
@@ -850,7 +842,6 @@ ExecOpenScanRelation(EState *estate, Index scanrelid)
 
        /* OK, open the relation and acquire lock as needed */
        reloid = getrelid(scanrelid, estate->es_range_table);
-
        return heap_open(reloid, lockmode);
 }