def _visit_sources( cls, select_info_list: List[SelectCrawler], dialect: Dialect, queries: Dict[str, List[SelectCrawler]], ): for select_info in select_info_list: for source in SelectCrawler.crawl(select_info.select_statement, queries, dialect): if isinstance(source, list): cls._visit_sources(source, dialect, queries)
def _visit_sources( cls, select_info_list: List[SelectCrawler], dialect: Dialect, queries: Dict[str, List[SelectCrawler]], ): for select_info in select_info_list: # Process nested SELECTs. for source in SelectCrawler.crawl(select_info.select_statement, queries, dialect): if isinstance(source, list): cls._visit_sources(source, dialect, queries) # Process the query's sources. for alias_info in select_info.select_info.table_aliases: # Does the query read from a CTE? If so, visit the CTE. for target_segment in alias_info.from_expression_element.get_children( "table_expression", "join_clause"): target = target_segment.raw if target in queries: select_info_target = queries.pop(target) if isinstance(select_info_target, list): cls._visit_sources(select_info_target, dialect, queries)