diff options
Diffstat (limited to 'src/mongo/bson/util/bsoncolumn.cpp')
| -rw-r--r-- | src/mongo/bson/util/bsoncolumn.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/mongo/bson/util/bsoncolumn.cpp b/src/mongo/bson/util/bsoncolumn.cpp index df2d74b5b0f..aa81339f9aa 100644 --- a/src/mongo/bson/util/bsoncolumn.cpp +++ b/src/mongo/bson/util/bsoncolumn.cpp @@ -157,11 +157,11 @@ BSONColumn::ElementStorage::ContiguousBlock::~ContiguousBlock() { } } -std::pair<const char*, int> BSONColumn::ElementStorage::ContiguousBlock::done() { +const char* BSONColumn::ElementStorage::ContiguousBlock::done() { auto ptr = _storage.contiguous(); - int size = _storage._endContiguous(); + _storage._endContiguous(); _finished = true; - return std::make_pair(ptr, size); + return ptr; } char* BSONColumn::ElementStorage::allocate(int bytes) { @@ -211,9 +211,8 @@ void BSONColumn::ElementStorage::_beginContiguous() { _contiguousEnabled = true; } -int BSONColumn::ElementStorage::_endContiguous() { +void BSONColumn::ElementStorage::_endContiguous() { _contiguousEnabled = false; - return _pos - _contiguousPos; } BSONColumn::ElementStorage::Element BSONColumn::ElementStorage::allocate(BSONType type, @@ -523,12 +522,12 @@ void BSONColumn::Iterator::_incrementInterleaved() { } // Store built BSONObj in the decompressed list - auto [objdata, objsize] = contiguous.done(); - BSONElement obj; + const char* objdata = contiguous.done(); + BSONElement obj(objdata); - // If no data was added, use a EOO literal. As buffer size is 0 we cannot interpret it as BSON. - if (objsize > 0) { - obj = BSONElement(objdata); + // If no data was added, use a EOO literal instead of an empty object. + if (obj.objsize() == 0) { + obj = BSONElement(); } _column->_decompressed.emplace_back(obj); @@ -541,7 +540,7 @@ void BSONColumn::Iterator::_handleEOO() { } bool BSONColumn::Iterator::_isLiteral(char control) { - return (control & 0xE0) == 0 || control == (char)MinKey || control == (char)MaxKey; + return (control & 0xE0) == 0; } bool BSONColumn::Iterator::_isInterleavedStart(char control) { |
