Merge common virtuals into table specific#100766
Conversation
|
Workflow [PR], commit [44d1d33] Summary: ❌
AI ReviewSummaryThis PR migrates common virtual column handling (notably PR Metadata
Suggested replacement:
Suggested replacement: Missing context
Findings❌ Blockers
💡 Nits
Tests
ClickHouse Rules
Performance & Safety
Final Verdict
|
| if (!needMaterializeCommonVirtualColumns(pipe.getHeader(), storage->getVirtualsPtr(), requested_columns)) | ||
| return pipe; | ||
|
|
||
| auto dag = constructMaterializingCommonVirtualColumnsDAG(pipe.getHeader(), requested_columns, storage); |
There was a problem hiding this comment.
extendWithCommonVirtualColumns(Pipe &&, ...) creates expression as a local variable, then captures it by reference in pipe.addSimpleTransform([&](...) { ... expression ... }).
That lambda is executed after this function returns, so the reference to expression is dangling. This is a lifetime bug and can lead to undefined behavior.
Please capture expression by value instead (for example [expression](const SharedHeader & header) { ... }).
| const auto & our_columns = metadata_snapshot->getColumns(); | ||
| auto dest_columm = dest_columns.tryGetColumnOrSubcolumn(GetColumnsOptions::AllPhysical, column_name); | ||
| return dest_columm && dest_columm->type->equals(*our_columns.getColumnOrSubcolumn(GetColumnsOptions::AllPhysical, column_name).type); | ||
| auto dest_columm = destination_columns.tryGetByName(column_name); |
There was a problem hiding this comment.
Typo: dest_columm should be dest_column for readability and grep-ability.
Changelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes into CHANGELOG.md):
This patch combines
common_virtual_columnsandvirtual_columnsto simplify interfaces and query analysis.