Full Unicode case-mapping parity for case-insensitive field matching
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginne mit der Überprüfung von StringUtils::ToLower und der EqualsIgnoreCase/StartsWithIgnoreCase-Pfade aus PR #760 und vergleiche anschließend das vollständige Case Folding von utf8proc mit iceberg-java und PyIceberg anhand des Beispiels İ. Erledigt ist die Aufgabe, wenn ein mit Java/Python kompatibles vollständiges Case Mapping, beibehaltene schnelle ASCII-Pfade und ein Streaming- oder allokationsfreier Vergleichspfad für Nicht-ASCII vorhanden sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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)
- Vorherrschende Sprache
- C++
- Sterne
- 226
- Forks
- 132
- Ø Merge
- 1 T. 11 Std.
- Gemergte PRs (30 T.)
- 27
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus apache/iceberg-cpp
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
apache/iceberg-cpp#978 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
apache/iceberg-cpp#977 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
apache/iceberg-cpp#973 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug: expression JSON deserialization throws an uncaught exception on a non-string "type"/"term"Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 75/100
apache/iceberg-cpp#979 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
apache/iceberg-cpp#959 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in apache/iceberg-cpp
Ähnliche Issues
-
area/ysql kind/bug priority/medium
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
yugabyte/yugabyte-db#34552 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 94/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
Maintainer antworten meist innerhalb von 1 Tag
-
ai_p2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
ClickHouse/ClickHouse#123351 ·
Maintainer antworten meist innerhalb von 1 Tag