From e131e182698986839c5190389bd75983c2a54e35 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut 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