Skip to content

Commit dec5114

Browse files
committed
Fix LOGICAL_ERROR for subquery projections with tuple subcolumns
1 parent 7c3665f commit dec5114

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/Planner/PlannerJoinTree.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,13 @@ void prepareBuildQueryPlanForTableExpression(const QueryTreeNodePtr & table_expr
457457
else if (query_node || union_node)
458458
{
459459
const auto & projection_columns = query_node ? query_node->getProjectionColumns() : union_node->computeProjectionColumns();
460-
NamesAndTypesList projection_columns_list(projection_columns.begin(), projection_columns.end());
461-
additional_column_to_read = ExpressionActions::getSmallestColumn(projection_columns_list);
460+
if (projection_columns.empty())
461+
throw Exception(ErrorCodes::LOGICAL_ERROR, "Expected at least one projection column for query or union. Actual {}",
462+
table_expression->formatASTForErrorMessage());
463+
464+
/// pick the first projection column
465+
/// ExpressionActions::getSmallestColumn is not used because it skips subcolumns (`tup.s` from Tuple)
466+
additional_column_to_read = projection_columns.front();
462467
}
463468
else
464469
{
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
100
2+
100
3+
100
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
SET enable_analyzer = 1;
2+
DROP TABLE IF EXISTS t_count_distinct_tuple;
3+
4+
CREATE TABLE t_count_distinct_tuple (tup Tuple(s String, u UInt64)) ENGINE = MergeTree ORDER BY tuple();
5+
INSERT INTO t_count_distinct_tuple SELECT (toString(number), number) FROM numbers(100);
6+
7+
SELECT countDistinct(tup.s) FROM t_count_distinct_tuple SETTINGS count_distinct_optimization = 1;
8+
SELECT countDistinct(tup.u) FROM t_count_distinct_tuple SETTINGS count_distinct_optimization = 1;
9+
SELECT DISTINCT countDistinct(tup.s) FROM t_count_distinct_tuple SETTINGS count_distinct_optimization = 1;
10+
11+
DROP TABLE t_count_distinct_tuple;

0 commit comments

Comments
 (0)