Skip to content

[fix](exec) preserve NULL in pushed-down CHAR MIN/MAX#65952

Open
Mryange wants to merge 1 commit into
apache:masterfrom
Mryange:fix-nullable-char-minmax
Open

[fix](exec) preserve NULL in pushed-down CHAR MIN/MAX#65952
Mryange wants to merge 1 commit into
apache:masterfrom
Mryange:fix-nullable-char-minmax

Conversation

@Mryange

@Mryange Mryange commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Problem Summary: MIN on a nullable CHAR column could return an empty string when string min/max aggregation was pushed down to multiple tablets. The zone-map reader produced NULL correctly, but the CHAR padding cleanup rebuilt each value through a non-null Field, converting StringRef{nullptr, 0} into an empty string. Preserve the original StringRef through insert_data() so NULL remains NULL while CHAR padding is still removed.

Release note

Fix incorrect MIN results for nullable CHAR columns when min/max aggregation pushdown is enabled.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

### What problem does this PR solve?

Issue Number: N/A

Problem Summary: Nullable CHAR values returned by the zone-map min/max path were rebuilt through a non-null Field, converting NULL into an empty string. Preserve the StringRef null marker when removing CHAR padding.

### Release note

Fix incorrect MIN results for nullable CHAR columns with min/max aggregation pushdown.

### Check List (For Author)

- Test: Added VGenericIteratorsTest.StatisticsIteratorPreservesNullForNullableChar; manual multi-bucket reproduction verified after the BE fix.

- Behavior changed: Yes; nullable CHAR MIN preserves NULL semantics.

- Does this need documentation: No.
@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@Mryange

Mryange commented Jul 23, 2026

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Jul 28th, 2026 5:08 PM.
Workflow run: https://github.com/apache/doris/actions/runs/29989313820

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants