Skip to content

branch-4.1: [fix](rbo) Preserve union constant rows across rewrites #67790 - #68172

Merged
yiguolei merged 1 commit into
branch-4.1from
auto-pick-67790-branch-4.1
Sep 19, 2026
Merged

yiguolei merged 1 commit into
branch-4.1from
auto-pick-67790-branch-4.1

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Cherry-picked from #67790

## Problem

A UNION ALL could lose constant rows when a later rewrite exposed
another one-row child. Queries that combine an existing constant branch
with a single-row GROUP BY or DISTINCT branch returned only the newly
exposed row.

## Root cause

MergeOneRowRelationIntoUnion rebuilt the union constant-expression list
from only the current children. If an earlier rewrite pass had already
moved a constant child into the union metadata, a later pass replaced
that metadata instead of retaining it.

## Reproduction

```sql
SELECT 1 AS c
UNION ALL
SELECT c FROM (SELECT 2 AS c) s GROUP BY c;
```

The result incorrectly omitted the row containing 1. The same behavior
occurred with DISTINCT and with the branches reversed.

## Fix

Seed the rebuilt constant-expression list with the union existing
constant rows before appending newly converted one-row children. This
preserves row multiplicity across repeated rewrite passes.

Add a focused rewrite unit test and named regression queries with
runner-generated golden output for GROUP BY, DISTINCT, reversed branch
order, and duplicate constant rows.

## Tests

- `SetOperationOutputMappingTest`: 4 tests passed
- `merge_one_row_relation_into_union`: named golden regression passed in
both force-generation and normal comparison modes
- Full FE build with UI disabled: passed
- Checkstyle: passed
@github-actions
github-actions Bot requested a review from yiguolei as a code owner September 18, 2026 08:15
@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?

@hello-stephen

Copy link
Copy Markdown
Contributor

run buildall

@github-actions

Copy link
Copy Markdown
Contributor Author

PR approved by anyone and no changes requested.

@github-actions

Copy link
Copy Markdown
Contributor Author

PR approved by at least one committer and no changes requested.

@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Sep 19, 2026
@yiguolei
yiguolei merged commit 072bed9 into branch-4.1 Sep 19, 2026
34 of 36 checks passed
@yiguolei yiguolei mentioned this pull request Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants