v32-0013-tidstore-Embed-output-offsets-in-TidStoreIterRes.patch
application/octet-stream
Filename: v32-0013-tidstore-Embed-output-offsets-in-TidStoreIterRes.patch
Type: application/octet-stream
Part: 9
Patch
Format: format-patch
Series: patch v32-0013
Subject: tidstore: Embed output offsets in TidStoreIterResult.
| File | + | − |
|---|---|---|
| src/backend/access/common/tidstore.c | 2 | 5 |
| src/include/access/tidstore.h | 2 | 1 |
From 453dc7fd8078ba202569417d4ed65ce6e7f4a850 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 17 Apr 2023 18:00:44 +0900
Subject: [PATCH v32 13/18] tidstore: Embed output offsets in
TidStoreIterResult.
---
src/backend/access/common/tidstore.c | 7 ++-----
src/include/access/tidstore.h | 3 ++-
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/backend/access/common/tidstore.c b/src/backend/access/common/tidstore.c
index d9fe3d5f15..15b77b5bcb 100644
--- a/src/backend/access/common/tidstore.c
+++ b/src/backend/access/common/tidstore.c
@@ -470,12 +470,10 @@ TidStoreBeginIterate(TidStore *ts)
Assert(!TidStoreIsShared(ts) || ts->control->magic == TIDSTORE_MAGIC);
- iter = palloc0(sizeof(TidStoreIter));
+ iter = palloc0(sizeof(TidStoreIter) +
+ sizeof(OffsetNumber) * ts->control->max_off);
iter->ts = ts;
- iter->result.blkno = InvalidBlockNumber;
- iter->result.offsets = palloc(sizeof(OffsetNumber) * ts->control->max_offset);
-
if (TidStoreIsShared(ts))
iter->tree_iter.shared = shared_rt_begin_iterate(ts->tree.shared);
else
@@ -559,7 +557,6 @@ TidStoreEndIterate(TidStoreIter *iter)
else
local_rt_end_iterate(iter->tree_iter.local);
- pfree(iter->result.offsets);
pfree(iter);
}
diff --git a/src/include/access/tidstore.h b/src/include/access/tidstore.h
index f0a432d0da..66f0fdd482 100644
--- a/src/include/access/tidstore.h
+++ b/src/include/access/tidstore.h
@@ -22,11 +22,12 @@ typedef dsa_pointer TidStoreHandle;
typedef struct TidStore TidStore;
typedef struct TidStoreIter TidStoreIter;
+/* Result struct for TidStoreIterateNext */
typedef struct TidStoreIterResult
{
BlockNumber blkno;
- OffsetNumber *offsets;
int num_offsets;
+ OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
} TidStoreIterResult;
extern TidStore *TidStoreCreate(size_t max_bytes, int max_off, dsa_area *dsa);
--
2.31.1