44This module provides filtering capabilities for result sets returned by different backends.
55"""
66
7+ from __future__ import annotations
8+
79import logging
810from typing import (
911 List ,
1012 Optional ,
1113 Any ,
1214 Callable ,
1315 cast ,
16+ TYPE_CHECKING ,
1417)
1518
16- from databricks . sql . backend . sea . backend import SeaDatabricksClient
17- from databricks .sql .backend . types import ExecuteResponse
19+ if TYPE_CHECKING :
20+ from databricks .sql .result_set import SeaResultSet
1821
19- from databricks .sql .result_set import ResultSet , SeaResultSet
22+ from databricks .sql .backend . types import ExecuteResponse
2023
2124logger = logging .getLogger (__name__ )
2225
@@ -62,11 +65,11 @@ def _filter_sea_result_set(
6265 )
6366
6467 # Create a new ResultData object with filtered data
65-
6668 from databricks .sql .backend .sea .models .base import ResultData
6769
6870 result_data = ResultData (data = filtered_rows , external_links = None )
6971
72+ from databricks .sql .backend .sea .backend import SeaDatabricksClient
7073 from databricks .sql .result_set import SeaResultSet
7174
7275 # Create a new SeaResultSet with the filtered data
@@ -83,11 +86,11 @@ def _filter_sea_result_set(
8386
8487 @staticmethod
8588 def filter_by_column_values (
86- result_set : ResultSet ,
89+ result_set : SeaResultSet ,
8790 column_index : int ,
8891 allowed_values : List [str ],
8992 case_sensitive : bool = False ,
90- ) -> ResultSet :
93+ ) -> SeaResultSet :
9194 """
9295 Filter a result set by values in a specific column.
9396
@@ -105,34 +108,24 @@ def filter_by_column_values(
105108 if not case_sensitive :
106109 allowed_values = [v .upper () for v in allowed_values ]
107110
108- # Determine the type of result set and apply appropriate filtering
109- from databricks .sql .result_set import SeaResultSet
110-
111- if isinstance (result_set , SeaResultSet ):
112- return ResultSetFilter ._filter_sea_result_set (
113- result_set ,
114- lambda row : (
115- len (row ) > column_index
116- and isinstance (row [column_index ], str )
117- and (
118- row [column_index ].upper ()
119- if not case_sensitive
120- else row [column_index ]
121- )
122- in allowed_values
123- ),
124- )
125-
126- # For other result set types, return the original (should be handled by specific implementations)
127- logger .warning (
128- f"Filtering not implemented for result set type: { type (result_set ).__name__ } "
111+ return ResultSetFilter ._filter_sea_result_set (
112+ result_set ,
113+ lambda row : (
114+ len (row ) > column_index
115+ and isinstance (row [column_index ], str )
116+ and (
117+ row [column_index ].upper ()
118+ if not case_sensitive
119+ else row [column_index ]
120+ )
121+ in allowed_values
122+ ),
129123 )
130- return result_set
131124
132125 @staticmethod
133126 def filter_tables_by_type (
134- result_set : ResultSet , table_types : Optional [List [str ]] = None
135- ) -> ResultSet :
127+ result_set : SeaResultSet , table_types : Optional [List [str ]] = None
128+ ) -> SeaResultSet :
136129 """
137130 Filter a result set of tables by the specified table types.
138131
0 commit comments