From a0222c0479f302898cb1f7114826d14e7e9e042a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Mar=C3=ADn?= Date: Thu, 1 Feb 2024 11:46:55 +0100 Subject: [PATCH] Fix problem detected by UBSAN --- src/Interpreters/GlobalSubqueriesVisitor.h | 4 +++- .../queries/0_stateless/02972_parallel_replicas_cte.reference | 1 + tests/queries/0_stateless/02972_parallel_replicas_cte.sql | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Interpreters/GlobalSubqueriesVisitor.h b/src/Interpreters/GlobalSubqueriesVisitor.h index 08fbd748e48..5f029395df9 100644 --- a/src/Interpreters/GlobalSubqueriesVisitor.h +++ b/src/Interpreters/GlobalSubqueriesVisitor.h @@ -267,8 +267,10 @@ private: /// We don't support WITH cte as (subquery) Select table JOIN cte because we don't do conversion in AST bool is_subquery = false; if (const auto * ast_table_expr = table_elem.table_expression->as()) - is_subquery = ast_table_expr->subquery->as() != nullptr + { + is_subquery = ast_table_expr->subquery && ast_table_expr->subquery->as() != nullptr && ast_table_expr->subquery->as()->cte_name.empty(); + } else if (table_elem.table_expression->as()) is_subquery = true; diff --git a/tests/queries/0_stateless/02972_parallel_replicas_cte.reference b/tests/queries/0_stateless/02972_parallel_replicas_cte.reference index fe21e3cec22..449fe3d34e3 100644 --- a/tests/queries/0_stateless/02972_parallel_replicas_cte.reference +++ b/tests/queries/0_stateless/02972_parallel_replicas_cte.reference @@ -1,2 +1,3 @@ 990000 990000 +10 diff --git a/tests/queries/0_stateless/02972_parallel_replicas_cte.sql b/tests/queries/0_stateless/02972_parallel_replicas_cte.sql index d65374a3e02..c39ad172a27 100644 --- a/tests/queries/0_stateless/02972_parallel_replicas_cte.sql +++ b/tests/queries/0_stateless/02972_parallel_replicas_cte.sql @@ -19,5 +19,9 @@ WITH filtered_groups AS (SELECT a FROM pr_1 WHERE a >= 10000) SELECT count() FROM pr_2 INNER JOIN filtered_groups ON pr_2.a = filtered_groups.a SETTINGS allow_experimental_analyzer = 0, allow_experimental_parallel_reading_from_replicas = 2, parallel_replicas_for_non_replicated_merge_tree = 1, cluster_for_parallel_replicas = 'test_cluster_two_shards', max_parallel_replicas = 3; -- { serverError SUPPORT_IS_DISABLED } +-- Sanitizer +SELECT count() FROM pr_2 JOIN numbers(10) as pr_1 ON pr_2.a = pr_1.number +SETTINGS allow_experimental_parallel_reading_from_replicas = 1, parallel_replicas_for_non_replicated_merge_tree = 1, cluster_for_parallel_replicas = 'test_cluster_two_shards', max_parallel_replicas = 3; + DROP TABLE IF EXISTS pr_1; DROP TABLE IF EXISTS pr_2;