Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

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

Offen
#808 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

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
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Ruhig
Tech-Stack
cpp
Bereich
backend

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

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/iceberg-cpp

Alle Issues in apache/iceberg-cpp

Ähnliche Issues

Weitere Issues zu C++

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.