summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/collation/collator_factory_icu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/collation/collator_factory_icu.cpp')
-rw-r--r--src/mongo/db/query/collation/collator_factory_icu.cpp136
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);