File: attach_filepath_roundtrip.test

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (109 lines) | stat: -rw-r--r-- 1,810 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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';