Skip to content

Commit 5005a96

Browse files
author
Nikita Glukhov
committed
Don't pass DetoastIterator to toast_decompress_iterate()
1 parent 89e6e7a commit 5005a96

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/backend/access/common/toast_compression.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,9 @@ lz4_decompress_datum_slice(const struct varlena *value, int32 slicelength)
249249

250250
void
251251
toast_decompress_iterate(ToastBuffer *source, ToastBuffer *dest,
252-
DetoastIterator iter, const char *destend)
252+
ToastCompressionId compression_method,
253+
void **decompression_state,
254+
const char *destend)
253255
{
254256
const char *sp;
255257
const char *srcend;
@@ -278,13 +280,13 @@ toast_decompress_iterate(ToastBuffer *source, ToastBuffer *dest,
278280
/*
279281
* Decompress the data using the appropriate decompression routine.
280282
*/
281-
switch (iter->compression_method)
283+
switch (compression_method)
282284
{
283285
case TOAST_PGLZ_COMPRESSION_ID:
284286
dlen = pglz_decompress_state(sp, &slen, dp, destend - dp,
285287
last_source_chunk && destend == dest->capacity,
286288
last_source_chunk,
287-
&iter->decompression_state);
289+
decompression_state);
288290
break;
289291
case TOAST_LZ4_COMPRESSION_ID:
290292
if (source->limit < source->capacity)
@@ -310,7 +312,7 @@ toast_decompress_iterate(ToastBuffer *source, ToastBuffer *dest,
310312
}
311313
break;
312314
default:
313-
elog(ERROR, "invalid compression method id %d", iter->compression_method);
315+
elog(ERROR, "invalid compression method id %d", compression_method);
314316
return; /* keep compiler quiet */
315317
}
316318

src/include/access/detoast.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ extern void fetch_datum_iterate(FetchDatumIterator iter);
112112
extern ToastBuffer *create_toast_buffer(int32 size, bool compressed);
113113
extern void free_toast_buffer(ToastBuffer *buf);
114114
extern void toast_decompress_iterate(ToastBuffer *source, ToastBuffer *dest,
115-
DetoastIterator iter, const char *destend);
115+
ToastCompressionId compression_method,
116+
void **decompression_state,
117+
const char *destend);
116118
extern void pglz_decompress_iterate(ToastBuffer *source, ToastBuffer *dest,
117119
DetoastIterator iter, char *destend);
118120

@@ -166,7 +168,10 @@ detoast_iterate(DetoastIterator detoast_iter, const char *destend)
166168
fetch_datum_iterate(fetch_iter);
167169

168170
if (detoast_iter->compressed)
169-
toast_decompress_iterate(fetch_iter->buf, detoast_iter->buf, detoast_iter, destend);
171+
toast_decompress_iterate(fetch_iter->buf, detoast_iter->buf,
172+
detoast_iter->compression_method,
173+
&detoast_iter->decompression_state,
174+
destend);
170175

171176
if (detoast_iter->buf->limit == detoast_iter->buf->capacity)
172177
detoast_iter->done = true;

0 commit comments

Comments
 (0)