On Tue, Nov 24, 2020 at 7:14 PM Robert Haas <robertmh...@gmail.com> wrote: > > On Tue, Nov 24, 2020 at 7:11 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > About (4), one option is that we directly call the correct handler > > function for the built-in type directly from > > toast_(de)compress(_slice) functions but in that case, we are > > duplicating the code, another option is that we call the > > GetCompressionRoutine() a common function and in that, for the > > built-in type, we can directly call the corresponding handler function > > and get the routine. The only thing is to avoid duplicating in > > decompression routine we need to convert CompressionId to Oid before > > calling GetCompressionRoutine(), but now we can avoid sys cache lookup > > for the built-in type. > > Suppose that we have a variable lz4_methods (like heapam_methods) that > is always defined, whether or not lz4 support is present. It's defined > like this: > > const CompressionAmRoutine lz4_compress_methods = { > .datum_compress = lz4_datum_compress, > .datum_decompress = lz4_datum_decompress, > .datum_decompress_slice = lz4_datum_decompress_slice > };
Yeah, this makes sense. > > (It would be good, I think, to actually name things something like > this - in particular why would we have TableAmRoutine and > IndexAmRoutine but not include "Am" in the one for compression? In > general I think tableam is a good pattern to adhere to and we should > try to make this patch hew closely to it.) For the compression routine name, I did not include "Am" because currently, we are storing the compression method in the new catalog "pg_compression" not in the pg_am. So are you suggesting that we should store the compression methods also in the pg_am instead of creating a new catalog? IMHO, storing the compression methods in a new catalog is a better option instead of storing them in pg_am because actually, the compression methods are not the same as heap or index AMs, I mean they are actually not the access methods. Am I missing something? > Then those functions are contingent on #ifdef HAVE_LIBLZ4: they either > do their thing, or complain that lz4 compression is not supported. > Then in this function you can just say, well, if we have the 01 bit > pattern, handler = &lz4_compress_methods and proceed from there. Okay > BTW, I think the "not supported" message should probably use the 'by > this build' language we use in some places i.e. > Okay -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com