summaryrefslogtreecommitdiff
path: root/jstests/aggregation/sources/densify
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/sources/densify')
-rw-r--r--jstests/aggregation/sources/densify/decimal.js9
-rw-r--r--jstests/aggregation/sources/densify/desugar.js56
-rw-r--r--jstests/aggregation/sources/densify/explicit_range.js9
-rw-r--r--jstests/aggregation/sources/densify/full_range.js9
-rw-r--r--jstests/aggregation/sources/densify/generated_limit.js7
-rw-r--r--jstests/aggregation/sources/densify/libs/densify_in_js.js8
-rw-r--r--jstests/aggregation/sources/densify/libs/parse_util.js23
-rw-r--r--jstests/aggregation/sources/densify/memory_limit.js7
-rw-r--r--jstests/aggregation/sources/densify/partitions.js59
9 files changed, 71 insertions, 116 deletions
diff --git a/jstests/aggregation/sources/densify/decimal.js b/jstests/aggregation/sources/densify/decimal.js
index 4c8b423f38b..415cd3117b3 100644
--- a/jstests/aggregation/sources/densify/decimal.js
+++ b/jstests/aggregation/sources/densify/decimal.js
@@ -10,14 +10,6 @@
load("jstests/aggregation/extras/utils.js"); // For arrayEq.
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
-
function buildErrorString(found, expected) {
return "Expected:\n" + tojson(expected) + "\nGot:\n" + tojson(found);
}
@@ -94,6 +86,7 @@ expectedResult = [
{val: .7},
{val: .7999999999999999},
{val: .8999999999999999},
+ {val: .9999999999999999},
{val: NumberDecimal(1)},
];
result = coll.aggregate(pipeline).toArray();
diff --git a/jstests/aggregation/sources/densify/desugar.js b/jstests/aggregation/sources/densify/desugar.js
index b1f7c11154d..0d89abd3feb 100644
--- a/jstests/aggregation/sources/densify/desugar.js
+++ b/jstests/aggregation/sources/densify/desugar.js
@@ -11,14 +11,6 @@
(function() {
"use strict";
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
-
load("jstests/libs/fixture_helpers.js");
const coll = db[jsTestName()];
@@ -114,27 +106,29 @@ assert.eq(
]);
// PartitionByFields are prepended to the sortKey if date bounds are specified.
-assert.eq(
- desugar({
- $densify: {
- field: "a",
- partitionByFields: ["b", "c"],
- range:
- {step: 1.0, bounds: [new Date("2020-01-03"), new Date("2020-01-04")], unit: "day"}
- }
- }),
- [
- {$sort: {sortKey: {b: 1, c: 1, a: 1}}},
- {
- $_internalDensify: {
- field: "a",
- partitionByFields: ["b", "c"],
- range: {
- step: 1.0,
- bounds: [new Date("2020-01-03"), new Date("2020-01-04")],
- unit: "day"
- }
- }
- },
- ]);
+assert.eq(desugar({
+ $densify: {
+ field: "a",
+ partitionByFields: ["b", "c"],
+ range: {
+ step: 1.0,
+ bounds: [new ISODate("2020-01-03"), new ISODate("2020-01-04")],
+ unit: "day"
+ }
+ }
+ }),
+ [
+ {$sort: {sortKey: {b: 1, c: 1, a: 1}}},
+ {
+ $_internalDensify: {
+ field: "a",
+ partitionByFields: ["b", "c"],
+ range: {
+ step: 1.0,
+ bounds: [new ISODate("2020-01-03"), new ISODate("2020-01-04")],
+ unit: "day"
+ }
+ }
+ },
+ ]);
})();
diff --git a/jstests/aggregation/sources/densify/explicit_range.js b/jstests/aggregation/sources/densify/explicit_range.js
index 6f7e2d3d3cd..842ae79d5bf 100644
--- a/jstests/aggregation/sources/densify/explicit_range.js
+++ b/jstests/aggregation/sources/densify/explicit_range.js
@@ -10,13 +10,6 @@ load("jstests/aggregation/sources/densify/libs/densify_in_js.js");
(function() {
"use strict";
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
const collName = jsTestName();
const coll = db.getCollection(collName);
coll.drop();
@@ -25,7 +18,7 @@ coll.drop();
for (let i = 0; i < densifyUnits.length; i++) {
const unit = densifyUnits[i];
coll.drop();
- const base = unit ? new Date(2021, 0, 1) : 0;
+ const base = unit ? new ISODate("2021-01-01") : 0;
const {add} = getArithmeticFunctionsForUnit(unit);
const runDensifyRangeTest = ({step, bounds}, msg) => testDensifyStage({
diff --git a/jstests/aggregation/sources/densify/full_range.js b/jstests/aggregation/sources/densify/full_range.js
index 0fc8d247288..66f13540019 100644
--- a/jstests/aggregation/sources/densify/full_range.js
+++ b/jstests/aggregation/sources/densify/full_range.js
@@ -10,13 +10,6 @@ load("jstests/aggregation/sources/densify/libs/densify_in_js.js");
(function() {
"use strict";
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
const collName = jsTestName();
const coll = db.getCollection(collName);
coll.drop();
@@ -25,7 +18,7 @@ coll.drop();
for (let i = 0; i < densifyUnits.length; i++) {
const unit = densifyUnits[i];
coll.drop();
- const base = unit ? new Date(2021, 0, 1) : 0;
+ const base = unit ? new ISODate("2021-01-01") : 0;
const {add} = getArithmeticFunctionsForUnit(unit);
// Run all tests for different step values.
diff --git a/jstests/aggregation/sources/densify/generated_limit.js b/jstests/aggregation/sources/densify/generated_limit.js
index 704de96dac2..45acd24e404 100644
--- a/jstests/aggregation/sources/densify/generated_limit.js
+++ b/jstests/aggregation/sources/densify/generated_limit.js
@@ -12,13 +12,6 @@
load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // For setParameterOnAllHosts.
load("jstests/libs/discover_topology.js"); // For findNonConfigNodes.
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
const paramName = "internalQueryMaxAllowedDensifyDocs";
const origParamValue = assert.commandWorked(
db.adminCommand({getParameter: 1, internalQueryMaxAllowedDensifyDocs: 1}))[paramName];
diff --git a/jstests/aggregation/sources/densify/libs/densify_in_js.js b/jstests/aggregation/sources/densify/libs/densify_in_js.js
index 48b63298499..4c92bd572bc 100644
--- a/jstests/aggregation/sources/densify/libs/densify_in_js.js
+++ b/jstests/aggregation/sources/densify/libs/densify_in_js.js
@@ -13,18 +13,18 @@ load("jstests/aggregation/extras/utils.js"); // arrayEq
*/
const makeArithmeticHelpers = (unitName, factor) => {
const getter = date => {
- const newDate = new Date(date);
+ const newDate = new ISODate(date.toISOString());
// Calling the proper function on the passed in date object. If the unitName was "Seconds"
// would be equivalent to `newDate.getSeconds()`.
- return newDate["get" + unitName]();
+ return newDate["getUTC" + unitName]();
};
// Return a new date with the proper unit adjusted with the second parameter.
// Dates and the setter helpers are generally mutable, but this function will make sure
// the arithmetic helpers won't mutate their inputs.
const setter = (date, newComponent) => {
- const newDate = new Date(date);
- newDate["set" + unitName](newComponent);
+ const newDate = new ISODate(date.toISOString());
+ newDate["setUTC" + unitName](newComponent);
return newDate;
};
diff --git a/jstests/aggregation/sources/densify/libs/parse_util.js b/jstests/aggregation/sources/densify/libs/parse_util.js
index 355e3aef436..7ccedefd81d 100644
--- a/jstests/aggregation/sources/densify/libs/parse_util.js
+++ b/jstests/aggregation/sources/densify/libs/parse_util.js
@@ -9,14 +9,6 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
}
function runTest(stageName) {
- const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
- if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
- }
-
// Required fields.
const kIDLRequiredFieldErrorCode = 40414;
assert.commandFailedWithCode(
@@ -53,7 +45,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
field: "a",
range: {
step: 1.0,
- bounds: [new Date("2020-01-01"), new Date("2020-01-02")],
+ bounds: [new ISODate("2020-01-01"), new ISODate("2020-01-02")],
unit: 1000
}
}
@@ -67,7 +59,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
run({
[stageName]: {
field: "a",
- range: {step: 1.0, bounds: [new Date("2020-01-01")], unit: "second"}
+ range: {step: 1.0, bounds: [new ISODate("2020-01-01")], unit: "second"}
}
}),
5733403,
@@ -118,7 +110,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
field: "a",
range: {
step: 1.0,
- bounds: [new Date("2020-01-01"), new Date("2019-01-01")],
+ bounds: [new ISODate("2020-01-01"), new ISODate("2019-01-01")],
unit: "second"
}
}
@@ -133,7 +125,8 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
// Mixed numeric and date bounds
assert.commandFailedWithCode(
run({
- [stageName]: {field: "a", range: {step: 1.0, bounds: [1, new Date("2020-01-01")]}}
+ [stageName]:
+ {field: "a", range: {step: 1.0, bounds: [1, new ISODate("2020-01-01")]}}
}),
5733406,
"a bounding array must contain either both dates or both numeric types");
@@ -141,7 +134,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
run({
[stageName]: {
field: "a",
- range: {step: 1.0, bounds: [new Date("2020-01-01"), 1], unit: "second"}
+ range: {step: 1.0, bounds: [new ISODate("2020-01-01"), 1], unit: "second"}
}
}),
5733402,
@@ -154,7 +147,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
field: "a",
range: {
step: 1.0,
- bounds: [new Date("2020-01-01"), new Date("2021-01-01")],
+ bounds: [new ISODate("2020-01-01"), new ISODate("2021-01-01")],
unit: "day"
}
}
@@ -165,7 +158,7 @@ let parseUtil = (function(db, coll, stageName, options = {}) {
partitionByFields: ["b", "c"],
range: {
step: 1.0,
- bounds: [new Date("2020-01-01"), new Date("2021-01-01")],
+ bounds: [new ISODate("2020-01-01"), new ISODate("2021-01-01")],
unit: "week"
}
}
diff --git a/jstests/aggregation/sources/densify/memory_limit.js b/jstests/aggregation/sources/densify/memory_limit.js
index 91f793d5985..06f5026f032 100644
--- a/jstests/aggregation/sources/densify/memory_limit.js
+++ b/jstests/aggregation/sources/densify/memory_limit.js
@@ -13,13 +13,6 @@ load("jstests/aggregation/extras/utils.js"); // For arrayEq.
load("jstests/noPassthrough/libs/server_parameter_helpers.js"); // For setParameterOnAllHosts.
load("jstests/libs/discover_topology.js"); // For findNonConfigNodes.
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
const origParamValue = assert.commandWorked(db.adminCommand({
getParameter: 1,
internalDocumentSourceDensifyMaxMemoryBytes: 1
diff --git a/jstests/aggregation/sources/densify/partitions.js b/jstests/aggregation/sources/densify/partitions.js
index 4517e753c5a..fc0339d3a17 100644
--- a/jstests/aggregation/sources/densify/partitions.js
+++ b/jstests/aggregation/sources/densify/partitions.js
@@ -11,14 +11,6 @@
load("jstests/aggregation/extras/utils.js"); // arrayEq
-const featureEnabled =
- assert.commandWorked(db.adminCommand({getParameter: 1, featureFlagDensify: 1}))
- .featureFlagDensify.value;
-if (!featureEnabled) {
- jsTestLog("Skipping test because the densify feature flag is disabled");
- return;
-}
-
const coll = db[jsTestName()];
function buildErrorString(found, expected) {
@@ -57,10 +49,10 @@ function testOneDates() {
coll.drop();
const testDocs = [
- {val: new Date(2021, 0, 1), partition: 0},
- {val: new Date(2021, 0, 3), partition: 0},
- {val: new Date(2021, 0, 1), partition: 1},
- {val: new Date(2021, 0, 3), partition: 1}
+ {val: new ISODate("2021-01-01"), partition: 0},
+ {val: new ISODate("2021-01-03"), partition: 0},
+ {val: new ISODate("2021-01-01"), partition: 1},
+ {val: new ISODate("2021-01-03"), partition: 1}
];
assert.commandWorked(coll.insert(testDocs));
@@ -75,8 +67,10 @@ function testOneDates() {
}
]);
const resultArray = result.toArray();
- const testExpected = testDocs.concat(
- [{val: new Date(2021, 0, 2), partition: 0}, {val: new Date(2021, 0, 2), partition: 1}]);
+ const testExpected = testDocs.concat([
+ {val: new ISODate("2021-01-02"), partition: 0},
+ {val: new ISODate("2021-01-02"), partition: 1}
+ ]);
assert(arrayEq(resultArray, testExpected), buildErrorString(resultArray, testExpected));
coll.drop();
}
@@ -297,13 +291,16 @@ function fullTestTwoDates(stepVal = 2) {
let testDocs = [];
let testExpected = [];
// Add an initial document.
- testDocs.push({val: new Date(2021, 0, 1), part: 0});
- testDocs.push({val: new Date(2021, 0, 1), part: 1});
- testDocs.push({val: new Date(2031, 0, 1), part: 2});
- testDocs.push({val: new Date(2025, 0, 1), part: 3});
+ testDocs.push({val: new ISODate("2021-01-01"), part: 0});
+ testDocs.push({val: new ISODate("2021-01-01"), part: 1});
+ testDocs.push({val: new ISODate("2031-01-01"), part: 2});
+ testDocs.push({val: new ISODate("2025-01-01"), part: 3});
for (let densifyVal = 0; densifyVal < 11; densifyVal += stepVal) {
for (let partitionVal = 0; partitionVal <= 3; partitionVal++) {
- testExpected.push({val: new Date(2021 + densifyVal, 0, 1), part: partitionVal});
+ testExpected.push({
+ val: new ISODate((2021 + densifyVal).toString().padStart(2, '0') + "-01-01"),
+ part: partitionVal
+ });
}
}
assert.commandWorked(coll.insert(testDocs));
@@ -442,15 +439,18 @@ function rangeTestTwoDates() {
coll.drop();
let testDocs = [];
let testExpected = [];
- testDocs.push({val: new Date(2021, 0, 1), part: 0});
- testExpected.push({val: new Date(2021, 0, 1), part: 0});
- testDocs.push({val: new Date(2021, 5, 1), part: 1});
- testExpected.push({val: new Date(2021, 5, 1), part: 1});
- testDocs.push({val: new Date(2021, 10, 1), part: 2});
- testExpected.push({val: new Date(2021, 10, 1), part: 2});
+ testDocs.push({val: new ISODate("2021-01-01"), part: 0});
+ testExpected.push({val: new ISODate("2021-01-01"), part: 0});
+ testDocs.push({val: new ISODate("2021-06-01"), part: 1});
+ testExpected.push({val: new ISODate("2021-06-01"), part: 1});
+ testDocs.push({val: new ISODate("2021-11-01"), part: 2});
+ testExpected.push({val: new ISODate("2021-11-01"), part: 2});
for (let densifyVal = 4; densifyVal < 8; densifyVal += 2) {
for (let partitionVal = 0; partitionVal <= 2; partitionVal++) {
- testExpected.push({val: new Date(2021, densifyVal, 1), part: partitionVal});
+ testExpected.push({
+ val: new ISODate("2021-" + densifyVal.toString().padStart(2, '0') + "-01"),
+ part: partitionVal
+ });
}
}
assert.commandWorked(coll.insert(testDocs));
@@ -459,8 +459,11 @@ function rangeTestTwoDates() {
{
$densify: {
field: "val",
- range:
- {step: 2, unit: "month", bounds: [new Date(2021, 4, 1), new Date(2021, 8, 1)]},
+ range: {
+ step: 2,
+ unit: "month",
+ bounds: [new ISODate("2021-05-01"), new ISODate("2021-09-01")]
+ },
partitionByFields: ["part"]
}
},