|
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"
|
@@ -371,14 +372,23 @@ bitgetpage(HeapScanDesc scan, TBMIterateResult *tbmres)
|
371 | 372 | {
|
372 | 373 | ItemIdlp;
|
373 | 374 | HeapTupleDataloctup;
|
| 375 | +boolvalid; |
374 | 376 |
|
375 | 377 | lp=PageGetItemId(dp,offnum);
|
376 | 378 | if (!ItemIdIsNormal(lp))
|
377 | 379 | continue;
|
378 | 380 | loctup.t_data= (HeapTupleHeader)PageGetItem((Page)dp,lp);
|
379 | 381 | loctup.t_len=ItemIdGetLength(lp);
|
380 |
| -if (HeapTupleSatisfiesVisibility(&loctup,snapshot,buffer)) |
| 382 | +loctup.t_tableOid=scan->rs_rd->rd_id; |
| 383 | +ItemPointerSet(&loctup.t_self,page,offnum); |
| 384 | +valid=HeapTupleSatisfiesVisibility(&loctup,snapshot,buffer); |
| 385 | +if (valid) |
| 386 | +{ |
381 | 387 | scan->rs_vistuples[ntup++]=offnum;
|
| 388 | +PredicateLockTuple(scan->rs_rd,&loctup,snapshot); |
| 389 | +} |
| 390 | +CheckForSerializableConflictOut(valid,scan->rs_rd,&loctup, |
| 391 | +buffer,snapshot); |
382 | 392 | }
|
383 | 393 | }
|
384 | 394 |
|
|