@@ -203,13 +203,21 @@ copytup_rumitem(RumTuplesortstate * state, SortTuple *stup, void *tup)
203203#define LogicalTapeReadExact_compat (state ,LT_ARG ,args ...) LogicalTapeReadExact(state->tapeset, LT_ARG, ##args)
204204#endif
205205
206- #define ITEMSIZE (is_scanitem ) is_scanitem ? sizeof(RumScanItem) : RumSortItemSize(state->nKeys);
206+ static size_t rum_item_size (RumTuplesortstate * state )
207+ {
208+ if (state -> copytup == copytup_rum )
209+ return RumSortItemSize (state -> nKeys );
210+ else if (state -> copytup == copytup_rumitem )
211+ return sizeof (RumScanItem );
212+ else
213+ elog (FATAL ,"Unknown RUM state" );
214+ }
207215
208216static void
209- writetup_rum_internal (RumTuplesortstate * state ,LT_TYPE LT_ARG ,SortTuple * stup , bool is_item )
217+ writetup_rum_internal (RumTuplesortstate * state ,LT_TYPE LT_ARG ,SortTuple * stup )
210218{
211219void * item = stup -> tuple ;
212- size_t size = ITEMSIZE ( is_item );
220+ size_t size = rum_item_size ( state );
213221unsignedint writtenlen = size + sizeof (unsignedint );
214222
215223LogicalTapeWrite (TAPE (state ,LT_ARG ),
@@ -227,21 +235,21 @@ writetup_rum_internal(RumTuplesortstate * state, LT_TYPE LT_ARG, SortTuple *stup
227235static void
228236writetup_rum (RumTuplesortstate * state ,LT_TYPE LT_ARG ,SortTuple * stup )
229237{
230- writetup_rum_internal (state ,LT_ARG ,stup , false );
238+ writetup_rum_internal (state ,LT_ARG ,stup );
231239}
232240
233241static void
234242writetup_rumitem (RumTuplesortstate * state ,LT_TYPE LT_ARG ,SortTuple * stup )
235243{
236- writetup_rum_internal (state ,LT_ARG ,stup , true );
244+ writetup_rum_internal (state ,LT_ARG ,stup );
237245}
238246
239247static void
240248readtup_rum_internal (RumTuplesortstate * state ,SortTuple * stup ,
241249LT_TYPE LT_ARG ,unsignedint len ,bool is_item )
242250{
243251unsignedint tuplen = len - sizeof (unsignedint );
244- size_t size = ITEMSIZE ( is_item );
252+ size_t size = rum_item_size ( state );
245253void * item = palloc (size );
246254
247255Assert (tuplen == RumSortItemSize (state -> nKeys ));