]> granicus.if.org Git - postgresql/commitdiff
Adjust TupleHashTables to use MinimalTuple format for contained tuples.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jun 2006 17:05:49 +0000 (17:05 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jun 2006 17:05:49 +0000 (17:05 +0000)
src/backend/executor/execGrouping.c
src/backend/executor/nodeAgg.c
src/backend/executor/nodeSubplan.c
src/include/nodes/execnodes.h

index 2fc5fc7eebdbb2bb556dd22b279e9a3318a07738..38a2a974ec1afcced88e38bcab5e3d8e6d109ab4 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/execGrouping.c,v 1.18 2006/03/05 15:58:25 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/execGrouping.c,v 1.19 2006/06/28 17:05:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -389,7 +389,7 @@ LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
 
                        /* Copy the first tuple into the table context */
                        MemoryContextSwitchTo(hashtable->tablecxt);
-                       entry->firstTuple = ExecCopySlotTuple(slot);
+                       entry->firstTuple = ExecCopySlotMinimalTuple(slot);
 
                        *isnew = true;
                }
@@ -405,23 +405,23 @@ LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
 /*
  * Compute the hash value for a tuple
  *
- * The passed-in key is a pointer to TupleHashEntryData.  In an actual
- * hash table entry, the firstTuple field therein points to a physical
- * tuple.  LookupTupleHashEntry sets up a dummy TupleHashEntryData with
- * NULL firstTuple field --- that cues us to look at the inputslot instead.
- * This convention avoids the need to materialize virtual input tuples
- * unless they actually need to get copied into the table.
+ * The passed-in key is a pointer to TupleHashEntryData.  In an actual hash
+ * table entry, the firstTuple field points to a tuple (in MinimalTuple
+ * format).  LookupTupleHashEntry sets up a dummy TupleHashEntryData with a
+ * NULL firstTuple field --- that cues us to look at the inputslot instead.
+ * This convention avoids the need to materialize virtual input tuples unless
+ * they actually need to get copied into the table.
  *
  * CurTupleHashTable must be set before calling this, since dynahash.c
  * doesn't provide any API that would let us get at the hashtable otherwise.
  *
  * Also, the caller must select an appropriate memory context for running
- * the hash functions. (dynahash.c doesn't change CurrentMemoryContext.)
+ * the hash functions. (dynahash.c doesn't change CurrentMemoryContext.)
  */
 static uint32
 TupleHashTableHash(const void *key, Size keysize)
 {
-       HeapTuple       tuple = ((const TupleHashEntryData *) key)->firstTuple;
+       MinimalTuple tuple = ((const TupleHashEntryData *) key)->firstTuple;
        TupleTableSlot *slot;
        TupleHashTable hashtable = CurTupleHashTable;
        int                     numCols = hashtable->numCols;
@@ -439,7 +439,7 @@ TupleHashTableHash(const void *key, Size keysize)
                /* Process a tuple already stored in the table */
                /* (this case never actually occurs in current dynahash.c code) */
                slot = hashtable->tableslot;
-               ExecStoreTuple(tuple, slot, InvalidBuffer, false);
+               ExecStoreMinimalTuple(tuple, slot, false);
        }
 
        for (i = 0; i < numCols; i++)
@@ -480,10 +480,10 @@ TupleHashTableHash(const void *key, Size keysize)
 static int
 TupleHashTableMatch(const void *key1, const void *key2, Size keysize)
 {
-       HeapTuple       tuple1 = ((const TupleHashEntryData *) key1)->firstTuple;
+       MinimalTuple tuple1 = ((const TupleHashEntryData *) key1)->firstTuple;
 
 #ifdef USE_ASSERT_CHECKING
-       HeapTuple       tuple2 = ((const TupleHashEntryData *) key2)->firstTuple;
+       MinimalTuple tuple2 = ((const TupleHashEntryData *) key2)->firstTuple;
 #endif
        TupleTableSlot *slot1;
        TupleTableSlot *slot2;
@@ -497,7 +497,7 @@ TupleHashTableMatch(const void *key1, const void *key2, Size keysize)
         */
        Assert(tuple1 != NULL);
        slot1 = hashtable->tableslot;
-       ExecStoreTuple(tuple1, slot1, InvalidBuffer, false);
+       ExecStoreMinimalTuple(tuple1, slot1, false);
        Assert(tuple2 == NULL);
        slot2 = hashtable->inputslot;
 
index dfb9938715fff94ee622cae48815e0492dd5e27a..84a651b0ad6d3b926fe3386ab6254f4e8883979e 100644 (file)
@@ -61,7 +61,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.140 2006/06/21 18:39:42 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.141 2006/06/28 17:05:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -957,10 +957,9 @@ agg_retrieve_hash_table(AggState *aggstate)
                 * Store the copied first input tuple in the tuple table slot reserved
                 * for it, so that it can be used in ExecProject.
                 */
-               ExecStoreTuple(entry->shared.firstTuple,
-                                          firstSlot,
-                                          InvalidBuffer,
-                                          false);
+               ExecStoreMinimalTuple(entry->shared.firstTuple,
+                                                         firstSlot,
+                                                         false);
 
                pergroup = entry->pergroup;
 
index c6663c7eac2827d7f30d70d599433e14e4ac3c4f..593eff4a5f9339c987f9c187a43c27d81a32d19d 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/nodeSubplan.c,v 1.75 2006/06/16 18:42:22 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/nodeSubplan.c,v 1.76 2006/06/28 17:05:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -572,8 +572,7 @@ findPartialMatch(TupleHashTable hashtable, TupleTableSlot *slot)
        ResetTupleHashIterator(hashtable, &hashiter);
        while ((entry = ScanTupleHashTable(&hashiter)) != NULL)
        {
-               ExecStoreTuple(entry->firstTuple, hashtable->tableslot,
-                                          InvalidBuffer, false);
+               ExecStoreMinimalTuple(entry->firstTuple, hashtable->tableslot, false);
                if (!execTuplesUnequal(hashtable->tableslot, slot,
                                                           numCols, keyColIdx,
                                                           hashtable->eqfunctions,
index 7a9a651e1e5d173bf372ea68c292308e555e9d29..97deb8b15c7bc599b57e8f1c91629facc0822b0e 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/execnodes.h,v 1.150 2006/04/30 18:30:40 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/execnodes.h,v 1.151 2006/06/28 17:05:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -367,7 +367,7 @@ typedef struct TupleHashTableData *TupleHashTable;
 typedef struct TupleHashEntryData
 {
        /* firstTuple must be the first field in this struct! */
-       HeapTuple       firstTuple;             /* copy of first tuple in this group */
+       MinimalTuple firstTuple;        /* copy of first tuple in this group */
        /* there may be additional data beyond the end of this struct */
 } TupleHashEntryData;                  /* VARIABLE LENGTH STRUCT */