diff options
Diffstat (limited to 'src/mongo/db/query/collation/collator_factory_icu.cpp')
-rw-r--r-- | src/mongo/db/query/collation/collator_factory_icu.cpp | 136 |
1 files changed, 91 insertions, 45 deletions
diff --git a/src/mongo/db/query/collation/collator_factory_icu.cpp b/src/mongo/db/query/collation/collator_factory_icu.cpp index f72731d6e9b..5a4470d4bf5 100644 --- a/src/mongo/db/query/collation/collator_factory_icu.cpp +++ b/src/mongo/db/query/collation/collator_factory_icu.cpp @@ -183,9 +183,13 @@ StatusWith<CollationSpec::CaseFirstType> stringToCaseFirstType(const std::string } else { return {ErrorCodes::FailedToParse, str::stream() << "Field '" << CollationSpec::kCaseFirstField << "' must be '" - << CollationSpec::kCaseFirstUpper << "', '" - << CollationSpec::kCaseFirstLower << "', or '" - << CollationSpec::kCaseFirstOff << "'. Got: " << caseFirst}; + << CollationSpec::kCaseFirstUpper + << "', '" + << CollationSpec::kCaseFirstLower + << "', or '" + << CollationSpec::kCaseFirstOff + << "'. Got: " + << caseFirst}; } } @@ -204,7 +208,8 @@ StatusWith<CollationSpec::StrengthType> integerToStrengthType(long long strength } return {ErrorCodes::FailedToParse, str::stream() << "Field '" << CollationSpec::kStrengthField - << "' must be an integer 1 through 5. Got: " << strength}; + << "' must be an integer 1 through 5. Got: " + << strength}; } StatusWith<CollationSpec::AlternateType> stringToAlternateType(const std::string& alternate) { @@ -215,8 +220,11 @@ StatusWith<CollationSpec::AlternateType> stringToAlternateType(const std::string } else { return {ErrorCodes::FailedToParse, str::stream() << "Field '" << CollationSpec::kAlternateField << "' must be '" - << CollationSpec::kAlternateNonIgnorable << "' or '" - << CollationSpec::kAlternateShifted << "'. Got: " << alternate}; + << CollationSpec::kAlternateNonIgnorable + << "' or '" + << CollationSpec::kAlternateShifted + << "'. Got: " + << alternate}; } } @@ -228,8 +236,11 @@ StatusWith<CollationSpec::MaxVariableType> stringToMaxVariableType(const std::st } else { return {ErrorCodes::FailedToParse, str::stream() << "Field '" << CollationSpec::kMaxVariableField << "' must be '" - << CollationSpec::kMaxVariablePunct << "' or '" - << CollationSpec::kMaxVariableSpace << "'. Got: " << maxVariable}; + << CollationSpec::kMaxVariablePunct + << "' or '" + << CollationSpec::kMaxVariableSpace + << "'. Got: " + << maxVariable}; } } @@ -259,8 +270,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kCaseLevelField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.caseLevel = attributeToBool(caseLevelAttribute); } else if (!parseStatus.isOK()) { @@ -274,8 +287,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kCaseLevelField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -290,8 +305,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kCaseFirstField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.caseFirst = getCaseFirstFromAttribute(caseFirstAttribute); } else if (!parseStatus.isOK()) { @@ -313,8 +330,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kCaseFirstField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -329,8 +348,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kStrengthField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.strength = getStrengthFromAttribute(strengthAttribute); } else if (!parseStatus.isOK()) { @@ -351,8 +372,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kStrengthField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -368,8 +391,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kNumericOrderingField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.numericOrdering = attributeToBool(numericOrderingAttribute); } else if (!parseStatus.isOK()) { @@ -384,8 +409,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kNumericOrderingField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -401,8 +428,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kAlternateField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.alternate = getAlternateFromAttribute(alternateAttribute); } else if (!parseStatus.isOK()) { @@ -424,8 +453,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kAlternateField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -452,8 +483,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kMaxVariableField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -469,8 +502,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kNormalizationField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.normalization = attributeToBool(normalizationAttribute); } else if (!parseStatus.isOK()) { @@ -485,8 +520,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kNormalizationField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -502,8 +539,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get '" << CollationSpec::kBackwardsField - << "' attribute from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute from icu::Collator: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } parsedSpec.backwards = attributeToBool(backwardsAttribute); } else if (!parseStatus.isOK()) { @@ -518,8 +557,10 @@ StatusWith<CollationSpec> parseToCollationSpec(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to set '" << CollationSpec::kBackwardsField - << "' attribute: " << icuError.errorName() - << ". Collation spec: " << spec}; + << "' attribute: " + << icuError.errorName() + << ". Collation spec: " + << spec}; } } @@ -543,7 +584,8 @@ StatusWith<std::string> parseLocaleID(const BSONObj& spec) { if (localeID.find('\0') != std::string::npos) { return {ErrorCodes::BadValue, str::stream() << "Field '" << CollationSpec::kLocaleField - << "' cannot contain null byte. Collation spec: " << spec}; + << "' cannot contain null byte. Collation spec: " + << spec}; } return localeID; } @@ -559,13 +601,15 @@ Status validateLocaleID(const BSONObj& spec, icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to get locale from icu::Collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << ". Collation spec: " + << spec}; } if (originalID.empty()) { return {ErrorCodes::BadValue, str::stream() << "Field '" << CollationSpec::kLocaleField - << "' cannot be the empty string in: " << spec}; + << "' cannot be the empty string in: " + << spec}; } // Check that each component of the locale ID is recognized by ICU. If ICU 1) cannot parse the @@ -607,7 +651,8 @@ StatusWith<std::unique_ptr<CollatorInterface>> CollatorFactoryICU::makeFromBSON( return {ErrorCodes::FailedToParse, str::stream() << "If " << CollationSpec::kLocaleField << "=" << CollationSpec::kSimpleBinaryComparison - << ", no other fields should be present in: " << spec}; + << ", no other fields should be present in: " + << spec}; } return {nullptr}; } @@ -616,8 +661,8 @@ StatusWith<std::unique_ptr<CollatorInterface>> CollatorFactoryICU::makeFromBSON( auto userLocale = icu::Locale::createFromName(parsedLocaleID.getValue().c_str()); if (userLocale.isBogus()) { return {ErrorCodes::BadValue, - str::stream() << "Field '" << CollationSpec::kLocaleField - << "' is not valid in: " << spec}; + str::stream() << "Field '" << CollationSpec::kLocaleField << "' is not valid in: " + << spec}; } // Construct an icu::Collator. @@ -628,7 +673,8 @@ StatusWith<std::unique_ptr<CollatorInterface>> CollatorFactoryICU::makeFromBSON( icuError.set(status); return {ErrorCodes::OperationFailed, str::stream() << "Failed to create collator: " << icuError.errorName() - << ". Collation spec: " << spec}; + << ". Collation spec: " + << spec}; } Status localeValidationStatus = validateLocaleID(spec, parsedLocaleID.getValue(), *icuCollator); |