summaryrefslogtreecommitdiff
path: root/src/mongo/bson/util/bsoncolumn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/bson/util/bsoncolumn.cpp')
-rw-r--r--src/mongo/bson/util/bsoncolumn.cpp21
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) {