Displaying a `Date64` scalar of `i64::MIN` panics
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 84/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- rust
- Área
- data-engineering
Línea de trabajo
Comienza en datafusion/common/src/scalar/mod.rs, en la rama Date64 de impl fmt::Display for ScalarValue, y reproduce el fallo con EXPLAIN SELECT arrow_cast(-9223372036854775808, 'Date64'). Comprueba el tratamiento adyacente de los offsets de epoch no representables. La tarea estará terminada cuando mostrar este valor i64::MIN ya no provoque un panic y siga el comportamiento existente para la cadena vacía.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
Formatting a ScalarValue::Date64 whose value is i64::MIN panics. The Display impl unwraps chrono::Duration::try_milliseconds(v), which returns None for i64::MIN because that value is outside the range chrono::Duration can represent (datafusion/common/src/scalar/mod.rs, Date64 arm of impl fmt::Display for ScalarValue).
Any code path that prints such a literal hits it, e.g. plan display.
To Reproduce
EXPLAIN SELECT arrow_cast(-9223372036854775808, 'Date64');
thread 'main' panicked at datafusion/common/src/scalar/mod.rs:5661:82:
called `Option::unwrap()` on a `None` value
Also reachable during execution, e.g. a RANGE window frame over a Date64 column that contains i64::MIN:
SELECT count(*) OVER (ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING)
FROM (VALUES (arrow_cast(9223372036854775807, 'Date64')), (arrow_cast(-9223372036854775808, 'Date64'))) t(x);
Expected behavior
No panic. The neighbouring branch already maps an unrepresentable epoch offset to an empty string (added for apache/arrow-rs#7728); i64::MIN should behave the same way.
Additional context
Found while running a corpus of extreme-value literals against a debug build of datafusion-cli.
- Lenguaje dominante
- Rust
- Estrellas
- 9.3k
- Forks
- 2.4k
- Merge medio
- 3 d 8 h
- PR fusionados (30 d)
- 354
Guía de contribución
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/datafusion
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/datafusion#25266 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
apache/datafusion#25213 · 1 comentario ·
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
apache/datafusion#25168 · 1 comentario ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
apache/datafusion#24998 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
apache/datafusion#24913 ·
Todos los issues de apache/datafusion
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
gitbutlerapp/gitbutler#15998 · 1 comentario ·
-
bug triage:deciding
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
open-telemetry/otel-arrow#4132 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100