Skip to content

Commit efbe495

Browse files
authored
refactor: split up test to make it easier to override (#105)
## What's Changed Make it easier to override just a part of this catalog test.
1 parent fa0ddff commit efbe495

2 files changed

Lines changed: 163 additions & 51 deletions

File tree

adbc_drivers_validation/tests/connection.py

Lines changed: 93 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -255,36 +255,13 @@ def test_get_objects_schema(
255255
]
256256
assert schemas == []
257257

258-
def test_get_objects_table(
259-
self, conn: adbc_driver_manager.dbapi.Connection, driver: model.DriverQuirks
258+
def test_get_objects_table_not_exist(
259+
self,
260+
conn: adbc_driver_manager.dbapi.Connection,
261+
driver: model.DriverQuirks,
260262
) -> None:
261-
table_name = "getobjectstest"
262-
schema = pyarrow.schema(
263-
[
264-
("ints", pyarrow.int32()),
265-
("strs", pyarrow.string()),
266-
]
267-
)
268-
data = pyarrow.Table.from_pydict(
269-
{
270-
"ints": [1, None, 42],
271-
"strs": [None, "foo", "spam"],
272-
},
273-
schema=schema,
274-
)
275-
table_id = (
276-
driver.features.current_catalog,
277-
driver.features.current_schema,
278-
table_name,
279-
)
280-
with conn.cursor() as cursor:
281-
try:
282-
cursor.execute(driver.drop_table(table_name=table_name))
283-
except adbc_driver_manager.Error as e:
284-
# Some databases have no way to do DROP IF EXISTS
285-
if not driver.is_table_not_found(table_name=None, error=e):
286-
raise
287-
263+
# N.B. table tests are split up so we can more easily override/disable
264+
# parts of it
288265
objects = conn.adbc_get_objects(depth="tables").read_all().to_pylist()
289266
tables = [
290267
(obj["catalog_name"], schema["db_schema_name"], table["table_name"])
@@ -295,10 +272,20 @@ def test_get_objects_table(
295272
for catalog, schema, table in tables:
296273
assert table != ""
297274
assert list(sorted(set(tables))) == list(sorted(tables))
275+
table_id = (
276+
driver.features.current_catalog,
277+
driver.features.current_schema,
278+
"getobjectstest2",
279+
)
298280
assert table_id not in tables
299281

300-
with conn.cursor() as cursor:
301-
cursor.adbc_ingest(table_name, data)
282+
def test_get_objects_table_present(
283+
self,
284+
conn: adbc_driver_manager.dbapi.Connection,
285+
driver: model.DriverQuirks,
286+
get_objects_table,
287+
) -> None:
288+
table_id = get_objects_table
302289

303290
objects = conn.adbc_get_objects(depth="tables").read_all().to_pylist()
304291
tables = [
@@ -310,6 +297,13 @@ def test_get_objects_table(
310297
assert list(sorted(set(tables))) == list(sorted(tables))
311298
assert table_id in tables
312299

300+
def test_get_objects_table_invalid_catalog(
301+
self,
302+
conn: adbc_driver_manager.dbapi.Connection,
303+
driver: model.DriverQuirks,
304+
get_objects_table,
305+
) -> None:
306+
table_id = get_objects_table
313307
objects = (
314308
conn.adbc_get_objects(
315309
depth="tables", catalog_filter="thiscatalogdoesnotexist"
@@ -326,6 +320,13 @@ def test_get_objects_table(
326320
assert list(sorted(set(tables))) == list(sorted(tables))
327321
assert table_id not in tables
328322

323+
def test_get_objects_table_invalid_schema(
324+
self,
325+
conn: adbc_driver_manager.dbapi.Connection,
326+
driver: model.DriverQuirks,
327+
get_objects_table,
328+
) -> None:
329+
table_id = get_objects_table
329330
objects = (
330331
conn.adbc_get_objects(
331332
depth="tables", db_schema_filter="thiscatalogdoesnotexist"
@@ -342,6 +343,13 @@ def test_get_objects_table(
342343
assert list(sorted(set(tables))) == list(sorted(tables))
343344
assert table_id not in tables
344345

346+
def test_get_objects_table_invalid_table(
347+
self,
348+
conn: adbc_driver_manager.dbapi.Connection,
349+
driver: model.DriverQuirks,
350+
get_objects_table,
351+
) -> None:
352+
table_id = get_objects_table
345353
objects = (
346354
conn.adbc_get_objects(
347355
depth="tables", table_name_filter="thiscatalogdoesnotexist"
@@ -358,8 +366,15 @@ def test_get_objects_table(
358366
assert list(sorted(set(tables))) == list(sorted(tables))
359367
assert table_id not in tables
360368

369+
def test_get_objects_table_exact_table(
370+
self,
371+
conn: adbc_driver_manager.dbapi.Connection,
372+
driver: model.DriverQuirks,
373+
get_objects_table,
374+
) -> None:
375+
table_id = get_objects_table
361376
objects = (
362-
conn.adbc_get_objects(depth="tables", table_name_filter=table_name)
377+
conn.adbc_get_objects(depth="tables", table_name_filter=table_id[2])
363378
.read_all()
364379
.to_pylist()
365380
)
@@ -634,6 +649,52 @@ def test_get_objects_column_xdbc(
634649
elif field == "xdbc_is_nullable":
635650
assert column[field] == "YES"
636651

652+
@pytest.fixture(scope="class")
653+
def get_objects_table(
654+
self,
655+
driver: model.DriverQuirks,
656+
conn: adbc_driver_manager.dbapi.Connection,
657+
):
658+
with conn.cursor() as cursor:
659+
table_name = "getobjectstest"
660+
schema = pyarrow.schema(
661+
[
662+
("ints", pyarrow.int32()),
663+
("strs", pyarrow.string()),
664+
]
665+
)
666+
data = pyarrow.Table.from_pydict(
667+
{
668+
"ints": [1, None, 42],
669+
"strs": [None, "foo", "spam"],
670+
},
671+
schema=schema,
672+
)
673+
table_id = (
674+
driver.features.current_catalog,
675+
driver.features.current_schema,
676+
table_name,
677+
)
678+
with conn.cursor() as cursor:
679+
try:
680+
cursor.execute(driver.drop_table(table_name=table_name))
681+
except adbc_driver_manager.Error as e:
682+
# Some databases have no way to do DROP IF EXISTS
683+
if not driver.is_table_not_found(table_name=None, error=e):
684+
raise
685+
686+
cursor.adbc_ingest(table_name, data)
687+
688+
yield table_id
689+
690+
with conn.cursor() as cursor:
691+
try:
692+
cursor.execute(driver.drop_table(table_name=table_name))
693+
except adbc_driver_manager.Error as e:
694+
# Some databases have no way to do DROP IF EXISTS
695+
if not driver.is_table_not_found(table_name=None, error=e):
696+
raise
697+
637698
@pytest.fixture(scope="class")
638699
def get_objects_constraints(
639700
self,

adbc_drivers_validation/tests/ingest.py

Lines changed: 70 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,13 @@ def test_create(
107107
data = subquery.input()
108108

109109
with conn.cursor() as cursor:
110-
cursor.execute(driver.drop_table(table_name=table_name))
110+
try:
111+
cursor.execute(driver.drop_table(table_name=table_name))
112+
except adbc_driver_manager.Error as e:
113+
# Some databases have no way to do DROP IF EXISTS
114+
if not driver.is_table_not_found(table_name=table_name, error=e):
115+
raise
116+
111117
with setup_statement(query, cursor):
112118
cursor.adbc_ingest(table_name, data, mode="create")
113119

@@ -146,7 +152,12 @@ def test_append(
146152
)
147153

148154
with conn.cursor() as cursor:
149-
cursor.execute(driver.drop_table(table_name=table_name))
155+
try:
156+
cursor.execute(driver.drop_table(table_name=table_name))
157+
except adbc_driver_manager.Error as e:
158+
# Some databases have no way to do DROP IF EXISTS
159+
if not driver.is_table_not_found(table_name=table_name, error=e):
160+
raise
150161
cursor.adbc_ingest(table_name, data, mode="create")
151162
cursor.adbc_ingest(table_name, data2, mode="append")
152163

@@ -186,7 +197,12 @@ def test_append_fail(
186197
data = subquery.input()
187198

188199
with conn.cursor() as cursor:
189-
cursor.execute(driver.drop_table(table_name=table_name))
200+
try:
201+
cursor.execute(driver.drop_table(table_name=table_name))
202+
except adbc_driver_manager.Error as e:
203+
# Some databases have no way to do DROP IF EXISTS
204+
if not driver.is_table_not_found(table_name=table_name, error=e):
205+
raise
190206
with pytest.raises(adbc_driver_manager.dbapi.Error) as excinfo:
191207
cursor.adbc_ingest(table_name, data, mode="append")
192208

@@ -212,7 +228,12 @@ def test_createappend(
212228
)
213229

214230
with conn.cursor() as cursor:
215-
cursor.execute(driver.drop_table(table_name=table_name))
231+
try:
232+
cursor.execute(driver.drop_table(table_name=table_name))
233+
except adbc_driver_manager.Error as e:
234+
# Some databases have no way to do DROP IF EXISTS
235+
if not driver.is_table_not_found(table_name=table_name, error=e):
236+
raise
216237
cursor.adbc_ingest(table_name, data, mode="create_append")
217238
cursor.adbc_ingest(table_name, data2, mode="create_append")
218239

@@ -252,7 +273,12 @@ def test_replace(
252273
data2 = data.slice(0, 1)
253274

254275
with conn.cursor() as cursor:
255-
cursor.execute(driver.drop_table(table_name=table_name))
276+
try:
277+
cursor.execute(driver.drop_table(table_name=table_name))
278+
except adbc_driver_manager.Error as e:
279+
# Some databases have no way to do DROP IF EXISTS
280+
if not driver.is_table_not_found(table_name=table_name, error=e):
281+
raise
256282
cursor.adbc_ingest(table_name, data, mode="replace")
257283
if driver.name == "bigquery":
258284
# BigQuery rate-limits metadata operations
@@ -284,7 +310,12 @@ def test_replace_noop(
284310
data = subquery.input()
285311

286312
with conn.cursor() as cursor:
287-
cursor.execute(driver.drop_table(table_name=table_name))
313+
try:
314+
cursor.execute(driver.drop_table(table_name=table_name))
315+
except adbc_driver_manager.Error as e:
316+
# Some databases have no way to do DROP IF EXISTS
317+
if not driver.is_table_not_found(table_name=table_name, error=e):
318+
raise
288319
cursor.adbc_ingest(table_name, data, mode="replace")
289320

290321
idx = driver.quote_identifier("idx")
@@ -322,7 +353,12 @@ def test_not_null(
322353
)
323354

324355
with conn.cursor() as cursor:
325-
cursor.execute(driver.drop_table(table_name=table_name))
356+
try:
357+
cursor.execute(driver.drop_table(table_name=table_name))
358+
except adbc_driver_manager.Error as e:
359+
# Some databases have no way to do DROP IF EXISTS
360+
if not driver.is_table_not_found(table_name=table_name, error=e):
361+
raise
326362
cursor.adbc_ingest(table_name, data, mode="create")
327363

328364
objects = (
@@ -398,7 +434,12 @@ def test_temporary(
398434

399435
with conn_factory() as conn:
400436
with conn.cursor() as cursor:
401-
cursor.execute(driver.drop_table(table_name=table_name))
437+
try:
438+
cursor.execute(driver.drop_table(table_name=table_name))
439+
except adbc_driver_manager.Error as e:
440+
# Some databases have no way to do DROP IF EXISTS
441+
if not driver.is_table_not_found(table_name=table_name, error=e):
442+
raise
402443
cursor.adbc_ingest(table_name, data1, temporary=True)
403444
cursor.adbc_ingest(table_name, data2, temporary=False)
404445

@@ -441,12 +482,17 @@ def test_schema(
441482
table_name = "test_ingest_schema"
442483
schema_name = driver.features.secondary_schema
443484
with conn.cursor() as cursor:
444-
cursor.execute(
445-
driver.drop_table(
446-
table_name=table_name,
447-
schema_name=schema_name,
485+
try:
486+
cursor.execute(
487+
driver.drop_table(
488+
table_name=table_name,
489+
schema_name=schema_name,
490+
)
448491
)
449-
)
492+
except adbc_driver_manager.Error as e:
493+
# Some databases have no way to do DROP IF EXISTS
494+
if not driver.is_table_not_found(table_name=table_name, error=e):
495+
raise
450496
cursor.adbc_ingest(
451497
table_name,
452498
data,
@@ -479,13 +525,18 @@ def test_catalog(
479525
schema_name = driver.features.secondary_catalog_schema
480526
catalog_name = driver.features.secondary_catalog
481527
with conn.cursor() as cursor:
482-
cursor.execute(
483-
driver.drop_table(
484-
table_name=table_name,
485-
schema_name=schema_name,
486-
catalog_name=catalog_name,
528+
try:
529+
cursor.execute(
530+
driver.drop_table(
531+
table_name=table_name,
532+
schema_name=schema_name,
533+
catalog_name=catalog_name,
534+
)
487535
)
488-
)
536+
except adbc_driver_manager.Error as e:
537+
# Some databases have no way to do DROP IF EXISTS
538+
if not driver.is_table_not_found(table_name=table_name, error=e):
539+
raise
489540
cursor.adbc_ingest(
490541
table_name,
491542
data,

0 commit comments

Comments
 (0)