@@ -366,3 +366,145 @@ def test_duckdb(make_config):
366366 )
367367 assert isinstance (config , DuckDBConnectionConfig )
368368 assert config ._static_connection_kwargs == {"config" : {"foo" : "bar" }}
369+
370+
371+ @pytest .mark .parametrize (
372+ "kwargs1, kwargs2, shared_adapter" ,
373+ [
374+ (
375+ {
376+ "database" : "test.duckdb" ,
377+ },
378+ {
379+ "database" : "test.duckdb" ,
380+ },
381+ True ,
382+ ),
383+ (
384+ {},
385+ {},
386+ False ,
387+ ),
388+ (
389+ {
390+ "database" : "test1.duckdb" ,
391+ },
392+ {
393+ "database" : "test2.duckdb" ,
394+ },
395+ False ,
396+ ),
397+ (
398+ {
399+ "database" : ":memory:" ,
400+ },
401+ {
402+ "database" : ":memory:" ,
403+ },
404+ False ,
405+ ),
406+ (
407+ {
408+ "database" : ":memory:" ,
409+ },
410+ {
411+ "database" : "test.duckdb" ,
412+ },
413+ False ,
414+ ),
415+ (
416+ {
417+ "catalogs" : {
418+ "test" : "test.duckdb" ,
419+ }
420+ },
421+ {
422+ "catalogs" : {
423+ "test" : "test.duckdb" ,
424+ }
425+ },
426+ True ,
427+ ),
428+ (
429+ {
430+ "catalogs" : {
431+ "test" : ":memory:" ,
432+ }
433+ },
434+ {
435+ "catalogs" : {
436+ "test" : ":memory:" ,
437+ }
438+ },
439+ False ,
440+ ),
441+ (
442+ {
443+ "catalogs" : {
444+ "test1" : ":memory:" ,
445+ "test2" : "test2.duckdb" ,
446+ }
447+ },
448+ {
449+ "catalogs" : {
450+ "test1" : ":memory:" ,
451+ "test2" : "test2.duckdb" ,
452+ }
453+ },
454+ True ,
455+ ),
456+ (
457+ {
458+ "catalogs" : {
459+ "test1" : ":memory:" ,
460+ "test2" : "test2.duckdb" ,
461+ }
462+ },
463+ {
464+ "catalogs" : {
465+ "test1" : "test2.duckdb" ,
466+ "test2" : ":memory:" ,
467+ }
468+ },
469+ True ,
470+ ),
471+ (
472+ {
473+ "catalogs" : {
474+ "test1" : "test1.duckdb" ,
475+ "test2" : "test2.duckdb" ,
476+ "test3" : "test3.duckdb" ,
477+ }
478+ },
479+ {
480+ "catalogs" : {
481+ "test1" : "test1_miss.duckdb" ,
482+ "test2" : "test2_miss.duckdb" ,
483+ "test3" : "test3.duckdb" ,
484+ }
485+ },
486+ True ,
487+ ),
488+ ],
489+ )
490+ def test_duckdb_shared (make_config , caplog , kwargs1 , kwargs2 , shared_adapter ):
491+ config1 = make_config (
492+ type = "duckdb" ,
493+ ** kwargs1 ,
494+ )
495+ config2 = make_config (
496+ type = "duckdb" ,
497+ ** kwargs2 ,
498+ )
499+ assert isinstance (config1 , DuckDBConnectionConfig )
500+ assert isinstance (config2 , DuckDBConnectionConfig )
501+ adapter1 = config1 .create_engine_adapter ()
502+ adapter2 = config2 .create_engine_adapter ()
503+ if shared_adapter :
504+ assert id (adapter1 ) == id (adapter2 )
505+ assert "Creating new DuckDB adapter" in caplog .messages [0 ]
506+ assert "Using existing DuckDB adapter" in caplog .messages [1 ]
507+ else :
508+ assert id (adapter1 ) != id (adapter2 )
509+ assert "Creating new DuckDB adapter" in caplog .messages [0 ]
510+ assert "Creating new DuckDB adapter" in caplog .messages [1 ]
0 commit comments