summaryrefslogtreecommitdiff
path: root/src/mongo/s/write_ops/batched_delete_request.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/write_ops/batched_delete_request.cpp')
-rw-r--r--src/mongo/s/write_ops/batched_delete_request.cpp468
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