#pragma once #include #include namespace DB { class ASTSelectWithUnionQuery; class ASTSubquery; struct ASTTableExpression; struct ASTArrayJoin; using Aliases = std::unordered_map; /// Visits AST node to collect aliases. class QueryAliasesMatcher { public: struct Data { Aliases & aliases; }; static constexpr const char * label = __FILE__; static std::vector visit(ASTPtr & ast, Data & data); static bool needChildVisit(ASTPtr & node, const ASTPtr & child); private: static std::vector visit(ASTSubquery & subquery, const ASTPtr & ast, Data & data); static std::vector visit(const ASTArrayJoin &, const ASTPtr & ast, Data & data); static void visitOther(const ASTPtr & ast, Data & data); }; /// Visits AST nodes and collect their aliases in one map (with links to source nodes). using QueryAliasesVisitor = InDepthNodeVisitor; }