Uh oh!
There was an error while loading. Please reload this page.
[fix](fe) Fix view columns losing colUniqueId in lazy materialization - #62533
Conversation
hello-stephen
commented
Apr 15, 2026
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
englefly
commented
Apr 15, 2026
run buildall |
hello-stephen
commented
Apr 15, 2026
FE Regression Coverage ReportIncrement line coverage |
### What problem does this PR solve? Issue Number: None Related PR: None Problem Summary: Fix alias slot metadata propagation so MySQL protocol keeps the one-level view column name instead of falling back to the base-table original column name. ### Release note None ### Check List (For Author) - Test: FE unit test - Unit Test: ./run-fe-ut.sh --run org.apache.doris.nereids.trees.expressions.ExpressionTest - Behavior changed: Yes (restores expected MySQL metadata for view columns) - Does this need documentation: No Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
englefly
commented
Apr 16, 2026
run buildall |
hello-stephen
commented
Apr 16, 2026
FE Regression Coverage ReportIncrement line coverage |
englefly
commented
Apr 16, 2026
run cloud_p0 |
hello-stephen
commented
Apr 16, 2026
FE Regression Coverage ReportIncrement line coverage |
englefly
commented
Apr 17, 2026
/review |
There was a problem hiding this comment.
Requesting changes because the PR only fixes one of the two MySQL metadata paths.
Finding
Alias.toSlot()now preservesoneLevelColumn, which fixes the normal result-set metadata path that goes throughNereidsPlanner->FieldInfo. But server-side prepared statements still go throughPrepareCommand.run()->StmtExecutor.planPrepareStatementSlots()->PrepareCommandPlanner(ANALYZED_PLAN) ->StmtExecutor.sendStmtPrepareOK()(fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/PrepareCommand.java:129-139,fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java:1699-1713,fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java:1986-1993). That path still serializesoriginalTable/originalColumnand ignores theoneLevel*metadata that normal queries use infe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java:656-676, souseServerPrepStmts=truestill exposes base-table metadata for view columns.
Critical checkpoints
- Goal of the task: Partially accomplished. The lazy-materialization fix looks correct, and the normal result-set metadata path looks fixed. The view-metadata goal is still unmet for
COM_STMT_PREPARE. - Is the change small and focused: Yes.
- Concurrency: Not involved.
- Lifecycle/static initialization: Not involved.
- Configuration: No new config.
- Compatibility/storage format: No compatibility or storage-format change.
- Parallel code paths: Not fully handled. The prepared-statement metadata path was not updated.
- Special conditional checks: No new risky conditionals.
- Test coverage: Incomplete. The new lazy-materialization regression is good, but there is no
useServerPrepStmts=trueregression for view metadata. - Observability: Not applicable.
- Transaction/persistence/data writes: Not involved.
- FE-BE variable passing: Not applicable for this change.
- Performance: Neutral.
- Other issues: None beyond the blocking prepared-statement path.
Uh oh!
There was an error while loading. Please reload this page.
PR approved by at least one committer and no changes requested. |
prepare stmt的bug不在这个pr的修改范畴,如果有bug,另外开pr fix
Uh oh!
There was an error while loading. Please reload this page.
…#62533) ### What problem does this PR solve? When querying columns through a view with TopN + lazy materialization, SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly replaced originalColumn with the view's Column object (which has uniqueId=-1). This caused colUniqueId=-1 in the physical plan, making BE unable to find the column during the two-phase read (lazy materialize) fetch, resulting in "returned block with row count 0 not match request row id count" error. The fix preserves the original base table Column (which carries the correct uniqueId) instead of overwriting it with the view's Column.
…#62533) ### What problem does this PR solve? When querying columns through a view with TopN + lazy materialization, SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly replaced originalColumn with the view's Column object (which has uniqueId=-1). This caused colUniqueId=-1 in the physical plan, making BE unable to find the column during the two-phase read (lazy materialize) fetch, resulting in "returned block with row count 0 not match request row id count" error. The fix preserves the original base table Column (which carries the correct uniqueId) instead of overwriting it with the view's Column.
…apache#62533) ### What problem does this PR solve? When querying columns through a view with TopN + lazy materialization, SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly replaced originalColumn with the view's Column object (which has uniqueId=-1). This caused colUniqueId=-1 in the physical plan, making BE unable to find the column during the two-phase read (lazy materialize) fetch, resulting in "returned block with row count 0 not match request row id count" error. The fix preserves the original base table Column (which carries the correct uniqueId) instead of overwriting it with the view's Column.
What problem does this PR solve?
close#62598
When querying columns through a view with TopN + lazy materialization,
SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly replaced
originalColumn with the view's Column object (which has uniqueId=-1).
This caused colUniqueId=-1 in the physical plan, making BE unable to find
the column during the two-phase read (lazy materialize) fetch, resulting in
"returned block with row count 0 not match request row id count" error.
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
Release note
None
Check List (For Author)
Test
Behavior changed:
Does this need documentation?
Check List (For Reviewer who merge this PR)