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

Deduplicate bucket computation in width_bucket_interval_mdn_exact

Abierto Apto para principiantes
#26,307 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@nightcityblade ya está trabajando en esto.

Desde el 14/10/2026.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
85/100
Tipo de issue
Refactorización
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
backend

Línea de trabajo

Empieza por width_bucket_interval_mdn_exact en spark/src/function/math/width_bucket.rs, donde las ramas "only month" y "months equals" repiten las comprobaciones de fuera de rango, la protección del ancho y el recorte de los buckets. Compara las dos ramas para ver qué partes difieren, sobre todo cómo se proyectan x, l y h a f64. Extrae una función auxiliar compartida que reciba los valores proyectados y devuelva Option<i64>, y haz que ambas ramas la llamen. Está terminado cuando ambas ramas usan la función auxiliar y las pruebas existentes de width_bucket pasan sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement good first issue help wanted spark tech debt
Is your feature request related to a problem or challenge?

width_bucket_interval_mdn_exact (spark/src/function/math/width_bucket.rs#L300-L431) contains two near-identical blocks, "only month" (about L330-L366) and "months equals" (about L368-L424). Each repeats:

  • the ascending/descending out-of-range checks (bucket 0 or num_buckets + 1),
  • the bucket-width computation with its zero / non-finite null guard,
  • the floor-plus-one bucket clamp.

They differ only in how x, l and h are projected to f64 (months vs. day/nanosecond offset relative to l). Duplicated numeric edge-case handling like this is where a boundary fix ends up in only one copy.

Describe the solution you'd like

Extract fn bucket_from_f64(x: f64, l: f64, h: f64, num_buckets: i64, ascending: bool) -> Option<i64> (returning None for null). Each branch then only computes its projected (x, l, h) and calls it. Optionally move the per-row body into a helper returning Option<i64> so the continue chains disappear. The existing width_bucket tests cover the behaviour.

Describe alternatives you've considered

None.

Additional context

This is small and self-contained, a good first issue. Line references are pinned to commit 0d79252f61bd.

Lenguaje dominante
Rust
Estrellas
9.4k
Forks
2.5k
Merge medio
4 d 9 h
PR fusionados (30 d)
329

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

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/datafusion

Todos los issues de apache/datafusion

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.