wgtmac commented on code in PR #760:
URL: https://github.com/apache/iceberg-cpp/pull/760#discussion_r3448629844
##########
src/iceberg/util/string_util.h:
##########
@@ -41,22 +40,24 @@ concept FromChars = requires(const char* p, T& v) {
std::from_chars(p, p, v); };
class ICEBERG_EXPORT StringUtils {
public:
- // NOTE: These convert ASCII letters only; all other bytes, including
non-ASCII
- // (multibyte UTF-8) bytes, are passed through unchanged.
- // See https://github.com/apache/iceberg-cpp/issues/613.
- static std::string ToLower(std::string_view str) {
- return str | std::ranges::views::transform(ToLowerAscii) |
- std::ranges::to<std::string>();
- }
-
+ /// \brief Lower-case a UTF-8 string using Unicode simple case mapping.
+ ///
+ /// Mirrors Iceberg Java's case-insensitive handling, which lower-cases
names with
+ /// toLowerCase(Locale.ROOT). Invalid UTF-8 input is returned unchanged.
+ /// See https://github.com/apache/iceberg-cpp/issues/613.
+ static std::string ToLower(std::string_view str);
+
+ /// \brief Upper-case ASCII letters; non-ASCII (multibyte UTF-8) bytes pass
through
+ /// unchanged.
+ ///
+ /// Unlike ToLower this is ASCII-only, since upper-casing is not used for
name matching.
static std::string ToUpper(std::string_view str) {
return str | std::ranges::views::transform(ToUpperAscii) |
std::ranges::to<std::string>();
}
static bool EqualsIgnoreCase(std::string_view lhs, std::string_view rhs) {
- return std::ranges::equal(
- lhs, rhs, [](char lc, char rc) { return ToLowerAscii(lc) ==
ToLowerAscii(rc); });
+ return ToLower(lhs) == ToLower(rhs);
Review Comment:
This incur performance regression (if they are ASCII) because we cannot
return early if their prefixes do not equal. Perhaps we can still implement
this in a streaming approach?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]