11import logging
2- from collections .abc import Callable , Iterable , Iterator
2+ from collections .abc import Callable , Iterable
33from typing import TypeVar
44
55from sqlglot import parse
@@ -19,8 +19,8 @@ class SqlExpression:
1919 def __init__ (self , expression : Expression ):
2020 self ._expression = expression
2121
22- def collect_table_infos (self , required_catalog : str , session_state : CurrentSessionState ) -> Iterable [UsedTable ]:
23- for table in self ._expression . find_all (Table ):
22+ def collect_used_tables (self , required_catalog : str , session_state : CurrentSessionState ) -> Iterable [UsedTable ]:
23+ for table in self .find_all (Table ):
2424 info = self ._collect_table_info (table , required_catalog , session_state )
2525 if info :
2626 yield info
@@ -62,8 +62,12 @@ def _collect_table_info(
6262 is_write = isinstance (self ._expression , (Create , Update , Delete )),
6363 )
6464
65- def find_all (self , klass : type [E ]) -> Iterator [E ]:
66- return self ._expression .find_all (klass )
65+ def find_all (self , klass : type [E ]) -> Iterable [E ]:
66+ try :
67+ return self ._expression .find_all (klass )
68+ except SqlglotError as e :
69+ logger .warning (f"Failed to find all { klass } in expression: { self ._expression } " , exc_info = e )
70+ return []
6771
6872
6973class SqlParser :
@@ -77,5 +81,4 @@ def walk_expressions(cls, sql_code: str, callback: Callable[[SqlExpression], Ite
7781 continue
7882 yield from callback (SqlExpression (expression ))
7983 except SqlglotError as e :
80- logger .debug (f"Failed to parse SQL: { sql_code } " , exc_info = e )
81- raise e
84+ logger .warning (f"Failed to parse SQL: { sql_code } " , exc_info = e )
0 commit comments