diff options
Diffstat (limited to 'src/mongo/s/write_ops/batched_delete_request.cpp')
-rw-r--r-- | src/mongo/s/write_ops/batched_delete_request.cpp | 468 |
1 files changed, 238 insertions, 230 deletions
diff --git a/src/mongo/s/write_ops/batched_delete_request.cpp b/src/mongo/s/write_ops/batched_delete_request.cpp index b0c6a3f7a7a..d99df0ffbfc 100644 --- a/src/mongo/s/write_ops/batched_delete_request.cpp +++ b/src/mongo/s/write_ops/batched_delete_request.cpp @@ -33,279 +33,287 @@ namespace mongo { - using std::unique_ptr; - using std::string; - - using mongoutils::str::stream; - - const std::string BatchedDeleteRequest::BATCHED_DELETE_REQUEST = "delete"; - const BSONField<std::string> BatchedDeleteRequest::collName( "delete" ); - const BSONField<std::vector<BatchedDeleteDocument*> > BatchedDeleteRequest::deletes( "deletes" ); - const BSONField<BSONObj> BatchedDeleteRequest::writeConcern( "writeConcern" ); - const BSONField<bool> BatchedDeleteRequest::ordered( "ordered", true ); - const BSONField<BSONObj> BatchedDeleteRequest::metadata("metadata"); - - BatchedDeleteRequest::BatchedDeleteRequest() { - clear(); +using std::unique_ptr; +using std::string; + +using mongoutils::str::stream; + +const std::string BatchedDeleteRequest::BATCHED_DELETE_REQUEST = "delete"; +const BSONField<std::string> BatchedDeleteRequest::collName("delete"); +const BSONField<std::vector<BatchedDeleteDocument*>> BatchedDeleteRequest::deletes("deletes"); +const BSONField<BSONObj> BatchedDeleteRequest::writeConcern("writeConcern"); +const BSONField<bool> BatchedDeleteRequest::ordered("ordered", true); +const BSONField<BSONObj> BatchedDeleteRequest::metadata("metadata"); + +BatchedDeleteRequest::BatchedDeleteRequest() { + clear(); +} + +BatchedDeleteRequest::~BatchedDeleteRequest() { + unsetDeletes(); +} + +bool BatchedDeleteRequest::isValid(std::string* errMsg) const { + std::string dummy; + if (errMsg == NULL) { + errMsg = &dummy; } - BatchedDeleteRequest::~BatchedDeleteRequest() { - unsetDeletes(); + // All the mandatory fields must be present. + if (!_isCollNameSet) { + *errMsg = stream() << "missing " << collName.name() << " field"; + return false; } - bool BatchedDeleteRequest::isValid(std::string* errMsg) const { - std::string dummy; - if (errMsg == NULL) { - errMsg = &dummy; - } - - // All the mandatory fields must be present. - if (!_isCollNameSet) { - *errMsg = stream() << "missing " << collName.name() << " field"; - return false; - } - - if (!_isDeletesSet) { - *errMsg = stream() << "missing " << deletes.name() << " field"; - return false; - } - - return true; + if (!_isDeletesSet) { + *errMsg = stream() << "missing " << deletes.name() << " field"; + return false; } - BSONObj BatchedDeleteRequest::toBSON() const { - BSONObjBuilder builder; - - if (_isCollNameSet) builder.append(collName(), _collName); + return true; +} - if (_isDeletesSet) { - BSONArrayBuilder deletesBuilder(builder.subarrayStart(deletes())); - for (std::vector<BatchedDeleteDocument*>::const_iterator it = _deletes.begin(); - it != _deletes.end(); - ++it) { - BSONObj deleteDocument = (*it)->toBSON(); - deletesBuilder.append(deleteDocument); - } - deletesBuilder.done(); - } - - if (_isWriteConcernSet) builder.append(writeConcern(), _writeConcern); +BSONObj BatchedDeleteRequest::toBSON() const { + BSONObjBuilder builder; - if (_isOrderedSet) builder.append(ordered(), _ordered); + if (_isCollNameSet) + builder.append(collName(), _collName); - if (_metadata) builder.append(metadata(), _metadata->toBSON()); - - return builder.obj(); - } - - bool BatchedDeleteRequest::parseBSON(const BSONObj& source, string* errMsg) { - clear(); - - std::string dummy; - if (!errMsg) errMsg = &dummy; - - FieldParser::FieldState fieldState; - std::string collNameTemp; - fieldState = FieldParser::extract(source, collName, &collNameTemp, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _collName = NamespaceString(collNameTemp); - _isCollNameSet = fieldState == FieldParser::FIELD_SET; - - fieldState = FieldParser::extract(source, deletes, &_deletes, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isDeletesSet = fieldState == FieldParser::FIELD_SET; - - fieldState = FieldParser::extract(source, writeConcern, &_writeConcern, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isWriteConcernSet = fieldState == FieldParser::FIELD_SET; - - fieldState = FieldParser::extract(source, ordered, &_ordered, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isOrderedSet = fieldState == FieldParser::FIELD_SET; - - BSONObj metadataObj; - fieldState = FieldParser::extract(source, metadata, &metadataObj, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - - if (!metadataObj.isEmpty()) { - _metadata.reset(new BatchedRequestMetadata()); - if (!_metadata->parseBSON(metadataObj, errMsg)) { - return false; - } + if (_isDeletesSet) { + BSONArrayBuilder deletesBuilder(builder.subarrayStart(deletes())); + for (std::vector<BatchedDeleteDocument*>::const_iterator it = _deletes.begin(); + it != _deletes.end(); + ++it) { + BSONObj deleteDocument = (*it)->toBSON(); + deletesBuilder.append(deleteDocument); } - - return true; + deletesBuilder.done(); } - void BatchedDeleteRequest::clear() { - _collName = NamespaceString(); - _isCollNameSet = false; + if (_isWriteConcernSet) + builder.append(writeConcern(), _writeConcern); - unsetDeletes(); + if (_isOrderedSet) + builder.append(ordered(), _ordered); - _writeConcern = BSONObj(); - _isWriteConcernSet = false; + if (_metadata) + builder.append(metadata(), _metadata->toBSON()); - _ordered = false; - _isOrderedSet = false; + return builder.obj(); +} - _metadata.reset(); - } +bool BatchedDeleteRequest::parseBSON(const BSONObj& source, string* errMsg) { + clear(); - void BatchedDeleteRequest::cloneTo(BatchedDeleteRequest* other) const { - other->clear(); + std::string dummy; + if (!errMsg) + errMsg = &dummy; - other->_collName = _collName; - other->_isCollNameSet = _isCollNameSet; + FieldParser::FieldState fieldState; + std::string collNameTemp; + fieldState = FieldParser::extract(source, collName, &collNameTemp, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _collName = NamespaceString(collNameTemp); + _isCollNameSet = fieldState == FieldParser::FIELD_SET; - for(std::vector<BatchedDeleteDocument*>::const_iterator it = _deletes.begin(); - it != _deletes.end(); - ++it) { - unique_ptr<BatchedDeleteDocument> tempBatchDeleteDocument(new BatchedDeleteDocument); - (*it)->cloneTo(tempBatchDeleteDocument.get()); - other->addToDeletes(tempBatchDeleteDocument.release()); - } - other->_isDeletesSet = _isDeletesSet; + fieldState = FieldParser::extract(source, deletes, &_deletes, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isDeletesSet = fieldState == FieldParser::FIELD_SET; - other->_writeConcern = _writeConcern; - other->_isWriteConcernSet = _isWriteConcernSet; + fieldState = FieldParser::extract(source, writeConcern, &_writeConcern, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isWriteConcernSet = fieldState == FieldParser::FIELD_SET; - other->_ordered = _ordered; - other->_isOrderedSet = _isOrderedSet; + fieldState = FieldParser::extract(source, ordered, &_ordered, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isOrderedSet = fieldState == FieldParser::FIELD_SET; - if (_metadata) { - other->_metadata.reset(new BatchedRequestMetadata()); - _metadata->cloneTo(other->_metadata.get()); - } - } + BSONObj metadataObj; + fieldState = FieldParser::extract(source, metadata, &metadataObj, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; - std::string BatchedDeleteRequest::toString() const { - return toBSON().toString(); - } - - void BatchedDeleteRequest::setCollName(StringData collName) { - _collName = NamespaceString(collName); - _isCollNameSet = true; - } - - const std::string& BatchedDeleteRequest::getCollName() const { - dassert(_isCollNameSet); - return _collName.ns(); + if (!metadataObj.isEmpty()) { + _metadata.reset(new BatchedRequestMetadata()); + if (!_metadata->parseBSON(metadataObj, errMsg)) { + return false; + } } - void BatchedDeleteRequest::setCollNameNS(const NamespaceString& collName) { - _collName = collName; - _isCollNameSet = true; - } + return true; +} - const NamespaceString& BatchedDeleteRequest::getCollNameNS() const { - dassert(_isCollNameSet); - return _collName; - } +void BatchedDeleteRequest::clear() { + _collName = NamespaceString(); + _isCollNameSet = false; - const NamespaceString& BatchedDeleteRequest::getTargetingNSS() const { - return getCollNameNS(); - } + unsetDeletes(); - void BatchedDeleteRequest::setDeletes(const std::vector<BatchedDeleteDocument*>& deletes) { - for (std::vector<BatchedDeleteDocument*>::const_iterator it = deletes.begin(); - it != deletes.end(); - ++it) { - unique_ptr<BatchedDeleteDocument> tempBatchDeleteDocument(new BatchedDeleteDocument); - (*it)->cloneTo(tempBatchDeleteDocument.get()); - addToDeletes(tempBatchDeleteDocument.release()); - } - _isDeletesSet = deletes.size() > 0; - } - - void BatchedDeleteRequest::addToDeletes(BatchedDeleteDocument* deletes) { - _deletes.push_back(deletes); - _isDeletesSet = true; - } - - void BatchedDeleteRequest::unsetDeletes() { - for(std::vector<BatchedDeleteDocument*>::iterator it = _deletes.begin(); - it != _deletes.end(); - ++it) { - delete *it; - } - _deletes.clear(); - _isDeletesSet = false; - } + _writeConcern = BSONObj(); + _isWriteConcernSet = false; - bool BatchedDeleteRequest::isDeletesSet() const { - return _isDeletesSet; - } + _ordered = false; + _isOrderedSet = false; - size_t BatchedDeleteRequest::sizeDeletes() const { - return _deletes.size(); - } + _metadata.reset(); +} - const std::vector<BatchedDeleteDocument*>& BatchedDeleteRequest::getDeletes() const { - dassert(_isDeletesSet); - return _deletes; - } +void BatchedDeleteRequest::cloneTo(BatchedDeleteRequest* other) const { + other->clear(); - const BatchedDeleteDocument* BatchedDeleteRequest::getDeletesAt(size_t pos) const { - dassert(_isDeletesSet); - dassert(_deletes.size() > pos); - return _deletes.at(pos); - } + other->_collName = _collName; + other->_isCollNameSet = _isCollNameSet; - void BatchedDeleteRequest::setWriteConcern(const BSONObj& writeConcern) { - _writeConcern = writeConcern.getOwned(); - _isWriteConcernSet = true; + for (std::vector<BatchedDeleteDocument*>::const_iterator it = _deletes.begin(); + it != _deletes.end(); + ++it) { + unique_ptr<BatchedDeleteDocument> tempBatchDeleteDocument(new BatchedDeleteDocument); + (*it)->cloneTo(tempBatchDeleteDocument.get()); + other->addToDeletes(tempBatchDeleteDocument.release()); } + other->_isDeletesSet = _isDeletesSet; - void BatchedDeleteRequest::unsetWriteConcern() { - _isWriteConcernSet = false; - } + other->_writeConcern = _writeConcern; + other->_isWriteConcernSet = _isWriteConcernSet; - bool BatchedDeleteRequest::isWriteConcernSet() const { - return _isWriteConcernSet; - } + other->_ordered = _ordered; + other->_isOrderedSet = _isOrderedSet; - const BSONObj& BatchedDeleteRequest::getWriteConcern() const { - dassert(_isWriteConcernSet); - return _writeConcern; + if (_metadata) { + other->_metadata.reset(new BatchedRequestMetadata()); + _metadata->cloneTo(other->_metadata.get()); } - - void BatchedDeleteRequest::setOrdered(bool ordered) { - _ordered = ordered; - _isOrderedSet = true; +} + +std::string BatchedDeleteRequest::toString() const { + return toBSON().toString(); +} + +void BatchedDeleteRequest::setCollName(StringData collName) { + _collName = NamespaceString(collName); + _isCollNameSet = true; +} + +const std::string& BatchedDeleteRequest::getCollName() const { + dassert(_isCollNameSet); + return _collName.ns(); +} + +void BatchedDeleteRequest::setCollNameNS(const NamespaceString& collName) { + _collName = collName; + _isCollNameSet = true; +} + +const NamespaceString& BatchedDeleteRequest::getCollNameNS() const { + dassert(_isCollNameSet); + return _collName; +} + +const NamespaceString& BatchedDeleteRequest::getTargetingNSS() const { + return getCollNameNS(); +} + +void BatchedDeleteRequest::setDeletes(const std::vector<BatchedDeleteDocument*>& deletes) { + for (std::vector<BatchedDeleteDocument*>::const_iterator it = deletes.begin(); + it != deletes.end(); + ++it) { + unique_ptr<BatchedDeleteDocument> tempBatchDeleteDocument(new BatchedDeleteDocument); + (*it)->cloneTo(tempBatchDeleteDocument.get()); + addToDeletes(tempBatchDeleteDocument.release()); } - - void BatchedDeleteRequest::unsetOrdered() { - _isOrderedSet = false; - } - - bool BatchedDeleteRequest::isOrderedSet() const { - return _isOrderedSet; + _isDeletesSet = deletes.size() > 0; +} + +void BatchedDeleteRequest::addToDeletes(BatchedDeleteDocument* deletes) { + _deletes.push_back(deletes); + _isDeletesSet = true; +} + +void BatchedDeleteRequest::unsetDeletes() { + for (std::vector<BatchedDeleteDocument*>::iterator it = _deletes.begin(); it != _deletes.end(); + ++it) { + delete *it; } - - bool BatchedDeleteRequest::getOrdered() const { - if (_isOrderedSet) { - return _ordered; - } - else { - return ordered.getDefault(); - } + _deletes.clear(); + _isDeletesSet = false; +} + +bool BatchedDeleteRequest::isDeletesSet() const { + return _isDeletesSet; +} + +size_t BatchedDeleteRequest::sizeDeletes() const { + return _deletes.size(); +} + +const std::vector<BatchedDeleteDocument*>& BatchedDeleteRequest::getDeletes() const { + dassert(_isDeletesSet); + return _deletes; +} + +const BatchedDeleteDocument* BatchedDeleteRequest::getDeletesAt(size_t pos) const { + dassert(_isDeletesSet); + dassert(_deletes.size() > pos); + return _deletes.at(pos); +} + +void BatchedDeleteRequest::setWriteConcern(const BSONObj& writeConcern) { + _writeConcern = writeConcern.getOwned(); + _isWriteConcernSet = true; +} + +void BatchedDeleteRequest::unsetWriteConcern() { + _isWriteConcernSet = false; +} + +bool BatchedDeleteRequest::isWriteConcernSet() const { + return _isWriteConcernSet; +} + +const BSONObj& BatchedDeleteRequest::getWriteConcern() const { + dassert(_isWriteConcernSet); + return _writeConcern; +} + +void BatchedDeleteRequest::setOrdered(bool ordered) { + _ordered = ordered; + _isOrderedSet = true; +} + +void BatchedDeleteRequest::unsetOrdered() { + _isOrderedSet = false; +} + +bool BatchedDeleteRequest::isOrderedSet() const { + return _isOrderedSet; +} + +bool BatchedDeleteRequest::getOrdered() const { + if (_isOrderedSet) { + return _ordered; + } else { + return ordered.getDefault(); } +} - void BatchedDeleteRequest::setMetadata(BatchedRequestMetadata* metadata) { - _metadata.reset(metadata); - } +void BatchedDeleteRequest::setMetadata(BatchedRequestMetadata* metadata) { + _metadata.reset(metadata); +} - void BatchedDeleteRequest::unsetMetadata() { - _metadata.reset(); - } +void BatchedDeleteRequest::unsetMetadata() { + _metadata.reset(); +} - bool BatchedDeleteRequest::isMetadataSet() const { - return _metadata.get(); - } +bool BatchedDeleteRequest::isMetadataSet() const { + return _metadata.get(); +} - BatchedRequestMetadata* BatchedDeleteRequest::getMetadata() const { - return _metadata.get(); - } +BatchedRequestMetadata* BatchedDeleteRequest::getMetadata() const { + return _metadata.get(); +} -} // namespace mongo +} // namespace mongo |