summaryrefslogtreecommitdiff
path: root/src/mongo/db/update/unset_node.h
diff options
context:
space:
mode:
authorJustin Seyster <justin.seyster@mongodb.com>2017-05-26 14:35:45 -0400
committerJustin Seyster <justin.seyster@mongodb.com>2017-05-26 17:15:58 -0400
commit210cd048511296261da8942d2ffb3421bc237bd3 (patch)
tree757a285cd60eb85e36946a6b3510750c7ad0949f /src/mongo/db/update/unset_node.h
parent701042e66ee7c54f581f1d42630c98864828e5d3 (diff)
downloadmongo-210cd048511296261da8942d2ffb3421bc237bd3.tar.gz
SERVER-28775 Create UnsetNode
This is a second attempt at 90fd8a19000b5f96983f068e6380c1f6bd824b69, which got reverted because it introduced a compile error. The problem was that UpdateNode::apply() earned "const" status after I tested the original patch but before I rebased for the final commit. Oops!
Diffstat (limited to 'src/mongo/db/update/unset_node.h')
-rw-r--r--src/mongo/db/update/unset_node.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/mongo/db/update/unset_node.h b/src/mongo/db/update/unset_node.h
new file mode 100644
index 00000000000..4751bcf96a8
--- /dev/null
+++ b/src/mongo/db/update/unset_node.h
@@ -0,0 +1,60 @@
+/**
+ * Copyright (C) 2017 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects
+ * for all of the code used other than as permitted herein. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you do not
+ * wish to do so, delete this exception statement from your version. If you
+ * delete this exception statement from all source files in the program,
+ * then also delete it in the license file.
+ */
+
+#pragma once
+
+#include "mongo/db/update/update_leaf_node.h"
+#include "mongo/stdx/memory.h"
+
+namespace mongo {
+
+/**
+ * Represents the application of a $unset to the value at the end of a path.
+ */
+class UnsetNode : public UpdateLeafNode {
+public:
+ Status init(BSONElement modExpr, const CollatorInterface* collator) final;
+
+ std::unique_ptr<UpdateNode> clone() const final {
+ return stdx::make_unique<UnsetNode>(*this);
+ }
+
+ void setCollator(const CollatorInterface* collator) final {}
+
+ Status apply(mutablebson::Element element,
+ FieldRef* pathToCreate,
+ FieldRef* pathTaken,
+ StringData matchedField,
+ bool fromReplication,
+ const UpdateIndexData* indexData,
+ LogBuilder* logBuilder,
+ bool* indexesAffected,
+ bool* noop) const final;
+};
+
+} // namespace mongo