Merge pull request #12541 from BohuTANG/mysql_explain

Fix EXPLAIN format for MySQL client
This commit is contained in:
alexey-milovidov 2020-07-17 14:04:01 +03:00 committed by GitHub
commit 0f6599c9e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 10 deletions

View File

@ -109,16 +109,6 @@ bool ParserQueryWithOutput::parseImpl(Pos & pos, ASTPtr & node, Expected & expec
query_with_output.children.push_back(query_with_output.settings_ast);
}
if (auto * ast = query->as<ASTExplainQuery>())
{
/// Set default format TSV, because output is a single string column.
if (!ast->format)
{
ast->format = std::make_shared<ASTIdentifier>("TSV");
ast->children.push_back(ast->format);
}
}
node = std::move(query);
return true;
}

View File

@ -192,6 +192,36 @@ def test_mysql_replacement_query(mysql_client, server_address):
assert stdout == 'DATABASE()\ndefault\n'
def test_mysql_explain(mysql_client, server_address):
# EXPLAIN SELECT 1
code, (stdout, stderr) = mysql_client.exec_run('''
mysql --protocol tcp -h {host} -P {port} default -u default --password=123
-e "EXPLAIN SELECT 1;"
'''.format(host=server_address, port=server_port), demux=True)
assert code == 0
# EXPLAIN AST SELECT 1
code, (stdout, stderr) = mysql_client.exec_run('''
mysql --protocol tcp -h {host} -P {port} default -u default --password=123
-e "EXPLAIN AST SELECT 1;"
'''.format(host=server_address, port=server_port), demux=True)
assert code == 0
# EXPLAIN PLAN SELECT 1
code, (stdout, stderr) = mysql_client.exec_run('''
mysql --protocol tcp -h {host} -P {port} default -u default --password=123
-e "EXPLAIN PLAN SELECT 1;"
'''.format(host=server_address, port=server_port), demux=True)
assert code == 0
# EXPLAIN PIPELINE graph=1 SELECT 1
code, (stdout, stderr) = mysql_client.exec_run('''
mysql --protocol tcp -h {host} -P {port} default -u default --password=123
-e "EXPLAIN PIPELINE graph=1 SELECT 1;"
'''.format(host=server_address, port=server_port), demux=True)
assert code == 0
def test_mysql_federated(mysql_server, server_address):
# For some reason it occasionally fails without retries.
retries = 100