Use reserve() over resize() for Tuple

Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
This commit is contained in:
Azat Khuzhin 2022-01-28 19:43:55 +03:00
parent 097bd6b7e8
commit 9e740eb9d0
2 changed files with 13 additions and 9 deletions

View File

@ -101,17 +101,21 @@ MutableColumnPtr ColumnTuple::cloneResized(size_t new_size) const
Field ColumnTuple::operator[](size_t n) const Field ColumnTuple::operator[](size_t n) const
{ {
return collections::map<Tuple>(columns, [n] (const auto & column) { return (*column)[n]; }); Field res;
get(n, res);
return res;
} }
void ColumnTuple::get(size_t n, Field & res) const void ColumnTuple::get(size_t n, Field & res) const
{ {
const size_t tuple_size = columns.size(); const size_t tuple_size = columns.size();
Tuple tuple(tuple_size);
for (const auto i : collections::range(0, tuple_size))
columns[i]->get(n, tuple[i]);
res = tuple; res = Tuple();
Tuple & res_tuple = DB::get<Tuple &>(res);
res_tuple.reserve(tuple_size);
for (const auto i : collections::range(0, tuple_size))
res_tuple.push_back((*columns[i])[n]);
} }
bool ColumnTuple::isDefaultAt(size_t n) const bool ColumnTuple::isDefaultAt(size_t n) const

View File

@ -44,11 +44,11 @@ void SerializationTuple::deserializeBinary(Field & field, ReadBuffer & istr) con
{ {
const size_t size = elems.size(); const size_t size = elems.size();
Tuple tuple(size); field = Tuple();
Tuple & tuple = get<Tuple &>(field);
tuple.reserve(size);
for (const auto i : collections::range(0, size)) for (const auto i : collections::range(0, size))
elems[i]->deserializeBinary(tuple[i], istr); elems[i]->deserializeBinary(tuple.emplace_back(), istr);
field = tuple;
} }
void SerializationTuple::serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr) const void SerializationTuple::serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr) const