diff options
Diffstat (limited to 'jstests/core/clustered_collection_collation.js')
| -rw-r--r-- | jstests/core/clustered_collection_collation.js | 51 |
1 files changed, 2 insertions, 49 deletions
diff --git a/jstests/core/clustered_collection_collation.js b/jstests/core/clustered_collection_collation.js index 585425d6fac..d96afb7730d 100644 --- a/jstests/core/clustered_collection_collation.js +++ b/jstests/core/clustered_collection_collation.js @@ -35,9 +35,6 @@ const incompatibleCollation = { locale: "fr_CA", strength: 2 }; -const simpleCollation = { - locale: "simple", -}; assert.commandWorked(db.createCollection( collatedName, {clusteredIndex: {key: {_id: 1}, unique: true}, collation: defaultCollation})); @@ -144,7 +141,7 @@ const verifyNoTightBoundsAndFindsN = function(coll, expected, predicate, queryCo const max = res.queryPlanner.winningPlan.maxRecord; assert.neq(null, min, "No min bound"); assert.neq(null, max, "No max bound"); - assert(min !== max, "COLLSCAN bounds are equal"); + assert.neq(min, max, "COLLSCAN bounds are equal"); assert.eq(expected, coll.find(predicate).count(), "Didn't find the expected records"); }; @@ -153,77 +150,33 @@ const testBounds = function(coll, expected, defaultCollation) { verifyHasBoundsAndFindsN(coll, 1, {_id: 5}); verifyHasBoundsAndFindsN(coll, 1, {_id: {int: 5}}); verifyHasBoundsAndFindsN(coll, 1, {_id: {ints: [5, 10]}}); - verifyNoTightBoundsAndFindsN(coll, 2, {_id: {$in: [5, {ints: [5, 10]}]}}); // Test non string types with incompatible collations. verifyHasBoundsAndFindsN(coll, 1, {_id: 5}, incompatibleCollation); verifyHasBoundsAndFindsN(coll, 1, {_id: {int: 5}}, incompatibleCollation); verifyHasBoundsAndFindsN(coll, 1, {_id: {ints: [5, 10]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN( - coll, 2, {_id: {$in: [5, {ints: [5, 10]}]}}, incompatibleCollation); // Test strings respect the collation. verifyHasBoundsAndFindsN(coll, expected, {_id: "A"}); verifyHasBoundsAndFindsN(coll, expected, {_id: {str: "A"}}); verifyHasBoundsAndFindsN(coll, expected, {_id: {strs: ["A", "b"]}}); verifyHasBoundsAndFindsN(coll, expected, {_id: {strs: ["a", "B"]}}); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", 1]}}); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", "C"]}}); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["", {str: "A"}]}}); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: [{}, {strs: ["A", "b"]}]}}); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: [[], {strs: ["a", "B"]}]}}); // Test strings not in the _id field verifyNoBoundsAndFindsN(coll, expected, {data: ["A", "b"]}); verifyNoBoundsAndFindsN(coll, expected, {data: ["a", "B"]}); - // Test non compatible query collations don't generate exact bounds. This means, the bounds - // generated are with respect to the KeyString encoding of the data type of the query. For - // example, an _id: <string> query will be bounded by min and max values for type 'string', but - // not bounded by the exact value of <string>. + // Test non compatible query collations don't generate bounds verifyNoTightBoundsAndFindsN(coll, expected, {_id: "A"}, incompatibleCollation); verifyNoTightBoundsAndFindsN(coll, expected, {_id: {str: "A"}}, incompatibleCollation); verifyNoTightBoundsAndFindsN(coll, expected, {_id: {strs: ["A", "b"]}}, incompatibleCollation); verifyNoTightBoundsAndFindsN(coll, expected, {_id: {strs: ["a", "B"]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", 1]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", "C"]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: ["", {str: "A"}]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [{}, {strs: ["A", "b"]}]}}, incompatibleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [[], {strs: ["a", "B"]}]}}, incompatibleCollation); - - if (defaultCollation != undefined && defaultCollation.locale != simpleCollation.locale) { - // 'Simple' collations are treated differently than non-simple queries since they are the - // default 'locale' when a collation is not specified. Test that the 'simple' collation is - // not compatible when the clustered collection has a non-simple collation. - verifyNoTightBoundsAndFindsN(coll, expected, {_id: "A"}, simpleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {str: "A"}}, simpleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {strs: ["A", "b"]}}, simpleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {strs: ["a", "B"]}}, simpleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", 1]}}, simpleCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", "C"]}}, simpleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: ["", {str: "A"}]}}, simpleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [{}, {strs: ["A", "b"]}]}}, simpleCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [[], {strs: ["a", "B"]}]}}, simpleCollation); - } // Test compatible query collations generate bounds verifyHasBoundsAndFindsN(coll, expected, {_id: "A"}, defaultCollation); verifyHasBoundsAndFindsN(coll, expected, {_id: {str: "A"}}, defaultCollation); verifyHasBoundsAndFindsN(coll, expected, {_id: {strs: ["A", "b"]}}, defaultCollation); verifyHasBoundsAndFindsN(coll, expected, {_id: {strs: ["a", "B"]}}, defaultCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", 1]}}, defaultCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["A", "C"]}}, defaultCollation); - verifyNoTightBoundsAndFindsN(coll, expected, {_id: {$in: ["", {str: "A"}]}}, defaultCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [{}, {strs: ["A", "b"]}]}}, defaultCollation); - verifyNoTightBoundsAndFindsN( - coll, expected, {_id: {$in: [[], {strs: ["a", "B"]}]}}, defaultCollation); }; insertDocuments(collated); |
