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