mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-03 13:02:00 +00:00
Fix bug when default column reference non materialized column
This commit is contained in:
parent
ccf94f5a76
commit
d91380cd71
@ -53,6 +53,7 @@ void addDefaultRequiredExpressionsRecursively(
|
||||
NameSet required_columns_names = columns_context.requiredColumns();
|
||||
|
||||
auto expr = makeASTFunction("CAST", column_default_expr, std::make_shared<ASTLiteral>(columns.get(required_column_name).type->getName()));
|
||||
|
||||
if (is_column_in_query && convert_null_to_default)
|
||||
expr = makeASTFunction("ifNull", std::make_shared<ASTIdentifier>(required_column_name), std::move(expr));
|
||||
default_expr_list_accum->children.emplace_back(setAlias(expr, required_column_name));
|
||||
@ -62,6 +63,15 @@ void addDefaultRequiredExpressionsRecursively(
|
||||
for (const auto & next_required_column_name : required_columns_names)
|
||||
addDefaultRequiredExpressionsRecursively(block, next_required_column_name, required_column_type, columns, default_expr_list_accum, added_columns, null_as_default);
|
||||
}
|
||||
else
|
||||
{
|
||||
/// This column is required, but doesn't have default expression, so lets use "default default"
|
||||
auto column = columns.get(required_column_name);
|
||||
auto default_value = column.type->getDefault();
|
||||
auto default_ast = std::make_shared<ASTLiteral>(default_value);
|
||||
default_expr_list_accum->children.emplace_back(setAlias(default_ast, required_column_name));
|
||||
added_columns.emplace(required_column_name);
|
||||
}
|
||||
}
|
||||
|
||||
ASTPtr defaultRequiredExpressions(const Block & block, const NamesAndTypesList & required_columns, const ColumnsDescription & columns, bool null_as_default)
|
||||
|
@ -0,0 +1 @@
|
||||
1
|
@ -0,0 +1,17 @@
|
||||
DROP TABLE IF EXISTS test;
|
||||
|
||||
CREATE TABLE test (col Int8) ENGINE=MergeTree ORDER BY tuple()
|
||||
SETTINGS vertical_merge_algorithm_min_rows_to_activate=1,
|
||||
vertical_merge_algorithm_min_columns_to_activate=1,
|
||||
min_bytes_for_wide_part = 0;
|
||||
|
||||
|
||||
INSERT INTO test VALUES (1);
|
||||
ALTER TABLE test ADD COLUMN s1 String;
|
||||
ALTER TABLE test ADD COLUMN s2 String DEFAULT s1;
|
||||
|
||||
OPTIMIZE TABLE test FINAL;
|
||||
|
||||
SELECT * FROM test;
|
||||
|
||||
DROP TABLE IF EXISTS test;
|
Loading…
Reference in New Issue
Block a user