mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-01 06:27:03 +03:00
Allow "main" to be used to refer to the main database even after SQLITE_DBCONFIG_MAINDBNAME has been used to assign another alias.
FossilOrigin-Name: 75c85ca32f9ae4a28fd8f8ff2f7639599413d22af706e9799a0e76cc560d14eb
This commit is contained in:
@ -148,10 +148,8 @@ do_test attach-1.14 {
|
||||
ATTACH 'test.db' as db9;
|
||||
}
|
||||
} {1 {database db9 is already in use}}
|
||||
do_test attach-1.15 {
|
||||
catchsql {
|
||||
ATTACH 'test.db' as main;
|
||||
}
|
||||
do_catchsql_test attach-1.15 {
|
||||
ATTACH 'test.db' as main;
|
||||
} {1 {database main is already in use}}
|
||||
ifcapable tempdb {
|
||||
do_test attach-1.16 {
|
||||
@ -160,10 +158,8 @@ ifcapable tempdb {
|
||||
}
|
||||
} {1 {database temp is already in use}}
|
||||
}
|
||||
do_test attach-1.17 {
|
||||
catchsql {
|
||||
ATTACH 'test.db' as MAIN;
|
||||
}
|
||||
do_catchsql_test attach-1.17 {
|
||||
ATTACH 'test.db' as MAIN;
|
||||
} {1 {database MAIN is already in use}}
|
||||
do_test attach-1.18 {
|
||||
catchsql {
|
||||
@ -231,6 +227,7 @@ do_test attach-1.26 {
|
||||
}
|
||||
} {1 {cannot detach database main}}
|
||||
|
||||
|
||||
ifcapable tempdb {
|
||||
do_test attach-1.27 {
|
||||
catchsql {
|
||||
|
@ -395,17 +395,19 @@ do_createtable_tests 1.2.2 {
|
||||
4 {CREATE TABLE auxb.xyz(z)} {}
|
||||
}
|
||||
drop_all_tables
|
||||
do_createtable_tests 1.3 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TABLE main.abc(a, b, c)" {abc {} {} {}}
|
||||
2 "CREATE TABLE main.t1(a, b, c)" {{abc t1} {} {} {}}
|
||||
3 "CREATE TABLE temp.tmp(a, b, c)" {{abc t1} tmp {} {}}
|
||||
4 "CREATE TABLE auxb.tbl(x, y)" {{abc t1} tmp {} tbl}
|
||||
5 "CREATE TABLE auxb.t1(k, v)" {{abc t1} tmp {} {t1 tbl}}
|
||||
6 "CREATE TABLE auxa.next(c, d)" {{abc t1} tmp next {t1 tbl}}
|
||||
if {[permutation]!="maindbname"} {
|
||||
do_createtable_tests 1.3 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TABLE main.abc(a, b, c)" {abc {} {} {}}
|
||||
2 "CREATE TABLE main.t1(a, b, c)" {{abc t1} {} {} {}}
|
||||
3 "CREATE TABLE temp.tmp(a, b, c)" {{abc t1} tmp {} {}}
|
||||
4 "CREATE TABLE auxb.tbl(x, y)" {{abc t1} tmp {} tbl}
|
||||
5 "CREATE TABLE auxb.t1(k, v)" {{abc t1} tmp {} {t1 tbl}}
|
||||
6 "CREATE TABLE auxa.next(c, d)" {{abc t1} tmp next {t1 tbl}}
|
||||
}
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-18895-27365 If the "TEMP" or "TEMPORARY" keyword occurs
|
||||
@ -413,13 +415,15 @@ do_createtable_tests 1.3 -tclquery {
|
||||
# temp database.
|
||||
#
|
||||
drop_all_tables
|
||||
do_createtable_tests 1.4 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TEMP TABLE t1(a, b)" {{} t1 {} {}}
|
||||
2 "CREATE TEMPORARY TABLE t2(a, b)" {{} {t1 t2} {} {}}
|
||||
if {[permutation]!="maindbname"} {
|
||||
do_createtable_tests 1.4 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TEMP TABLE t1(a, b)" {{} t1 {} {}}
|
||||
2 "CREATE TEMPORARY TABLE t2(a, b)" {{} {t1 t2} {} {}}
|
||||
}
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-23976-43329 It is an error to specify both a
|
||||
@ -436,30 +440,34 @@ do_createtable_tests 1.5.1 -error {
|
||||
4 "CREATE TEMPORARY TABLE main.xxx(x)" {}
|
||||
}
|
||||
drop_all_tables
|
||||
do_createtable_tests 1.5.2 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TEMP TABLE temp.t1(a, b)" {{} t1 {} {}}
|
||||
2 "CREATE TEMPORARY TABLE temp.t2(a, b)" {{} {t1 t2} {} {}}
|
||||
3 "CREATE TEMP TABLE TEMP.t3(a, b)" {{} {t1 t2 t3} {} {}}
|
||||
4 "CREATE TEMPORARY TABLE TEMP.xxx(x)" {{} {t1 t2 t3 xxx} {} {}}
|
||||
if {[permutation]!="maindbname"} {
|
||||
do_createtable_tests 1.5.2 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TEMP TABLE temp.t1(a, b)" {{} t1 {} {}}
|
||||
2 "CREATE TEMPORARY TABLE temp.t2(a, b)" {{} {t1 t2} {} {}}
|
||||
3 "CREATE TEMP TABLE TEMP.t3(a, b)" {{} {t1 t2 t3} {} {}}
|
||||
4 "CREATE TEMPORARY TABLE TEMP.xxx(x)" {{} {t1 t2 t3 xxx} {} {}}
|
||||
}
|
||||
}
|
||||
|
||||
# EVIDENCE-OF: R-31997-24564 If no schema name is specified and the TEMP
|
||||
# keyword is not present then the table is created in the main database.
|
||||
#
|
||||
drop_all_tables
|
||||
do_createtable_tests 1.6 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TABLE t1(a, b)" {t1 {} {} {}}
|
||||
2 "CREATE TABLE t2(a, b)" {{t1 t2} {} {} {}}
|
||||
3 "CREATE TABLE t3(a, b)" {{t1 t2 t3} {} {} {}}
|
||||
4 "CREATE TABLE xxx(x)" {{t1 t2 t3 xxx} {} {} {}}
|
||||
if {[permutation]!="maindbname"} {
|
||||
do_createtable_tests 1.6 -tclquery {
|
||||
unset -nocomplain X
|
||||
array set X [table_list]
|
||||
list $X(main) $X(temp) $X(auxa) $X(auxb)
|
||||
} {
|
||||
1 "CREATE TABLE t1(a, b)" {t1 {} {} {}}
|
||||
2 "CREATE TABLE t2(a, b)" {{t1 t2} {} {} {}}
|
||||
3 "CREATE TABLE t3(a, b)" {{t1 t2 t3} {} {} {}}
|
||||
4 "CREATE TABLE xxx(x)" {{t1 t2 t3 xxx} {} {} {}}
|
||||
}
|
||||
}
|
||||
|
||||
drop_all_tables
|
||||
|
@ -126,37 +126,37 @@ do_execsql_test 3.1.0 { SELECT * FROM temp.v1 } {{a temp} {b temp}}
|
||||
do_execsql_test 3.1.1 { DROP VIEW temp.v1 } {}
|
||||
do_catchsql_test 3.1.2 { SELECT * FROM temp.v1 } {1 {no such table: temp.v1}}
|
||||
do_test 3.1.3 { list_all_views } {main.v1 main.v2 aux.v1 aux.v2 aux.v3}
|
||||
do_test 3.1.4 { list_all_data } $databasedata
|
||||
do_test 3.1.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
do_execsql_test 3.2.0 { SELECT * FROM v1 } {{a main} {b main}}
|
||||
do_execsql_test 3.2.1 { DROP VIEW v1 } {}
|
||||
do_catchsql_test 3.2.2 { SELECT * FROM main.v1 } {1 {no such table: main.v1}}
|
||||
do_test 3.2.3 { list_all_views } {main.v2 aux.v1 aux.v2 aux.v3}
|
||||
do_test 3.2.4 { list_all_data } $databasedata
|
||||
do_test 3.2.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
do_execsql_test 3.3.0 { SELECT * FROM v2 } {{a main} {b main}}
|
||||
do_execsql_test 3.3.1 { DROP VIEW v2 } {}
|
||||
do_catchsql_test 3.3.2 { SELECT * FROM main.v2 } {1 {no such table: main.v2}}
|
||||
do_test 3.3.3 { list_all_views } {aux.v1 aux.v2 aux.v3}
|
||||
do_test 3.3.4 { list_all_data } $databasedata
|
||||
do_test 3.3.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
do_execsql_test 3.4.0 { SELECT * FROM v1 } {{a aux} {b aux}}
|
||||
do_execsql_test 3.4.1 { DROP VIEW v1 } {}
|
||||
do_catchsql_test 3.4.2 { SELECT * FROM v1 } {1 {no such table: v1}}
|
||||
do_test 3.4.3 { list_all_views } {aux.v2 aux.v3}
|
||||
do_test 3.4.4 { list_all_data } $databasedata
|
||||
do_test 3.4.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
do_execsql_test 3.4.0 { SELECT * FROM aux.v2 } {{a aux} {b aux}}
|
||||
do_execsql_test 3.4.1 { DROP VIEW aux.v2 } {}
|
||||
do_catchsql_test 3.4.2 { SELECT * FROM aux.v2 } {1 {no such table: aux.v2}}
|
||||
do_test 3.4.3 { list_all_views } {aux.v3}
|
||||
do_test 3.4.4 { list_all_data } $databasedata
|
||||
do_execsql_test 3.5.0 { SELECT * FROM aux.v2 } {{a aux} {b aux}}
|
||||
do_execsql_test 3.5.1 { DROP VIEW aux.v2 } {}
|
||||
do_catchsql_test 3.5.2 { SELECT * FROM aux.v2 } {1 {no such table: aux.v2}}
|
||||
do_test 3.5.3 { list_all_views } {aux.v3}
|
||||
do_test 3.5.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
do_execsql_test 3.5.0 { SELECT * FROM v3 } {{a aux} {b aux}}
|
||||
do_execsql_test 3.5.1 { DROP VIEW v3 } {}
|
||||
do_catchsql_test 3.5.2 { SELECT * FROM v3 } {1 {no such table: v3}}
|
||||
do_test 3.5.3 { list_all_views } {}
|
||||
do_test 3.5.4 { list_all_data } $databasedata
|
||||
do_execsql_test 3.6.0 { SELECT * FROM v3 } {{a aux} {b aux}}
|
||||
do_execsql_test 3.6.1 { DROP VIEW v3 } {}
|
||||
do_catchsql_test 3.6.2 { SELECT * FROM v3 } {1 {no such table: v3}}
|
||||
do_test 3.6.3 { list_all_views } {}
|
||||
do_test 3.6.4 { string compare [list_all_data] $databasedata } 0
|
||||
|
||||
# EVIDENCE-OF: R-25558-37487 If the specified view cannot be found and
|
||||
# the IF EXISTS clause is not present, it is an error.
|
||||
@ -179,11 +179,11 @@ do_dropview_tests 5 -repair {
|
||||
dropview_reopen_db
|
||||
} -tclquery {
|
||||
list_all_views
|
||||
expr {[list_all_views] == "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"}
|
||||
#expr {[list_all_views] == "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"}
|
||||
} {
|
||||
1 "DROP VIEW IF EXISTS xx" 1
|
||||
2 "DROP VIEW IF EXISTS main.xx" 1
|
||||
3 "DROP VIEW IF EXISTS temp.v2" 1
|
||||
1 "DROP VIEW IF EXISTS xx" "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"
|
||||
2 "DROP VIEW IF EXISTS main.xx" "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"
|
||||
3 "DROP VIEW IF EXISTS temp.v2" "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"
|
||||
}
|
||||
|
||||
|
||||
|
@ -132,9 +132,9 @@ dbconfig_maindbname_icecube db
|
||||
do_execsql_test misc8-4.2 {
|
||||
SELECT name FROM icecube.sqlite_master;
|
||||
} {t1}
|
||||
do_execsql_test misc8-4.3 {
|
||||
PRAGMA database_list;
|
||||
} {/0 icecube .* 2 aux2/}
|
||||
do_test misc8-4.3 {
|
||||
regexp {0 icecube .* 2 aux2} [db eval {PRAGMA database_list}]
|
||||
} 1
|
||||
|
||||
|
||||
|
||||
|
@ -1075,6 +1075,16 @@ test_suite "sorterref" -prefix "" -description {
|
||||
autoinstall_test_functions
|
||||
}
|
||||
|
||||
test_suite "maindbname" -prefix "" -description {
|
||||
Run the "veryquick" test suite with SQLITE_DBCONFIG_MAINDBNAME used to
|
||||
set the name of database 0 to "icecube".
|
||||
} -files [
|
||||
test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \
|
||||
*fts5corrupt* *fts5big* *fts5aj*
|
||||
] -dbconfig {
|
||||
dbconfig_maindbname_icecube $::dbhandle
|
||||
}
|
||||
|
||||
# End of tests
|
||||
#############################################################################
|
||||
|
||||
|
@ -782,6 +782,9 @@ proc do_test {name cmd expected} {
|
||||
output2 "\nError: $result"
|
||||
fail_test $name
|
||||
} else {
|
||||
if {[permutation]=="maindbname"} {
|
||||
set result [string map [list [string tolower ICECUBE] main] $result]
|
||||
}
|
||||
if {[regexp {^[~#]?/.*/$} $expected]} {
|
||||
# "expected" is of the form "/PATTERN/" then the result if correct if
|
||||
# regular expression PATTERN matches the result. "~/PATTERN/" means
|
||||
|
Reference in New Issue
Block a user