summaryrefslogtreecommitdiff
path: root/src/mongo/s/write_ops/batched_command_response.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/write_ops/batched_command_response.cpp')
-rw-r--r--src/mongo/s/write_ops/batched_command_response.cpp895
1 files changed, 454 insertions, 441 deletions
diff --git a/src/mongo/s/write_ops/batched_command_response.cpp b/src/mongo/s/write_ops/batched_command_response.cpp
index cce5fa660cc..4f137d1dfe6 100644
--- a/src/mongo/s/write_ops/batched_command_response.cpp
+++ b/src/mongo/s/write_ops/batched_command_response.cpp
@@ -33,524 +33,537 @@
namespace mongo {
- using std::unique_ptr;
- using std::string;
-
- using mongoutils::str::stream;
-
- const BSONField<int> BatchedCommandResponse::ok("ok");
- const BSONField<int> BatchedCommandResponse::errCode("code", ErrorCodes::UnknownError);
- const BSONField<string> BatchedCommandResponse::errMessage("errmsg");
- const BSONField<long long> BatchedCommandResponse::n("n", 0);
- const BSONField<long long> BatchedCommandResponse::nModified("nModified", 0);
- const BSONField<std::vector<BatchedUpsertDetail*> >
- BatchedCommandResponse::upsertDetails("upserted");
- const BSONField<Timestamp> BatchedCommandResponse::lastOp("lastOp");
- const BSONField<OID> BatchedCommandResponse::electionId("electionId");
- const BSONField<std::vector<WriteErrorDetail*> >
- BatchedCommandResponse::writeErrors("writeErrors");
- const BSONField<WCErrorDetail*> BatchedCommandResponse::writeConcernError("writeConcernError");
-
- BatchedCommandResponse::BatchedCommandResponse() {
- clear();
- }
+using std::unique_ptr;
+using std::string;
- BatchedCommandResponse::~BatchedCommandResponse() {
- unsetErrDetails();
- unsetUpsertDetails();
- }
+using mongoutils::str::stream;
- bool BatchedCommandResponse::isValid(std::string* errMsg) const {
- std::string dummy;
- if (errMsg == NULL) {
- errMsg = &dummy;
- }
+const BSONField<int> BatchedCommandResponse::ok("ok");
+const BSONField<int> BatchedCommandResponse::errCode("code", ErrorCodes::UnknownError);
+const BSONField<string> BatchedCommandResponse::errMessage("errmsg");
+const BSONField<long long> BatchedCommandResponse::n("n", 0);
+const BSONField<long long> BatchedCommandResponse::nModified("nModified", 0);
+const BSONField<std::vector<BatchedUpsertDetail*>> BatchedCommandResponse::upsertDetails(
+ "upserted");
+const BSONField<Timestamp> BatchedCommandResponse::lastOp("lastOp");
+const BSONField<OID> BatchedCommandResponse::electionId("electionId");
+const BSONField<std::vector<WriteErrorDetail*>> BatchedCommandResponse::writeErrors("writeErrors");
+const BSONField<WCErrorDetail*> BatchedCommandResponse::writeConcernError("writeConcernError");
- // All the mandatory fields must be present.
- if (!_isOkSet) {
- *errMsg = stream() << "missing " << ok.name() << " field";
- return false;
- }
+BatchedCommandResponse::BatchedCommandResponse() {
+ clear();
+}
+
+BatchedCommandResponse::~BatchedCommandResponse() {
+ unsetErrDetails();
+ unsetUpsertDetails();
+}
- return true;
+bool BatchedCommandResponse::isValid(std::string* errMsg) const {
+ std::string dummy;
+ if (errMsg == NULL) {
+ errMsg = &dummy;
}
- BSONObj BatchedCommandResponse::toBSON() const {
- BSONObjBuilder builder;
+ // All the mandatory fields must be present.
+ if (!_isOkSet) {
+ *errMsg = stream() << "missing " << ok.name() << " field";
+ return false;
+ }
- if (_isOkSet) builder.append(ok(), _ok);
+ return true;
+}
- if (_isErrCodeSet) builder.append(errCode(), _errCode);
+BSONObj BatchedCommandResponse::toBSON() const {
+ BSONObjBuilder builder;
- if (_isErrMessageSet) builder.append(errMessage(), _errMessage);
+ if (_isOkSet)
+ builder.append(ok(), _ok);
- if (_isNModifiedSet) builder.appendNumber(nModified(), _nModified);
- if (_isNSet) builder.appendNumber(n(), _n);
+ if (_isErrCodeSet)
+ builder.append(errCode(), _errCode);
- if (_upsertDetails.get()) {
- BSONArrayBuilder upsertedBuilder(builder.subarrayStart(upsertDetails()));
- for (std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
- it != _upsertDetails->end();
- ++it) {
- BSONObj upsertedDetailsDocument = (*it)->toBSON();
- upsertedBuilder.append(upsertedDetailsDocument);
- }
- upsertedBuilder.done();
- }
+ if (_isErrMessageSet)
+ builder.append(errMessage(), _errMessage);
- if (_isLastOpSet) builder.append(lastOp(), _lastOp);
- if (_isElectionIdSet) builder.appendOID(electionId(), const_cast<OID*>(&_electionId));
-
- if (_writeErrorDetails.get()) {
- BSONArrayBuilder errDetailsBuilder(builder.subarrayStart(writeErrors()));
- for (std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
- it != _writeErrorDetails->end();
- ++it) {
- BSONObj errDetailsDocument = (*it)->toBSON();
- errDetailsBuilder.append(errDetailsDocument);
- }
- errDetailsBuilder.done();
- }
+ if (_isNModifiedSet)
+ builder.appendNumber(nModified(), _nModified);
+ if (_isNSet)
+ builder.appendNumber(n(), _n);
- if (_wcErrDetails.get()) {
- builder.append(writeConcernError(), _wcErrDetails->toBSON());
+ if (_upsertDetails.get()) {
+ BSONArrayBuilder upsertedBuilder(builder.subarrayStart(upsertDetails()));
+ for (std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
+ it != _upsertDetails->end();
+ ++it) {
+ BSONObj upsertedDetailsDocument = (*it)->toBSON();
+ upsertedBuilder.append(upsertedDetailsDocument);
}
-
- return builder.obj();
+ upsertedBuilder.done();
}
- bool BatchedCommandResponse::parseBSON(const BSONObj& source, string* errMsg) {
- clear();
-
- std::string dummy;
- if (!errMsg) errMsg = &dummy;
-
- FieldParser::FieldState fieldState;
- fieldState = FieldParser::extractNumber(source, ok, &_ok, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isOkSet = fieldState == FieldParser::FIELD_SET;
-
- fieldState = FieldParser::extract(source, errCode, &_errCode, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isErrCodeSet = fieldState == FieldParser::FIELD_SET;
-
- fieldState = FieldParser::extract(source, errMessage, &_errMessage, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isErrMessageSet = fieldState == FieldParser::FIELD_SET;
-
- // We're using appendNumber on generation so we'll try a smaller type
- // (int) first and then fall back to the original type (long long).
- BSONField<int> fieldN(n());
- int tempN;
- fieldState = FieldParser::extract(source, fieldN, &tempN, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) {
- // try falling back to a larger type
- fieldState = FieldParser::extract(source, n, &_n, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isNSet = fieldState == FieldParser::FIELD_SET;
- }
- else if (fieldState == FieldParser::FIELD_SET) {
- _isNSet = true;
- _n = tempN;
- }
+ if (_isLastOpSet)
+ builder.append(lastOp(), _lastOp);
+ if (_isElectionIdSet)
+ builder.appendOID(electionId(), const_cast<OID*>(&_electionId));
- // We're using appendNumber on generation so we'll try a smaller type
- // (int) first and then fall back to the original type (long long).
- BSONField<int> fieldNModified(nModified());
- int intNModified;
- fieldState = FieldParser::extract(source, fieldNModified, &intNModified, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) {
- // try falling back to a larger type
- fieldState = FieldParser::extract(source, nModified, &_nModified, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isNModifiedSet = fieldState == FieldParser::FIELD_SET;
- }
- else if (fieldState == FieldParser::FIELD_SET) {
- _isNModifiedSet = true;
- _nModified = intNModified;
+ if (_writeErrorDetails.get()) {
+ BSONArrayBuilder errDetailsBuilder(builder.subarrayStart(writeErrors()));
+ for (std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
+ it != _writeErrorDetails->end();
+ ++it) {
+ BSONObj errDetailsDocument = (*it)->toBSON();
+ errDetailsBuilder.append(errDetailsDocument);
}
-
- std::vector<BatchedUpsertDetail*>* tempUpsertDetails = NULL;
- fieldState = FieldParser::extract( source, upsertDetails, &tempUpsertDetails, errMsg );
- if ( fieldState == FieldParser::FIELD_INVALID ) return false;
- _upsertDetails.reset(tempUpsertDetails);
-
- fieldState = FieldParser::extract(source, lastOp, &_lastOp, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isLastOpSet = fieldState == FieldParser::FIELD_SET;
-
- fieldState = FieldParser::extract(source, electionId, &_electionId, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _isElectionIdSet = fieldState == FieldParser::FIELD_SET;
-
- std::vector<WriteErrorDetail*>* tempErrDetails = NULL;
- fieldState = FieldParser::extract(source, writeErrors, &tempErrDetails, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _writeErrorDetails.reset(tempErrDetails);
-
- WCErrorDetail* wcError = NULL;
- fieldState = FieldParser::extract(source, writeConcernError, &wcError, errMsg);
- if (fieldState == FieldParser::FIELD_INVALID) return false;
- _wcErrDetails.reset(wcError);
-
- return true;
+ errDetailsBuilder.done();
}
- void BatchedCommandResponse::clear() {
- _ok = false;
- _isOkSet = false;
-
- _errCode = 0;
- _isErrCodeSet = false;
-
- _errMessage.clear();
- _isErrMessageSet = false;
+ if (_wcErrDetails.get()) {
+ builder.append(writeConcernError(), _wcErrDetails->toBSON());
+ }
- _nModified = 0;
- _isNModifiedSet = false;
+ return builder.obj();
+}
- _n = 0;
- _isNSet = false;
+bool BatchedCommandResponse::parseBSON(const BSONObj& source, string* errMsg) {
+ clear();
- _singleUpserted = BSONObj();
- _isSingleUpsertedSet = false;
+ std::string dummy;
+ if (!errMsg)
+ errMsg = &dummy;
- if ( _upsertDetails.get() ) {
- for ( std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
- it != _upsertDetails->end(); ++it ) {
- delete *it;
- };
- _upsertDetails.reset();
- }
+ FieldParser::FieldState fieldState;
+ fieldState = FieldParser::extractNumber(source, ok, &_ok, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isOkSet = fieldState == FieldParser::FIELD_SET;
- _lastOp = Timestamp();
- _isLastOpSet = false;
+ fieldState = FieldParser::extract(source, errCode, &_errCode, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isErrCodeSet = fieldState == FieldParser::FIELD_SET;
- _electionId = OID();
- _isElectionIdSet = false;
+ fieldState = FieldParser::extract(source, errMessage, &_errMessage, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isErrMessageSet = fieldState == FieldParser::FIELD_SET;
- if (_writeErrorDetails.get()) {
- for(std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
- it != _writeErrorDetails->end();
- ++it) {
- delete *it;
- };
- _writeErrorDetails.reset();
- }
-
- _wcErrDetails.reset();
+ // We're using appendNumber on generation so we'll try a smaller type
+ // (int) first and then fall back to the original type (long long).
+ BSONField<int> fieldN(n());
+ int tempN;
+ fieldState = FieldParser::extract(source, fieldN, &tempN, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID) {
+ // try falling back to a larger type
+ fieldState = FieldParser::extract(source, n, &_n, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isNSet = fieldState == FieldParser::FIELD_SET;
+ } else if (fieldState == FieldParser::FIELD_SET) {
+ _isNSet = true;
+ _n = tempN;
+ }
+
+ // We're using appendNumber on generation so we'll try a smaller type
+ // (int) first and then fall back to the original type (long long).
+ BSONField<int> fieldNModified(nModified());
+ int intNModified;
+ fieldState = FieldParser::extract(source, fieldNModified, &intNModified, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID) {
+ // try falling back to a larger type
+ fieldState = FieldParser::extract(source, nModified, &_nModified, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isNModifiedSet = fieldState == FieldParser::FIELD_SET;
+ } else if (fieldState == FieldParser::FIELD_SET) {
+ _isNModifiedSet = true;
+ _nModified = intNModified;
}
- void BatchedCommandResponse::cloneTo(BatchedCommandResponse* other) const {
- other->clear();
+ std::vector<BatchedUpsertDetail*>* tempUpsertDetails = NULL;
+ fieldState = FieldParser::extract(source, upsertDetails, &tempUpsertDetails, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _upsertDetails.reset(tempUpsertDetails);
- other->_ok = _ok;
- other->_isOkSet = _isOkSet;
+ fieldState = FieldParser::extract(source, lastOp, &_lastOp, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isLastOpSet = fieldState == FieldParser::FIELD_SET;
- other->_errCode = _errCode;
- other->_isErrCodeSet = _isErrCodeSet;
+ fieldState = FieldParser::extract(source, electionId, &_electionId, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _isElectionIdSet = fieldState == FieldParser::FIELD_SET;
- other->_errMessage = _errMessage;
- other->_isErrMessageSet = _isErrMessageSet;
+ std::vector<WriteErrorDetail*>* tempErrDetails = NULL;
+ fieldState = FieldParser::extract(source, writeErrors, &tempErrDetails, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _writeErrorDetails.reset(tempErrDetails);
- other->_nModified = _nModified;
- other->_isNModifiedSet = _isNModifiedSet;
+ WCErrorDetail* wcError = NULL;
+ fieldState = FieldParser::extract(source, writeConcernError, &wcError, errMsg);
+ if (fieldState == FieldParser::FIELD_INVALID)
+ return false;
+ _wcErrDetails.reset(wcError);
- other->_n = _n;
- other->_isNSet = _isNSet;
+ return true;
+}
- other->_singleUpserted = _singleUpserted;
- other->_isSingleUpsertedSet = _isSingleUpsertedSet;
+void BatchedCommandResponse::clear() {
+ _ok = false;
+ _isOkSet = false;
- other->unsetUpsertDetails();
- if (_upsertDetails.get()) {
- for (std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
- it != _upsertDetails->end();
- ++it) {
- BatchedUpsertDetail* upsertDetailsItem = new BatchedUpsertDetail;
- (*it)->cloneTo(upsertDetailsItem);
- other->addToUpsertDetails(upsertDetailsItem);
- }
- }
+ _errCode = 0;
+ _isErrCodeSet = false;
- other->_lastOp = _lastOp;
- other->_isLastOpSet = _isLastOpSet;
-
- other->_electionId = _electionId;
- other->_isElectionIdSet = _isElectionIdSet;
-
- other->unsetErrDetails();
- if (_writeErrorDetails.get()) {
- for(std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
- it != _writeErrorDetails->end();
- ++it) {
- WriteErrorDetail* errDetailsItem = new WriteErrorDetail;
- (*it)->cloneTo(errDetailsItem);
- other->addToErrDetails(errDetailsItem);
- }
- }
+ _errMessage.clear();
+ _isErrMessageSet = false;
- if (_wcErrDetails.get()) {
- other->_wcErrDetails.reset(new WCErrorDetail());
- _wcErrDetails->cloneTo(other->_wcErrDetails.get());
- }
- }
-
- std::string BatchedCommandResponse::toString() const {
- return toBSON().toString();
- }
+ _nModified = 0;
+ _isNModifiedSet = false;
- void BatchedCommandResponse::setOk(int ok) {
- _ok = ok;
- _isOkSet = true;
- }
+ _n = 0;
+ _isNSet = false;
- void BatchedCommandResponse::unsetOk() {
- _isOkSet = false;
- }
+ _singleUpserted = BSONObj();
+ _isSingleUpsertedSet = false;
- bool BatchedCommandResponse::isOkSet() const {
- return _isOkSet;
- }
-
- int BatchedCommandResponse::getOk() const {
- dassert(_isOkSet);
- return _ok;
+ if (_upsertDetails.get()) {
+ for (std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
+ it != _upsertDetails->end();
+ ++it) {
+ delete *it;
+ };
+ _upsertDetails.reset();
}
- void BatchedCommandResponse::setErrCode(int errCode) {
- _errCode = errCode;
- _isErrCodeSet = true;
- }
+ _lastOp = Timestamp();
+ _isLastOpSet = false;
- void BatchedCommandResponse::unsetErrCode() {
- _isErrCodeSet = false;
- }
+ _electionId = OID();
+ _isElectionIdSet = false;
- bool BatchedCommandResponse::isErrCodeSet() const {
- return _isErrCodeSet;
+ if (_writeErrorDetails.get()) {
+ for (std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
+ it != _writeErrorDetails->end();
+ ++it) {
+ delete *it;
+ };
+ _writeErrorDetails.reset();
}
- int BatchedCommandResponse::getErrCode() const {
- if ( _isErrCodeSet ) {
- return _errCode;
- }
- else {
- return errCode.getDefault();
- }
- }
+ _wcErrDetails.reset();
+}
- void BatchedCommandResponse::setErrMessage(StringData errMessage) {
- _errMessage = errMessage.toString();
- _isErrMessageSet = true;
- }
+void BatchedCommandResponse::cloneTo(BatchedCommandResponse* other) const {
+ other->clear();
- void BatchedCommandResponse::unsetErrMessage() {
- _isErrMessageSet = false;
- }
+ other->_ok = _ok;
+ other->_isOkSet = _isOkSet;
- bool BatchedCommandResponse::isErrMessageSet() const {
- return _isErrMessageSet;
- }
+ other->_errCode = _errCode;
+ other->_isErrCodeSet = _isErrCodeSet;
- const std::string& BatchedCommandResponse::getErrMessage() const {
- dassert(_isErrMessageSet);
- return _errMessage;
- }
+ other->_errMessage = _errMessage;
+ other->_isErrMessageSet = _isErrMessageSet;
- void BatchedCommandResponse::setNModified(long long n) {
- _nModified = n;
- _isNModifiedSet = true;
- }
+ other->_nModified = _nModified;
+ other->_isNModifiedSet = _isNModifiedSet;
- void BatchedCommandResponse::unsetNModified() {
- _isNModifiedSet = false;
- }
+ other->_n = _n;
+ other->_isNSet = _isNSet;
- bool BatchedCommandResponse::isNModified() const {
- return _isNModifiedSet;
- }
+ other->_singleUpserted = _singleUpserted;
+ other->_isSingleUpsertedSet = _isSingleUpsertedSet;
- long long BatchedCommandResponse::getNModified() const {
- if ( _isNModifiedSet ) {
- return _nModified;
- }
- else {
- return nModified.getDefault();
+ other->unsetUpsertDetails();
+ if (_upsertDetails.get()) {
+ for (std::vector<BatchedUpsertDetail*>::const_iterator it = _upsertDetails->begin();
+ it != _upsertDetails->end();
+ ++it) {
+ BatchedUpsertDetail* upsertDetailsItem = new BatchedUpsertDetail;
+ (*it)->cloneTo(upsertDetailsItem);
+ other->addToUpsertDetails(upsertDetailsItem);
}
}
- void BatchedCommandResponse::setN(long long n) {
- _n = n;
- _isNSet = true;
- }
-
- void BatchedCommandResponse::unsetN() {
- _isNSet = false;
- }
+ other->_lastOp = _lastOp;
+ other->_isLastOpSet = _isLastOpSet;
- bool BatchedCommandResponse::isNSet() const {
- return _isNSet;
- }
+ other->_electionId = _electionId;
+ other->_isElectionIdSet = _isElectionIdSet;
- long long BatchedCommandResponse::getN() const {
- if ( _isNSet ) {
- return _n;
- }
- else {
- return n.getDefault();
- }
- }
-
- void BatchedCommandResponse::setUpsertDetails(
- const std::vector<BatchedUpsertDetail*>& upsertDetails) {
- unsetUpsertDetails();
- for (std::vector<BatchedUpsertDetail*>::const_iterator it = upsertDetails.begin();
- it != upsertDetails.end();
+ other->unsetErrDetails();
+ if (_writeErrorDetails.get()) {
+ for (std::vector<WriteErrorDetail*>::const_iterator it = _writeErrorDetails->begin();
+ it != _writeErrorDetails->end();
++it) {
- unique_ptr<BatchedUpsertDetail> tempBatchedUpsertDetail(new BatchedUpsertDetail);
- (*it)->cloneTo(tempBatchedUpsertDetail.get());
- addToUpsertDetails(tempBatchedUpsertDetail.release());
+ WriteErrorDetail* errDetailsItem = new WriteErrorDetail;
+ (*it)->cloneTo(errDetailsItem);
+ other->addToErrDetails(errDetailsItem);
}
}
- void BatchedCommandResponse::addToUpsertDetails(BatchedUpsertDetail* upsertDetails) {
- if (_upsertDetails.get() == NULL) {
- _upsertDetails.reset(new std::vector<BatchedUpsertDetail*>);
- }
- _upsertDetails->push_back(upsertDetails);
- }
-
- void BatchedCommandResponse::unsetUpsertDetails() {
- if (_upsertDetails.get() != NULL) {
- for (std::vector<BatchedUpsertDetail*>::iterator it = _upsertDetails->begin();
- it != _upsertDetails->end();
- ++it) {
- delete *it;
- }
- _upsertDetails.reset();
- }
- }
-
- bool BatchedCommandResponse::isUpsertDetailsSet() const {
- return _upsertDetails.get() != NULL;
- }
-
- size_t BatchedCommandResponse::sizeUpsertDetails() const {
- dassert(_upsertDetails.get());
- return _upsertDetails->size();
- }
-
- const std::vector<BatchedUpsertDetail*>& BatchedCommandResponse::getUpsertDetails() const {
- dassert(_upsertDetails.get());
- return *_upsertDetails;
- }
-
- const BatchedUpsertDetail* BatchedCommandResponse::getUpsertDetailsAt(size_t pos) const {
- dassert(_upsertDetails.get());
- dassert(_upsertDetails->size() > pos);
- return _upsertDetails->at(pos);
- }
-
- void BatchedCommandResponse::setLastOp(Timestamp lastOp) {
- _lastOp = lastOp;
- _isLastOpSet = true;
+ if (_wcErrDetails.get()) {
+ other->_wcErrDetails.reset(new WCErrorDetail());
+ _wcErrDetails->cloneTo(other->_wcErrDetails.get());
}
+}
+
+std::string BatchedCommandResponse::toString() const {
+ return toBSON().toString();
+}
- void BatchedCommandResponse::unsetLastOp() {
- _isLastOpSet = false;
- }
+void BatchedCommandResponse::setOk(int ok) {
+ _ok = ok;
+ _isOkSet = true;
+}
+
+void BatchedCommandResponse::unsetOk() {
+ _isOkSet = false;
+}
+
+bool BatchedCommandResponse::isOkSet() const {
+ return _isOkSet;
+}
+
+int BatchedCommandResponse::getOk() const {
+ dassert(_isOkSet);
+ return _ok;
+}
- bool BatchedCommandResponse::isLastOpSet() const {
- return _isLastOpSet;
- }
-
- Timestamp BatchedCommandResponse::getLastOp() const {
- dassert(_isLastOpSet);
- return _lastOp;
- }
-
- void BatchedCommandResponse::setElectionId(const OID& electionId) {
- _electionId = electionId;
- _isElectionIdSet = true;
- }
-
- void BatchedCommandResponse::unsetElectionId() {
- _isElectionIdSet = false;
- }
-
- bool BatchedCommandResponse::isElectionIdSet() const {
- return _isElectionIdSet;
- }
-
- OID BatchedCommandResponse::getElectionId() const {
- dassert(_isElectionIdSet);
- return _electionId;
- }
-
- void BatchedCommandResponse::setErrDetails(const std::vector<WriteErrorDetail*>& errDetails) {
- unsetErrDetails();
- for (std::vector<WriteErrorDetail*>::const_iterator it = errDetails.begin();
- it != errDetails.end();
+void BatchedCommandResponse::setErrCode(int errCode) {
+ _errCode = errCode;
+ _isErrCodeSet = true;
+}
+
+void BatchedCommandResponse::unsetErrCode() {
+ _isErrCodeSet = false;
+}
+
+bool BatchedCommandResponse::isErrCodeSet() const {
+ return _isErrCodeSet;
+}
+
+int BatchedCommandResponse::getErrCode() const {
+ if (_isErrCodeSet) {
+ return _errCode;
+ } else {
+ return errCode.getDefault();
+ }
+}
+
+void BatchedCommandResponse::setErrMessage(StringData errMessage) {
+ _errMessage = errMessage.toString();
+ _isErrMessageSet = true;
+}
+
+void BatchedCommandResponse::unsetErrMessage() {
+ _isErrMessageSet = false;
+}
+
+bool BatchedCommandResponse::isErrMessageSet() const {
+ return _isErrMessageSet;
+}
+
+const std::string& BatchedCommandResponse::getErrMessage() const {
+ dassert(_isErrMessageSet);
+ return _errMessage;
+}
+
+void BatchedCommandResponse::setNModified(long long n) {
+ _nModified = n;
+ _isNModifiedSet = true;
+}
+
+void BatchedCommandResponse::unsetNModified() {
+ _isNModifiedSet = false;
+}
+
+bool BatchedCommandResponse::isNModified() const {
+ return _isNModifiedSet;
+}
+
+long long BatchedCommandResponse::getNModified() const {
+ if (_isNModifiedSet) {
+ return _nModified;
+ } else {
+ return nModified.getDefault();
+ }
+}
+
+void BatchedCommandResponse::setN(long long n) {
+ _n = n;
+ _isNSet = true;
+}
+
+void BatchedCommandResponse::unsetN() {
+ _isNSet = false;
+}
+
+bool BatchedCommandResponse::isNSet() const {
+ return _isNSet;
+}
+
+long long BatchedCommandResponse::getN() const {
+ if (_isNSet) {
+ return _n;
+ } else {
+ return n.getDefault();
+ }
+}
+
+void BatchedCommandResponse::setUpsertDetails(
+ const std::vector<BatchedUpsertDetail*>& upsertDetails) {
+ unsetUpsertDetails();
+ for (std::vector<BatchedUpsertDetail*>::const_iterator it = upsertDetails.begin();
+ it != upsertDetails.end();
+ ++it) {
+ unique_ptr<BatchedUpsertDetail> tempBatchedUpsertDetail(new BatchedUpsertDetail);
+ (*it)->cloneTo(tempBatchedUpsertDetail.get());
+ addToUpsertDetails(tempBatchedUpsertDetail.release());
+ }
+}
+
+void BatchedCommandResponse::addToUpsertDetails(BatchedUpsertDetail* upsertDetails) {
+ if (_upsertDetails.get() == NULL) {
+ _upsertDetails.reset(new std::vector<BatchedUpsertDetail*>);
+ }
+ _upsertDetails->push_back(upsertDetails);
+}
+
+void BatchedCommandResponse::unsetUpsertDetails() {
+ if (_upsertDetails.get() != NULL) {
+ for (std::vector<BatchedUpsertDetail*>::iterator it = _upsertDetails->begin();
+ it != _upsertDetails->end();
++it) {
- unique_ptr<WriteErrorDetail> tempBatchErrorDetail(new WriteErrorDetail);
- (*it)->cloneTo(tempBatchErrorDetail.get());
- addToErrDetails(tempBatchErrorDetail.release());
+ delete *it;
}
- }
-
- void BatchedCommandResponse::addToErrDetails(WriteErrorDetail* errDetails) {
- if (_writeErrorDetails.get() == NULL) {
- _writeErrorDetails.reset(new std::vector<WriteErrorDetail*>);
- }
- _writeErrorDetails->push_back(errDetails);
- }
-
- void BatchedCommandResponse::unsetErrDetails() {
- if (_writeErrorDetails.get() != NULL) {
- for(std::vector<WriteErrorDetail*>::iterator it = _writeErrorDetails->begin();
- it != _writeErrorDetails->end();
- ++it) {
- delete *it;
- }
- _writeErrorDetails.reset();
+ _upsertDetails.reset();
+ }
+}
+
+bool BatchedCommandResponse::isUpsertDetailsSet() const {
+ return _upsertDetails.get() != NULL;
+}
+
+size_t BatchedCommandResponse::sizeUpsertDetails() const {
+ dassert(_upsertDetails.get());
+ return _upsertDetails->size();
+}
+
+const std::vector<BatchedUpsertDetail*>& BatchedCommandResponse::getUpsertDetails() const {
+ dassert(_upsertDetails.get());
+ return *_upsertDetails;
+}
+
+const BatchedUpsertDetail* BatchedCommandResponse::getUpsertDetailsAt(size_t pos) const {
+ dassert(_upsertDetails.get());
+ dassert(_upsertDetails->size() > pos);
+ return _upsertDetails->at(pos);
+}
+
+void BatchedCommandResponse::setLastOp(Timestamp lastOp) {
+ _lastOp = lastOp;
+ _isLastOpSet = true;
+}
+
+void BatchedCommandResponse::unsetLastOp() {
+ _isLastOpSet = false;
+}
+
+bool BatchedCommandResponse::isLastOpSet() const {
+ return _isLastOpSet;
+}
+
+Timestamp BatchedCommandResponse::getLastOp() const {
+ dassert(_isLastOpSet);
+ return _lastOp;
+}
+
+void BatchedCommandResponse::setElectionId(const OID& electionId) {
+ _electionId = electionId;
+ _isElectionIdSet = true;
+}
+
+void BatchedCommandResponse::unsetElectionId() {
+ _isElectionIdSet = false;
+}
+
+bool BatchedCommandResponse::isElectionIdSet() const {
+ return _isElectionIdSet;
+}
+
+OID BatchedCommandResponse::getElectionId() const {
+ dassert(_isElectionIdSet);
+ return _electionId;
+}
+
+void BatchedCommandResponse::setErrDetails(const std::vector<WriteErrorDetail*>& errDetails) {
+ unsetErrDetails();
+ for (std::vector<WriteErrorDetail*>::const_iterator it = errDetails.begin();
+ it != errDetails.end();
+ ++it) {
+ unique_ptr<WriteErrorDetail> tempBatchErrorDetail(new WriteErrorDetail);
+ (*it)->cloneTo(tempBatchErrorDetail.get());
+ addToErrDetails(tempBatchErrorDetail.release());
+ }
+}
+
+void BatchedCommandResponse::addToErrDetails(WriteErrorDetail* errDetails) {
+ if (_writeErrorDetails.get() == NULL) {
+ _writeErrorDetails.reset(new std::vector<WriteErrorDetail*>);
+ }
+ _writeErrorDetails->push_back(errDetails);
+}
+
+void BatchedCommandResponse::unsetErrDetails() {
+ if (_writeErrorDetails.get() != NULL) {
+ for (std::vector<WriteErrorDetail*>::iterator it = _writeErrorDetails->begin();
+ it != _writeErrorDetails->end();
+ ++it) {
+ delete *it;
}
+ _writeErrorDetails.reset();
}
+}
- bool BatchedCommandResponse::isErrDetailsSet() const {
- return _writeErrorDetails.get() != NULL;
- }
+bool BatchedCommandResponse::isErrDetailsSet() const {
+ return _writeErrorDetails.get() != NULL;
+}
- size_t BatchedCommandResponse::sizeErrDetails() const {
- dassert(_writeErrorDetails.get());
- return _writeErrorDetails->size();
- }
+size_t BatchedCommandResponse::sizeErrDetails() const {
+ dassert(_writeErrorDetails.get());
+ return _writeErrorDetails->size();
+}
- const std::vector<WriteErrorDetail*>& BatchedCommandResponse::getErrDetails() const {
- dassert(_writeErrorDetails.get());
- return *_writeErrorDetails;
- }
+const std::vector<WriteErrorDetail*>& BatchedCommandResponse::getErrDetails() const {
+ dassert(_writeErrorDetails.get());
+ return *_writeErrorDetails;
+}
- const WriteErrorDetail* BatchedCommandResponse::getErrDetailsAt(size_t pos) const {
- dassert(_writeErrorDetails.get());
- dassert(_writeErrorDetails->size() > pos);
- return _writeErrorDetails->at(pos);
- }
+const WriteErrorDetail* BatchedCommandResponse::getErrDetailsAt(size_t pos) const {
+ dassert(_writeErrorDetails.get());
+ dassert(_writeErrorDetails->size() > pos);
+ return _writeErrorDetails->at(pos);
+}
- void BatchedCommandResponse::setWriteConcernError(WCErrorDetail* error) {
- _wcErrDetails.reset(error);
- }
+void BatchedCommandResponse::setWriteConcernError(WCErrorDetail* error) {
+ _wcErrDetails.reset(error);
+}
- void BatchedCommandResponse::unsetWriteConcernError() {
- _wcErrDetails.reset();
- }
+void BatchedCommandResponse::unsetWriteConcernError() {
+ _wcErrDetails.reset();
+}
- bool BatchedCommandResponse::isWriteConcernErrorSet() const {
- return _wcErrDetails.get();
- }
+bool BatchedCommandResponse::isWriteConcernErrorSet() const {
+ return _wcErrDetails.get();
+}
- const WCErrorDetail* BatchedCommandResponse::getWriteConcernError() const {
- return _wcErrDetails.get();
- }
+const WCErrorDetail* BatchedCommandResponse::getWriteConcernError() const {
+ return _wcErrDetails.get();
+}
-} // namespace mongo
+} // namespace mongo