Support a literal str argument in native lpad/rpad

Đang mở
#7,525 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 2 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
76/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ệ
scala, spark
Lĩnh vực
backend

Hướng nghiên cứu

Start with spark/src/main/scala/org/apache/comet/serde/strings.scala and confirm PR #7450 provides the scalar-string kernel support this change depends on. Remove the literal str rejection in both serdes, update the lpad and rpad notes in docs/source/user-guide/latest/expressions.md, and adjust string_lpad.sql and string_rpad.sql expectations. Done when literal str cases with literal pad use native dispatch, column pad cases still use codegen dispatch, and tests account for Spark constant folding.

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

Mô tả

area:expressions enhancement
What is the problem the feature request solves?

CometStringLPad and CometStringRPad (spark/src/main/scala/org/apache/comet/serde/strings.scala) return Unsupported when the str argument is a Literal, so queries such as lpad('hi', len, 'xy') run through codegen dispatch instead of the native kernel.

The check was added in https://github.com/apache/datafusion-comet/pull/2630 because the native read_side_padding kernel only accepted a string array, and a literal str failed at runtime. https://github.com/apache/datafusion-comet/pull/7450 adds a scalar-string arm to the kernel: it handles a scalar str with a scalar or an array length, a NULL str, and a NULL length, without expanding the scalar. So the reason for the check no longer holds.

Raised by @coderfender in the #7450 review.

Describe the potential solution
  • Drop the expr.str.isInstanceOf[Literal] check (and PadReasons.literalStrReason) from both serdes. The pad argument still has to be a literal.
  • Update the lpad/rpad notes in docs/source/user-guide/latest/expressions.md, which say literal strings use codegen dispatch.
  • In string_lpad.sql and string_rpad.sql, switch the queries with a literal str and a literal pad, such as lpad('hi', len, 'xy') and lpad('hi', len), from expect_dispatch to expect_native. Queries whose pad is a column stay on codegen dispatch.
  • An all-literal call is constant-folded by Spark, so the tests need a column length, or ConstantFolding excluded.
Additional context

Depends on https://github.com/apache/datafusion-comet/pull/7450.

Willingness to contribute

I would be willing to contribute a fix for this bug with guidance from the DataFusion community

Ngôn ngữ chính
Scala
Star
1.3k
Fork
414
Merge trung bình
3 ngày 5 giờ
Pull request đã merge (30 ngày)
210

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

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

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

Issue tương tự

Thêm issue về Scala

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.