Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Full Unicode case-mapping parity for case-insensitive field matching

未关闭
#808 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
功能
描述清晰度
需要澄清
活跃度
冷清
技术栈
cpp
领域
backend

调研方向

首先检查 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,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/iceberg-cpp 的其他 Issue

查看 apache/iceberg-cpp 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。