diff options
Diffstat (limited to 'src/mongo/db/query/find_and_modify_request.h')
-rw-r--r-- | src/mongo/db/query/find_and_modify_request.h | 233 |
1 files changed, 115 insertions, 118 deletions
diff --git a/src/mongo/db/query/find_and_modify_request.h b/src/mongo/db/query/find_and_modify_request.h index 353869abee6..b4252c30805 100644 --- a/src/mongo/db/query/find_and_modify_request.h +++ b/src/mongo/db/query/find_and_modify_request.h @@ -36,126 +36,123 @@ namespace mongo { - template <typename T> class StatusWith; +template <typename T> +class StatusWith; + +/** + * Represents the user-supplied options to the findAndModify command. Note that this + * does not offer round trip preservation. For example, for the case where + * output = parseBSON(input).toBSON(), 'output' is not guaranteed to be equal to 'input'. + * However, the semantic meaning of 'output' will be the same with 'input'. + * + * The BSONObj members contained within this struct are owned objects. + */ +class FindAndModifyRequest { +public: + /** + * Creates a new instance of an 'update' type findAndModify request. + */ + static FindAndModifyRequest makeUpdate(NamespaceString fullNs, + BSONObj query, + BSONObj updateObj); /** - * Represents the user-supplied options to the findAndModify command. Note that this - * does not offer round trip preservation. For example, for the case where - * output = parseBSON(input).toBSON(), 'output' is not guaranteed to be equal to 'input'. - * However, the semantic meaning of 'output' will be the same with 'input'. + * Creates a new instance of an 'remove' type findAndModify request. + */ + static FindAndModifyRequest makeRemove(NamespaceString fullNs, BSONObj query); + + /** + * Create a new instance of FindAndModifyRequest from a valid BSONObj. + * Returns an error if the BSONObj is malformed. + * Format: + * + * { + * findAndModify: <collection-name>, + * query: <document>, + * sort: <document>, + * remove: <boolean>, + * update: <document>, + * new: <boolean>, + * fields: <document>, + * upsert: <boolean> + * } * - * The BSONObj members contained within this struct are owned objects. + * Note: does not parse the writeConcern field or the findAndModify field. + */ + static StatusWith<FindAndModifyRequest> parseFromBSON(NamespaceString fullNs, + const BSONObj& cmdObj); + + /** + * Serializes this object into a BSON representation. Fields that are not + * set will not be part of the the serialized object. + */ + BSONObj toBSON() const; + + const NamespaceString& getNamespaceString() const; + BSONObj getQuery() const; + BSONObj getFields() const; + BSONObj getUpdateObj() const; + BSONObj getSort() const; + bool shouldReturnNew() const; + bool isUpsert() const; + bool isRemove() const; + + // Not implemented. Use extractWriteConcern() to get the setting instead. + WriteConcernOptions getWriteConcern() const; + + // + // Setters for update type request only. + // + + /** + * If shouldReturnNew is new, the findAndModify response should return the document + * after the modification was applied if the query matched a document. Otherwise, + * it will return the matched document before the modification. */ - class FindAndModifyRequest { - public: - - /** - * Creates a new instance of an 'update' type findAndModify request. - */ - static FindAndModifyRequest makeUpdate(NamespaceString fullNs, - BSONObj query, - BSONObj updateObj); - - /** - * Creates a new instance of an 'remove' type findAndModify request. - */ - static FindAndModifyRequest makeRemove(NamespaceString fullNs, - BSONObj query); - - /** - * Create a new instance of FindAndModifyRequest from a valid BSONObj. - * Returns an error if the BSONObj is malformed. - * Format: - * - * { - * findAndModify: <collection-name>, - * query: <document>, - * sort: <document>, - * remove: <boolean>, - * update: <document>, - * new: <boolean>, - * fields: <document>, - * upsert: <boolean> - * } - * - * Note: does not parse the writeConcern field or the findAndModify field. - */ - static StatusWith<FindAndModifyRequest> parseFromBSON(NamespaceString fullNs, - const BSONObj& cmdObj); - - /** - * Serializes this object into a BSON representation. Fields that are not - * set will not be part of the the serialized object. - */ - BSONObj toBSON() const; - - const NamespaceString& getNamespaceString() const; - BSONObj getQuery() const; - BSONObj getFields() const; - BSONObj getUpdateObj() const; - BSONObj getSort() const; - bool shouldReturnNew() const; - bool isUpsert() const; - bool isRemove() const; - - // Not implemented. Use extractWriteConcern() to get the setting instead. - WriteConcernOptions getWriteConcern() const; - - // - // Setters for update type request only. - // - - /** - * If shouldReturnNew is new, the findAndModify response should return the document - * after the modification was applied if the query matched a document. Otherwise, - * it will return the matched document before the modification. - */ - void setShouldReturnNew(bool shouldReturnNew); - - void setUpsert(bool upsert); - - // - // Setters for optional parameters - // - - /** - * Specifies the field to project on the matched document. - */ - void setFieldProjection(BSONObj fields); - - /** - * Sets the sort order for the query. In cases where the query yields multiple matches, - * only the first document based on the sort order will be modified/removed. - */ - void setSort(BSONObj sort); - - /** - * Sets the write concern for this request. - */ - void setWriteConcern(WriteConcernOptions writeConcern); - - private: - /** - * Creates a new FindAndModifyRequest with the required fields. - */ - FindAndModifyRequest(NamespaceString fullNs, - BSONObj query, - BSONObj updateObj); - - // Required fields - const NamespaceString _ns; - const BSONObj _query; - - // Required for updates - const BSONObj _updateObj; - - boost::optional<bool> _isUpsert; - boost::optional<BSONObj> _fieldProjection; - boost::optional<BSONObj> _sort; - boost::optional<bool> _shouldReturnNew; - boost::optional<WriteConcernOptions> _writeConcern; - - // Flag used internally to differentiate whether this is an update or remove type request. - bool _isRemove; - }; + void setShouldReturnNew(bool shouldReturnNew); + + void setUpsert(bool upsert); + + // + // Setters for optional parameters + // + + /** + * Specifies the field to project on the matched document. + */ + void setFieldProjection(BSONObj fields); + + /** + * Sets the sort order for the query. In cases where the query yields multiple matches, + * only the first document based on the sort order will be modified/removed. + */ + void setSort(BSONObj sort); + + /** + * Sets the write concern for this request. + */ + void setWriteConcern(WriteConcernOptions writeConcern); + +private: + /** + * Creates a new FindAndModifyRequest with the required fields. + */ + FindAndModifyRequest(NamespaceString fullNs, BSONObj query, BSONObj updateObj); + + // Required fields + const NamespaceString _ns; + const BSONObj _query; + + // Required for updates + const BSONObj _updateObj; + + boost::optional<bool> _isUpsert; + boost::optional<BSONObj> _fieldProjection; + boost::optional<BSONObj> _sort; + boost::optional<bool> _shouldReturnNew; + boost::optional<WriteConcernOptions> _writeConcern; + + // Flag used internally to differentiate whether this is an update or remove type request. + bool _isRemove; +}; } |