Skip to content

Commit 4171c44

Browse files
committed
Revert "Introduce CompactAttribute array in TupleDesc"
This reverts commit d28dff3. Quite a large number of buildfarm members didn't like this commit and it's not yet clear why. Reverting this before too many animals turn red. Discussion: https://postgr.es/m/CAApHDvr9i6T5=iAwQCxFDgMsthr_obVxgwBaEJkC8KUH6yM3Hw@mail.gmail.com
1 parent d28dff3 commit 4171c44

File tree

14 files changed

+68
-246
lines changed

14 files changed

+68
-246
lines changed

src/backend/access/common/heaptuple.c

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,6 @@
8383
#define VARLENA_ATT_IS_PACKABLE(att) \
8484
((att)->attstorage != TYPSTORAGE_PLAIN)
8585

86-
/* FormData_pg_attribute.attstorage != TYPSTORAGE_PLAIN and an attlen of -1 */
87-
#define COMPACT_ATTR_IS_PACKABLE(att) \
88-
((att)->attlen == -1 && (att)->attispackable)
89-
9086
/*
9187
* Setup for caching pass-by-ref missing attributes in a way that survives
9288
* tupleDesc destruction.
@@ -151,12 +147,12 @@ Datum
151147
getmissingattr(TupleDesc tupleDesc,
152148
int attnum, bool *isnull)
153149
{
154-
CompactAttribute *att;
150+
Form_pg_attribute att;
155151

156152
Assert(attnum <= tupleDesc->natts);
157153
Assert(attnum > 0);
158154

159-
att = TupleDescCompactAttr(tupleDesc, attnum - 1);
155+
att = TupleDescAttr(tupleDesc, attnum - 1);
160156

161157
if (att->atthasmissing)
162158
{
@@ -227,15 +223,15 @@ heap_compute_data_size(TupleDesc tupleDesc,
227223
for (i = 0; i < numberOfAttributes; i++)
228224
{
229225
Datum val;
230-
CompactAttribute *atti;
226+
Form_pg_attribute atti;
231227

232228
if (isnull[i])
233229
continue;
234230

235231
val = values[i];
236-
atti = TupleDescCompactAttr(tupleDesc, i);
232+
atti = TupleDescAttr(tupleDesc, i);
237233

238-
if (COMPACT_ATTR_IS_PACKABLE(atti) &&
234+
if (ATT_IS_PACKABLE(atti) &&
239235
VARATT_CAN_MAKE_SHORT(DatumGetPointer(val)))
240236
{
241237
/*
@@ -272,7 +268,7 @@ heap_compute_data_size(TupleDesc tupleDesc,
272268
* Fill in either a data value or a bit in the null bitmask
273269
*/
274270
static inline void
275-
fill_val(CompactAttribute *att,
271+
fill_val(Form_pg_attribute att,
276272
bits8 **bit,
277273
int *bitmask,
278274
char **dataP,
@@ -353,7 +349,8 @@ fill_val(CompactAttribute *att,
353349
data_length = VARSIZE_SHORT(val);
354350
memcpy(data, val, data_length);
355351
}
356-
else if (att->attispackable && VARATT_CAN_MAKE_SHORT(val))
352+
else if (VARLENA_ATT_IS_PACKABLE(att) &&
353+
VARATT_CAN_MAKE_SHORT(val))
357354
{
358355
/* convert to short varlena -- no alignment */
359356
data_length = VARATT_CONVERTED_SHORT_SIZE(val);
@@ -430,7 +427,7 @@ heap_fill_tuple(TupleDesc tupleDesc,
430427

431428
for (i = 0; i < numberOfAttributes; i++)
432429
{
433-
CompactAttribute *attr = TupleDescCompactAttr(tupleDesc, i);
430+
Form_pg_attribute attr = TupleDescAttr(tupleDesc, i);
434431

435432
fill_val(attr,
436433
bitP ? &bitP : NULL,
@@ -464,8 +461,7 @@ heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc)
464461
Assert(!tupleDesc || attnum <= tupleDesc->natts);
465462
if (attnum > (int) HeapTupleHeaderGetNatts(tup->t_data))
466463
{
467-
if (tupleDesc &&
468-
TupleDescCompactAttr(tupleDesc, attnum - 1)->atthasmissing)
464+
if (tupleDesc && TupleDescAttr(tupleDesc, attnum - 1)->atthasmissing)
469465
return false;
470466
else
471467
return true;
@@ -574,13 +570,13 @@ nocachegetattr(HeapTuple tup,
574570

575571
if (!slow)
576572
{
577-
CompactAttribute *att;
573+
Form_pg_attribute att;
578574

579575
/*
580576
* If we get here, there are no nulls up to and including the target
581577
* attribute. If we have a cached offset, we can use it.
582578
*/
583-
att = TupleDescCompactAttr(tupleDesc, attnum);
579+
att = TupleDescAttr(tupleDesc, attnum);
584580
if (att->attcacheoff >= 0)
585581
return fetchatt(att, tp + att->attcacheoff);
586582

@@ -595,7 +591,7 @@ nocachegetattr(HeapTuple tup,
595591

596592
for (j = 0; j <= attnum; j++)
597593
{
598-
if (TupleDescCompactAttr(tupleDesc, j)->attlen <= 0)
594+
if (TupleDescAttr(tupleDesc, j)->attlen <= 0)
599595
{
600596
slow = true;
601597
break;
@@ -618,18 +614,18 @@ nocachegetattr(HeapTuple tup,
618614
* fixed-width columns, in hope of avoiding future visits to this
619615
* routine.
620616
*/
621-
TupleDescCompactAttr(tupleDesc, 0)->attcacheoff = 0;
617+
TupleDescAttr(tupleDesc, 0)->attcacheoff = 0;
622618

623619
/* we might have set some offsets in the slow path previously */
624-
while (j < natts && TupleDescCompactAttr(tupleDesc, j)->attcacheoff > 0)
620+
while (j < natts && TupleDescAttr(tupleDesc, j)->attcacheoff > 0)
625621
j++;
626622

627-
off = TupleDescCompactAttr(tupleDesc, j - 1)->attcacheoff +
628-
TupleDescCompactAttr(tupleDesc, j - 1)->attlen;
623+
off = TupleDescAttr(tupleDesc, j - 1)->attcacheoff +
624+
TupleDescAttr(tupleDesc, j - 1)->attlen;
629625

630626
for (; j < natts; j++)
631627
{
632-
CompactAttribute *att = TupleDescCompactAttr(tupleDesc, j);
628+
Form_pg_attribute att = TupleDescAttr(tupleDesc, j);
633629

634630
if (att->attlen <= 0)
635631
break;
@@ -643,7 +639,7 @@ nocachegetattr(HeapTuple tup,
643639

644640
Assert(j > attnum);
645641

646-
off = TupleDescCompactAttr(tupleDesc, attnum)->attcacheoff;
642+
off = TupleDescAttr(tupleDesc, attnum)->attcacheoff;
647643
}
648644
else
649645
{
@@ -663,7 +659,7 @@ nocachegetattr(HeapTuple tup,
663659
off = 0;
664660
for (i = 0;; i++) /* loop exit is at "break" */
665661
{
666-
CompactAttribute *att = TupleDescCompactAttr(tupleDesc, i);
662+
Form_pg_attribute att = TupleDescAttr(tupleDesc, i);
667663

668664
if (HeapTupleHasNulls(tup) && att_isnull(i, bp))
669665
{
@@ -711,7 +707,7 @@ nocachegetattr(HeapTuple tup,
711707
}
712708
}
713709

714-
return fetchatt(TupleDescCompactAttr(tupleDesc, attnum), tp + off);
710+
return fetchatt(TupleDescAttr(tupleDesc, attnum), tp + off);
715711
}
716712

717713
/* ----------------
@@ -896,7 +892,7 @@ expand_tuple(HeapTuple *targetHeapTuple,
896892
{
897893
if (attrmiss[attnum].am_present)
898894
{
899-
CompactAttribute *att = TupleDescCompactAttr(tupleDesc, attnum);
895+
Form_pg_attribute att = TupleDescAttr(tupleDesc, attnum);
900896

901897
targetDataLen = att_align_datum(targetDataLen,
902898
att->attalign,
@@ -1024,7 +1020,8 @@ expand_tuple(HeapTuple *targetHeapTuple,
10241020
/* Now fill in the missing values */
10251021
for (attnum = sourceNatts; attnum < natts; attnum++)
10261022
{
1027-
CompactAttribute *attr = TupleDescCompactAttr(tupleDesc, attnum);
1023+
1024+
Form_pg_attribute attr = TupleDescAttr(tupleDesc, attnum);
10281025

10291026
if (attrmiss && attrmiss[attnum].am_present)
10301027
{
@@ -1373,7 +1370,7 @@ heap_deform_tuple(HeapTuple tuple, TupleDesc tupleDesc,
13731370

13741371
for (attnum = 0; attnum < natts; attnum++)
13751372
{
1376-
CompactAttribute *thisatt = TupleDescCompactAttr(tupleDesc, attnum);
1373+
Form_pg_attribute thisatt = TupleDescAttr(tupleDesc, attnum);
13771374

13781375
if (hasnulls && att_isnull(attnum, bp))
13791376
{

src/backend/access/common/indextuple.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -303,13 +303,13 @@ nocache_index_getattr(IndexTuple tup,
303303

304304
if (!slow)
305305
{
306-
CompactAttribute *att;
306+
Form_pg_attribute att;
307307

308308
/*
309309
* If we get here, there are no nulls up to and including the target
310310
* attribute. If we have a cached offset, we can use it.
311311
*/
312-
att = TupleDescCompactAttr(tupleDesc, attnum);
312+
att = TupleDescAttr(tupleDesc, attnum);
313313
if (att->attcacheoff >= 0)
314314
return fetchatt(att, tp + att->attcacheoff);
315315

@@ -324,7 +324,7 @@ nocache_index_getattr(IndexTuple tup,
324324

325325
for (j = 0; j <= attnum; j++)
326326
{
327-
if (TupleDescCompactAttr(tupleDesc, j)->attlen <= 0)
327+
if (TupleDescAttr(tupleDesc, j)->attlen <= 0)
328328
{
329329
slow = true;
330330
break;
@@ -347,18 +347,18 @@ nocache_index_getattr(IndexTuple tup,
347347
* fixed-width columns, in hope of avoiding future visits to this
348348
* routine.
349349
*/
350-
TupleDescCompactAttr(tupleDesc, 0)->attcacheoff = 0;
350+
TupleDescAttr(tupleDesc, 0)->attcacheoff = 0;
351351

352352
/* we might have set some offsets in the slow path previously */
353-
while (j < natts && TupleDescCompactAttr(tupleDesc, j)->attcacheoff > 0)
353+
while (j < natts && TupleDescAttr(tupleDesc, j)->attcacheoff > 0)
354354
j++;
355355

356-
off = TupleDescCompactAttr(tupleDesc, j - 1)->attcacheoff +
357-
TupleDescCompactAttr(tupleDesc, j - 1)->attlen;
356+
off = TupleDescAttr(tupleDesc, j - 1)->attcacheoff +
357+
TupleDescAttr(tupleDesc, j - 1)->attlen;
358358

359359
for (; j < natts; j++)
360360
{
361-
CompactAttribute *att = TupleDescCompactAttr(tupleDesc, j);
361+
Form_pg_attribute att = TupleDescAttr(tupleDesc, j);
362362

363363
if (att->attlen <= 0)
364364
break;
@@ -372,7 +372,7 @@ nocache_index_getattr(IndexTuple tup,
372372

373373
Assert(j > attnum);
374374

375-
off = TupleDescCompactAttr(tupleDesc, attnum)->attcacheoff;
375+
off = TupleDescAttr(tupleDesc, attnum)->attcacheoff;
376376
}
377377
else
378378
{
@@ -392,7 +392,7 @@ nocache_index_getattr(IndexTuple tup,
392392
off = 0;
393393
for (i = 0;; i++) /* loop exit is at "break" */
394394
{
395-
CompactAttribute *att = TupleDescCompactAttr(tupleDesc, i);
395+
Form_pg_attribute att = TupleDescAttr(tupleDesc, i);
396396

397397
if (IndexTupleHasNulls(tup) && att_isnull(i, bp))
398398
{
@@ -440,7 +440,7 @@ nocache_index_getattr(IndexTuple tup,
440440
}
441441
}
442442

443-
return fetchatt(TupleDescCompactAttr(tupleDesc, attnum), tp + off);
443+
return fetchatt(TupleDescAttr(tupleDesc, attnum), tp + off);
444444
}
445445

446446
/*
@@ -490,7 +490,7 @@ index_deform_tuple_internal(TupleDesc tupleDescriptor,
490490

491491
for (attnum = 0; attnum < natts; attnum++)
492492
{
493-
CompactAttribute *thisatt = TupleDescCompactAttr(tupleDescriptor, attnum);
493+
Form_pg_attribute thisatt = TupleDescAttr(tupleDescriptor, attnum);
494494

495495
if (hasnulls && att_isnull(attnum, bp))
496496
{
@@ -588,7 +588,7 @@ index_truncate_tuple(TupleDesc sourceDescriptor, IndexTuple source,
588588
return CopyIndexTuple(source);
589589

590590
/* Create temporary descriptor to scribble on */
591-
truncdesc = CreateTemplateTupleDesc(sourceDescriptor->natts);
591+
truncdesc = palloc(TupleDescSize(sourceDescriptor));
592592
TupleDescCopy(truncdesc, sourceDescriptor);
593593
truncdesc->natts = leavenatts;
594594

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy