diff options
Diffstat (limited to 'src/mongo/db/pipeline/pipeline_test.cpp')
-rw-r--r-- | src/mongo/db/pipeline/pipeline_test.cpp | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/src/mongo/db/pipeline/pipeline_test.cpp b/src/mongo/db/pipeline/pipeline_test.cpp index a23c5d8a7f6..1715379912b 100644 --- a/src/mongo/db/pipeline/pipeline_test.cpp +++ b/src/mongo/db/pipeline/pipeline_test.cpp @@ -293,238 +293,6 @@ TEST(PipelineOptimizationTest, SortMatchProjSkipLimBecomesMatchTopKSortSkipProj) assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); } -TEST(PipelineOptimizationTest, IdenticalSortSortBecomesSort) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, IdenticalSortSortSortBecomesSort) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, NonIdenticalSortsOnlySortOnFinalKey) { - std::string inputPipe = - "[{$sort: {a: -1}}" - ",{$sort: {a: 1}}" - ",{$sort: {a: -1}}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: -1}}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: -1}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortSortLimitBecomesFinalKeyTopKSort) { - std::string inputPipe = - "[{$sort: {a: -1}}" - ",{$sort: {a: 1}}" - ",{$limit: 5}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 5}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 5}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortSortSkipLimitBecomesTopKSortSkip) { - std::string inputPipe = - "[{$sort: {b: 1}}" - ",{$sort: {a: 1}}" - ",{$skip : 3}" - ",{$limit: 5}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 8}}" - ",{$skip: 3}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 8}" - ",{$skip : 3}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortLimitSortLimitBecomesTopKSort) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$limit: 12}" - ",{$sort: {a: 1}}" - ",{$limit: 20}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 12}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 12}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortLimitSortRetainsLimit) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$limit: 12}" - ",{$sort: {a: 1}}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 12}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 12}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortSortLimitRetainsLimit) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - ",{$limit: 20}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 20}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 20}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SortSortSortMatchProjSkipLimBecomesMatchTopKSortSkipProj) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - ",{$sort: {a: 1}}" - ",{$match: {a: 1}}" - ",{$project : {a: 1}}" - ",{$skip : 3}" - ",{$limit: 5}" - "]"; - - std::string outputPipe = - "[{$match: {a: {$eq: 1}}}" - ",{$sort: {sortKey: {a: 1}, limit: 8}}" - ",{$skip: 3}" - ",{$project: {_id: true, a: true}}" - "]"; - - std::string serializedPipe = - "[{$match: {a: 1}}" - ",{$sort: {a: 1}}" - ",{$limit: 8}" - ",{$skip : 3}" - ",{$project : {_id: true, a: true}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, NonIdenticalSortsBecomeFinalKeyTopKSort) { - std::string inputPipe = - "[{$sort: {a: -1}}" - ",{$sort: {b: -1}}" - ",{$sort: {b: 1}}" - ",{$sort: {a: 1}}" - ",{$limit: 7}" - ",{$project : {a: 1}}" - ",{$limit: 5}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: 1}, limit: 5}}" - ",{$project: {_id: true, a: true}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: 1}}" - ",{$limit: 5}" - ",{$project : {_id: true, a: true}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - -TEST(PipelineOptimizationTest, SubsequentSortsMergeAndBecomeTopKSortWithFinalKeyAndLowestLimit) { - std::string inputPipe = - "[{$sort: {a: 1}}" - ",{$sort: {a: -1}}" - ",{$limit: 8}" - ",{$limit: 7}" - ",{$project : {a: 1}}" - ",{$unwind: {path: '$a'}}" - "]"; - - std::string outputPipe = - "[{$sort: {sortKey: {a: -1}, limit: 7}}" - ",{$project: {_id: true, a: true}}" - ",{$unwind: {path: '$a'}}" - "]"; - - std::string serializedPipe = - "[{$sort: {a: -1}}" - ",{$limit: 7}" - ",{$project : {_id: true, a: true}}" - ",{$unwind: {path: '$a'}}" - "]"; - - assertPipelineOptimizesAndSerializesTo(inputPipe, outputPipe, serializedPipe); -} - TEST(PipelineOptimizationTest, RemoveSkipZero) { assertPipelineOptimizesTo("[{$skip: 0}]", "[]"); } |