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 天內回覆