Skip to content

Bug (substring kernel): The null buffer is not aligned when offset != 0 #1639

@HaoYang670

Description

@HaoYang670

Describe the bug
Track #1633 (comment)
We have the bug in BinaryArray and StringArray in the substring kernel.

To Reproduce

    fn offset_fixed_size_binary() -> Result<()> {
        let values = *b"hellotherearrow";
        let offsets: [i32; 4] = [0, 5, 10, 15];
        // set the first and third element to be valid
        let bits_v = [0b101_u8];

        let data = ArrayData::builder(DataType::Binary)
            .len(2)
            .add_buffer(Buffer::from_slice_ref(&offsets))
            .add_buffer(Buffer::from_slice_ref(&values))
            .offset(1)
            .null_bit_buffer(Buffer::from(bits_v))
            .build()
            .unwrap();
        // array is `[null, "arrow"]`
        let array = BinaryArray::from(data);
        // result is `[null, "rrow"]`
        let result = substring(&array, 1, None)?;
        let result = result
            .as_any()
            .downcast_ref::<BinaryArray>()
            .unwrap();
        let expected = BinaryArray::from_opt_vec(
            vec![None, Some(b"rrow")],
        );
        assert_eq!(result, &expected);

        Ok(())
    }

Expected behavior

  1. fix the bug
  2. add tests

Additional context
Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    arrowChanges to the arrow cratebug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions