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