Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#808 1 comentario 0 reacciones 0 asignados Ver en GitHub

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
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Tranquilo
Stack tecnológico
cpp
Área
backend

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/iceberg-cpp

Todos los issues de apache/iceberg-cpp

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.