Index: third_party/sqlite/src/test/misc7.test |
diff --git a/third_party/sqlite/src/test/misc7.test b/third_party/sqlite/src/test/misc7.test |
index 7d2ba6e8527958e48e4b73614234e0905d0a964e..8fd5fe754620713b95634277515f6965d48f17e6 100644 |
--- a/third_party/sqlite/src/test/misc7.test |
+++ b/third_party/sqlite/src/test/misc7.test |
@@ -15,9 +15,11 @@ |
set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
-do_test misc7-1-misuse { |
- c_misuse_test |
-} {} |
+if {[clang_sanitize_address]==0} { |
+ do_test misc7-1-misuse { |
+ c_misuse_test |
+ } {} |
+} |
do_test misc7-2 { |
c_realloc_test |
@@ -30,7 +32,7 @@ do_test misc7-3 { |
# Try to open a directory: |
# |
do_test misc7-4 { |
- file delete mydir |
+ delete_file mydir |
file mkdir mydir |
set rc [catch { |
sqlite3 db2 ./mydir |
@@ -41,7 +43,7 @@ do_test misc7-4 { |
# Try to open a file with a directory where its journal file should be. |
# |
do_test misc7-5 { |
- file delete mydir |
+ delete_file mydir |
file mkdir mydir-journal |
sqlite3 db2 ./mydir |
catchsql { |
@@ -151,9 +153,15 @@ db2 close |
# Test that nothing goes horribly wrong when attaching a database |
# after the omit_readlock pragma has been exercised. |
# |
+# Note: The PRAGMA omit_readlock was an early hack to disable the |
+# fcntl() calls for read-only databases so that read-only databases could |
+# be read on broken NFS systems. That pragma has now been removed. |
+# (Use the unix-none VFS as a replacement, if needed.) But these tests |
+# do not really depend on omit_readlock, so we left them in place. |
+# |
do_test misc7-7.1 { |
- file delete -force test2.db |
- file delete -force test2.db-journal |
+ forcedelete test2.db |
+ forcedelete test2.db-journal |
execsql { |
PRAGMA omit_readlock = 1; |
ATTACH 'test2.db' AS aux; |
@@ -254,8 +262,8 @@ ifcapable vtab { |
} |
db close |
-file delete -force test.db |
-file delete -force test.db-journal |
+forcedelete test.db |
+forcedelete test.db-journal |
sqlite3 db test.db |
ifcapable explain { |
@@ -263,23 +271,23 @@ ifcapable explain { |
CREATE TABLE abc(a PRIMARY KEY, b, c); |
EXPLAIN QUERY PLAN SELECT * FROM abc AS t2 WHERE rowid = 1; |
} { |
- 0 0 0 {SEARCH TABLE abc AS t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} |
+ 0 0 0 {SEARCH TABLE abc AS t2 USING INTEGER PRIMARY KEY (rowid=?)} |
} |
do_execsql_test misc7-14.2 { |
EXPLAIN QUERY PLAN SELECT * FROM abc AS t2 WHERE a = 1; |
} {0 0 0 |
- {SEARCH TABLE abc AS t2 USING INDEX sqlite_autoindex_abc_1 (a=?) (~1 rows)} |
+ {SEARCH TABLE abc AS t2 USING INDEX sqlite_autoindex_abc_1 (a=?)} |
} |
do_execsql_test misc7-14.3 { |
EXPLAIN QUERY PLAN SELECT * FROM abc AS t2 ORDER BY a; |
} {0 0 0 |
- {SCAN TABLE abc AS t2 USING INDEX sqlite_autoindex_abc_1 (~1000000 rows)} |
+ {SCAN TABLE abc AS t2 USING INDEX sqlite_autoindex_abc_1} |
} |
} |
db close |
-file delete -force test.db |
-file delete -force test.db-journal |
+forcedelete test.db |
+forcedelete test.db-journal |
sqlite3 db test.db |
#-------------------------------------------------------------------- |
@@ -323,8 +331,8 @@ do_test misc7-15.2 { |
} {} |
db close |
-file delete -force test.db |
-file delete -force test.db-journal |
+forcedelete test.db |
+forcedelete test.db-journal |
sqlite3 db test.db |
do_ioerr_test misc7-16 -sqlprep { |
@@ -349,7 +357,7 @@ do_ioerr_test misc7-16 -sqlprep { |
COMMIT; |
}} msg] |
- if {!$rc || ($rc && [string first "columns" $msg]==0)} { |
+ if {!$rc || ($rc && [string first "UNIQUE" $msg]==0)} { |
set msg |
} else { |
error $msg |
@@ -371,7 +379,7 @@ do_test misc7-16.X { |
# These tests do not work on windows due to restrictions in the |
# windows file system. |
# |
-if {$tcl_platform(platform)!="windows" && $tcl_platform(platform)!="os2"} { |
+if {$tcl_platform(platform)!="windows"} { |
# Some network filesystems (ex: AFP) do not support setting read-only |
# permissions. Only run these tests if full unix permission setting |
@@ -385,15 +393,15 @@ if {$tcl_platform(platform)!="windows" && $tcl_platform(platform)!="os2"} { |
BEGIN; |
DELETE FROM t3 WHERE (oid%3)==0; |
} |
- copy_file test.db bak.db |
- copy_file test.db-journal bak.db-journal |
+ forcecopy test.db bak.db |
+ forcecopy test.db-journal bak.db-journal |
execsql { |
COMMIT; |
} |
db close |
- copy_file bak.db test.db |
- copy_file bak.db-journal test.db-journal |
+ forcecopy bak.db test.db |
+ forcecopy bak.db-journal test.db-journal |
sqlite3 db test.db |
catch {file attributes test.db-journal -permissions r--------} |
@@ -477,13 +485,41 @@ do_test misc7-20.1 { |
# Try to open a really long file name. |
# |
do_test misc7-21.1 { |
- set zFile [file join [pwd] "[string repeat abcde 104].db"] |
+ set zFile [file join [get_pwd] "[string repeat abcde 104].db"] |
set rc [catch {sqlite3 db2 $zFile} msg] |
list $rc $msg |
} {1 {unable to open database file}} |
+# Try to do hot-journal rollback with a read-only connection. The |
+# error code should be SQLITE_READONLY_ROLLBACK. |
+# |
+do_test misc7-22.1 { |
+ db close |
+ forcedelete test.db copy.db-journal |
+ sqlite3 db test.db |
+ execsql { |
+ CREATE TABLE t1(a, b); |
+ INSERT INTO t1 VALUES(1, 2); |
+ INSERT INTO t1 VALUES(3, 4); |
+ } |
+ db close |
+ sqlite3 db test.db -readonly 1 |
+ catchsql { |
+ INSERT INTO t1 VALUES(5, 6); |
+ } |
+} {1 {attempt to write a readonly database}} |
+do_test misc7-22.2 { execsql { SELECT * FROM t1 } } {1 2 3 4} |
+do_test misc7-22.3 { |
+ set fd [open test.db-journal w] |
+ puts $fd [string repeat abc 1000] |
+ close $fd |
+ catchsql { SELECT * FROM t1 } |
+} {1 {attempt to write a readonly database}} |
+do_test misc7-22.4 { |
+ sqlite3_extended_errcode db |
+} SQLITE_READONLY_ROLLBACK |
db close |
-file delete -force test.db |
+forcedelete test.db |
finish_test |