@@ -30,6 +30,10 @@ ColumnFixedString::ColumnFixedString(size_t n)
3030{
3131}
3232
33+ void ColumnFixedString::Reserve (size_t new_cap) {
34+ data_.reserve (string_size_ * new_cap);
35+ }
36+
3337void ColumnFixedString::Append (std::string_view str) {
3438 if (str.size () > string_size_) {
3539 throw ValidationError (" Expected string of length not greater than "
@@ -45,8 +49,10 @@ void ColumnFixedString::Append(std::string_view str) {
4549
4650 data_.insert (data_.size (), str);
4751 // Pad up to string_size_ with zeroes.
48- const auto padding_size = string_size_ - str.size ();
49- data_.resize (data_.size () + padding_size, char (0 ));
52+ if (str.size () < string_size_) {
53+ const auto padding_size = string_size_ - str.size ();
54+ data_.resize (data_.size () + padding_size, char (0 ));
55+ }
5056}
5157
5258void ColumnFixedString::Clear () {
@@ -160,8 +166,8 @@ ColumnString::ColumnString(size_t element_count)
160166 : Column(Type::CreateString())
161167{
162168 items_.reserve (element_count);
163- // 100 is arbitrary number, assumption that string values are about ~40 bytes long.
164- blocks_.reserve (std::max<size_t >(1 , element_count / 100 ));
169+ // 16 is arbitrary number, assumption that string values are about ~256 bytes long.
170+ blocks_.reserve (std::max<size_t >(1 , element_count / 16 ));
165171}
166172
167173ColumnString::ColumnString (const std::vector<std::string>& data)
@@ -190,8 +196,7 @@ ColumnString::ColumnString(std::vector<std::string>&& data)
190196ColumnString::~ColumnString ()
191197{}
192198
193- void ColumnString::Reserve (size_t new_cap)
194- {
199+ void ColumnString::Reserve (size_t new_cap) {
195200 items_.reserve (new_cap);
196201 // 16 is arbitrary number, assumption that string values are about ~256 bytes long.
197202 blocks_.reserve (std::max<size_t >(1 , new_cap / 16 ));
0 commit comments