-C Get\sthe\sbuild\sworking\swith\s-DSQLITE_OMIT_UTF16=1.\s\sTicket\s#2314.\s(CVS\s3865)
-D 2007-04-23T23:56:31
+C When\sthe\swrite_version\sflag\sin\sthe\sdatabase\sheader\sis\slarger\sthan\swhat\nthe\slibrary\sunderstands,\smake\sthe\sdatabase\sread-only.\s\sThe\sold\sbehavior\nwas\sto\smake\sthe\sdatabase\sunreadable.\s(CVS\s3866)
+D 2007-04-24T17:27:51
F Makefile.in 8cab54f7c9f5af8f22fd97ddf1ecfd1e1860de62
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F src/analyze.c 4bbf5ddf9680587c6d4917e02e378b6037be3651
F src/attach.c a16ada4a4654a0d126b8223ec9494ebb81bc5c3c
F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f
-F src/btree.c bed25c6af7eb2cc4bd8a1d11acb4682a7f0a81e3
+F src/btree.c 16119ce57ff10217f15b0b4c86d176ee5335a94f
F src/btree.h 9b2cc0d113c0bc2d37d244b9a394d56948c9acbf
F src/build.c 1880da163d9aa404016242b8b76d69907f682cd8
F src/callback.c 6414ed32d55859d0f65067aa5b88d2da27b3af9e
F test/progress.test 8b22b4974b0a95272566385f8cb8c341c7130df8 x
F test/quick.test 8e7ffe36a1c920cdcce5d641646abde2dafd764b
F test/quote.test 5891f2338980916cf7415484b4ce785294044adb
+F test/rdonly.test b34db316525440d3b42c32e83942c02c37d28ef0
F test/reindex.test 38b138abe36bf9a08c791ed44d9f76cd6b97b78b
F test/rollback.test 673cd8c44c685ad54987fe7f0eeba84efa09685d
F test/rowid.test 040a3bef06f970c45f5fcd14b2355f7f4d62f0cf
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 94374654ccabb391f5dcccfc88176ca677c5804e
-R d7b272e26c6d36664b64086fdb9d371b
+P 25c1c7aaa8ef203120c2c242cf72ce4750f78abd
+R 3fc076971d716b426bc268b75c0ef34b
U drh
-Z baebe6d339241fecad908b7b83716212
+Z 82843ae5ccf4a2ae39514c6de28aac15
-25c1c7aaa8ef203120c2c242cf72ce4750f78abd
\ No newline at end of file
+10648e99929b4f640855433b6e47702687039286
\ No newline at end of file
** May you share freely, never taking more than you give.
**
*************************************************************************
-** $Id: btree.c,v 1.356 2007/04/19 00:24:34 drh Exp $
+** $Id: btree.c,v 1.357 2007/04/24 17:27:51 drh Exp $
**
** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
if( memcmp(page1, zMagicHeader, 16)!=0 ){
goto page1_init_failed;
}
- if( page1[18]>1 || page1[19]>1 ){
+ if( page1[18]>1 ){
+ pBt->readOnly = 1;
+ }
+ if( page1[19]>1 ){
goto page1_init_failed;
}
pageSize = get2byte(&page1[16]);
if( pBt->pPage1==0 ){
rc = lockBtree(pBt);
}
-
+
if( rc==SQLITE_OK && wrflag ){
- rc = sqlite3PagerBegin(pBt->pPage1->pDbPage, wrflag>1);
- if( rc==SQLITE_OK ){
- rc = newDatabase(pBt);
+ if( pBt->readOnly ){
+ rc = SQLITE_READONLY;
+ }else{
+ rc = sqlite3PagerBegin(pBt->pPage1->pDbPage, wrflag>1);
+ if( rc==SQLITE_OK ){
+ rc = newDatabase(pBt);
+ }
}
}
--- /dev/null
+# 2007 April 24
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library.
+#
+# This file implements tests to make sure SQLite treats a database
+# as readonly if its write version is set to high.
+#
+# $Id: rdonly.test,v 1.1 2007/04/24 17:27:52 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+
+# Create a database.
+#
+do_test rdonly-1.1 {
+ execsql {
+ CREATE TABLE t1(x);
+ INSERT INTO t1 VALUES(1);
+ SELECT * FROM t1;
+ }
+} {1}
+
+# Changes the write version from 1 to 2. Verify that the database
+# can be read but not written.
+#
+do_test rdonly-1.2 {
+ db close
+ hexio_get_int [hexio_read test.db 18 1]
+} 1
+do_test rdonly-1.3 {
+ hexio_write test.db 18 02
+ sqlite3 db test.db
+ execsql {
+ SELECT * FROM t1;
+ }
+} {1}
+do_test rdonly-1.4 {
+ catchsql {
+ INSERT INTO t1 VALUES(2)
+ }
+} {1 {attempt to write a readonly database}}
+
+# Change the write version back to 1. Verify that the database
+# is read-write again.
+#
+do_test rdonly-1.5 {
+ db close
+ hexio_write test.db 18 01
+ sqlite3 db test.db
+ catchsql {
+ INSERT INTO t1 VALUES(2);
+ SELECT * FROM t1;
+ }
+} {0 {1 2}}
+
+finish_test