// static StatusWithFTSLanguage FTSLanguage::make(StringData langName, TextIndexVersion textIndexVersion) { switch (textIndexVersion) { case TEXT_INDEX_VERSION_2: { LanguageMapV2::const_iterator it = languageMapV2.find(langName.toString()); if (it == languageMapV2.end()) { // TEXT_INDEX_VERSION_2 rejects unrecognized language strings. Status status = Status(ErrorCodes::BadValue, mongoutils::str::stream() << "unsupported language: \"" << langName << "\""); return StatusWithFTSLanguage(status); } return StatusWithFTSLanguage(it->second); } case TEXT_INDEX_VERSION_1: { LanguageMapV1::const_iterator it = languageMapV1.find(langName); if (it == languageMapV1.end()) { // TEXT_INDEX_VERSION_1 treats unrecognized language strings as "none". return StatusWithFTSLanguage(&languageNoneV1); } return StatusWithFTSLanguage(it->second); } } verify(false); return StatusWithFTSLanguage(Status::OK()); }
// static StatusWithFTSLanguage FTSLanguage::make(StringData langName, TextIndexVersion textIndexVersion) { if (textIndexVersion >= TEXT_INDEX_VERSION_2) { LanguageMap* languageMap = (textIndexVersion == TEXT_INDEX_VERSION_3) ? &languageMapV3 : &languageMapV2; LanguageMap::const_iterator it = languageMap->find(langName.toString()); if (it == languageMap->end()) { // TEXT_INDEX_VERSION_2 and above reject unrecognized language strings. Status status = Status(ErrorCodes::BadValue, str::stream() << "unsupported language: \"" << langName << "\" for text index version " << textIndexVersion); return StatusWithFTSLanguage(status); } return StatusWithFTSLanguage(it->second); } else { // Legacy text index. invariant(textIndexVersion == TEXT_INDEX_VERSION_1); LanguageMapLegacy::const_iterator it = languageMapV1.find(langName); if (it == languageMapV1.end()) { // TEXT_INDEX_VERSION_1 treats unrecognized language strings as "none". return StatusWithFTSLanguage(&languageNoneV1); } return StatusWithFTSLanguage(it->second); } }