Skip to content

Commit 45a49ac

Browse files
authored
Bug](column) support insert default for ColumnFixedLengthObject #27927
1 parent e62d19d commit 45a49ac

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

Diff for: be/src/vec/columns/column_fixed_length_object.h

+15-9
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
3838

3939
public:
4040
using Container = PaddedPODArray<uint8_t>;
41+
ColumnFixedLengthObject() = delete;
4142

4243
private:
43-
ColumnFixedLengthObject() = delete;
4444
ColumnFixedLengthObject(const size_t _item_size_) : _item_size(_item_size_), _item_count(0) {}
4545
ColumnFixedLengthObject(const ColumnFixedLengthObject& src)
4646
: _item_size(src._item_size),
@@ -63,7 +63,7 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
6363
}
6464

6565
MutableColumnPtr clone_resized(size_t size) const override {
66-
auto res = this->create(_item_size);
66+
auto res = create(_item_size);
6767

6868
if (size > 0) {
6969
auto& new_col = assert_cast<Self&>(*res);
@@ -110,13 +110,13 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
110110
void get(size_t n, Field& res) const override { LOG(FATAL) << "get not supported"; }
111111

112112
StringRef get_data_at(size_t n) const override {
113-
return StringRef(reinterpret_cast<const char*>(&_data[n * _item_size]), _item_size);
113+
return {reinterpret_cast<const char*>(&_data[n * _item_size]), _item_size};
114114
}
115115

116116
void insert(const Field& x) override { LOG(FATAL) << "insert not supported"; }
117117

118118
void insert_range_from(const IColumn& src, size_t start, size_t length) override {
119-
const ColumnFixedLengthObject& src_col = assert_cast<const ColumnFixedLengthObject&>(src);
119+
const auto& src_col = assert_cast<const ColumnFixedLengthObject&>(src);
120120
CHECK_EQ(src_col._item_size, _item_size);
121121

122122
if (length == 0) {
@@ -137,7 +137,7 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
137137
}
138138

139139
void insert_from(const IColumn& src, size_t n) override {
140-
const ColumnFixedLengthObject& src_col = assert_cast<const ColumnFixedLengthObject&>(src);
140+
const auto& src_col = assert_cast<const ColumnFixedLengthObject&>(src);
141141
DCHECK(_item_size == src_col._item_size) << "dst and src should have the same _item_size "
142142
<< _item_size << " " << src_col._item_size;
143143
size_t old_size = size();
@@ -146,10 +146,16 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
146146
}
147147

148148
void insert_data(const char* pos, size_t length) override {
149-
LOG(FATAL) << "insert_data not supported";
149+
size_t old_size = size();
150+
resize(old_size + 1);
151+
memcpy(&_data[old_size * _item_size], pos, _item_size);
150152
}
151153

152-
void insert_default() override { LOG(FATAL) << "insert_default not supported"; }
154+
void insert_default() override {
155+
size_t old_size = size();
156+
resize(old_size + 1);
157+
memset(&_data[old_size * _item_size], 0, _item_size);
158+
}
153159

154160
void pop_back(size_t n) override { LOG(FATAL) << "pop_back not supported"; }
155161

@@ -281,9 +287,9 @@ class ColumnFixedLengthObject final : public COWHelper<IColumn, ColumnFixedLengt
281287

282288
size_t old_count = _item_count;
283289
resize(old_count + num);
284-
auto dst = _data.data() + old_count * _item_size;
290+
auto* dst = _data.data() + old_count * _item_size;
285291
for (size_t i = 0; i < num; i++) {
286-
auto src = data_array + start_offset_array[i];
292+
auto* src = data_array + start_offset_array[i];
287293
uint32_t len = len_array[i];
288294
dst += i * _item_size;
289295
memcpy(dst, src, len);

0 commit comments

Comments
 (0)