From ce70e528e083ddce8a6d2418a0a3b459939e02c9 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Fri, 25 Dec 2015 04:37:17 +0300 Subject: [PATCH] dbms: fixed error with max_subquery_depth and GLOBAL subqueries [#METR-19569]. --- dbms/src/Interpreters/ExpressionAnalyzer.cpp | 2 +- .../queries/0_stateless/00293_max_subquery_depth.reference | 3 +++ dbms/tests/queries/0_stateless/00293_max_subquery_depth.sql | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 dbms/tests/queries/0_stateless/00293_max_subquery_depth.reference create mode 100644 dbms/tests/queries/0_stateless/00293_max_subquery_depth.sql diff --git a/dbms/src/Interpreters/ExpressionAnalyzer.cpp b/dbms/src/Interpreters/ExpressionAnalyzer.cpp index d4a23103d83..f4bcff6f234 100644 --- a/dbms/src/Interpreters/ExpressionAnalyzer.cpp +++ b/dbms/src/Interpreters/ExpressionAnalyzer.cpp @@ -333,7 +333,7 @@ void ExpressionAnalyzer::addExternalStorage(ASTPtr & subquery_or_table_name) external_table_name = "_data" + toString(external_table_id); } - SharedPtr interpreter = interpretSubquery(subquery_or_table_name, context, subquery_depth + 1, {}); + SharedPtr interpreter = interpretSubquery(subquery_or_table_name, context, subquery_depth, {}); Block sample = interpreter->getSampleBlock(); NamesAndTypesListPtr columns = new NamesAndTypesList(sample.getColumnsList()); diff --git a/dbms/tests/queries/0_stateless/00293_max_subquery_depth.reference b/dbms/tests/queries/0_stateless/00293_max_subquery_depth.reference new file mode 100644 index 00000000000..33280629d45 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00293_max_subquery_depth.reference @@ -0,0 +1,3 @@ +1 +1 +2 diff --git a/dbms/tests/queries/0_stateless/00293_max_subquery_depth.sql b/dbms/tests/queries/0_stateless/00293_max_subquery_depth.sql new file mode 100644 index 00000000000..7cc04a8650e --- /dev/null +++ b/dbms/tests/queries/0_stateless/00293_max_subquery_depth.sql @@ -0,0 +1,4 @@ +SET max_subquery_depth = 3; + +SELECT 1 FROM remote('127.0.0.{1,2}', system.one) WHERE 1 GLOBAL IN (SELECT 1 FROM remote('127.0.0.{1,2}', system.one) WHERE 1 GLOBAL IN (SELECT 1 FROM remote('127.0.0.{1,2}', system.one) WHERE 1 GLOBAL IN (SELECT 1 FROM remote('127.0.0.{1,2}', system.one)))); +SELECT 2 FROM system.one WHERE 1 IN (SELECT 1 FROM system.one WHERE 1 IN (SELECT 1 FROM system.one WHERE 1 IN (SELECT 1 FROM system.one)));