summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/hashcmd.cpp
diff options
context:
space:
mode:
authorAntonin Kral <a.kral@bobek.cz>2012-08-29 20:54:51 +0200
committerAntonin Kral <a.kral@bobek.cz>2012-08-29 20:54:51 +0200
commit83957b73f9177f6e38bd5375bd93ca1f6a47188c (patch)
treef20b7d6ac9a9c64ff5bb6b5910a24abbb356b1d5 /src/mongo/db/commands/hashcmd.cpp
parent5071d203970edd4c995493d810abe20987e76fe9 (diff)
Imported Upstream version 2.2.0upstream/2.2.0
Diffstat (limited to 'src/mongo/db/commands/hashcmd.cpp')
-rw-r--r--src/mongo/db/commands/hashcmd.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/mongo/db/commands/hashcmd.cpp b/src/mongo/db/commands/hashcmd.cpp
new file mode 100644
index 00000000000..f4f85c0e02b
--- /dev/null
+++ b/src/mongo/db/commands/hashcmd.cpp
@@ -0,0 +1,70 @@
+/* hashcmd.cpp
+ *
+ * Defines a shell command for hashing a BSONElement value
+ */
+
+
+/**
+* Copyright (C) 2012 10gen 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/>.
+*/
+
+#include "mongo/db/commands.h"
+#include "mongo/db/hasher.h"
+
+namespace mongo {
+
+ class CmdHashElt : public Command {
+ public:
+ CmdHashElt() : Command("_hashBSONElement") {};
+ virtual LockType locktype() const { return NONE; }
+ virtual bool slaveOk() const { return true; }
+ virtual void help( stringstream& help ) const {
+ help << "returns the hash of the first BSONElement val in a BSONObj";
+ }
+
+ /* CmdObj has the form {"hash" : <thingToHash>}
+ * or {"hash" : <thingToHash>, "seed" : <number> }
+ * Result has the form
+ * {"key" : <thingTohash>, "seed" : <int>, "out": NumberLong(<hash>)}
+ *
+ * Example use in the shell:
+ *> db.runCommand({hash: "hashthis", seed: 1})
+ *> {"key" : "hashthis",
+ *> "seed" : 1,
+ *> "out" : NumberLong(6271151123721111923),
+ *> "ok" : 1 }
+ **/
+ bool run( const string& db,
+ BSONObj& cmdObj,
+ int options, string& errmsg,
+ BSONObjBuilder& result,
+ bool fromRepl = false ){
+ result.appendAs(cmdObj.firstElement(),"key");
+
+ int seed = 0;
+ if (cmdObj.hasField("seed")){
+ if (! cmdObj["seed"].isNumber()) {
+ errmsg += "seed must be a number";
+ return false;
+ }
+ seed = cmdObj["seed"].numberInt();
+ }
+ result.append( "seed" , seed );
+
+ result.append( "out" , BSONElementHasher::hash64( cmdObj.firstElement() , seed ) );
+ return true;
+ }
+ } cmdHashElt;
+}