Skip to content

Commit 209d3ea

Browse files
committed
fix
1 parent 739b2fd commit 209d3ea

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

clickhouse/columns/array.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class ColumnArrayT : public ColumnArray {
272272
size_t counter = 0;
273273

274274
while (begin != end) {
275-
nested_data.Append(*begin);
275+
nested_data.Append(std::move(*begin));
276276
++begin;
277277
++counter;
278278
}

clickhouse/columns/map.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,17 @@ class ColumnMapT : public ColumnMap {
193193
}
194194
const auto make_index = [](const auto& data) {
195195
std::vector<size_t> result{data.Size()};
196-
std::generate(result.begin(), result.end(), [i = 0] () mutable { return i++; });
196+
std::generate(result.begin(), result.end(), [i = 0] () mutable {return i++;});
197197
std::sort(result.begin(), result.end(), [&data](size_t l, size_t r) {return data[l] < data[r];});
198198
return result;
199199
};
200-
const auto l_index = make_index(data_);
201-
const auto r_index = make_index(other.data_);
202-
return std::equal(l_index.begin(), l_index.end(), r_index.begin(), r_index.end(),
203-
[&l_data = data_, &r_data = other.data_](size_t l, size_t r) { return l_data[l] == r_data[r];});
200+
const auto index = make_index(data_);
201+
for (const auto& val : other.data_) {
202+
if (!std::binary_search(index.begin(), index.end(), val,
203+
[&data = data_](const auto& l, size_t r) {return l < data[r];})) {
204+
return false;
205+
}
206+
}
204207
return true;
205208
}
206209

@@ -221,14 +224,14 @@ class ColumnMapT : public ColumnMap {
221224

222225
template <typename T>
223226
inline void Append(const T& value) {
224-
using BaseIter = typename T::const_iterator;
227+
using BaseIter = decltype(value.begin());
225228
using KeyOfT = decltype(std::declval<BaseIter>()->first);
226229
using ValOfT = decltype(std::declval<BaseIter>()->second);
227230
using Functor = std::function<std::tuple<KeyOfT, ValOfT>(const BaseIter&)>;
228231
using Iterator = ProjectedIterator<Functor, BaseIter>;
229232

230233
Functor functor = [](const BaseIter& i) {
231-
return std::make_tuple(i->first, i->second);
234+
return std::make_tuple(std::cref(i->first), std::cref(i->second));
232235
};
233236

234237
typed_data_->Append(Iterator{value.begin(), functor}, Iterator{value.end(), functor});

0 commit comments

Comments
 (0)