summaryrefslogtreecommitdiff
path: root/jstests/aggregation/sources/unionWith/unionWith_explain.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/sources/unionWith/unionWith_explain.js')
-rw-r--r--jstests/aggregation/sources/unionWith/unionWith_explain.js105
1 files changed, 0 insertions, 105 deletions
diff --git a/jstests/aggregation/sources/unionWith/unionWith_explain.js b/jstests/aggregation/sources/unionWith/unionWith_explain.js
deleted file mode 100644
index 111b78a3697..00000000000
--- a/jstests/aggregation/sources/unionWith/unionWith_explain.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Test that $unionWith's pipeline argument returns the same explain as an equivalent normal
- * pipeline.
- * @tags: [do_not_wrap_aggregations_in_facets]
- */
-
-(function() {
-"use strict";
-load("jstests/aggregation/extras/utils.js"); // arrayEq, documentEq
-load("jstests/libs/fixture_helpers.js"); // For FixtureHelpers.
-
-const testDB = db.getSiblingDB(jsTestName());
-const collA = testDB.A;
-collA.drop();
-const collB = testDB.B;
-collB.drop();
-const collC = testDB.C;
-collC.drop();
-for (let i = 0; i < 5; i++) {
- assert.commandWorked(collA.insert({a: i, val: i, groupKey: i}));
- assert.commandWorked(collB.insert({b: i, val: i * 2, groupKey: i}));
- assert.commandWorked(collC.insert({c: i, val: 10 - i, groupKey: i}));
-}
-function getUnionWithStage(pipeline) {
- for (let i = 0; i < pipeline.length; i++) {
- const stage = pipeline[i];
- if (stage.hasOwnProperty("$unionWith")) {
- return stage;
- }
- }
-}
-
-function buildErrorString(unionExplain, realExplain, field) {
- return "Explains did not match in field " + field + ". Union:\n" + tojson(unionExplain) +
- "\nRegular:\n" + tojson(realExplain);
-}
-
-function assertExplainEq(unionExplain, regularExplain) {
- if (FixtureHelpers.isMongos(testDB)) {
- const splitPipe = unionExplain.splitPipeline;
- // If there is only one shard, the whole pipeline will run on that shard.
- const subAggPipe =
- splitPipe === null ? unionExplain.shards["shard-rs0"].stages : splitPipe.mergerPart;
- const unionStage = getUnionWithStage(subAggPipe);
- const unionSubExplain = unionStage.$unionWith.pipeline;
- if (splitPipe === null) {
- assert.eq(unionSubExplain.splitPipeline,
- regularExplain.splitPipeline,
- buildErrorString(unionSubExplain, regularExplain, "splitPipeline"));
- } else {
- assert(documentEq(unionSubExplain.splitPipeline, regularExplain.splitPipeline),
- buildErrorString(unionSubExplain, regularExplain, "splitPipeline"));
- }
- assert.eq(unionSubExplain.mergeType,
- regularExplain.mergeType,
- buildErrorString(unionSubExplain, regularExplain, "mergeType"));
- assert(documentEq(unionSubExplain.shards, regularExplain.shards),
- buildErrorString(unionSubExplain, regularExplain, "shards"));
- } else {
- const unionStage = getUnionWithStage(unionExplain.stages);
- const unionSubExplain = unionStage.$unionWith.pipeline;
- const realExplain = regularExplain.stages;
- assert(arrayEq(unionSubExplain, realExplain),
- buildErrorString(unionSubExplain, realExplain));
- }
-}
-function testPipeline(pipeline) {
- let unionResult = collA.aggregate([{$unionWith: {coll: collB.getName(), pipeline: pipeline}}],
- {explain: true});
- let queryResult = collB.aggregate(pipeline, {explain: true});
- assertExplainEq(unionResult, queryResult);
-}
-
-testPipeline([{$addFields: {bump: true}}]);
-
-testPipeline([{$group: {_id: "$groupKey", sum: {$sum: "$val"}}}]);
-
-testPipeline([{$group: {_id: "$groupKey", sum: {$sum: "$val"}}}, {$addFields: {bump: true}}]);
-
-testPipeline([{$unionWith: {coll: collC.getName()}}]);
-
-testPipeline([{$unionWith: {coll: collC.getName(), pipeline: [{$addFields: {bump: true}}]}}]);
-
-testPipeline([
- {$project: {firstProj: false}},
- {$group: {_id: "$groupKey", sum: {$sum: "$val"}}},
- {$match: {_id: 2}}
-]);
-
-testPipeline([{$limit: 3}, {$sort: {_id: 1}}, {$addFields: {bump: true}}]);
-
-testPipeline([{
- $addFields: {
- value: {
- $function: {
- body: function(base, pow) {
- return Math.pow(base, pow);
- },
- args: [2, 3],
- lang: "js"
- }
- }
- }
-}]);
-})();