# name: test/sql/attach/attach_filepath_roundtrip.test # description: Test file path roundtripping and concurrency # group: [attach] require notwindows # use a concurrent loop to attach many databases concurrentloop i 1 100 statement maybe ATTACH '__TEST_DIR__/concurrent.db'; ---- endloop query I SELECT database_name FROM duckdb_databases() WHERE database_name = 'concurrent'; ---- concurrent statement ok DETACH concurrent; # roundtrip statement ok ATTACH '__TEST_DIR__/db1.db'; statement ok DETACH db1; statement ok ATTACH '__TEST_DIR__/db1.db'; # multiple connections statement ok con2 ATTACH '__TEST_DIR__/con2_rollback_detach.db'; statement ok con1 START TRANSACTION; statement ok con2 START TRANSACTION; # attach files in con1 statement ok con1 ATTACH '__TEST_DIR__/con1.db'; statement ok con1 ATTACH '__TEST_DIR__/con1_commit.db'; # detach file in con2 statement ok con2 DETACH con2_rollback_detach; # detach is instant - so we can attach statement ok con1 ATTACH '__TEST_DIR__/con2_rollback_detach.db'; statement ok con1 DETACH con2_rollback_detach # can't attach con1.db file in con2 statement error con2 ATTACH '__TEST_DIR__/con1.db'; ---- already attached by database statement ok con1 DETACH con1; # we still can't attach (need to commit the DETACH) statement error con2 ATTACH '__TEST_DIR__/con1.db'; ---- already attached by database # commit con1 and roll back con2 statement ok con1 COMMIT; statement ok con2 ROLLBACK # now we can ATTACH, as we committed the DETACH statement ok con2 ATTACH '__TEST_DIR__/con1.db'; statement error con1 ATTACH '__TEST_DIR__/con1.db'; ---- already attached statement error con2 ATTACH '__TEST_DIR__/con1_commit.db'; ---- already attached # we can attach again statement ok con1 ATTACH '__TEST_DIR__/con2_rollback_detach.db';