@@ -424,6 +424,7 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
424424 FuncCallContext * funcctx ;
425425 MemoryContext oldcontext ;
426426 datapagemap_t pagemap ;
427+ int64 pagecount = 0 ;
427428 char 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
451452 TupleDescInitEntry (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 );
453455 funcctx -> tuple_desc = BlessTupleDesc (tupdesc );
454456
455457 funcctx -> 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 */
498500 if (pagemap .bitmap != NULL )
499501 {
500- Datum values [2 ];
501- bool nulls [2 ] = {false};
502+ Datum values [3 ];
503+ bool nulls [3 ] = {false};
502504 char pathname [MAXPGPATH ];
503505 bytea * result = NULL ;
504506 Size result_sz = pagemap .bitmapsize + VARHDRSZ ;
@@ -512,11 +514,13 @@ ptrack_get_pagemapset(PG_FUNCTION_ARGS)
512514 strcpy (pathname , ctx -> relpath );
513515
514516 values [0 ] = CStringGetTextDatum (pathname );
515- values [1 ] = PointerGetDatum (result );
517+ values [1 ] = Int64GetDatum (pagecount );
518+ values [2 ] = PointerGetDatum (result );
516519
517520 pfree (pagemap .bitmap );
518521 pagemap .bitmap = NULL ;
519522 pagemap .bitmapsize = 0 ;
523+ pagecount = 0 ;
520524
521525 htup = heap_form_tuple (funcctx -> tuple_desc , values , nulls );
522526 if (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 */
555559 if (update_lsn2 >= ctx -> lsn )
560+ {
561+ pagecount += 1 ;
556562 datapagemap_add (& pagemap , ctx -> bid .blocknum % ((BlockNumber ) RELSEG_SIZE ));
563+ }
557564 }
558565
559566 ctx -> bid .blocknum += 1 ;
0 commit comments