mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Updated tests
This commit is contained in:
parent
fed146e198
commit
1844673aa8
@ -1222,10 +1222,14 @@ QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromExpressionArguments(cons
|
||||
return {};
|
||||
}
|
||||
|
||||
if (identifier_lookup.isExpressionLookup() && it->second->getNodeType() != QueryTreeNodeType::COLUMN && it->second->getNodeType() != QueryTreeNodeType::CONSTANT
|
||||
&& it->second->getNodeType() != QueryTreeNodeType::FUNCTION && it->second->getNodeType() != QueryTreeNodeType::QUERY)
|
||||
auto node_type = it->second->getNodeType();
|
||||
if (identifier_lookup.isExpressionLookup() && node_type != QueryTreeNodeType::COLUMN && node_type != QueryTreeNodeType::CONSTANT
|
||||
&& node_type != QueryTreeNodeType::FUNCTION && node_type != QueryTreeNodeType::QUERY && node_type != QueryTreeNodeType::UNION)
|
||||
return {};
|
||||
else if (identifier_lookup.isTableLookup() && it->second->getNodeType() != QueryTreeNodeType::TABLE && it->second->getNodeType() != QueryTreeNodeType::QUERY)
|
||||
else if (identifier_lookup.isTableLookup() && node_type != QueryTreeNodeType::TABLE && node_type != QueryTreeNodeType::TABLE_FUNCTION &&
|
||||
node_type != QueryTreeNodeType::QUERY && node_type != QueryTreeNodeType::UNION)
|
||||
return {};
|
||||
else if (identifier_lookup.isFunctionLookup() && node_type != QueryTreeNodeType::LAMBDA)
|
||||
return {};
|
||||
|
||||
if (!resolve_full_identifier && identifier_lookup.identifier.isCompound() && identifier_lookup.isExpressionLookup())
|
||||
@ -1613,6 +1617,7 @@ QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromTableExpression(const Id
|
||||
|
||||
IdentifierLookup column_identifier_lookup {qualified_identifier_with_removed_part, IdentifierLookupContext::EXPRESSION};
|
||||
bool can_bind_identifier_to_table_expression = tryBindIdentifierToTableExpression(column_identifier_lookup, table_expression_to_check, scope);
|
||||
|
||||
if (can_bind_identifier_to_table_expression)
|
||||
{
|
||||
can_remove_qualificator = false;
|
||||
@ -1665,6 +1670,21 @@ QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromTableExpression(const Id
|
||||
QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromJoin(const IdentifierLookup & identifier_lookup, const QueryTreeNodePtr & table_expression_node, IdentifierResolveScope & scope)
|
||||
{
|
||||
const auto & from_join_node = table_expression_node->as<const JoinNode &>();
|
||||
auto left_resolved_identifier = tryResolveIdentifierFromJoinTreeNode(identifier_lookup, from_join_node.getLeftTableExpression(), scope);
|
||||
auto right_resolved_identifier = tryResolveIdentifierFromJoinTreeNode(identifier_lookup, from_join_node.getRightTableExpression(), scope);
|
||||
|
||||
if (!identifier_lookup.isExpressionLookup())
|
||||
{
|
||||
if (left_resolved_identifier && right_resolved_identifier)
|
||||
throw Exception(ErrorCodes::AMBIGUOUS_IDENTIFIER,
|
||||
"JOIN {} ambigious identifier {}. In scope {}",
|
||||
table_expression_node->formatASTForErrorMessage(),
|
||||
identifier_lookup.dump(),
|
||||
scope.scope_node->formatASTForErrorMessage());
|
||||
|
||||
return left_resolved_identifier ? left_resolved_identifier : right_resolved_identifier;
|
||||
}
|
||||
|
||||
bool join_node_in_resolve_process = scope.table_expressions_in_resolve_process.contains(table_expression_node.get());
|
||||
|
||||
std::unordered_map<std::string, ColumnNodePtr> join_using_column_name_to_column_node;
|
||||
@ -1680,9 +1700,6 @@ QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromJoin(const IdentifierLoo
|
||||
}
|
||||
}
|
||||
|
||||
auto left_resolved_identifier = tryResolveIdentifierFromJoinTreeNode(identifier_lookup, from_join_node.getLeftTableExpression(), scope);
|
||||
auto right_resolved_identifier = tryResolveIdentifierFromJoinTreeNode(identifier_lookup, from_join_node.getRightTableExpression(), scope);
|
||||
|
||||
std::optional<JoinTableSide> resolved_side;
|
||||
QueryTreeNodePtr resolved_identifier;
|
||||
|
||||
@ -1720,7 +1737,7 @@ QueryTreeNodePtr QueryAnalyzer::tryResolveIdentifierFromJoin(const IdentifierLoo
|
||||
throw Exception(ErrorCodes::AMBIGUOUS_IDENTIFIER,
|
||||
"JOIN {} ambigious identifier {}. In scope {}",
|
||||
table_expression_node->formatASTForErrorMessage(),
|
||||
identifier_lookup.identifier.getFullName(),
|
||||
identifier_lookup.dump(),
|
||||
scope.scope_node->formatASTForErrorMessage());
|
||||
}
|
||||
}
|
||||
@ -3559,10 +3576,11 @@ String QueryAnalyzer::calculateProjectionNodeDisplayName(QueryTreeNodePtr & node
|
||||
|
||||
if (resolved_identifier_result.resolved_identifier && resolved_identifier_result.isResolvedFromJoinTree())
|
||||
{
|
||||
projection_name_from_scope = try_to_get_projection_name_from_scope(node);
|
||||
projection_name_from_scope = try_to_get_projection_name_from_scope(resolved_identifier_result.resolved_identifier);
|
||||
|
||||
if (!projection_name_from_scope.empty())
|
||||
return projection_name_from_scope;
|
||||
|
||||
if (auto * column_node = resolved_identifier_result.resolved_identifier->as<ColumnNode>())
|
||||
return column_node->getColumnName();
|
||||
}
|
||||
@ -3822,7 +3840,7 @@ void QueryAnalyzer::initializeQueryJoinTreeNode(QueryTreeNodePtr & join_tree_nod
|
||||
if (table_expression_modifiers.has_value())
|
||||
resolved_identifier_table_node->setTableExpressionModifiers(*table_expression_modifiers);
|
||||
}
|
||||
else if (auto * resolved_identifier_table_function_node = resolved_identifier->as<TableFunctionNode>();)
|
||||
else if (auto * resolved_identifier_table_function_node = resolved_identifier->as<TableFunctionNode>())
|
||||
{
|
||||
if (table_expression_modifiers.has_value())
|
||||
resolved_identifier_table_function_node->setTableExpressionModifiers(*table_expression_modifiers);
|
||||
|
@ -201,14 +201,14 @@ QueryTreeNodes extractTableExpressions(const QueryTreeNodePtr & join_tree_node)
|
||||
case QueryTreeNodeType::ARRAY_JOIN:
|
||||
{
|
||||
auto & array_join_node = node_to_process->as<ArrayJoinNode &>();
|
||||
nodes_to_process.push_back(array_join_node.getTableExpression());
|
||||
nodes_to_process.push_front(array_join_node.getTableExpression());
|
||||
break;
|
||||
}
|
||||
case QueryTreeNodeType::JOIN:
|
||||
{
|
||||
auto & join_node = node_to_process->as<JoinNode &>();
|
||||
nodes_to_process.push_back(join_node.getLeftTableExpression());
|
||||
nodes_to_process.push_back(join_node.getRightTableExpression());
|
||||
nodes_to_process.push_front(join_node.getRightTableExpression());
|
||||
nodes_to_process.push_front(join_node.getLeftTableExpression());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -253,5 +253,226 @@ arrayMap(a, [1, 2, 3]) Array(Nullable(UInt8))
|
||||
arrayMap(lambda(tuple(x), _subquery_3), [1, 2, 3]) Array(Nullable(UInt8))
|
||||
SELECT '--';
|
||||
--
|
||||
SELECT (SELECT 1 AS a, 2 AS b) AS c, c.a, c.b;
|
||||
(1,2) 1 2
|
||||
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 'Joins';
|
||||
Joins
|
||||
DESCRIBE (SELECT * FROM test_table_join_1, test_table_join_2);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * APPLY toString FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * APPLY x -> toString(x) FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.*, test_table_join_2.* FROM test_table_join_1 INNER JOIN test_table_join_2 ON test_table_join_1.id = test_table_join_2.id);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT t1.*, t2.* FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY x -> toString(x), test_table_join_2.* APPLY x -> toString(x) FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.id, test_table_join_1.value, test_table_join_1.value_join_1, test_table_join_2.id, test_table_join_2.value, test_table_join_2.value_join_2
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT t1.id, t1.value, t1.value_join_1, t2.id, t2.value, t2.value_join_2 FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
SELECT 'Multiple JOINS';
|
||||
Multiple JOINS
|
||||
DESCRIBE (SELECT * FROM test_table_join_1, test_table_join_2, test_table_join_3);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
test_table_join_3.id UInt64
|
||||
test_table_join_3.value String
|
||||
value_join_3 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
t3.id UInt64
|
||||
t3.value String
|
||||
value_join_3 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * APPLY toString FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
toString(t3.id) String
|
||||
toString(t3.value) String
|
||||
toString(value_join_3) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT * APPLY x -> toString(x) FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
toString(t3.id) String
|
||||
toString(t3.value) String
|
||||
toString(value_join_3) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.*, test_table_join_2.*, test_table_join_3.*
|
||||
FROM test_table_join_1 INNER JOIN test_table_join_2 ON test_table_join_1.id = test_table_join_2.id
|
||||
INNER JOIN test_table_join_3 ON test_table_join_2.id = test_table_join_3.id);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
test_table_join_3.id UInt64
|
||||
test_table_join_3.value String
|
||||
value_join_3 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT t1.*, t2.*, t3.*
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
t3.id UInt64
|
||||
t3.value String
|
||||
value_join_3 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString, test_table_join_3.* APPLY toString
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
toString(t3.id) String
|
||||
toString(t3.value) String
|
||||
toString(value_join_3) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY x -> toString(x), test_table_join_2.* APPLY x -> toString(x), test_table_join_3.* APPLY x -> toString(x)
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
toString(t1.id) String
|
||||
toString(t1.value) String
|
||||
toString(value_join_1) String
|
||||
toString(t2.id) String
|
||||
toString(t2.value) String
|
||||
toString(value_join_2) String
|
||||
toString(t3.id) String
|
||||
toString(t3.value) String
|
||||
toString(value_join_3) String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT test_table_join_1.id, test_table_join_1.value, test_table_join_1.value_join_1, test_table_join_2.id, test_table_join_2.value, test_table_join_2.value_join_2,
|
||||
test_table_join_3.id, test_table_join_3.value, test_table_join_3.value_join_3
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
test_table_join_1.id UInt64
|
||||
test_table_join_1.value String
|
||||
value_join_1 String
|
||||
test_table_join_2.id UInt64
|
||||
test_table_join_2.value String
|
||||
value_join_2 String
|
||||
test_table_join_3.id UInt64
|
||||
test_table_join_3.value String
|
||||
value_join_3 String
|
||||
SELECT '--';
|
||||
--
|
||||
DESCRIBE (SELECT t1.id, t1.value, t1.value_join_1, t2.id, t2.value, t2.value_join_2, t3.id, t3.value, t3.value_join_3
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
t1.id UInt64
|
||||
t1.value String
|
||||
value_join_1 String
|
||||
t2.id UInt64
|
||||
t2.value String
|
||||
value_join_2 String
|
||||
t3.id UInt64
|
||||
t3.value String
|
||||
value_join_3 String
|
||||
|
@ -18,6 +18,36 @@ CREATE TABLE test_table_compound
|
||||
|
||||
INSERT INTO test_table_compound VALUES (0, tuple(0, 'Value'));
|
||||
|
||||
DROP TABLE IF EXISTS test_table_join_1;
|
||||
CREATE TABLE test_table_join_1
|
||||
(
|
||||
id UInt64,
|
||||
value String,
|
||||
value_join_1 String
|
||||
) ENGINE=TinyLog;
|
||||
|
||||
INSERT INTO test_table_join_1 VALUES (0, 'Join_1_Value', 'Join_1_Value');
|
||||
|
||||
DROP TABLE IF EXISTS test_table_join_2;
|
||||
CREATE TABLE test_table_join_2
|
||||
(
|
||||
id UInt64,
|
||||
value String,
|
||||
value_join_2 String
|
||||
) ENGINE=TinyLog;
|
||||
|
||||
INSERT INTO test_table_join_2 VALUES (0, 'Join_2_Value', 'Join_2_Value');
|
||||
|
||||
DROP TABLE IF EXISTS test_table_join_3;
|
||||
CREATE TABLE test_table_join_3
|
||||
(
|
||||
id UInt64,
|
||||
value String,
|
||||
value_join_3 String
|
||||
) ENGINE=TinyLog;
|
||||
|
||||
INSERT INTO test_table_join_3 VALUES (0, 'Join_3_Value', 'Join_3_Value');
|
||||
|
||||
-- { echoOn }
|
||||
|
||||
SELECT 'Constants';
|
||||
@ -56,7 +86,6 @@ SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT tuple_value.* APPLY x -> x FROM test_table_compound);
|
||||
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT tuple_value.* APPLY toString FROM test_table_compound);
|
||||
@ -211,9 +240,100 @@ DESCRIBE (SELECT arrayMap(x -> (SELECT 1), [1,2,3]), arrayMap(x -> (SELECT 2) AS
|
||||
|
||||
SELECT '--';
|
||||
|
||||
SELECT (SELECT 1 AS a, 2 AS b) AS c, c.a, c.b;
|
||||
DESCRIBE (SELECT (SELECT 1 AS a, 2 AS b) AS c, c.a, c.b);
|
||||
|
||||
SELECT 'Joins';
|
||||
|
||||
DESCRIBE (SELECT * FROM test_table_join_1, test_table_join_2);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * APPLY toString FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * APPLY x -> toString(x) FROM test_table_join_1 AS t1, test_table_join_2 AS t2);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.*, test_table_join_2.* FROM test_table_join_1 INNER JOIN test_table_join_2 ON test_table_join_1.id = test_table_join_2.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT t1.*, t2.* FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY x -> toString(x), test_table_join_2.* APPLY x -> toString(x) FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.id, test_table_join_1.value, test_table_join_1.value_join_1, test_table_join_2.id, test_table_join_2.value, test_table_join_2.value_join_2
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT t1.id, t1.value, t1.value_join_1, t2.id, t2.value, t2.value_join_2 FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id);
|
||||
|
||||
SELECT 'Multiple JOINS';
|
||||
|
||||
DESCRIBE (SELECT * FROM test_table_join_1, test_table_join_2, test_table_join_3);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * APPLY toString FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT * APPLY x -> toString(x) FROM test_table_join_1 AS t1, test_table_join_2 AS t2, test_table_join_3 AS t3);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.*, test_table_join_2.*, test_table_join_3.*
|
||||
FROM test_table_join_1 INNER JOIN test_table_join_2 ON test_table_join_1.id = test_table_join_2.id
|
||||
INNER JOIN test_table_join_3 ON test_table_join_2.id = test_table_join_3.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT t1.*, t2.*, t3.*
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY toString, test_table_join_2.* APPLY toString, test_table_join_3.* APPLY toString
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.* APPLY x -> toString(x), test_table_join_2.* APPLY x -> toString(x), test_table_join_3.* APPLY x -> toString(x)
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT test_table_join_1.id, test_table_join_1.value, test_table_join_1.value_join_1, test_table_join_2.id, test_table_join_2.value, test_table_join_2.value_join_2,
|
||||
test_table_join_3.id, test_table_join_3.value, test_table_join_3.value_join_3
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
|
||||
SELECT '--';
|
||||
|
||||
DESCRIBE (SELECT t1.id, t1.value, t1.value_join_1, t2.id, t2.value, t2.value_join_2, t3.id, t3.value, t3.value_join_3
|
||||
FROM test_table_join_1 AS t1 INNER JOIN test_table_join_2 AS t2 ON t1.id = t2.id INNER JOIN test_table_join_3 AS t3 ON t2.id = t3.id);
|
||||
|
||||
-- { echoOff }
|
||||
|
||||
DROP TABLE test_table_join_1;
|
||||
DROP TABLE test_table_join_2;
|
||||
DROP TABLE test_table;
|
||||
DROP TABLE test_table_compound;
|
||||
|
Loading…
Reference in New Issue
Block a user