MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / buildTableExpressionsStackImpl

Function buildTableExpressionsStackImpl

src/Analyzer/Utils.cpp:748–797  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

746{
747
748void buildTableExpressionsStackImpl(const QueryTreeNodePtr & join_tree_node, QueryTreeNodes & result)
749{
750 auto node_type = join_tree_node->getNodeType();
751
752 switch (node_type)
753 {
754 case QueryTreeNodeType::TABLE:
755 [[fallthrough]];
756 case QueryTreeNodeType::QUERY:
757 [[fallthrough]];
758 case QueryTreeNodeType::UNION:
759 [[fallthrough]];
760 case QueryTreeNodeType::TABLE_FUNCTION:
761 {
762 result.push_back(join_tree_node);
763 break;
764 }
765 case QueryTreeNodeType::ARRAY_JOIN:
766 {
767 auto & array_join_node = join_tree_node->as<ArrayJoinNode &>();
768 buildTableExpressionsStackImpl(array_join_node.getTableExpression(), result);
769 result.push_back(join_tree_node);
770 break;
771 }
772 case QueryTreeNodeType::CROSS_JOIN:
773 {
774 auto & cross_join_node = join_tree_node->as<CrossJoinNode &>();
775
776 for (const auto & expr : cross_join_node.getTableExpressions())
777 buildTableExpressionsStackImpl(expr, result);
778
779 result.push_back(join_tree_node);
780 break;
781 }
782 case QueryTreeNodeType::JOIN:
783 {
784 auto & join_node = join_tree_node->as<JoinNode &>();
785 buildTableExpressionsStackImpl(join_node.getLeftTableExpression(), result);
786 buildTableExpressionsStackImpl(join_node.getRightTableExpression(), result);
787 result.push_back(join_tree_node);
788 break;
789 }
790 default:
791 {
792 throw Exception(ErrorCodes::LOGICAL_ERROR,
793 "Unexpected node type for table expression. Expected table, table function, query, union, join or array join. Actual {}",
794 join_tree_node->getNodeTypeName());
795 }
796 }
797}
798
799}
800

Callers 1

Calls 4

getNodeTypeNameMethod · 0.80
ExceptionClass · 0.50
getNodeTypeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected