@@ -452,14 +452,13 @@ struct FilterResult {
452
452
}
453
453
454
454
template <typename ColumnValueType>
455
- inline void
456
- ExecuteSingleRangeT (const FilterIntervalRangeT<ColumnValueType> &interval_range, SegmentIndexEntry &index_entry, const TxnTimeStamp ts) {
455
+ inline void ExecuteSingleRangeT (const FilterIntervalRangeT<ColumnValueType> &interval_range, SegmentIndexEntry &index_entry, Txn *txn) {
457
456
Vector<UniquePtr<TrunkReader<ColumnValueType>>> trunk_readers;
458
457
Tuple<Vector<SharedPtr<ChunkIndexEntry>>, SharedPtr<SecondaryIndexInMem>> chunks_snapshot = index_entry.GetSecondaryIndexSnapshot ();
459
458
const u32 segment_row_count = SegmentRowCount ();
460
459
auto &[chunk_index_entries, memory_secondary_index] = chunks_snapshot;
461
460
for (const auto &chunk_index_entry : chunk_index_entries) {
462
- if (chunk_index_entry->CheckVisible (ts )) {
461
+ if (chunk_index_entry->CheckVisible (txn )) {
463
462
trunk_readers.emplace_back (MakeUnique<TrunkReaderT<ColumnValueType>>(segment_row_count, chunk_index_entry));
464
463
}
465
464
}
@@ -492,7 +491,7 @@ struct FilterResult {
492
491
inline void ExecuteSingleRange (const HashMap<ColumnID, TableIndexEntry *> &column_index_map,
493
492
const FilterExecuteSingleRange &single_range,
494
493
SegmentID segment_id,
495
- const TxnTimeStamp ts ) {
494
+ Txn *txn ) {
496
495
// step 1. check if range is empty
497
496
if (single_range.IsEmpty ()) {
498
497
return SetEmptyResult ();
@@ -504,7 +503,7 @@ struct FilterResult {
504
503
// step 3. search index
505
504
auto &interval_range_variant = single_range.GetIntervalRange ();
506
505
std::visit (Overload{[&]<typename ColumnValueType>(const FilterIntervalRangeT<ColumnValueType> &interval_range) {
507
- ExecuteSingleRangeT (interval_range, index_entry, ts );
506
+ ExecuteSingleRangeT (interval_range, index_entry, txn );
508
507
},
509
508
[](const std::monostate &empty) {
510
509
UnrecoverableError (" FilterResult::ExecuteSingleRange(): class member interval_range_ not initialized!" );
@@ -598,7 +597,7 @@ FilterResult SolveSecondaryIndexFilterInner(const Vector<FilterExecuteElem> &fil
598
597
const SegmentID segment_id,
599
598
const u32 segment_row_count,
600
599
const u32 segment_row_actual_count,
601
- const TxnTimeStamp ts ) {
600
+ Txn *txn ) {
602
601
Vector<FilterResult> result_stack;
603
602
// execute filter_execute_command_ (Reverse Polish notation)
604
603
for (auto const &elem : filter_execute_command) {
@@ -628,7 +627,7 @@ FilterResult SolveSecondaryIndexFilterInner(const Vector<FilterExecuteElem> &fil
628
627
},
629
628
[&](const FilterExecuteSingleRange &single_range) {
630
629
result_stack.emplace_back (segment_row_count, segment_row_actual_count);
631
- result_stack.back ().ExecuteSingleRange (column_index_map, single_range, segment_id, ts );
630
+ result_stack.back ().ExecuteSingleRange (column_index_map, single_range, segment_id, txn );
632
631
}},
633
632
elem);
634
633
}
@@ -644,13 +643,13 @@ std::variant<Vector<u32>, Bitmask> SolveSecondaryIndexFilter(const Vector<Filter
644
643
const SegmentID segment_id,
645
644
const u32 segment_row_count,
646
645
const u32 segment_row_actual_count,
647
- const TxnTimeStamp ts ) {
646
+ Txn *txn ) {
648
647
if (filter_execute_command.empty ()) {
649
648
// return all true
650
649
return std::variant<Vector<u32>, Bitmask>(std::in_place_type<Bitmask>);
651
650
}
652
651
auto result =
653
- SolveSecondaryIndexFilterInner (filter_execute_command, column_index_map, segment_id, segment_row_count, segment_row_actual_count, ts );
652
+ SolveSecondaryIndexFilterInner (filter_execute_command, column_index_map, segment_id, segment_row_count, segment_row_actual_count, txn );
654
653
return std::move (result.selected_rows_ );
655
654
}
656
655
@@ -709,7 +708,7 @@ void PhysicalIndexScan::ExecuteInternal(QueryContext *query_context, IndexScanOp
709
708
DeleteFilter delete_filter (segment_entry, begin_ts, segment_entry->row_count (begin_ts));
710
709
// output
711
710
const auto result =
712
- SolveSecondaryIndexFilterInner (filter_execute_command_, column_index_map_, segment_id, segment_row_count, segment_row_actual_count, begin_ts );
711
+ SolveSecondaryIndexFilterInner (filter_execute_command_, column_index_map_, segment_id, segment_row_count, segment_row_actual_count, txn );
713
712
result.Output (output_data_blocks, segment_id, delete_filter);
714
713
715
714
LOG_TRACE (fmt::format (" IndexScan: job number: {}, segment_ids.size(): {}, finished" , next_idx, segment_ids.size ()));
0 commit comments