summaryrefslogtreecommitdiff
path: root/jstests/core/query/distinct/distinct4.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/query/distinct/distinct4.js')
-rw-r--r--jstests/core/query/distinct/distinct4.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/jstests/core/query/distinct/distinct4.js b/jstests/core/query/distinct/distinct4.js
new file mode 100644
index 00000000000..a66022ecbaa
--- /dev/null
+++ b/jstests/core/query/distinct/distinct4.js
@@ -0,0 +1,54 @@
+// Vaildate input to distinct command. SERVER-12642
+
+(function() {
+"use strict";
+
+var t = db.distinct4;
+
+t.drop();
+t.save({a: null});
+t.save({a: 1});
+t.save({a: 1});
+t.save({a: 2});
+t.save({a: 3});
+
+// first argument should be a string or error
+
+// from shell helper
+assert.throws(function() {
+ t.distinct({a: 1});
+});
+
+// from command interface
+assert.commandFailedWithCode(t.runCommand("distinct", {"key": {a: 1}}), ErrorCodes.TypeMismatch);
+
+// second argument should be a document or error
+
+// from shell helper
+assert.throws(function() {
+ t.distinct('a', '1');
+});
+
+// from command interface
+assert.commandFailedWithCode(t.runCommand("distinct", {"key": "a", "query": "a"}),
+ ErrorCodes.TypeMismatch);
+
+// empty query clause should not cause error
+
+// from shell helper
+var a = assert.doesNotThrow(function() {
+ return t.distinct('a');
+});
+// [ null, 1, 2, 3 ]
+assert.eq(4, a.length, tojson(a));
+assert.contains(null, a);
+assert.contains(1, a);
+assert.contains(2, a);
+assert.contains(3, a);
+
+// from command interface
+assert.commandWorked(t.runCommand("distinct", {"key": "a"}));
+
+// embedded nulls are prohibited in the key field
+assert.commandFailedWithCode(t.runCommand("distinct", {"key": "a\0b"}), 31032);
+})();