Пример #1
0
 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)
Пример #2
0
    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)