Full Unicode case-mapping parity for case-insensitive field matching
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza revisando StringUtils::ToLower y las rutas EqualsIgnoreCase/StartsWithIgnoreCase de PR #760; después compara el case folding completo de utf8proc con iceberg-java y PyIceberg para el ejemplo İ. Se considera terminado cuando haya un mapeo de mayúsculas y minúsculas completo compatible con Java/Python, se conserven las rutas rápidas ASCII y exista una ruta de comparación no ASCII mediante streaming o sin asignaciones.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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)
- Lenguaje dominante
- C++
- Estrellas
- 223
- Forks
- 127
- Merge medio
- 1 d 13 h
- PR fusionados (30 d)
- 28
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/iceberg-cpp
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
apache/iceberg-cpp#973 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
apache/iceberg-cpp#959 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Release Apache Iceberg C++ 0.4.0Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
apache/iceberg-cpp#955 · 3 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
apache/iceberg-cpp#946 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
apache/iceberg-cpp#944 ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/iceberg-cpp
Issues similares
-
Broken links in the docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/onnxruntime#33018 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
DataLakeFileSystemClient::ListPaths() throws JSON exception due to accessing undefined fieldsAbiertocustomer-reported needs-triage question
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Azure/azure-sdk-for-cpp#7435 ·
Los mantenedores suelen responder en 1 día
-
ChromieCraft Generic Confirmed World Event
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
azerothcore/azerothcore-wotlk#27882 ·
Los mantenedores suelen responder en 1 día
-
MacOS build failureAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
aristocratos/btop#1874 ·
Los mantenedores suelen responder en 1 día