mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
Updated UnionNode documentation
This commit is contained in:
parent
8610feb06d
commit
852dd8c2bb
@ -74,7 +74,7 @@ public:
|
||||
return is_subquery;
|
||||
}
|
||||
|
||||
/// Set query node is subquery
|
||||
/// Set query node is subquery value
|
||||
void setIsSubquery(bool is_subquery_value)
|
||||
{
|
||||
is_subquery = is_subquery_value;
|
||||
|
@ -16,10 +16,6 @@ namespace DB
|
||||
/** Table node represents table in query tree.
|
||||
* Example: SELECT a FROM test_table.
|
||||
* test_table - is identifier, that during query analysis pass must be resolved into table node.
|
||||
*
|
||||
* During construction table node:
|
||||
* 1. Lock storage for share. Later lock can be moved out of node using `moveTableLock` method.
|
||||
* 2. Take storage snapshot.
|
||||
*/
|
||||
class TableNode;
|
||||
using TableNodePtr = std::shared_ptr<TableNode>;
|
||||
|
@ -41,10 +41,12 @@ UnionNode::UnionNode()
|
||||
NamesAndTypes UnionNode::computeProjectionColumns() const
|
||||
{
|
||||
std::vector<NamesAndTypes> projections;
|
||||
const auto & query_nodes = getQueries().getNodes();
|
||||
|
||||
NamesAndTypes query_node_projection;
|
||||
|
||||
const auto & query_nodes = getQueries().getNodes();
|
||||
projections.reserve(query_nodes.size());
|
||||
|
||||
for (const auto & query_node : query_nodes)
|
||||
{
|
||||
if (auto * query_node_typed = query_node->as<QueryNode>())
|
||||
@ -234,7 +236,7 @@ ASTPtr UnionNode::toASTImpl() const
|
||||
|
||||
if (union_mode != SelectUnionMode::UNION_DEFAULT &&
|
||||
union_mode != SelectUnionMode::EXCEPT_DEFAULT &&
|
||||
union_mode != SelectUnionMode::EXCEPT_DEFAULT)
|
||||
union_mode != SelectUnionMode::INTERSECT_DEFAULT)
|
||||
select_with_union_query->is_normalized = true;
|
||||
|
||||
select_with_union_query->list_of_modes = union_modes;
|
||||
|
@ -19,6 +19,15 @@ namespace ErrorCodes
|
||||
}
|
||||
|
||||
/** Union node represents union of queries in query tree.
|
||||
*
|
||||
* Example: (SELECT id FROM test_table) UNION ALL (SELECT id FROM test_table_2);
|
||||
* Example: (SELECT id FROM test_table) UNION DISTINCT (SELECT id FROM test_table_2);
|
||||
* Example: (SELECT id FROM test_table) EXCEPT ALL (SELECT id FROM test_table_2);
|
||||
* Example: (SELECT id FROM test_table) EXCEPT DISTINCT (SELECT id FROM test_table_2);
|
||||
* Example: (SELECT id FROM test_table) INTERSECT ALL (SELECT id FROM test_table_2);
|
||||
* Example: (SELECT id FROM test_table) INTERSECT DISTINCT (SELECT id FROM test_table_2);
|
||||
*
|
||||
* During query analysis pass union node queries must be resolved.
|
||||
*/
|
||||
class UnionNode;
|
||||
using UnionNodePtr = std::shared_ptr<UnionNode>;
|
||||
@ -28,77 +37,91 @@ class UnionNode final : public IQueryTreeNode
|
||||
public:
|
||||
explicit UnionNode();
|
||||
|
||||
/// Returns true if union node is subquery, false otherwise
|
||||
bool isSubquery() const
|
||||
{
|
||||
return is_subquery;
|
||||
}
|
||||
|
||||
/// Set union node is subquery value
|
||||
void setIsSubquery(bool is_subquery_value)
|
||||
{
|
||||
is_subquery = is_subquery_value;
|
||||
}
|
||||
|
||||
/// Returns true if union node is CTE, false otherwise
|
||||
bool isCTE() const
|
||||
{
|
||||
return is_cte;
|
||||
}
|
||||
|
||||
/// Set union node is CTE
|
||||
void setIsCTE(bool is_cte_value)
|
||||
{
|
||||
is_cte = is_cte_value;
|
||||
}
|
||||
|
||||
/// Get union node CTE name
|
||||
const std::string & getCTEName() const
|
||||
{
|
||||
return cte_name;
|
||||
}
|
||||
|
||||
/// Set union node CTE name
|
||||
void setCTEName(std::string cte_name_value)
|
||||
{
|
||||
cte_name = std::move(cte_name_value);
|
||||
}
|
||||
|
||||
/// Get union mode
|
||||
SelectUnionMode getUnionMode() const
|
||||
{
|
||||
return union_mode;
|
||||
}
|
||||
|
||||
/// Set union mode value
|
||||
void setUnionMode(SelectUnionMode union_mode_value)
|
||||
{
|
||||
union_mode = union_mode_value;
|
||||
}
|
||||
|
||||
/// Get union modes
|
||||
const SelectUnionModes & getUnionModes() const
|
||||
{
|
||||
return union_modes;
|
||||
}
|
||||
|
||||
/// Set union modes value
|
||||
void setUnionModes(const SelectUnionModes & union_modes_value)
|
||||
{
|
||||
union_modes = union_modes_value;
|
||||
union_modes_set = SelectUnionModesSet(union_modes.begin(), union_modes.end());
|
||||
}
|
||||
|
||||
const QueryTreeNodePtr & getQueriesNode() const
|
||||
{
|
||||
return children[queries_child_index];
|
||||
}
|
||||
|
||||
QueryTreeNodePtr & getQueriesNode()
|
||||
{
|
||||
return children[queries_child_index];
|
||||
}
|
||||
|
||||
/// Get union node queries
|
||||
const ListNode & getQueries() const
|
||||
{
|
||||
return children[queries_child_index]->as<const ListNode &>();
|
||||
}
|
||||
|
||||
/// Get union node queries
|
||||
ListNode & getQueries()
|
||||
{
|
||||
return children[queries_child_index]->as<ListNode &>();
|
||||
}
|
||||
|
||||
/// Get union node queries node
|
||||
const QueryTreeNodePtr & getQueriesNode() const
|
||||
{
|
||||
return children[queries_child_index];
|
||||
}
|
||||
|
||||
/// Get union node queries node
|
||||
QueryTreeNodePtr & getQueriesNode()
|
||||
{
|
||||
return children[queries_child_index];
|
||||
}
|
||||
|
||||
/// Return true if union node has table expression modifiers, false otherwise
|
||||
bool hasTableExpressionModifiers() const
|
||||
{
|
||||
@ -117,8 +140,7 @@ public:
|
||||
table_expression_modifiers = std::move(table_expression_modifiers_value);
|
||||
}
|
||||
|
||||
|
||||
/// Compute union projection
|
||||
/// Compute union node projection columns
|
||||
NamesAndTypes computeProjectionColumns() const;
|
||||
|
||||
QueryTreeNodeType getNodeType() const override
|
||||
|
Loading…
Reference in New Issue
Block a user