diff --git a/src/Parsers/ASTDeleteQuery.cpp b/src/Parsers/ASTDeleteQuery.cpp index ee7dba8dbf7..08b40f65121 100644 --- a/src/Parsers/ASTDeleteQuery.cpp +++ b/src/Parsers/ASTDeleteQuery.cpp @@ -20,6 +20,12 @@ ASTPtr ASTDeleteQuery::clone() const res->children.push_back(res->predicate); } + if (settings_ast) + { + res->settings_ast = settings_ast->clone(); + res->children.push_back(res->settings_ast); + } + cloneTableOptions(*res); return res; } diff --git a/src/Parsers/ParserDeleteQuery.cpp b/src/Parsers/ParserDeleteQuery.cpp index bd06c060ac4..7b8057d227e 100644 --- a/src/Parsers/ParserDeleteQuery.cpp +++ b/src/Parsers/ParserDeleteQuery.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace DB @@ -16,6 +17,7 @@ bool ParserDeleteQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) ParserKeyword s_from("FROM"); ParserKeyword s_where("WHERE"); ParserExpression parser_exp_elem; + ParserKeyword s_settings("SETTINGS"); if (s_delete.ignore(pos, expected)) { @@ -30,6 +32,14 @@ bool ParserDeleteQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) if (!parser_exp_elem.parse(pos, query->predicate, expected)) return false; + + if (s_settings.ignore(pos, expected)) + { + ParserSetQuery parser_settings(true); + + if (!parser_settings.parse(pos, query->settings_ast, expected)) + return false; + } } else return false; @@ -43,6 +53,9 @@ bool ParserDeleteQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) if (query->table) query->children.push_back(query->table); + if (query->settings_ast) + query->children.push_back(query->settings_ast); + return true; } diff --git a/tests/queries/0_stateless/02428_delete_with_settings.reference b/tests/queries/0_stateless/02428_delete_with_settings.reference new file mode 100644 index 00000000000..354b2529b29 --- /dev/null +++ b/tests/queries/0_stateless/02428_delete_with_settings.reference @@ -0,0 +1 @@ +500000 diff --git a/tests/queries/0_stateless/02428_delete_with_settings.sql b/tests/queries/0_stateless/02428_delete_with_settings.sql new file mode 100644 index 00000000000..9dd4fcaf3ac --- /dev/null +++ b/tests/queries/0_stateless/02428_delete_with_settings.sql @@ -0,0 +1,6 @@ +drop table if exists test; +create table test (id Int32, key String) engine=MergeTree() order by tuple(); +insert into test select number, toString(number) from numbers(1000000); +set allow_experimental_lightweight_delete=1; +delete from test where id % 2 = 0 SETTINGS mutations_sync=1; +select count() from test;