v2-0005-Alternative-Store-converted-key-in-local-variable.patch
text/plain
Filename: v2-0005-Alternative-Store-converted-key-in-local-variable.patch
Type: text/plain
Part: 4
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0005
Subject: Alternative: Store converted key in local variable
| File | + | − |
|---|---|---|
| src/backend/access/index/genam.c | 6 | 10 |
From e131e182698986839c5190389bd75983c2a54e35 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Mon, 12 Aug 2024 09:30:24 +0200
Subject: [PATCH v2 5/5] Alternative: Store converted key in local variable
---
src/backend/access/index/genam.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c
index 0f047e1fb73..087d5c1b6dd 100644
--- a/src/backend/access/index/genam.c
+++ b/src/backend/access/index/genam.c
@@ -419,17 +419,15 @@ systable_beginscan(Relation heapRelation,
if (irel)
{
int i;
- ScanKey idxkey;
-
- idxkey = palloc_array(ScanKeyData, nkeys);
+ ScanKeyData idxkey[INDEX_MAX_KEYS];
/* Convert attribute numbers to be index column numbers. */
+ memcpy(idxkey, key, sizeof(ScanKeyData) * nkeys);
+
for (i = 0; i < nkeys; i++)
{
int j;
- memcpy(&idxkey[i], &key[i], sizeof(ScanKeyData));
-
for (j = 0; j < IndexRelationGetNumberOfAttributes(irel); j++)
{
if (key[i].sk_attno == irel->rd_index->indkey.values[j])
@@ -652,7 +650,7 @@ systable_beginscan_ordered(Relation heapRelation,
{
SysScanDesc sysscan;
int i;
- ScanKey idxkey;
+ ScanKeyData idxkey[INDEX_MAX_KEYS];
/* REINDEX can probably be a hard error here ... */
if (ReindexIsProcessingIndex(RelationGetRelid(indexRelation)))
@@ -684,15 +682,13 @@ systable_beginscan_ordered(Relation heapRelation,
sysscan->snapshot = NULL;
}
- idxkey = palloc_array(ScanKeyData, nkeys);
-
/* Convert attribute numbers to be index column numbers. */
+ memcpy(idxkey, key, sizeof(ScanKeyData) * nkeys);
+
for (i = 0; i < nkeys; i++)
{
int j;
- memcpy(&idxkey[i], &key[i], sizeof(ScanKeyData));
-
for (j = 0; j < IndexRelationGetNumberOfAttributes(indexRelation); j++)
{
if (key[i].sk_attno == indexRelation->rd_index->indkey.values[j])
--
2.46.0