brin-inclusion-v05-fix-brin-deform-tuple.patch

application/octet-stream

Filename: brin-inclusion-v05-fix-brin-deform-tuple.patch
Type: application/octet-stream
Part: 1
Message: Re: BRIN range operator class

Patch

Format: format-patch
Series: patch v5-0004
Subject: fix brin_deform_tuple
File+
src/backend/access/brin/brin_tuple.c 9 3
From fcc3de987c1b3857f3593b1fafcff9d3dfd39896 Mon Sep 17 00:00:00 2001
From: Emre Hasegeli <emre@hasegeli.com>
Date: Sun, 22 Mar 2015 17:32:14 +0100
Subject: [PATCH 4/8] fix brin_deform_tuple

---
 src/backend/access/brin/brin_tuple.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/backend/access/brin/brin_tuple.c b/src/backend/access/brin/brin_tuple.c
index 93f00f6..be09c0f 100644
--- a/src/backend/access/brin/brin_tuple.c
+++ b/src/backend/access/brin/brin_tuple.c
@@ -30,20 +30,21 @@
  *	  src/backend/access/brin/brin_tuple.c
  */
 #include "postgres.h"
 
 #include "access/htup_details.h"
 #include "access/brin_tuple.h"
 #include "access/tupdesc.h"
 #include "access/tupmacs.h"
 #include "utils/datum.h"
 #include "utils/memutils.h"
+#include "utils/typcache.h"
 
 
 static inline void brin_deconstruct_tuple(BrinDesc *brdesc,
 					   char *tp, bits8 *nullbits, bool nulls,
 					   Datum *values, bool *allnulls, bool *hasnulls);
 
 
 /*
  * Return a tuple descriptor used for on-disk storage of BRIN tuples.
  */
@@ -423,36 +424,41 @@ brin_deform_tuple(BrinDesc *brdesc, BrinTuple *tuple)
 						   values, allnulls, hasnulls);
 
 	/*
 	 * Iterate to assign each of the values to the corresponding item in the
 	 * values array of each column.  The copies occur in the tuple's context.
 	 */
 	oldcxt = MemoryContextSwitchTo(dtup->bt_context);
 	for (valueno = 0, keyno = 0; keyno < brdesc->bd_tupdesc->natts; keyno++)
 	{
 		int			i;
+		TypeCacheEntry *typcache;
 
 		if (allnulls[keyno])
 		{
 			valueno += brdesc->bd_info[keyno]->oi_nstored;
 			continue;
 		}
 
 		/*
 		 * We would like to skip datumCopy'ing the values datum in some cases,
 		 * caller permitting ...
 		 */
 		for (i = 0; i < brdesc->bd_info[keyno]->oi_nstored; i++)
+		{
+			typcache = lookup_type_cache(brdesc->bd_info[keyno]->oi_typids[i],
+										 0);
+
 			dtup->bt_columns[keyno].bv_values[i] =
-				datumCopy(values[valueno++],
-						  brdesc->bd_tupdesc->attrs[keyno]->attbyval,
-						  brdesc->bd_tupdesc->attrs[keyno]->attlen);
+				datumCopy(values[valueno++], typcache->typbyval,
+						  typcache->typlen);
+		}
 
 		dtup->bt_columns[keyno].bv_hasnulls = hasnulls[keyno];
 		dtup->bt_columns[keyno].bv_allnulls = false;
 	}
 
 	MemoryContextSwitchTo(oldcxt);
 
 	pfree(values);
 	pfree(allnulls);
 	pfree(hasnulls);
-- 
2.2.1