]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Experimental "PRAGMA query_only=BOOLEAN" statement that is able to turn query_only
authordrh <drh@noemail.net>
Wed, 10 Jul 2013 13:33:49 +0000 (13:33 +0000)
committerdrh <drh@noemail.net>
Wed, 10 Jul 2013 13:33:49 +0000 (13:33 +0000)
write capabilities on and off.

FossilOrigin-Name: ece960c496717a3a6c25526ef77dd76b08d607bc

manifest
manifest.uuid
src/pragma.c
src/sqliteInt.h
src/vdbe.c

index abe4d511cf46c383dda4ab8b3f817a38ddea1494..024b4994509590319bf89f1dfb4c8ecfb2762898 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Run\sprogress\scallback\schecks\sless\sfrequently\sin\sthe\smain\sVDBE\sevaluation\nloop.\s\sThis\smakes\sup\sfor\sthe\sextra\sCPU\scycles\sused\sto\sincrement\sthe\scycle\ncounter\sfor\sSQLITE_STMTSTATUS_VM_STEP.
-D 2013-07-10T03:05:14.910
+C Experimental\s"PRAGMA\squery_only=BOOLEAN"\sstatement\sthat\sis\sable\sto\sturn\nwrite\scapabilities\son\sand\soff.
+D 2013-07-10T13:33:49.764
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -210,7 +210,7 @@ F src/parse.y 9acfcc83ddbf0cf82f0ed9582ccf0ad6c366ff37
 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
 F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
 F src/pcache1.c d23d07716de96c7c0c2503ec5051a4384c3fb938
-F src/pragma.c 67a611bd4be0754f27ee13eb87932c3b14415862
+F src/pragma.c f91b64b84cbc3f3d2a1bbcae0d59e0a782fc67f8
 F src/prepare.c 2306be166bbeddf454e18bf8b21dba8388d05328
 F src/printf.c 41c49dac366a3a411190001a8ab495fa8887974e
 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
@@ -221,7 +221,7 @@ F src/shell.c c8cd06e6b66250a3ea0149c4edec30de14f57b6f
 F src/sqlite.h.in 0a87152a6dde55381afb8f1cf37f337b2f32fd06
 F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
 F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
-F src/sqliteInt.h e461e0f9109ca49ad6aba52198fbe7d237c4a75b
+F src/sqliteInt.h 2819a1e48805199a957570223e54e787935937d6
 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
 F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@ -277,7 +277,7 @@ F src/update.c 8e76c3d03e4b7b21cb250bd2df0c05e12993e577
 F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
 F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9
 F src/vacuum.c d9c5759f4c5a438bb43c2086f72c5d2edabc36c8
-F src/vdbe.c b4d29f875ff2c8506783c6831b2d539cdeb39b91
+F src/vdbe.c c714445b47b4f242082e97de01272f0c31c3c921
 F src/vdbe.h b52887278cb173e66188da84dfab216bea61119d
 F src/vdbeInt.h aa185c6df4f2b5ec9896cdb5f96789af1ef69f76
 F src/vdbeapi.c e3ad4cddb713a387527f982e79d9e001a0dbffa5
@@ -1101,7 +1101,10 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P f003bea9fe1b79e2b4d18fbef86c1d8f0f60e4b6
-R 04afd42ac3962714b1d32f16a2fdd2ad
+P 3e8b02011db2f393d4850115a471709b0a88594f
+R 2ffb7f6b213f90920cd38490a5dc43b1
+T *branch * query_only
+T *sym-query_only *
+T -sym-trunk *
 U drh
-Z 82045c2120955e8475cc20915ea24bea
+Z c3b9d6d6edee565b9fc4629e8b5e8b24
index 655deedd5a7180fe25a3c4a2e1ed068ae2b13d3b..3cbb719398b0d12b8b144ac526ace64b6a47cf42 100644 (file)
@@ -1 +1 @@
-3e8b02011db2f393d4850115a471709b0a88594f
\ No newline at end of file
+ece960c496717a3a6c25526ef77dd76b08d607bc
\ No newline at end of file
index 5803f6c4a5bcee5f975a237d7a79e82e46b4d2b3..f38e679a44b49914d57a07072e91ad1af321f5b6 100644 (file)
@@ -177,6 +177,7 @@ static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
     { "fullfsync",                SQLITE_FullFSync     },
     { "checkpoint_fullfsync",     SQLITE_CkptFullFSync },
     { "reverse_unordered_selects", SQLITE_ReverseOrder  },
+    { "query_only",               SQLITE_QueryOnly     },
 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
     { "automatic_index",          SQLITE_AutoIndex     },
 #endif
index 5e3b4d0a0b32570516c426c9f27b5a9acf0fb275..48a1f96ea3aed880ff8cf30eefcbddee817d95e6 100644 (file)
@@ -1009,6 +1009,7 @@ struct sqlite3 {
 #define SQLITE_PreferBuiltin  0x00100000  /* Preference to built-in funcs */
 #define SQLITE_LoadExtension  0x00200000  /* Enable load_extension */
 #define SQLITE_EnableTrigger  0x00400000  /* True to enable triggers */
+#define SQLITE_QueryOnly      0x00800000  /* Disable database changes */
 
 /*
 ** Bits of the sqlite3.dbOptFlags field that are used by the
index 9a56518c57912dedf365aaca9c1b6ac1b6eb0124..1fa21df6d161696602821f973e4c6ca41d5aac43 100644 (file)
@@ -2946,6 +2946,10 @@ case OP_Transaction: {
   assert( p->readOnly==0 || pOp->p2==0 );
   assert( pOp->p1>=0 && pOp->p1<db->nDb );
   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
+  if( pOp->p2 && (db->flags & SQLITE_QueryOnly)!=0 ){
+    rc = SQLITE_READONLY;
+    goto abort_due_to_error;
+  }
   pBt = db->aDb[pOp->p1].pBt;
 
   if( pBt ){