read_side_padding ignores the pad string for dictionary inputs in lpad and rpad

Abierto Apto para principiantes
#7,453 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

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

Línea de trabajo

El error está en native/spark-expr/src/static_invoke/char_varchar_utils/read_side_padding.rs, en la rama de tres argumentos que captura las entradas Dictionary: ambas ramas de Dictionary pasan SPACE, mientras que las ramas Utf8 y LargeUtf8 pasan la cadena de relleno. Lee primero esa rama y luego añade una prueba unitaria con una entrada Dictionary y un relleno distinto de espacio, como "x", que espere ["abxxx", "abxxx"]. Está terminado cuando el resultado de Dictionary coincida con el resultado de Utf8 para la misma entrada.

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

Descripción

requires-triage
Describe the bug

In read_side_padding.rs, the three-argument arm ([Array, Scalar(Int32), Scalar(Utf8)]) ignores the pad string when the input is a dictionary array. The Utf8 and LargeUtf8 branches pass string to spark_read_side_padding_internal, but both Dictionary branches pass SPACE. So rpad/lpad with a custom pad pads with spaces instead.

https://github.com/apache/datafusion-comet/blob/644a8708839270d382a78715fca7e2b724143588/native/spark-expr/src/static_invoke/char_varchar_utils/read_side_padding.rs#L115-L132

Steps to reproduce

Kernel-level, on main at 644a87088:

let dict: DictionaryArray<Int32Type> = vec!["ab", "ab"].into_iter().collect();
let args = vec![
    ColumnarValue::Array(Arc::new(dict)),
    ColumnarValue::Scalar(ScalarValue::Int32(Some(5))),
    ColumnarValue::Scalar(ScalarValue::Utf8(Some("x".to_string()))),
];
spark_rpad(&args) // ["ab   ", "ab   "]

I couldn't find a SQL query that reaches this today. The native scan input unpacks dictionary-encoded strings (see test_unpack_dictionary_string in planner.rs), and the existing string_rpad.sql tests with a custom pad pass. So this looks latent, but it would give silent wrong results if a dictionary array ever reaches the kernel, which is what the Dictionary arm (added for SPARK-48498) is there for.

Expected behavior

["abxxx", "abxxx"], the same as for a Utf8 input.

Additional context

Found while reviewing my change for #7245 (PR #7450). The fix is to pass string instead of SPACE in the two Dictionary branches and add a unit test with a dictionary input and a non-space pad.

Willingness to contribute

I can contribute a fix for this bug independently

AI disclosure: this issue was investigated and written with an AI coding assistant, and reviewed by me.

Lenguaje dominante
Scala
Estrellas
1.3k
Forks
405
Merge medio
3 d 3 h
PR fusionados (30 d)
269

Preparar el entorno

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-comet

Todos los issues de apache/datafusion-comet

Issues similares

Más issues de Scala

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.