Fix msan crash from #22517.

This commit is contained in:
Nikolai Kochetov 2021-07-16 17:17:22 +03:00
parent 6ebc11ff4e
commit 1c1cc22a06
3 changed files with 11 additions and 4 deletions

View File

@ -157,9 +157,12 @@ void ExecuteScalarSubqueriesMatcher::visit(const ASTSubquery & subquery, ASTPtr
if (data.only_analyze || !settings.enable_scalar_subquery_optimization || worthConvertingToLiteral(scalar) if (data.only_analyze || !settings.enable_scalar_subquery_optimization || worthConvertingToLiteral(scalar)
|| !data.getContext()->hasQueryContext()) || !data.getContext()->hasQueryContext())
{ {
auto alias = subquery.alias;
auto prefer_alias_to_column_name = subquery.prefer_alias_to_column_name;
auto lit = std::make_unique<ASTLiteral>((*scalar.safeGetByPosition(0).column)[0]); auto lit = std::make_unique<ASTLiteral>((*scalar.safeGetByPosition(0).column)[0]);
lit->alias = subquery.alias; lit->alias = alias;
lit->prefer_alias_to_column_name = subquery.prefer_alias_to_column_name; lit->prefer_alias_to_column_name = prefer_alias_to_column_name;
ast = addTypeConversionToAST(std::move(lit), scalar.safeGetByPosition(0).type->getName()); ast = addTypeConversionToAST(std::move(lit), scalar.safeGetByPosition(0).type->getName());
/// If only analyze was requested the expression is not suitable for constant folding, disable it. /// If only analyze was requested the expression is not suitable for constant folding, disable it.
@ -167,8 +170,8 @@ void ExecuteScalarSubqueriesMatcher::visit(const ASTSubquery & subquery, ASTPtr
{ {
ast->as<ASTFunction>()->alias.clear(); ast->as<ASTFunction>()->alias.clear();
auto func = makeASTFunction("identity", std::move(ast)); auto func = makeASTFunction("identity", std::move(ast));
func->alias = subquery.alias; func->alias = alias;
func->prefer_alias_to_column_name = subquery.prefer_alias_to_column_name; func->prefer_alias_to_column_name = prefer_alias_to_column_name;
ast = std::move(func); ast = std::move(func);
} }
} }

View File

@ -0,0 +1,3 @@
SELECT a FROM (SELECT ignore((SELECT 1)) AS a, a AS b);
SELECT x FROM (SELECT dummy AS x, plus(ignore(ignore(ignore(ignore('-922337203.6854775808', ignore(NULL)), ArrLen = 256, ignore(100, Arr.C3, ignore(NULL), (SELECT 10.000100135803223, count(*) FROM system.time_zones) > NULL)))), dummy, 65535) AS dummy ORDER BY ignore(-2) ASC, identity(x) DESC NULLS FIRST) FORMAT Null; -- { serverError 47 }