CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
pager4.test100 linesDownload Raw Back to test
1# 2013-12-062#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# Tests for the SQLITE_READONLY_DBMOVED error condition: the database file13# is unlinked or renamed out from under SQLite.14#15 16if {$tcl_platform(os) eq "Windows NT"} return17 18set testdir [file dirname $argv0]19source $testdir/tester.tcl20 21if {[permutation]=="inmemory_journal"} {22  finish_test23  return24}25 26# Create a database file for testing27#28do_execsql_test pager4-1.1 {29  CREATE TABLE t1(a,b,c);30  INSERT INTO t1 VALUES(673,'stone','philips');31  SELECT * FROM t1;32} {673 stone philips}33 34# After renaming the database file while it is open, one can still35# read from the database, but writing returns a READONLY error.36#37file delete -force test-xyz.db38file rename test.db test-xyz.db39do_catchsql_test pager4-1.2 {40  SELECT * FROM t1;41} {0 {673 stone philips}}42do_catchsql_test pager4-1.3 {43  UPDATE t1 SET a=537;44} {1 {attempt to write a readonly database}}45 46# Creating a different database file with the same name of the original47# is detected and still leaves the database read-only.48#49sqlite3 db2 test.db50db2 eval {CREATE TABLE t2(x,y,z)}51do_catchsql_test pager4-1.4 {52  UPDATE t1 SET a=948;53} {1 {attempt to write a readonly database}}54 55# Changing the name back clears the READONLY error56#57db2 close58file delete -force test.db59file rename test-xyz.db test.db60do_catchsql_test pager4-1.5 {61  SELECT * FROM t1;62} {0 {673 stone philips}}63do_catchsql_test pager4-1.6 {64  UPDATE t1 SET a=537;65  SELECT * FROM t1;66} {0 {537 stone philips}}67 68# We can write to a renamed database if journal_mode=OFF or69# journal_mode=MEMORY.70#71file rename test.db test-xyz.db72do_catchsql_test pager4-1.7 {73  PRAGMA journal_mode=OFF;74  UPDATE t1 SET a=107;75  SELECT * FROM t1;76} {0 {off 107 stone philips}}77do_catchsql_test pager4-1.8 {78  PRAGMA journal_mode=MEMORY;79  UPDATE t1 SET b='magpie';80  SELECT * FROM t1;81} {0 {memory 107 magpie philips}}82 83# Any other journal mode gives a READONLY error84#85do_catchsql_test pager4-1.9 {86  PRAGMA journal_mode=DELETE;87  UPDATE t1 SET c='jaguar';88} {1 {attempt to write a readonly database}}89do_catchsql_test pager4-1.10 {90  PRAGMA journal_mode=TRUNCATE;91  UPDATE t1 SET c='jaguar';92} {1 {attempt to write a readonly database}}93do_catchsql_test pager4-1.11 {94  PRAGMA journal_mode=PERSIST;95  UPDATE t1 SET c='jaguar';96} {1 {attempt to write a readonly database}}97 98 99finish_test100