From 7ea9b997ef07672d45278ab1c5b0634eaa090966 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 29 Jun 2008 21:04:01 +0000
Subject: [PATCH] Remove unnecessary coziness of GIN code with datum copying. 
 Now that 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 | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/src/backend/access/gin/ginbulk.c b/src/backend/access/gin/ginbulk.c
index 2165428c54f..b17e87cdb11 100644
--- a/src/backend/access/gin/ginbulk.c
+++ b/src/backend/access/gin/ginbulk.c
@@ -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;
 }
-- 
GitLab