summaryrefslogtreecommitdiff
path: root/jstests/aggregation/bugs/server6147.js
diff options
context:
space:
mode:
authorMatt Dannenberg <dannenberg.matt@gmail.com>2012-06-22 11:51:47 -0400
committerMathias Stearn <mathias@10gen.com>2012-06-29 13:41:29 -0400
commit36c78176a97e52874850d38d08ac5f8019055325 (patch)
treefdbc18cc05f557afca19ba7f26bbec569c75d613 /jstests/aggregation/bugs/server6147.js
parent9bfb82ea042d1a21d7058f44367caa9688cb4331 (diff)
downloadmongo-36c78176a97e52874850d38d08ac5f8019055325.tar.gz
SERVER-6147 fix aggro $ne to behave with constants
Diffstat (limited to 'jstests/aggregation/bugs/server6147.js')
-rw-r--r--jstests/aggregation/bugs/server6147.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/jstests/aggregation/bugs/server6147.js b/jstests/aggregation/bugs/server6147.js
new file mode 100644
index 00000000000..27f81c7ff91
--- /dev/null
+++ b/jstests/aggregation/bugs/server6147.js
@@ -0,0 +1,59 @@
+/*
+ * SERVER-6147 : aggregation $ne expression applied to constant returns incorrect result
+ *
+ * This test validates the SERVER-6147 ticket. Return true when comparing a constant to a field
+ * containing a different value using $ne. Previously it would return false when comparing a
+ * constant and a field regardless of whether they were equal or not.
+ */
+
+/*
+ * 1) Clear and create testing db
+ * 2) Run an aggregation with $ne comparing constants and fields in various configurations
+ * 3) Assert that the result is what we expected
+ */
+
+// Load the test utilities
+load('jstests/aggregation/extras/utils.js');
+
+// Clear db
+db.s6147.drop();
+
+// Populate db
+db.s6147.save({a:1});
+db.s6147.save({a:2});
+
+// Aggregate checking various combinations of the constant and the field
+var s6147 = db.runCommand(
+{ aggregate: "s6147", pipeline : [
+ { $project : {
+ _id : 0,
+ constantAndField : { $ne: [1, "$a"] },
+ fieldAndConstant : { $ne: ["$a", 1] },
+ constantAndConstant : { $ne: [1, 1] },
+ fieldAndField : { $ne: ["$a", "$a"] }
+ }}
+]});
+
+/*
+ * In both documents the constantAndConstant and fieldAndField should be false since they compare
+ * something with itself but the constantAndField and fieldAndConstant should be different as
+ * document one contains 1 which should return false and document 2 contains something different so
+ * should return true
+ */
+var s6147result = [
+ {
+ constantAndField : false,
+ fieldAndConstant : false,
+ constantAndConstant : false,
+ fieldAndField : false
+ },
+ {
+ constantAndField : true,
+ fieldAndConstant : true,
+ constantAndConstant : false,
+ fieldAndField : false
+ }
+];
+
+// Assert
+assert(arrayEq(s6147.result, s6147result), 's6147 failed');