mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Fixed tests
This commit is contained in:
parent
eba9607696
commit
7851dfc324
@ -181,7 +181,7 @@ namespace ErrorCodes
|
||||
* TODO: SELECT (compound_expression).*, (compound_expression).COLUMNS are not supported on parser level.
|
||||
* TODO: SELECT a.b.c.*, a.b.c.COLUMNS. Qualified matcher where identifier size is greater than 2 are not supported on parser level.
|
||||
* TODO: Support function identifier resolve from parent query scope, if lambda in parent scope does not capture any columns.
|
||||
* TODO: Support group_by_use_nulls
|
||||
* TODO: Support group_by_use_nulls.
|
||||
* TODO: Scalar subqueries cache.
|
||||
*/
|
||||
|
||||
@ -5022,6 +5022,8 @@ void QueryAnalyzer::resolveQueryJoinTreeNode(QueryTreeNodePtr & join_tree_node,
|
||||
if (join_node.isUsingJoinExpression())
|
||||
{
|
||||
auto & join_using_list = join_node.getJoinExpression()->as<ListNode &>();
|
||||
std::unordered_set<std::string> join_using_identifiers;
|
||||
|
||||
for (auto & join_using_node : join_using_list.getNodes())
|
||||
{
|
||||
auto * identifier_node = join_using_node->as<IdentifierNode>();
|
||||
@ -5030,6 +5032,14 @@ void QueryAnalyzer::resolveQueryJoinTreeNode(QueryTreeNodePtr & join_tree_node,
|
||||
|
||||
const auto & identifier_full_name = identifier_node->getIdentifier().getFullName();
|
||||
|
||||
if (join_using_identifiers.contains(identifier_full_name))
|
||||
throw Exception(ErrorCodes::BAD_ARGUMENTS,
|
||||
"JOIN {} identifier '{}' appears more than once in USING clause",
|
||||
join_node.formatASTForErrorMessage(),
|
||||
identifier_full_name);
|
||||
|
||||
join_using_identifiers.insert(identifier_full_name);
|
||||
|
||||
IdentifierLookup identifier_lookup {identifier_node->getIdentifier(), IdentifierLookupContext::EXPRESSION};
|
||||
auto result_left_table_expression = tryResolveIdentifierFromJoinTreeNode(identifier_lookup, join_node.getLeftTableExpression(), scope);
|
||||
if (!result_left_table_expression)
|
||||
@ -5060,16 +5070,6 @@ void QueryAnalyzer::resolveQueryJoinTreeNode(QueryTreeNodePtr & join_tree_node,
|
||||
|
||||
join_using_node = std::move(join_using_column);
|
||||
}
|
||||
|
||||
for (auto & join_using_node : join_using_list.getNodes())
|
||||
{
|
||||
if (!join_using_node->as<ColumnNode>())
|
||||
throw Exception(ErrorCodes::UNSUPPORTED_METHOD,
|
||||
"JOIN {} USING identifier node must be resolved into column node. Actual {}. In scope {}",
|
||||
join_node.formatASTForErrorMessage(),
|
||||
join_tree_node->formatASTForErrorMessage(),
|
||||
scope.scope_node->formatASTForErrorMessage());
|
||||
}
|
||||
}
|
||||
else if (join_node.getJoinExpression())
|
||||
{
|
||||
@ -5098,10 +5098,7 @@ void QueryAnalyzer::resolveQueryJoinTreeNode(QueryTreeNodePtr & join_tree_node,
|
||||
}
|
||||
|
||||
auto join_tree_node_type = join_tree_node->getNodeType();
|
||||
if (join_tree_node_type == QueryTreeNodeType::QUERY ||
|
||||
join_tree_node_type == QueryTreeNodeType::UNION ||
|
||||
join_tree_node_type == QueryTreeNodeType::TABLE ||
|
||||
join_tree_node_type == QueryTreeNodeType::TABLE_FUNCTION)
|
||||
if (isTableExpressionNodeType(join_tree_node_type))
|
||||
{
|
||||
validateTableExpressionModifiers(join_tree_node, scope);
|
||||
initializeTableExpressionColumns(join_tree_node, scope);
|
||||
@ -5206,7 +5203,6 @@ private:
|
||||
const IdentifierResolveScope & scope;
|
||||
};
|
||||
|
||||
|
||||
/** Resolve query.
|
||||
* This function modifies query node during resolve. It is caller responsibility to clone query node before resolve
|
||||
* if it is needed for later use.
|
||||
|
@ -1,11 +1,11 @@
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION
|
||||
LIST id: 1, nodes: 1
|
||||
CONSTANT id: 2, constant_value: UInt64_1, constant_value_type: UInt8
|
||||
JOIN TREE
|
||||
IDENTIFIER id: 3, identifier: system.one
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION
|
||||
LIST id: 1, nodes: 2
|
||||
IDENTIFIER id: 2, identifier: id
|
||||
@ -13,7 +13,7 @@ QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, i
|
||||
JOIN TREE
|
||||
IDENTIFIER id: 4, identifier: test_table
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION COLUMNS
|
||||
id UInt64
|
||||
value String
|
||||
@ -24,7 +24,7 @@ QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, i
|
||||
JOIN TREE
|
||||
TABLE id: 3, table_name: default.test_table
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION
|
||||
LIST id: 1, nodes: 1
|
||||
FUNCTION id: 2, function_name: arrayMap, function_type: ordinary
|
||||
@ -44,7 +44,7 @@ QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, i
|
||||
JOIN TREE
|
||||
IDENTIFIER id: 12, identifier: test_table
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION COLUMNS
|
||||
arrayMap(lambda(tuple(x), plus(x, 1)), [1, 2, 3]) Array(UInt16)
|
||||
PROJECTION
|
||||
@ -66,7 +66,7 @@ QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, i
|
||||
JOIN TREE
|
||||
TABLE id: 11, table_name: default.test_table
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
WITH
|
||||
LIST id: 1, nodes: 1
|
||||
LAMBDA id: 2, alias: lambda
|
||||
@ -88,7 +88,7 @@ QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, i
|
||||
JOIN TREE
|
||||
IDENTIFIER id: 13, identifier: test_table
|
||||
--
|
||||
QUERY id: 0, is_subquery: 0, is_cte: 0, is_distinct: 0, is_limit_with_ties: 0, is_group_by_with_totals: 0, group_by_type: ordinary
|
||||
QUERY id: 0
|
||||
PROJECTION COLUMNS
|
||||
lambda(id) UInt64
|
||||
PROJECTION
|
||||
|
@ -288,6 +288,52 @@ DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b) AS c, c.a, c.b);
|
||||
c Tuple(a UInt8, b UInt8)
|
||||
c.a UInt8
|
||||
c.b UInt8
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b) AS c, c.*);
|
||||
c Tuple(a UInt8, b UInt8)
|
||||
c.a UInt8
|
||||
c.b UInt8
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT (SELECT 1 UNION DISTINCT SELECT 1), (SELECT 2 UNION DISTINCT SELECT 2), (SELECT 3 UNION DISTINCT SELECT 3) AS a, (SELECT 4 UNION DISTINCT SELECT 4));
|
||||
_subquery_1 Nullable(UInt8)
|
||||
_subquery_2 Nullable(UInt8)
|
||||
a Nullable(UInt8)
|
||||
_subquery_4 Nullable(UInt8)
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT arrayMap(x -> (SELECT 1 UNION DISTINCT SELECT 1), [1,2,3]), arrayMap(x -> (SELECT 2 UNION DISTINCT SELECT 2) AS a, [1, 2, 3]),
|
||||
arrayMap(x -> (SELECT 3 UNION DISTINCT SELECT 3), [1,2,3]));
|
||||
arrayMap(lambda(tuple(x), _subquery_1), [1, 2, 3]) Array(Nullable(UInt8))
|
||||
arrayMap(a, [1, 2, 3]) Array(Nullable(UInt8))
|
||||
arrayMap(lambda(tuple(x), _subquery_3), [1, 2, 3]) Array(Nullable(UInt8))
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b UNION DISTINCT SELECT 1, 2) AS c, c.a, c.b);
|
||||
c Tuple(a UInt8, b UInt8)
|
||||
c.a UInt8
|
||||
c.b UInt8
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b UNION DISTINCT SELECT 1, 2) AS c, c.*);
|
||||
c Tuple(a UInt8, b UInt8)
|
||||
c.a UInt8
|
||||
c.b UInt8
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT (SELECT 1), (SELECT 2 UNION DISTINCT SELECT 2), (SELECT 3) AS a, (SELECT 4 UNION DISTINCT SELECT 4));
|
||||
_subquery_1 Nullable(UInt8)
|
||||
_subquery_2 Nullable(UInt8)
|
||||
a Nullable(UInt8)
|
||||
_subquery_4 Nullable(UInt8)
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT arrayMap(x -> (SELECT 1 UNION DISTINCT SELECT 1), [1,2,3]), arrayMap(x -> (SELECT 2) AS a, [1, 2, 3]),
|
||||
arrayMap(x -> (SELECT 3 UNION DISTINCT SELECT 3), [1,2,3]));
|
||||
arrayMap(lambda(tuple(x), _subquery_1), [1, 2, 3]) Array(Nullable(UInt8))
|
||||
arrayMap(a, [1, 2, 3]) Array(Nullable(UInt8))
|
||||
arrayMap(lambda(tuple(x), _subquery_3), [1, 2, 3]) Array(Nullable(UInt8))
|
||||
SELECT 'Window functions';
|
||||
Window functions
|
||||
DESCRIBE (SELECT count() OVER ());
|
||||
@ -342,7 +388,8 @@ DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DES
|
||||
count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN plus(1, 1) PRECEDING AND plus(2, 2) FOLLOWING) UInt64
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN ((1 + 1) AS frame_offset_begin) PRECEDING AND ((2 + 2) AS frame_offset_end) FOLLOWING) FROM test_table);
|
||||
DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN ((1 + 1) AS frame_offset_begin) PRECEDING AND ((2 + 2) AS frame_offset_end) FOLLOWING)
|
||||
FROM test_table);
|
||||
count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN frame_offset_begin PRECEDING AND frame_offset_end FOLLOWING) UInt64
|
||||
SELECT '--';
|
||||
--
|
||||
@ -354,10 +401,6 @@ DESCRIBE (SELECT count() OVER (ORDER BY toNullable(id) NULLS LAST) FROM test_tab
|
||||
count() OVER (ORDER BY toNullable(id) ASC NULLS LAST) UInt64
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT count() OVER (ORDER BY value COLLATE 'EN') FROM test_table);
|
||||
count() OVER (ORDER BY value ASC COLLATE en) UInt64
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT count() OVER (ORDER BY id WITH FILL FROM 1 TO 5 STEP 1) FROM test_table);
|
||||
count() OVER (ORDER BY id ASC WITH FILL FROM 1 TO 5 STEP 1) UInt64
|
||||
SELECT '--';
|
||||
|
@ -268,6 +268,36 @@ SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b) AS c, c.a, c.b);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b) AS c, c.*);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1 UNION DISTINCT SELECT 1), (SELECT 2 UNION DISTINCT SELECT 2), (SELECT 3 UNION DISTINCT SELECT 3) AS a, (SELECT 4 UNION DISTINCT SELECT 4));
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT arrayMap(x -> (SELECT 1 UNION DISTINCT SELECT 1), [1,2,3]), arrayMap(x -> (SELECT 2 UNION DISTINCT SELECT 2) AS a, [1, 2, 3]),
|
||||
arrayMap(x -> (SELECT 3 UNION DISTINCT SELECT 3), [1,2,3]));
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b UNION DISTINCT SELECT 1, 2) AS c, c.a, c.b);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b UNION DISTINCT SELECT 1, 2) AS c, c.*);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT (SELECT 1), (SELECT 2 UNION DISTINCT SELECT 2), (SELECT 3) AS a, (SELECT 4 UNION DISTINCT SELECT 4));
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT arrayMap(x -> (SELECT 1 UNION DISTINCT SELECT 1), [1,2,3]), arrayMap(x -> (SELECT 2) AS a, [1, 2, 3]),
|
||||
arrayMap(x -> (SELECT 3 UNION DISTINCT SELECT 3), [1,2,3]));
|
||||
|
||||
SELECT 'Window functions';
|
||||
|
||||
DESCRIBE (SELECT count() OVER ());
|
||||
@ -322,7 +352,8 @@ DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DES
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN ((1 + 1) AS frame_offset_begin) PRECEDING AND ((2 + 2) AS frame_offset_end) FOLLOWING) FROM test_table);
|
||||
DESCRIBE (SELECT count() OVER (PARTITION BY id, value ORDER BY id ASC, value DESC ROWS BETWEEN ((1 + 1) AS frame_offset_begin) PRECEDING AND ((2 + 2) AS frame_offset_end) FOLLOWING)
|
||||
FROM test_table);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
@ -334,10 +365,6 @@ DESCRIBE (SELECT count() OVER (ORDER BY toNullable(id) NULLS LAST) FROM test_tab
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT count() OVER (ORDER BY value COLLATE 'EN') FROM test_table);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT count() OVER (ORDER BY id WITH FILL FROM 1 TO 5 STEP 1) FROM test_table);
|
||||
|
||||
SELECT '--';
|
||||
|
@ -3,6 +3,7 @@
|
||||
SELECT * FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 USING (id) ORDER BY id, t1.value;
|
||||
0 Join_1_Value_0 Join_2_Value_0
|
||||
1 Join_1_Value_1 Join_2_Value_1
|
||||
SELECT * FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 USING (id, id, id) ORDER BY id, t1.value; -- { serverError 36 }
|
||||
SELECT '--';
|
||||
--
|
||||
SELECT * FROM test_table_join_1 AS t1 LEFT JOIN test_table_join_2 AS t2 USING (id) ORDER BY id, t1.value;
|
||||
|
@ -37,6 +37,8 @@ INSERT INTO test_table_join_3 VALUES (4, 'Join_3_Value_4');
|
||||
|
||||
SELECT * FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 USING (id) ORDER BY id, t1.value;
|
||||
|
||||
SELECT * FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 USING (id, id, id) ORDER BY id, t1.value; -- { serverError 36 }
|
||||
|
||||
SELECT '--';
|
||||
|
||||
SELECT * FROM test_table_join_1 AS t1 LEFT JOIN test_table_join_2 AS t2 USING (id) ORDER BY id, t1.value;
|
||||
|
Loading…
Reference in New Issue
Block a user