Skip to content

Commit 4a66478

Browse files
committed
Simplify dealing with attnos during decompression
We fetch key column attribute numbers from indexes on uncompressed chunks. These should not contain system attribute numbers so there is no point in adding/subtracting FirstLowInvalidHeapAttributeNumber.
1 parent e4d909c commit 4a66478

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

tsl/src/compression/compression_dml.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -805,12 +805,13 @@ get_batch_keys_for_unique_constraints(const ChunkInsertState *cis, Relation rela
805805
*/
806806
for (int i = 0; i < indexDesc->rd_index->indnkeyatts; i++)
807807
{
808-
int attno = indexDesc->rd_index->indkey.values[i];
808+
AttrNumber attno = indexDesc->rd_index->indkey.values[i];
809809
/* We are not interested in expression columns which will have attno = 0 */
810810
if (!attno)
811811
continue;
812812

813-
idx_attrs = bms_add_member(idx_attrs, attno - FirstLowInvalidHeapAttributeNumber);
813+
Assert(AttrNumberIsForUserDefinedAttr(attno));
814+
idx_attrs = bms_add_member(idx_attrs, attno);
814815
}
815816
index_close(indexDesc, AccessShareLock);
816817

@@ -1351,11 +1352,9 @@ key_column_is_null(tuple_filtering_constraints *constraints, Relation chunk_rel,
13511352
if (!constraints->covered || constraints->nullsnotdistinct)
13521353
return false;
13531354

1354-
int i = -1;
1355-
while ((i = bms_next_member(constraints->key_columns, i)) > 0)
1355+
AttrNumber chunk_attno = -1;
1356+
while ((chunk_attno = bms_next_member(constraints->key_columns, chunk_attno)) > 0)
13561357
{
1357-
AttrNumber chunk_attno = i + FirstLowInvalidHeapAttributeNumber;
1358-
13591358
/*
13601359
* slot has the physical layout of the hypertable, so we need to
13611360
* get the attribute number of the hypertable for the column.

tsl/src/compression/compression_dml.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313

1414
typedef struct tuple_filtering_constraints
1515
{
16+
/*
17+
* All key column heap attribute numbers on uncompressed chunk.
18+
* We shouldn't be dealing with system columns so no need to
19+
* add/subtract FirstLowInvalidHeapAttributeNumber from these.
20+
*/
1621
Bitmapset *key_columns;
1722
/*
1823
* The covered flag is set to true if we have a single constraint that is covered

tsl/src/compression/compression_scankey.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,9 @@ build_mem_scankeys_from_slot(Oid ht_relid, CompressionSettings *settings, Relati
4545

4646
scankeys = palloc(sizeof(ScanKeyData) * bms_num_members(constraints->key_columns));
4747

48-
int i = -1;
49-
while ((i = bms_next_member(constraints->key_columns, i)) > 0)
48+
AttrNumber attno = -1;
49+
while ((attno = bms_next_member(constraints->key_columns, attno)) > 0)
5050
{
51-
AttrNumber attno = i + FirstLowInvalidHeapAttributeNumber;
5251
bool isnull;
5352

5453
/*
@@ -125,10 +124,9 @@ build_heap_scankeys(Oid hypertable_relid, Relation in_rel, Relation out_rel,
125124
if (!bms_is_empty(key_columns))
126125
{
127126
scankeys = palloc0(bms_num_members(key_columns) * 2 * sizeof(ScanKeyData));
128-
int i = -1;
129-
while ((i = bms_next_member(key_columns, i)) > 0)
127+
AttrNumber attno = -1;
128+
while ((attno = bms_next_member(key_columns, attno)) > 0)
130129
{
131-
AttrNumber attno = i + FirstLowInvalidHeapAttributeNumber;
132130
char *attname = get_attname(out_rel->rd_id, attno, false);
133131
bool isnull;
134132
AttrNumber ht_attno = get_attnum(hypertable_relid, attname);
@@ -322,8 +320,7 @@ build_index_scankeys_using_slot(Oid hypertable_relid, Relation in_rel, Relation
322320
AttrNumber idx_attnum = AttrOffsetGetAttrNumber(i);
323321
AttrNumber in_attnum = index_rel->rd_index->indkey.values[i];
324322
const NameData *attname = attnumAttName(in_rel, in_attnum);
325-
AttrNumber column_attno =
326-
get_attnum(out_rel->rd_id, NameStr(*attname)) - FirstLowInvalidHeapAttributeNumber;
323+
AttrNumber column_attno = get_attnum(out_rel->rd_id, NameStr(*attname));
327324

328325
/* Make sure we find columns in key columns in order to select the right index */
329326
if (!bms_is_member(column_attno, key_columns))

0 commit comments

Comments
 (0)