Full Unicode case-mapping parity for case-insensitive field matching
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
首先检查 PR #760 中的 StringUtils::ToLower 以及 EqualsIgnoreCase/StartsWithIgnoreCase 路径,然后针对 İ 示例,将 utf8proc 的完整 case folding 与 iceberg-java 和 PyIceberg 进行比较。完成的标准是:实现与 Java/Python 兼容的完整大小写映射,保留 ASCII 快速路径,并提供流式或无分配的非 ASCII 比较路径。
由索引模型根据 Issue 内容生成。
描述
Context
Issue #613 asks for case-insensitive field matching consistent with iceberg-java and iceberg-python (both Unicode-aware), with İ (U+0130) as the example. PR #760 (Part of #613) made StringUtils::ToLower Unicode-aware using utf8proc simple (1:1) case mapping and added allocation-free ASCII fast paths.
This issue captures the design and remaining plan to reach full parity and tracks the follow-up PRs.
Remaining gap
utf8proc's simple mapping still diverges from java for the few code points where simple ≠ full case mapping — chiefly İ:
| input | iceberg-cpp (simple) | iceberg-java toLowerCase(Locale.ROOT) / Python str.lower() |
|---|---|---|
İ (U+0130) |
i (U+0069) |
i̇ (U+0069 U+0307) |
So EqualsIgnoreCase("İD", "id") is true in iceberg-cpp but false in java/python — the inconsistency #613 is about.
Design questions
- Match iceberg-java
toLowerCase(Locale.ROOT)exactly; confirm the operation PyIceberg uses for matching and that it agrees. - Full lowercase mapping vs. Unicode case folding: utf8proc offers full case folding (
utf8proc_map+UTF8PROC_CASEFOLD); verify it reproduces the java/python result, or add a small explicit mapping. - Keep the ASCII fast path; stream the non-ASCII path rather than materialize.
Work Items
- Full case mapping to close the
İ/ java-parity gap - Streaming / allocation-free non-ASCII comparison in
EqualsIgnoreCase/StartsWithIgnoreCase(deferred from #760)
References
- Issue: #613 (origin)
- 主要语言
- C++
- 星标
- 223
- 派生
- 127
- 平均合并
- 1 天 13 小时
- 30 天内合并 PR
- 28
环境准备
我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
apache/iceberg-cpp 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 88/100
apache/iceberg-cpp#973 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 20/100
apache/iceberg-cpp#959 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 45/100
apache/iceberg-cpp#955 · 3 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 35/100
apache/iceberg-cpp#946 · 5 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 45/100
apache/iceberg-cpp#944 ·
维护者通常 1 天内回复
查看 apache/iceberg-cpp 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
mpfaffenberger/privateer_reimagined#658 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 85/100
microsoft/onnxruntime#33018 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
AXERA-TECH/ax-llm#81 ·
-
enhancement
难度 2/5 半天 新手友好度 78/100
ros-industrial/ros2_canopen#448 ·
-
难度 1/5 1 小时以内 新手友好度 78/100
维护者通常 1 天内回复