@@ -424,6 +424,7 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
424424FuncCallContext * funcctx ;
425425MemoryContext oldcontext ;
426426datapagemap_t pagemap ;
427+ int64 pagecount = 0 ;
427428char gather_path [MAXPGPATH ];
428429
429430/* Exit immediately if there is no map */
@@ -444,12 +445,13 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
444445
445446/* Make tuple descriptor */
446447#if PG_VERSION_NUM >=120000
447- tupdesc = CreateTemplateTupleDesc (2 );
448+ tupdesc = CreateTemplateTupleDesc (3 );
448449#else
449- tupdesc = CreateTemplateTupleDesc (2 , false);
450+ tupdesc = CreateTemplateTupleDesc (3 , false);
450451#endif
451452TupleDescInitEntry (tupdesc , (AttrNumber )1 ,"path" ,TEXTOID ,-1 ,0 );
452- TupleDescInitEntry (tupdesc , (AttrNumber )2 ,"pagemap" ,BYTEAOID ,-1 ,0 );
453+ TupleDescInitEntry (tupdesc , (AttrNumber )2 ,"pagecount" ,INT8OID ,-1 ,0 );
454+ TupleDescInitEntry (tupdesc , (AttrNumber )3 ,"pagemap" ,BYTEAOID ,-1 ,0 );
453455funcctx -> tuple_desc = BlessTupleDesc (tupdesc );
454456
455457funcctx -> user_fctx = ctx ;
@@ -497,8 +499,8 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
497499/* We completed a segment and there is a bitmap to return */
498500if (pagemap .bitmap != NULL )
499501{
500- Datum values [2 ];
501- bool nulls [2 ]= {false};
502+ Datum values [3 ];
503+ bool nulls [3 ]= {false};
502504char pathname [MAXPGPATH ];
503505bytea * result = NULL ;
504506Size result_sz = pagemap .bitmapsize + VARHDRSZ ;
@@ -512,11 +514,13 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
512514strcpy (pathname ,ctx -> relpath );
513515
514516values [0 ]= CStringGetTextDatum (pathname );
515- values [1 ]= PointerGetDatum (result );
517+ values [1 ]= Int64GetDatum (pagecount );
518+ values [2 ]= PointerGetDatum (result );
516519
517520pfree (pagemap .bitmap );
518521pagemap .bitmap = NULL ;
519522pagemap .bitmapsize = 0 ;
523+ pagecount = 0 ;
520524
521525htup = heap_form_tuple (funcctx -> tuple_desc ,values ,nulls );
522526if (htup )
@@ -553,7 +557,10 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
553557
554558/* Block has been changed since specified LSN. Mark it in the bitmap */
555559if (update_lsn2 >=ctx -> lsn )
560+ {
561+ pagecount += 1 ;
556562datapagemap_add (& pagemap ,ctx -> bid .blocknum % ((BlockNumber )RELSEG_SIZE ));
563+ }
557564}
558565
559566ctx -> bid .blocknum += 1 ;