should be it
This commit is contained in:
109
external/duckdb/test/sql/attach/attach_filepath_roundtrip.test
vendored
Normal file
109
external/duckdb/test/sql/attach/attach_filepath_roundtrip.test
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
# 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';
|
||||
Reference in New Issue
Block a user