So to implement the agreed upon plan I see the following items.
1) Replace the VARATT_SIZEP macro with SET_VARLENA_LEN. I intend to keep this
patch separate as it will bitrot quickly and would be best if it could be
applied as soon as possible even before the main patch is committed.
I just sent a patch to do this with some notes to pgsql-patches.
2) Replace VARATT* macros to store and retrieve the toast bits in a manner
that will work for variable length headers. This either means storing the
bits at the least-significant position or using network byte order.
If we want to allow storing >1 headers unaligned which I think would be
good then I still think we have to read them using bytewise lookups -- ie
by casting to (char*). That means network byte order or using the low order
bits is equally efficient.
3) Have VARSIZE and VARATT_SIZE recognize short headers and produce accurate
4) Change heap_deform*tuple, heap_getattr and any other functions and macros
in heapam.c that step through tuples to recognize the new headers.
Actually mostly these should just work because att_addlength uses VARSIZE
but there may be additional changes. Other places that use att_addlength
and need to be checked are heaptuple.c, indextuple.c, arrayfuncs.c,
datum.c, varlena.c, and execQual.c, and flatfiles.c.
5) Change pg_detoast_datum to recognize the new header types and decompress
5) Change heap_form_tuple to compress headers where possible.
6) Fix the toaster to generate new-style toasted data
Did I miss anything?
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?