TEST_F(KVCollectionCatalogEntryTest, NoOpWhenSpecifiedPathComponentsAlreadySetAsMultikey) { std::string indexName = createIndex(BSON("a" << 1)); CollectionCatalogEntry* collEntry = getCollectionCatalogEntry(); auto opCtx = newOperationContext(); ASSERT(collEntry->setIndexIsMultikey(opCtx.get(), indexName, {{0U}})); { MultikeyPaths multikeyPaths; ASSERT(collEntry->isIndexMultikey(opCtx.get(), indexName, &multikeyPaths)); assertMultikeyPathsAreEqual(multikeyPaths, {{0U}}); } ASSERT(!collEntry->setIndexIsMultikey(opCtx.get(), indexName, {{0U}})); { MultikeyPaths multikeyPaths; ASSERT(collEntry->isIndexMultikey(opCtx.get(), indexName, &multikeyPaths)); assertMultikeyPathsAreEqual(multikeyPaths, {{0U}}); } }
TEST_F(KVCollectionCatalogEntryTest, MultikeyPathsAccumulateOnDifferentComponentsOfTheSameField) { std::string indexName = createIndex(BSON("a.b" << 1)); CollectionCatalogEntry* collEntry = getCollectionCatalogEntry(); auto opCtx = newOperationContext(); ASSERT(collEntry->setIndexIsMultikey(opCtx.get(), indexName, {{0U}})); { MultikeyPaths multikeyPaths; ASSERT(collEntry->isIndexMultikey(opCtx.get(), indexName, &multikeyPaths)); assertMultikeyPathsAreEqual(multikeyPaths, {{0U}}); } ASSERT(collEntry->setIndexIsMultikey(opCtx.get(), indexName, {{1U}})); { MultikeyPaths multikeyPaths; ASSERT(collEntry->isIndexMultikey(opCtx.get(), indexName, &multikeyPaths)); assertMultikeyPathsAreEqual(multikeyPaths, {{0U, 1U}}); } }
TEST_F(KVCollectionCatalogEntryTest, CanSetMultipleFieldsAndComponentsAsMultikey) { std::string indexName = createIndex(BSON("a.b.c" << 1 << "a.b.d" << 1)); CollectionCatalogEntry* collEntry = getCollectionCatalogEntry(); auto opCtx = newOperationContext(); ASSERT(collEntry->setIndexIsMultikey(opCtx.get(), indexName, {{0U, 1U}, {0U, 1U}})); { MultikeyPaths multikeyPaths; ASSERT(collEntry->isIndexMultikey(opCtx.get(), indexName, &multikeyPaths)); assertMultikeyPathsAreEqual(multikeyPaths, {{0U, 1U}, {0U, 1U}}); } }