From 2169e8f7f441d11be2a1eb2290f79429f59d13ae Mon Sep 17 00:00:00 2001 From: jianmei zhang Date: Mon, 14 Dec 2020 10:33:51 +0800 Subject: [PATCH 1/3] Fix issue #17160 by adding show settings like '...' --- src/Interpreters/InterpreterShowTablesQuery.cpp | 17 +++++++++++++++++ src/Parsers/ASTShowTablesQuery.cpp | 5 +++++ src/Parsers/ASTShowTablesQuery.h | 1 + src/Parsers/ParserShowTablesQuery.cpp | 14 ++++++++++++++ .../0_stateless/01293_show_settings.reference | 1 + .../queries/0_stateless/01293_show_settings.sql | 1 + 6 files changed, 39 insertions(+) create mode 100644 tests/queries/0_stateless/01293_show_settings.reference create mode 100644 tests/queries/0_stateless/01293_show_settings.sql diff --git a/src/Interpreters/InterpreterShowTablesQuery.cpp b/src/Interpreters/InterpreterShowTablesQuery.cpp index 861fa8c3505..249b0df9732 100644 --- a/src/Interpreters/InterpreterShowTablesQuery.cpp +++ b/src/Interpreters/InterpreterShowTablesQuery.cpp @@ -79,6 +79,23 @@ String InterpreterShowTablesQuery::getRewrittenQuery() return rewritten_query.str(); } + /// SHOW SETTINGS + if (query.m_settings) + { + WriteBufferFromOwnString rewritten_query; + rewritten_query << "SELECT name, type, value FROM system.settings"; + + if (!query.like.empty()) + { + rewritten_query + << " WHERE name " + << (query.case_insensitive_like ? "ILIKE " : "LIKE ") + << DB::quote << query.like; + } + + return rewritten_query.str(); + } + if (query.temporary && !query.from.empty()) throw Exception("The `FROM` and `TEMPORARY` cannot be used together in `SHOW TABLES`", ErrorCodes::SYNTAX_ERROR); diff --git a/src/Parsers/ASTShowTablesQuery.cpp b/src/Parsers/ASTShowTablesQuery.cpp index cd83bae06d9..1d69b13d211 100644 --- a/src/Parsers/ASTShowTablesQuery.cpp +++ b/src/Parsers/ASTShowTablesQuery.cpp @@ -55,6 +55,11 @@ void ASTShowTablesQuery::formatQueryImpl(const FormatSettings & settings, Format settings.ostr << (settings.hilite ? hilite_keyword : "") << "SHOW CLUSTER" << (settings.hilite ? hilite_none : ""); settings.ostr << " " << backQuoteIfNeed(cluster_str); } + else if (m_settings) + { + settings.ostr << (settings.hilite ? hilite_keyword : "") << "SHOW SETTINGS" << (settings.hilite ? hilite_none : ""); + formatLike(settings); + } else { settings.ostr << (settings.hilite ? hilite_keyword : "") << "SHOW " << (temporary ? "TEMPORARY " : "") << diff --git a/src/Parsers/ASTShowTablesQuery.h b/src/Parsers/ASTShowTablesQuery.h index 43976e8a958..deba17f4b9b 100644 --- a/src/Parsers/ASTShowTablesQuery.h +++ b/src/Parsers/ASTShowTablesQuery.h @@ -18,6 +18,7 @@ public: bool clusters{false}; bool cluster{false}; bool dictionaries{false}; + bool m_settings{false}; bool temporary{false}; String cluster_str; diff --git a/src/Parsers/ParserShowTablesQuery.cpp b/src/Parsers/ParserShowTablesQuery.cpp index 4586e10a8a3..7b7fabb749a 100644 --- a/src/Parsers/ParserShowTablesQuery.cpp +++ b/src/Parsers/ParserShowTablesQuery.cpp @@ -24,6 +24,7 @@ bool ParserShowTablesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec ParserKeyword s_clusters("CLUSTERS"); ParserKeyword s_cluster("CLUSTER"); ParserKeyword s_dictionaries("DICTIONARIES"); + ParserKeyword s_settings("SETTINGS"); ParserKeyword s_from("FROM"); ParserKeyword s_in("IN"); ParserKeyword s_not("NOT"); @@ -99,6 +100,19 @@ bool ParserShowTablesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec query->cluster_str = std::move(cluster_str); } + else if (s_settings.ignore(pos)) + { + query->m_settings = true; + + if (bool insensitive = s_ilike.ignore(pos, expected); insensitive || s_like.ignore(pos, expected)) + { + if (insensitive) + query->case_insensitive_like = true; + + if (!like_p.parse(pos, like, expected)) + return false; + } + } else { if (s_temporary.ignore(pos)) diff --git a/tests/queries/0_stateless/01293_show_settings.reference b/tests/queries/0_stateless/01293_show_settings.reference new file mode 100644 index 00000000000..54b271ef2ba --- /dev/null +++ b/tests/queries/0_stateless/01293_show_settings.reference @@ -0,0 +1 @@ +send_timeout Seconds 300 diff --git a/tests/queries/0_stateless/01293_show_settings.sql b/tests/queries/0_stateless/01293_show_settings.sql new file mode 100644 index 00000000000..b38cb54385b --- /dev/null +++ b/tests/queries/0_stateless/01293_show_settings.sql @@ -0,0 +1 @@ +show settings like 'send_timeout'; From 508b50d121fc03c26fa9898fadc16ebb9b76f10d Mon Sep 17 00:00:00 2001 From: jianmei zhang Date: Tue, 15 Dec 2020 14:44:39 +0800 Subject: [PATCH 2/3] support SHOW CHANGED SETTINGS query and add test cases, also do code changes to compile SHOW SETTINGS PROFILES. --- src/Interpreters/InterpreterShowTablesQuery.cpp | 5 ++++- src/Parsers/ASTShowTablesQuery.cpp | 3 ++- src/Parsers/ASTShowTablesQuery.h | 1 + src/Parsers/ParserShowTablesQuery.cpp | 15 +++++++++++++-- .../0_stateless/01293_show_settings.reference | 11 +++++++++++ tests/queries/0_stateless/01293_show_settings.sql | 4 ++++ 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/Interpreters/InterpreterShowTablesQuery.cpp b/src/Interpreters/InterpreterShowTablesQuery.cpp index 249b0df9732..49c55fa3a93 100644 --- a/src/Interpreters/InterpreterShowTablesQuery.cpp +++ b/src/Interpreters/InterpreterShowTablesQuery.cpp @@ -85,10 +85,13 @@ String InterpreterShowTablesQuery::getRewrittenQuery() WriteBufferFromOwnString rewritten_query; rewritten_query << "SELECT name, type, value FROM system.settings"; + if (query.changed) + rewritten_query << " WHERE changed = 1"; + if (!query.like.empty()) { rewritten_query - << " WHERE name " + << (query.changed ? " AND name " : " WHERE name ") << (query.case_insensitive_like ? "ILIKE " : "LIKE ") << DB::quote << query.like; } diff --git a/src/Parsers/ASTShowTablesQuery.cpp b/src/Parsers/ASTShowTablesQuery.cpp index 1d69b13d211..61d68c4a273 100644 --- a/src/Parsers/ASTShowTablesQuery.cpp +++ b/src/Parsers/ASTShowTablesQuery.cpp @@ -57,7 +57,8 @@ void ASTShowTablesQuery::formatQueryImpl(const FormatSettings & settings, Format } else if (m_settings) { - settings.ostr << (settings.hilite ? hilite_keyword : "") << "SHOW SETTINGS" << (settings.hilite ? hilite_none : ""); + settings.ostr << (settings.hilite ? hilite_keyword : "") << "SHOW " << (changed ? "CHANGED " : "") << "SETTINGS" << + (settings.hilite ? hilite_none : ""); formatLike(settings); } else diff --git a/src/Parsers/ASTShowTablesQuery.h b/src/Parsers/ASTShowTablesQuery.h index deba17f4b9b..57383dff66f 100644 --- a/src/Parsers/ASTShowTablesQuery.h +++ b/src/Parsers/ASTShowTablesQuery.h @@ -19,6 +19,7 @@ public: bool cluster{false}; bool dictionaries{false}; bool m_settings{false}; + bool changed{false}; bool temporary{false}; String cluster_str; diff --git a/src/Parsers/ParserShowTablesQuery.cpp b/src/Parsers/ParserShowTablesQuery.cpp index 7b7fabb749a..6022a31034a 100644 --- a/src/Parsers/ParserShowTablesQuery.cpp +++ b/src/Parsers/ParserShowTablesQuery.cpp @@ -25,6 +25,7 @@ bool ParserShowTablesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec ParserKeyword s_cluster("CLUSTER"); ParserKeyword s_dictionaries("DICTIONARIES"); ParserKeyword s_settings("SETTINGS"); + ParserKeyword s_changed("CHANGED"); ParserKeyword s_from("FROM"); ParserKeyword s_in("IN"); ParserKeyword s_not("NOT"); @@ -100,11 +101,19 @@ bool ParserShowTablesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec query->cluster_str = std::move(cluster_str); } - else if (s_settings.ignore(pos)) + else if (bool changed = s_changed.ignore(pos); changed || s_settings.ignore(pos)) { query->m_settings = true; - if (bool insensitive = s_ilike.ignore(pos, expected); insensitive || s_like.ignore(pos, expected)) + if (changed) + { + query->changed = true; + if (!s_settings.ignore(pos, expected)) + return false; + } + + /// Not expected due to "SHOW SETTINGS PROFILES" + if (bool insensitive = s_ilike.ignore(pos); insensitive || s_like.ignore(pos)) { if (insensitive) query->case_insensitive_like = true; @@ -112,6 +121,8 @@ bool ParserShowTablesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec if (!like_p.parse(pos, like, expected)) return false; } + else + return false; } else { diff --git a/tests/queries/0_stateless/01293_show_settings.reference b/tests/queries/0_stateless/01293_show_settings.reference index 54b271ef2ba..e44badc8c45 100644 --- a/tests/queries/0_stateless/01293_show_settings.reference +++ b/tests/queries/0_stateless/01293_show_settings.reference @@ -1 +1,12 @@ send_timeout Seconds 300 +insert_in_memory_parts_timeout Milliseconds 600000 +distributed_aggregation_memory_efficient Bool 0 +aggregation_memory_efficient_merge_threads UInt64 0 +memory_tracker_fault_probability Float 0 +max_memory_usage UInt64 10000000000 +max_memory_usage_for_user UInt64 0 +max_untracked_memory UInt64 4194304 +memory_profiler_step UInt64 0 +memory_profiler_sample_probability Float 0 +max_memory_usage_for_all_queries UInt64 0 +max_memory_usage UInt64 10000000000 diff --git a/tests/queries/0_stateless/01293_show_settings.sql b/tests/queries/0_stateless/01293_show_settings.sql index b38cb54385b..3dfd72bf7a7 100644 --- a/tests/queries/0_stateless/01293_show_settings.sql +++ b/tests/queries/0_stateless/01293_show_settings.sql @@ -1 +1,5 @@ show settings like 'send_timeout'; +SHOW SETTINGS ILIKE '%MEMORY%'; +SHOW CHANGED SETTINGS ILIKE '%MEMORY%'; + + From b56523fd94db0cdcde4809f247424d53fcfd2f1f Mon Sep 17 00:00:00 2001 From: jianmei zhang Date: Tue, 15 Dec 2020 17:56:54 +0800 Subject: [PATCH 3/3] Update test case to avoid the latest added parameter --- .../0_stateless/01293_show_settings.reference | 13 +++---------- tests/queries/0_stateless/01293_show_settings.sql | 4 +--- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/tests/queries/0_stateless/01293_show_settings.reference b/tests/queries/0_stateless/01293_show_settings.reference index e44badc8c45..feebc9e473d 100644 --- a/tests/queries/0_stateless/01293_show_settings.reference +++ b/tests/queries/0_stateless/01293_show_settings.reference @@ -1,12 +1,5 @@ send_timeout Seconds 300 -insert_in_memory_parts_timeout Milliseconds 600000 -distributed_aggregation_memory_efficient Bool 0 -aggregation_memory_efficient_merge_threads UInt64 0 -memory_tracker_fault_probability Float 0 -max_memory_usage UInt64 10000000000 -max_memory_usage_for_user UInt64 0 -max_untracked_memory UInt64 4194304 -memory_profiler_step UInt64 0 -memory_profiler_sample_probability Float 0 -max_memory_usage_for_all_queries UInt64 0 +connect_timeout Seconds 10 +connect_timeout_with_failover_ms Milliseconds 50 +connect_timeout_with_failover_secure_ms Milliseconds 100 max_memory_usage UInt64 10000000000 diff --git a/tests/queries/0_stateless/01293_show_settings.sql b/tests/queries/0_stateless/01293_show_settings.sql index 3dfd72bf7a7..08f00ed201c 100644 --- a/tests/queries/0_stateless/01293_show_settings.sql +++ b/tests/queries/0_stateless/01293_show_settings.sql @@ -1,5 +1,3 @@ show settings like 'send_timeout'; -SHOW SETTINGS ILIKE '%MEMORY%'; +SHOW SETTINGS ILIKE '%CONNECT_timeout%'; SHOW CHANGED SETTINGS ILIKE '%MEMORY%'; - -