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)
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