Skip to content

Commit d8bdd4a

Browse files
committed
convert column table to arrow if arrow present
1 parent d45910d commit d8bdd4a

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/databricks/sql/client.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1415,9 +1415,22 @@ def fetchall_arrow(self) -> "pyarrow.Table":
14151415
while not self.has_been_closed_server_side and self.has_more_rows:
14161416
self._fill_results_buffer()
14171417
partial_results = self.results.remaining_rows()
1418-
results = pyarrow.concat_tables([results, partial_results])
1418+
if isinstance(results, ColumnTable) and isinstance(
1419+
partial_results, ColumnTable
1420+
):
1421+
results = self.merge_columnar(results, partial_results)
1422+
else:
1423+
results = pyarrow.concat_tables([results, partial_results])
14191424
self._next_row_index += partial_results.num_rows
14201425

1426+
# If PyArrow is installed and we have a ColumnTable result,
1427+
# convert it to a PyArrow Table for consistency with pre-3.5.0 behavior
1428+
if isinstance(results, ColumnTable) and pyarrow:
1429+
data = {
1430+
name: col
1431+
for name, col in zip(results.column_names, results.column_table)
1432+
}
1433+
return pyarrow.Table.from_pydict(data)
14211434
return results
14221435

14231436
def fetchall_columnar(self):

tests/e2e/test_driver.py

+7
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,13 @@ def test_decimal_not_returned_as_strings_arrow(self):
801801
decimal_type = arrow_df.field(0).type
802802
assert pyarrow.types.is_decimal(decimal_type)
803803

804+
@skipUnless(pysql_supports_arrow(), "arrow test needs arrow support")
805+
def test_catalogs_returns_arrow_table(self):
806+
with self.cursor() as cursor:
807+
cursor.catalogs()
808+
results = cursor.fetchall_arrow()
809+
assert isinstance(results, pyarrow.Table)
810+
804811
def test_close_connection_closes_cursors(self):
805812

806813
from databricks.sql.thrift_api.TCLIService import ttypes

0 commit comments

Comments
 (0)