From e9d45e347e21fde1449c471ef81bfb9b7054ab4a Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 10 May 2011 10:17:02 +0000 Subject: [PATCH 1/3] Add new documentation keywords to the sqlite3_vfs description. FossilOrigin-Name: ad3389a9ab07f6b811841ffa76a5292719c4487d --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/sqlite.h.in | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index daee9754e7..2418251fb3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Return\sa\ssuitable\serror\smessage\sif\sthe\smode=\sargument\sto\sa\sURI\sspecifies\na\shigher\smode\sthan\swhat\sis\sallowed\sby\scontext.\s\sOther\sminor\scleanups\sfor\nthe\sURI\sparsing\slogic. -D 2011-05-09T19:20:17.775 +C Add\snew\sdocumentation\skeywords\sto\sthe\ssqlite3_vfs\sdescription. +D 2011-05-10T10:17:02.660 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -179,7 +179,7 @@ F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c d9d440809025a58547e39f4f268c2a296bfb56ff F src/shell.c 72e7e176bf46d5c6518d15ac4ad6847c4bb5df79 -F src/sqlite.h.in 41a0e4bc842917226e170273f64b95717a63270a +F src/sqlite.h.in 6e1af9733864bacbb4b5b821290f5395319f3259 F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754 F src/sqliteInt.h b34bd64a7ade4808fcc301e0bb67ef5051ea49c6 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d @@ -935,7 +935,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P ca3797d4967361e31a8a5ce1ce8190b095f3ed4c -R fbfaa47316ae48b91e92f26cbe2f2742 +P d9bc1c7fe0ca5f6973a85827330958f4d09f8171 +R a4c51c77960c2b3e78f68dee95566335 U drh -Z 82e3dc394cc5052bfb9a5a6a21e4f298 +Z 5d4e7081fc9730bf21891a9cc297b17d diff --git a/manifest.uuid b/manifest.uuid index 2b8787f1e2..7523acf4d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d9bc1c7fe0ca5f6973a85827330958f4d09f8171 \ No newline at end of file +ad3389a9ab07f6b811841ffa76a5292719c4487d \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index d78daa7672..c83d0d70d4 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -758,6 +758,7 @@ typedef struct sqlite3_mutex sqlite3_mutex; /* ** CAPI3REF: OS Interface Object +** KEYWORDS: VFS VFSes ** ** An instance of the sqlite3_vfs object defines the interface between ** the SQLite core and the underlying operating system. The "vfs" From eaadd59ab0240ba445dd6aebc58426a0e8143bf3 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 10 May 2011 17:43:28 +0000 Subject: [PATCH 2/3] Update URI test cases to account for the new error message format. FossilOrigin-Name: 5bde568028216f5bbf76fa0b61bf5b736699f4b1 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/e_uri.test | 6 +++--- test/uri.test | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 2418251fb3..c4d5b41728 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\snew\sdocumentation\skeywords\sto\sthe\ssqlite3_vfs\sdescription. -D 2011-05-10T10:17:02.660 +C Update\sURI\stest\scases\sto\saccount\sfor\sthe\snew\serror\smessage\sformat. +D 2011-05-10T17:43:28.367 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -379,7 +379,7 @@ F test/e_resolve.test dcce9308fb13b934ce29591105d031d3e14fbba6 F test/e_select.test bf385ae3aa0f014c4933ae66fd3e1302138493eb F test/e_select2.test 5c3d3da19c7b3e90ae444579db2b70098599ab92 F test/e_update.test 963d6876064e65f318d1c93aaed36a02b9b389bf -F test/e_uri.test dc9e8f06e44030904e6448c995386f325365713a +F test/e_uri.test 9ce11319fb9b271bf7392027f913f7830e93e7a7 F test/e_vacuum.test 6c09c2af7f2f140518f371c5342100118f779dcf F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398 @@ -841,7 +841,7 @@ F test/unique.test 083c7fff74695bcc27a71d75699deba3595bc9c2 F test/unixexcl.test 9d80a54d86d2261f660758928959368ffc36151e F test/unordered.test e81169ce2a8f31b2c6b66af691887e1376ab3ced F test/update.test 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172 -F test/uri.test e8579b07985b8f4f658eb4e077962a9b2b7b6491 +F test/uri.test 19d64e06602a1d000f0fc0ffd39b3a204fb3ad19 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae F test/vacuum.test 29b60e8cc9e573b39676df6c4a75fe9e02d04a09 F test/vacuum2.test 91a84c9b08adfc4472097d2e8deb0150214e0e76 @@ -935,7 +935,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P d9bc1c7fe0ca5f6973a85827330958f4d09f8171 -R a4c51c77960c2b3e78f68dee95566335 -U drh -Z 5d4e7081fc9730bf21891a9cc297b17d +P ad3389a9ab07f6b811841ffa76a5292719c4487d +R a45bf605351a6737b616ae7b167a1c39 +U dan +Z 08251c747d7ddaeeaf3c4b5510848f0d diff --git a/manifest.uuid b/manifest.uuid index 7523acf4d5..f305bc8bff 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ad3389a9ab07f6b811841ffa76a5292719c4487d \ No newline at end of file +5bde568028216f5bbf76fa0b61bf5b736699f4b1 \ No newline at end of file diff --git a/test/e_uri.test b/test/e_uri.test index ab88be0555..b0e2f876de 100644 --- a/test/e_uri.test +++ b/test/e_uri.test @@ -319,12 +319,12 @@ foreach {tn uri flags error} { 2 {file:test.db?mode=ro} rw {not an error} 3 {file:test.db?mode=ro} rwc {not an error} - 4 {file:test.db?mode=rw} ro {access permission denied} + 4 {file:test.db?mode=rw} ro {access mode not allowed: rw} 5 {file:test.db?mode=rw} rw {not an error} 6 {file:test.db?mode=rw} rwc {not an error} - 7 {file:test.db?mode=rwc} ro {access permission denied} - 8 {file:test.db?mode=rwc} rw {access permission denied} + 7 {file:test.db?mode=rwc} ro {access mode not allowed: rwc} + 8 {file:test.db?mode=rwc} rw {access mode not allowed: rwc} 9 {file:test.db?mode=rwc} rwc {not an error} } { set f(ro) [list SQLITE_OPEN_READONLY SQLITE_OPEN_URI] diff --git a/test/uri.test b/test/uri.test index 22e0fc9bde..08f20c2595 100644 --- a/test/uri.test +++ b/test/uri.test @@ -157,7 +157,7 @@ foreach {tn mode create_ok write_ok readonly_ok} { } $A($write_ok) set A(1) {0 {}} - set A(0) {1 {access permission denied}} + set A(0) [list 1 "access mode not allowed: $mode"] do_test 4.1.$tn.3 { list [catch {sqlite3 db "file:test.db?mode=$mode" -readonly 1} msg] $msg } $A($readonly_ok) From 194329962919e3b0f2cd764bfa3300ddbcafcad0 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 10 May 2011 18:39:10 +0000 Subject: [PATCH 3/3] Have flags passed to sqlite3_open_v2() apply to the main and any attached databases. And change things so that any "mode=xxx" or "cache=xxx" options specified as part of a URI for the main database do not also apply to attached databases. FossilOrigin-Name: 3e490915301216e242a5cdeb0febaff12ed53cb9 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 2 +- test/uri.test | 25 ++++++++++++++++++++++++- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index c4d5b41728..aa9682ca60 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sURI\stest\scases\sto\saccount\sfor\sthe\snew\serror\smessage\sformat. -D 2011-05-10T17:43:28.367 +C Have\sflags\spassed\sto\ssqlite3_open_v2()\sapply\sto\sthe\smain\sand\sany\sattached\sdatabases.\sAnd\schange\sthings\sso\sthat\sany\s"mode=xxx"\sor\s"cache=xxx"\soptions\sspecified\sas\spart\sof\sa\sURI\sfor\sthe\smain\sdatabase\sdo\snot\salso\sapply\sto\sattached\sdatabases. +D 2011-05-10T18:39:10.068 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 7a4d9524721d40ef9ee26f93f9bd6a51dba106f2 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -144,7 +144,7 @@ F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e F src/loadext.c 3ae0d52da013a6326310655be6473fd472347b85 -F src/main.c f00cee5a27f5df5ed536e7043cb451b3c85ce65c +F src/main.c e32d7a44c3307a4a33cfd1a2b06fb46f418ba7fc F src/malloc.c 591aedb20ae40813f1045f2ef253438a334775d9 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 00bd8265c81abb665c48fea1e0c234eb3b922206 @@ -841,7 +841,7 @@ F test/unique.test 083c7fff74695bcc27a71d75699deba3595bc9c2 F test/unixexcl.test 9d80a54d86d2261f660758928959368ffc36151e F test/unordered.test e81169ce2a8f31b2c6b66af691887e1376ab3ced F test/update.test 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172 -F test/uri.test 19d64e06602a1d000f0fc0ffd39b3a204fb3ad19 +F test/uri.test 2d08a6f77bf93ca925743a65802c4aa23aaaf373 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae F test/vacuum.test 29b60e8cc9e573b39676df6c4a75fe9e02d04a09 F test/vacuum2.test 91a84c9b08adfc4472097d2e8deb0150214e0e76 @@ -935,7 +935,7 @@ F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P ad3389a9ab07f6b811841ffa76a5292719c4487d -R a45bf605351a6737b616ae7b167a1c39 +P 5bde568028216f5bbf76fa0b61bf5b736699f4b1 +R 109bc7e0fff78b0c6554d3e5815c2cd8 U dan -Z 08251c747d7ddaeeaf3c4b5510848f0d +Z 5955a7caf010dc14908da2de85096565 diff --git a/manifest.uuid b/manifest.uuid index f305bc8bff..2b5e8e05a9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5bde568028216f5bbf76fa0b61bf5b736699f4b1 \ No newline at end of file +3e490915301216e242a5cdeb0febaff12ed53cb9 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 5b46f4b736..d19f5f9012 100644 --- a/src/main.c +++ b/src/main.c @@ -2163,6 +2163,7 @@ static int openDatabase( nocaseCollatingFunc, 0); /* Parse the filename/URI argument. */ + db->openFlags = flags; rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); if( rc!=SQLITE_OK ){ if( rc==SQLITE_NOMEM ) db->mallocFailed = 1; @@ -2172,7 +2173,6 @@ static int openDatabase( } /* Open the backend database driver */ - db->openFlags = flags; rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0, flags | SQLITE_OPEN_MAIN_DB); if( rc!=SQLITE_OK ){ diff --git a/test/uri.test b/test/uri.test index 08f20c2595..42cbc66d77 100644 --- a/test/uri.test +++ b/test/uri.test @@ -21,6 +21,7 @@ source $testdir/tester.tcl # 4.*: Tests for specifying other options (other than "vfs"). # 5.*: Test using a different VFS with an attached database. # 6.*: Test that authorities other than "" and localhost cause errors. +# 7.*: Test that a read-write db can be attached to a read-only connection. # set testprefix uri @@ -282,5 +283,27 @@ foreach {tn uri res} { catch { sqlite3_close $DB } } -finish_test +forcedelete test.db test.db2 +do_test 7.1 { + sqlite3 db test.db + execsql { + CREATE TABLE t1(a, b); + INSERT INTO t1 VALUES(1, 2); + ATTACH 'test.db2' AS aux; + CREATE TABLE aux.t2(a, b); + INSERT INTO t1 VALUES('a', 'b'); + } + db close +} {} +do_test 7.2 { + sqlite3 db file:test.db?mode=ro + execsql { ATTACH 'file:test.db2?mode=rw' AS aux } +} {} +do_execsql_test 7.3 { + INSERT INTO t2 VALUES('c', 'd') +} {} +do_catchsql_test 7.4 { + INSERT INTO t1 VALUES(3, 4) +} {1 {attempt to write a readonly database}} +finish_test