|
42 | 42 | #include"executor/nodeBitmapHeapscan.h" |
43 | 43 | #include"pgstat.h" |
44 | 44 | #include"storage/bufmgr.h" |
| 45 | +#include"storage/predicate.h" |
45 | 46 | #include"utils/memutils.h" |
46 | 47 | #include"utils/snapmgr.h" |
47 | 48 | #include"utils/tqual.h" |
@@ -369,14 +370,23 @@ bitgetpage(HeapScanDesc scan, TBMIterateResult *tbmres) |
369 | 370 | { |
370 | 371 | ItemIdlp; |
371 | 372 | HeapTupleDataloctup; |
| 373 | +boolvalid; |
372 | 374 |
|
373 | 375 | lp=PageGetItemId(dp,offnum); |
374 | 376 | if (!ItemIdIsNormal(lp)) |
375 | 377 | continue; |
376 | 378 | loctup.t_data= (HeapTupleHeader)PageGetItem((Page)dp,lp); |
377 | 379 | loctup.t_len=ItemIdGetLength(lp); |
378 | | -if (HeapTupleSatisfiesVisibility(&loctup,snapshot,buffer)) |
| 380 | +loctup.t_tableOid=scan->rs_rd->rd_id; |
| 381 | +ItemPointerSet(&loctup.t_self,page,offnum); |
| 382 | +valid=HeapTupleSatisfiesVisibility(&loctup,snapshot,buffer); |
| 383 | +if (valid) |
| 384 | +{ |
379 | 385 | scan->rs_vistuples[ntup++]=offnum; |
| 386 | +PredicateLockTuple(scan->rs_rd,&loctup,snapshot); |
| 387 | +} |
| 388 | +CheckForSerializableConflictOut(valid,scan->rs_rd,&loctup, |
| 389 | +buffer,snapshot); |
380 | 390 | } |
381 | 391 | } |
382 | 392 |
|
|