Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

array_min / array_max fail on a zero-row batch for non-primitive element types

Đang mở Phù hợp với người mới
#26,072 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@linuxpi đang làm issue này rồi.

Từ ngày 6/10/2026.

  • #26073 của @linuxpi — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
82/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
rust
Lĩnh vực
databases

Hướng nghiên cứu

Bắt đầu với array_min_max_helper trong datafusion/functions-nested/src/min_max.rs và theo dõi fallback cho các kiểu phần tử không nguyên thủy. Bổ sung kiểm thử cho đầu vào List<Utf8> có không hàng nào và xác minh hàm trả về không hàng nào mà không có lỗi; so sánh với hành vi hiện có cho các kiểu nguyên thủy.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Describe the bug

array_min / array_max on a zero-row List<Utf8> (or any non-primitive element type) fails:

Execution error: Empty iterator passed to ScalarValue::iter_to_array

A zero-row List<Int64> works. array_min_max_helper (datafusion/functions-nested/src/min_max.rs) only has a fast path for primitive types; the fallback builds a Vec<ScalarValue> and calls ScalarValue::iter_to_array, which rejects an empty iterator.

Zero-row batches do reach these functions in practice: ProjectionExec and TopK evaluate expressions on every batch, so ORDER BY array_min(tags) LIMIT n fails whenever an input emits an empty batch.

To Reproduce
use std::sync::Arc;
use datafusion::arrow::array::{ArrayRef, ListBuilder, StringBuilder};
use datafusion::arrow::record_batch::RecordBatch;
use datafusion::prelude::SessionContext;

#[tokio::main]
async fn main() -> datafusion::error::Result<()> {
    let ctx = SessionContext::new();
    let tags: ArrayRef = Arc::new(ListBuilder::new(StringBuilder::new()).finish());
    ctx.register_batch("t", RecordBatch::try_from_iter(vec![("tags", tags)])?)?;
    ctx.sql("SELECT array_min(tags) FROM t").await?.show().await?; // error
    Ok(())
}

Seen on 54.0.0; the code is unchanged on main.

Expected behavior

Zero rows, the same as for primitive element types.

Additional context

Found in OpenSearch's DataFusion backend when sorting on multi-valued keyword fields with an empty shard. Proposed fix: return new_empty_array(&array.value_type()) for an empty input before the fallback. PR to follow.

Ngôn ngữ chính
Rust
Star
9.4k
Fork
2.5k
Merge trung bình
4 ngày 5 giờ
Pull request đã merge (30 ngày)
344

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/datafusion

Tất cả issue của apache/datafusion

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.