Files
turso/testing/attach.test
2025-10-06 21:33:42 -04:00

84 lines
2.6 KiB
Tcl
Executable File

#!/usr/bin/env tclsh
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Test qualified table name access to main database
do_execsql_test_small attach-main-qualified {
SELECT count(id) FROM main.demo;
} {5}
# Test unqualified vs qualified access
do_execsql_test_small attach-unqualified-vs-qualified {
SELECT COUNT(*) FROM demo;
SELECT COUNT(*) FROM main.demo;
} {5
5}
# Test attach reserved name - main (should fail)
do_execsql_test_error attach-reserved-main {
ATTACH DATABASE "testing/testing_small.db" AS main
} {(.*in use.*)}
# Test attach reserved name - temp (should fail)
do_execsql_test_error attach-reserved-temp {
ATTACH DATABASE "testing/testing_small.db" AS temp
} {(.*in use.*)}
# Test attach duplicate database name - arbitrary (should fail)
do_execsql_test_error attach-duplicate-name {
ATTACH DATABASE "testing/testing_small.db" as small;
ATTACH DATABASE "testing/testing_small.db" as small;
} {(.*in use.*)}
# Test querying attached file database
do_execsql_test_on_specific_db {:memory:} attach-db-query {
ATTACH DATABASE "testing/testing_small.db" AS small;
SELECT value FROM small.demo where id = 1;
} {A}
# Test detach database
do_execsql_test_on_specific_db {:memory:} detach-database {
ATTACH DATABASE "testing/testing_small.db" AS small;
DETACH DATABASE small;
pragma database_list;
} {0|main|}
# Test detach non-existent database (should fail)
do_execsql_test_error detach-non-existent {
DETACH DATABASE nonexistent;
} {(.*no such database.*)}
# Test attach in-memory database
do_execsql_test_on_specific_db {:memory:} attach-memory-database {
ATTACH DATABASE ':memory:' AS mem;
pragma database_list;
} {0|main|
2|mem|}
# Test join between main and attached database
do_execsql_test_on_specific_db {:memory:} attach-cross-database-join {
ATTACH DATABASE "testing/testing_small.db" as small;
create table joiners (id int, otherid int);
insert into joiners (id, otherid) values (1,1);
insert into joiners (id, otherid) values (3,3);
select s.value from joiners j inner join small.demo s where j.otherid = s.id;
} {A
B}
# Test queries after detach (should fail for detached database)
do_execsql_test_error query-after-detach {
ATTACH DATABASE "testing/testing_small.db" as small;
DETACH DATABASE small;
select * from small.sqlite_schema;
} {(.*no such.*)}
# regression test for https://github.com/tursodatabase/turso/issues/3540
do_execsql_test_on_specifc_db {:memory:} attach-from-memory-db {
CREATE TABLE t(a);
INSERT INTO t SELECT value from generate_series(1,10);
ATTACH DATABASE 'testing/testing.db' as a;
SELECT * from a.products, t LIMIT 1;
} {1|hat|79.0|1}