@@ -429,51 +429,42 @@ def test_connect_url(url):
429
429
)
430
430
431
431
432
+ @pytest .fixture (params = ["duckdb" , "sqlite" ])
433
+ def tmp_db (request , tmp_path ):
434
+ api = request .param
435
+ mod = pytest .importorskip (api )
436
+ db = tmp_path / "test.db"
437
+ mod .connect (str (db )).execute (
438
+ "CREATE TABLE tmp_t AS SELECT 1 AS a"
439
+ ).fetchall ()
440
+ return db
441
+
442
+
432
443
@pytest .mark .backend
433
444
@pytest .mark .parametrize (
434
445
"url" ,
435
446
[
436
447
param (
437
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb " ,
448
+ "duckdb://{} " ,
438
449
marks = [mark .duckdb , not_windows ],
439
450
id = "duckdb_path" ,
440
451
),
441
452
param (
442
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb ?read_only=0" ,
453
+ "duckdb://{} ?read_only=0" ,
443
454
marks = [mark .duckdb , not_windows ],
444
455
id = "duckdb_read_write_int" ,
445
456
),
446
457
param (
447
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb?read_only=1" ,
448
- marks = [mark .duckdb , not_windows ],
449
- id = "duckdb_read_only_int" ,
450
- ),
451
- param (
452
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb?read_only=False" ,
458
+ "duckdb://{}?read_only=False" ,
453
459
marks = [mark .duckdb , not_windows ],
454
460
id = "duckdb_read_write_upper" ,
455
461
),
456
462
param (
457
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb?read_only=True" ,
458
- marks = [mark .duckdb , not_windows ],
459
- id = "duckdb_read_only_upper" ,
460
- ),
461
- param (
462
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb?read_only=false" ,
463
+ "duckdb://{}?read_only=false" ,
463
464
marks = [mark .duckdb , not_windows ],
464
465
id = "duckdb_read_write_lower" ,
465
466
),
466
- param (
467
- "duckdb://ci/ibis-testing-data/ibis_testing.ddb?read_only=true" ,
468
- marks = [mark .duckdb , not_windows ],
469
- id = "duckdb_read_only_lower" ,
470
- ),
471
467
param ("duckdb://" , marks = mark .duckdb , id = "duckdb_memory" ),
472
- param (
473
- "duckdb://:memory:" ,
474
- marks = mark .duckdb ,
475
- id = "duckdb_memory_explicit" ,
476
- ),
477
468
param (
478
469
"duckdb://?read_only=1" ,
479
470
marks = [
@@ -486,10 +477,11 @@ def test_connect_url(url):
486
477
id = "duckdb_memory_read_only" ,
487
478
),
488
479
param (
489
- "sqlite ://ci/ibis-testing-data/ibis_testing.db " ,
490
- marks = mark .sqlite ,
491
- id = "sqlite_path " ,
480
+ "duckdb ://:memory: " ,
481
+ marks = mark .duckdb ,
482
+ id = "duckdb_memory_explicit " ,
492
483
),
484
+ param ("sqlite://{}" , marks = mark .sqlite , id = "sqlite_path" ),
493
485
param ("sqlite://" , marks = mark .sqlite , id = "sqlite_memory" ),
494
486
param (
495
487
"sqlite://:memory:" ,
@@ -498,12 +490,27 @@ def test_connect_url(url):
498
490
),
499
491
],
500
492
)
501
- def test_connect_file_url (url ):
502
- con = ibis .connect (url )
493
+ def test_connect_file_url (url , tmp_db ):
494
+ con = ibis .connect (url . format ( tmp_db ) )
503
495
one = ibis .literal (1 )
504
496
assert con .execute (one ) == 1
505
497
506
498
499
+ @pytest .mark .duckdb
500
+ @pytest .mark .parametrize (
501
+ "read_only" ,
502
+ [
503
+ param ("True" , marks = [not_windows ], id = "duckdb_read_only_upper" ),
504
+ param ("1" , marks = [not_windows ], id = "duckdb_read_only_int" ),
505
+ param ("true" , marks = [not_windows ], id = "duckdb_read_only_lower" ),
506
+ ],
507
+ )
508
+ def test_connect_file_url_read_only (tmp_db , read_only ):
509
+ url = f"duckdb://{ tmp_db } ?read_only={ read_only } "
510
+ con = ibis .connect (url )
511
+ assert "tmp_t" in con .list_tables ()
512
+
513
+
507
514
@not_windows
508
515
def test_invalid_connect ():
509
516
pytest .importorskip ("duckdb" )
0 commit comments