MCPcopy Create free account
hub / github.com/4paradigm/OpenMLDB / SelectIterator

Method SelectIterator

src/tablet/combine_iterator.cc:83–135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81}
82
83void CombineIterator::SelectIterator() {
84 uint64_t max_ts = 0;
85 bool need_delete = false;
86 cur_qit_ = nullptr;
87 for (auto iter = q_its_.begin(); iter != q_its_.end(); iter++) {
88 uint64_t cur_ts = 0;
89 if (iter->it && iter->it->Valid()) {
90 cur_ts = iter->it->GetKey();
91 bool is_expire = false;
92 switch (ttl_type_) {
93 case ::fedb::storage::TTLType::kAbsoluteTime:
94 if (expire_time_ != 0 && cur_ts <= expire_time_) {
95 is_expire = true;
96 }
97 break;
98 case ::fedb::storage::TTLType::kLatestTime:
99 if (expire_cnt_ != 0 && iter->iter_pos >= expire_cnt_) {
100 is_expire = true;
101 }
102 break;
103 case ::fedb::storage::TTLType::kAbsAndLat:
104 if ((expire_cnt_ != 0 && iter->iter_pos >= expire_cnt_) &&
105 (expire_time_ != 0 && cur_ts <= expire_time_)) {
106 is_expire = true;
107 }
108 break;
109 case ::fedb::storage::TTLType::kAbsOrLat:
110 if ((expire_cnt_ != 0 && iter->iter_pos >= expire_cnt_) ||
111 (expire_time_ != 0 && cur_ts <= expire_time_)) {
112 is_expire = true;
113 }
114 break;
115 default:
116 break;
117 }
118 if (is_expire) {
119 iter->it.reset();
120 need_delete = true;
121 continue;
122 }
123 }
124 if (cur_ts > max_ts) {
125 max_ts = cur_ts;
126 cur_qit_ = &(*iter);
127 }
128 }
129 if (need_delete) {
130 q_its_.erase(
131 std::remove_if(q_its_.begin(), q_its_.end(),
132 [](const QueryIt& q_it) { return !q_it.it; }),
133 q_its_.end());
134 }
135}
136
137void CombineIterator::Next() {
138 if (cur_qit_ != nullptr) {

Callers

nothing calls this directly

Calls 4

resetMethod · 0.80
eraseMethod · 0.80
ValidMethod · 0.45
GetKeyMethod · 0.45

Tested by

no test coverage detected