Skip to content

Commit

Permalink
[fix](storage) fix core for string predicate in storage layer (apache…
Browse files Browse the repository at this point in the history
…#9500)



Co-authored-by: Wang Bo <wangbo36@meituan.com>
  • Loading branch information
2 people authored and jianghaochen committed May 13, 2022
1 parent c803288 commit 41d4f0d
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions be/src/vec/columns/predicate_column.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,17 +230,35 @@ class PredicateColumnType final : public COWHelper<IColumn, PredicateColumnType<
void insert_many_binary_data(char* data_array, uint32_t* len_array,
uint32_t* start_offset_array, size_t num) override {
if constexpr (std::is_same_v<T, StringValue>) {
if (_pool == nullptr) {
_pool.reset(new MemPool("PredicateStringColumn"));
}

size_t total_mem_size = 0;
for (size_t i = 0; i < num; i++) {
total_mem_size += len_array[i];
}

char* destination = (char*)_pool->allocate(total_mem_size);
for (size_t i = 0; i < num; i++) {
uint32_t len = len_array[i];
uint32_t start_offset = start_offset_array[i];
insert_string_value(data_array + start_offset, len);
memcpy(destination, data_array + start_offset, len);
StringValue sv(destination, len);
data.push_back_without_reserve(sv);
destination += len;
}
}
}

void insert_default() override { data.push_back(T()); }

void clear() override { data.clear(); }
void clear() override {
data.clear();
if (_pool != nullptr) {
_pool->clear();
}
}

size_t byte_size() const override { return data.size() * sizeof(T); }

Expand Down Expand Up @@ -410,6 +428,8 @@ class PredicateColumnType final : public COWHelper<IColumn, PredicateColumnType<

private:
Container data;
// manages the memory for slice's data(For string type)
std::unique_ptr<MemPool> _pool;
};
using ColumnStringValue = PredicateColumnType<StringValue>;

Expand Down

0 comments on commit 41d4f0d

Please sign in to comment.