Allow only SELECT queries in EXPLAIN AST used inside subquery

This commit is contained in:
avogar 2024-11-15 14:20:05 +00:00
parent a2d37aba4d
commit c2543d0316
3 changed files with 7 additions and 0 deletions

View File

@ -140,6 +140,9 @@ bool ParserSubquery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
const ASTPtr & explained_ast = explain_query.getExplainedQuery(); const ASTPtr & explained_ast = explain_query.getExplainedQuery();
if (explained_ast) if (explained_ast)
{ {
if (!explained_ast->as<ASTSelectWithUnionQuery>())
throw Exception(ErrorCodes::BAD_ARGUMENTS, "EXPLAIN inside subquery supports only SELECT queries");
auto view_explain = makeASTFunction("viewExplain", auto view_explain = makeASTFunction("viewExplain",
std::make_shared<ASTLiteral>(kind_str), std::make_shared<ASTLiteral>(kind_str),
std::make_shared<ASTLiteral>(settings_str), std::make_shared<ASTLiteral>(settings_str),

View File

@ -0,0 +1,4 @@
SELECT * FROM ( EXPLAIN AST CREATE TABLE test ENGINE=Memory ); -- {clientError BAD_ARGUMENTS}
SELECT * FROM ( EXPLAIN AST CREATE MATERIALIZED VIEW mv (data String) AS SELECT data FROM table ); -- {clientError BAD_ARGUMENTS}
SELECT * FROM ( EXPLAIN AST INSERT INTO TABLE test VALUES); -- {clientError BAD_ARGUMENTS}
SELECT * FROM ( EXPLAIN AST ALTER TABLE test MODIFY COLUMN x UInt32 ); -- {clientError BAD_ARGUMENTS}