Merge pull request #60810 from Algunenano/compression_clone

Add missing clone calls related to compression
This commit is contained in:
Raúl Marín 2024-03-06 12:01:39 +01:00 committed by GitHub
commit 7989e9dc70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 33 additions and 5 deletions

View File

@ -59,11 +59,13 @@ public:
if (database) { res->database = database->clone(); res->children.push_back(res->database); } if (database) { res->database = database->clone(); res->children.push_back(res->database); }
if (table) { res->table = table->clone(); res->children.push_back(res->table); } if (table) { res->table = table->clone(); res->children.push_back(res->table); }
if (columns) { res->columns = columns->clone(); res->children.push_back(res->columns); } if (columns) { res->columns = columns->clone(); res->children.push_back(res->columns); }
if (select) { res->select = select->clone(); res->children.push_back(res->select); }
if (watch) { res->watch = watch->clone(); res->children.push_back(res->watch); }
if (table_function) { res->table_function = table_function->clone(); res->children.push_back(res->table_function); } if (table_function) { res->table_function = table_function->clone(); res->children.push_back(res->table_function); }
if (partition_by) { res->partition_by = partition_by->clone(); res->children.push_back(res->partition_by); } if (partition_by) { res->partition_by = partition_by->clone(); res->children.push_back(res->partition_by); }
if (settings_ast) { res->settings_ast = settings_ast->clone(); res->children.push_back(res->settings_ast); } if (settings_ast) { res->settings_ast = settings_ast->clone(); res->children.push_back(res->settings_ast); }
if (select) { res->select = select->clone(); res->children.push_back(res->select); }
if (watch) { res->watch = watch->clone(); res->children.push_back(res->watch); }
if (infile) { res->infile = infile->clone(); res->children.push_back(res->infile); }
if (compression) { res->compression = compression->clone(); res->children.push_back(res->compression); }
return res; return res;
} }

View File

@ -23,6 +23,16 @@ void ASTQueryWithOutput::cloneOutputOptions(ASTQueryWithOutput & cloned) const
cloned.settings_ast = settings_ast->clone(); cloned.settings_ast = settings_ast->clone();
cloned.children.push_back(cloned.settings_ast); cloned.children.push_back(cloned.settings_ast);
} }
if (compression)
{
cloned.compression = compression->clone();
cloned.children.push_back(cloned.compression);
}
if (compression_level)
{
cloned.compression_level = compression_level->clone();
cloned.children.push_back(cloned.compression_level);
}
} }
void ASTQueryWithOutput::formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const void ASTQueryWithOutput::formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const
@ -64,9 +74,23 @@ bool ASTQueryWithOutput::resetOutputASTIfExist(IAST & ast)
/// FIXME: try to prettify this cast using `as<>()` /// FIXME: try to prettify this cast using `as<>()`
if (auto * ast_with_output = dynamic_cast<ASTQueryWithOutput *>(&ast)) if (auto * ast_with_output = dynamic_cast<ASTQueryWithOutput *>(&ast))
{ {
ast_with_output->format.reset(); auto remove_if_exists = [&](ASTPtr & p)
ast_with_output->out_file.reset(); {
ast_with_output->settings_ast.reset(); if (p)
{
if (auto * it = std::find(ast_with_output->children.begin(), ast_with_output->children.end(), p);
it != ast_with_output->children.end())
ast_with_output->children.erase(it);
p.reset();
}
};
remove_if_exists(ast_with_output->out_file);
remove_if_exists(ast_with_output->format);
remove_if_exists(ast_with_output->settings_ast);
remove_if_exists(ast_with_output->compression);
remove_if_exists(ast_with_output->compression_level);
return true; return true;
} }

View File

@ -136,6 +136,7 @@ bool ParserQueryWithOutput::parseImpl(Pos & pos, ASTPtr & node, Expected & expec
ParserStringLiteral compression; ParserStringLiteral compression;
if (!compression.parse(pos, query_with_output.compression, expected)) if (!compression.parse(pos, query_with_output.compression, expected))
return false; return false;
query_with_output.children.push_back(query_with_output.compression);
ParserKeyword s_compression_level("LEVEL"); ParserKeyword s_compression_level("LEVEL");
if (s_compression_level.ignore(pos, expected)) if (s_compression_level.ignore(pos, expected))
@ -143,6 +144,7 @@ bool ParserQueryWithOutput::parseImpl(Pos & pos, ASTPtr & node, Expected & expec
ParserNumber compression_level; ParserNumber compression_level;
if (!compression_level.parse(pos, query_with_output.compression_level, expected)) if (!compression_level.parse(pos, query_with_output.compression_level, expected))
return false; return false;
query_with_output.children.push_back(query_with_output.compression_level);
} }
} }