]> granicus.if.org Git - postgresql/commitdiff
Remove unnecessary coziness of GIN code with datum copying. Now that
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Jun 2008 21:04:01 +0000 (21:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Jun 2008 21:04:01 +0000 (21:04 +0000)
space is tracked via GetMemoryChunkSpace, there's really no advantage
to duplicating datumCopy's innards here.  This is one bit of my toast
indirection patch that should go in anyway.

src/backend/access/gin/ginbulk.c

index 2165428c54f4a4b1e2570b572e62c04c1e90de6b..b17e87cdb111e9bbf7e3086cf057c7fda9c3626b 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *                     $PostgreSQL: pgsql/src/backend/access/gin/ginbulk.c,v 1.11 2008/01/01 19:45:46 momjian Exp $
+ *                     $PostgreSQL: pgsql/src/backend/access/gin/ginbulk.c,v 1.12 2008/06/29 21:04:01 tgl Exp $
  *-------------------------------------------------------------------------
  */
 
@@ -78,8 +78,8 @@ ginInsertData(BuildAccumulator *accum, EntryAccumulator *entry, ItemPointer heap
 }
 
 /*
- * This is basically the same as datumCopy(), but we duplicate some code
- * to avoid computing the datum size twice.
+ * This is basically the same as datumCopy(), but modified to count
+ * palloc'd space in accum.
  */
 static Datum
 getDatumCopy(BuildAccumulator *accum, Datum value)
@@ -91,16 +91,8 @@ getDatumCopy(BuildAccumulator *accum, Datum value)
                res = value;
        else
        {
-               Size            realSize;
-               char       *s;
-
-               realSize = datumGetSize(value, false, att[0]->attlen);
-
-               s = (char *) palloc(realSize);
-               accum->allocatedMemory += GetMemoryChunkSpace(s);
-
-               memcpy(s, DatumGetPointer(value), realSize);
-               res = PointerGetDatum(s);
+               res = datumCopy(value, false, att[0]->attlen);
+               accum->allocatedMemory += GetMemoryChunkSpace(DatumGetPointer(res));
        }
        return res;
 }