From: Justin Pryzby Date: Sat, 20 Mar 2021 16:13:44 -0500 Subject: [PATCH v3 08/12] Commentary about slicing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit My language, per gripe from Álvaro Herrera: | I updated the coverage script to use --with-lz4; results are updated. | While eyeballing the results I noticed this bit in | lz4_decompress_datum_slice(): | | + /* slice decompression not supported prior to 1.8.3 */ | + if (LZ4_versionNumber() < 10803) | + return lz4_decompress_datum(value); | | which I read as returning the complete decompressed datum if slice | decompression is not supported. I thought that was a bug, but looking | at the caller I realize that this isn't really a problem, since it's | detoast_attr_slice's responsibility to slice the result further -- no | bug, it's just wasteful. I suggest to add comments to this effect, | perhaps as the attached (feel free to reword, I think mine is awkward.) --- src/backend/access/common/detoast.c | 3 +++ src/backend/access/common/toast_compression.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/backend/access/common/detoast.c b/src/backend/access/common/detoast.c index bed50e8603..519fe8c6a6 100644 --- a/src/backend/access/common/detoast.c +++ b/src/backend/access/common/detoast.c @@ -498,6 +498,9 @@ toast_decompress_datum(struct varlena *attr) * Decompress the front of a compressed version of a varlena datum. * offset handling happens in detoast_attr_slice. * Here we just decompress a slice from the front. + * + * If slice decompression is not supported, the full datum is decompressed, and + * then sliced by detoast_attr_slice. */ static struct varlena * toast_decompress_datum_slice(struct varlena *attr, int32 slicelength) diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index aa28772159..9107d16445 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -213,6 +213,9 @@ lz4_decompress_datum(const struct varlena *value) /* * Decompress part of a varlena that was compressed using LZ4. + * + * If slice decompression is not supported, the full datum is decompressed, and + * then sliced by detoast_attr_slice. */ struct varlena * lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength) -- 2.17.0 --GZVR6ND4mMseVXL/--