File tree Expand file tree Collapse file tree 1 file changed +19
-7
lines changed Expand file tree Collapse file tree 1 file changed +19
-7
lines changed Original file line number Diff line number Diff line change 55
66namespace clickhouse {
77
8- ColumnArray::ColumnArray (ColumnRef data)
9- : ColumnArray(data, std::make_shared<ColumnUInt64>())
10- {
8+ namespace {
9+ std::shared_ptr<ColumnUInt64> make_single_offset (size_t value) {
10+ auto res = std::make_shared<ColumnUInt64>();
11+ if (value != 0 ) {
12+ res->Append (value);
13+ }
14+ return res;
15+ }
16+ } // namespace
17+
18+ ColumnArray::ColumnArray (ColumnRef data) : ColumnArray(data, make_single_offset(data->Size ())) {
1119}
1220
1321ColumnArray::ColumnArray (ColumnRef data, std::shared_ptr<ColumnUInt64> offsets)
@@ -55,11 +63,15 @@ ColumnRef ColumnArray::Slice(size_t begin, size_t size) const {
5563 if (size && begin + size > Size ())
5664 throw ValidationError (" Slice indexes are out of bounds" );
5765
58- auto result = std::make_shared<ColumnArray>(data_->Slice (GetOffset (begin), GetOffset (begin + size) - GetOffset (begin)));
59- for (size_t i = 0 ; i < size; i++)
60- result->AddOffset (GetSize (begin + i));
66+ auto sliced_data = data_->Slice (GetOffset (begin), GetOffset (begin + size) - GetOffset (begin));
67+ auto offsets = std::make_shared<ColumnUInt64>();
68+ auto offset = uint64_t {0 };
69+ for (size_t i = 0 ; i < size; i++) {
70+ offset += GetSize (begin + i);
71+ offsets->Append (offset);
72+ }
6173
62- return result ;
74+ return std::make_shared<ColumnArray>( std::move (sliced_data), std::move (offsets)) ;
6375}
6476
6577ColumnRef ColumnArray::CloneEmpty () const {
You can’t perform that action at this time.
0 commit comments