-C Enhance\sthe\scomment\son\sthe\ssqlite3_index_constraint\sobject\sto\sbring\sattention\s\nto\sthe\sfact\sthan\siColumn\sfield\scan\sbe\snegative\sfor\sa\srowid.
-D 2016-02-02T02:04:21.840
+C Merge\srecent\senhancements\sfrom\strunk.
- D 2016-01-20T12:18:31.407
- F Makefile.in a476545d0c8626224d0bacac85c6e2967474af81
++D 2016-02-02T02:53:49.800
+ F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
- F Makefile.msc 01e855f958932d0d3ed62ec675fc63e2cef61fcb
+ F Makefile.msc 72b7858f02017611c3ac1ddc965251017fed0845
F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
F VERSION 866588d1edf0ccb5b0d33896974338f97564f719
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
- F autoconf/Makefile.am 089e5ecdb5761e64ea1013ded02feb4d8b29927d
- F autoconf/README 14458f1046c118efa721aadec5f227e876d3cd38
+ F autoconf/Makefile.am 1c1657650775960804945dc392e14d9e43c5ed84
+ F autoconf/Makefile.msc 2ce3b1565a52d7083a1dbf57a1706fd14cc1ee0c
F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7
- F autoconf/configure.ac 2f41055b10873cfe443a08185343e38c47e2f9f0
-F autoconf/README.txt e9757a381e5ce2553dbaa6247bb8ad00eb8d87aa
++F autoconf/README.txt e9757a381e5ce2553dbaa6247bb8ad00eb8d87aa w autoconf/README
+ F autoconf/configure.ac 72a5e42beb090b32bca580285dc0ab3c4670adb8
F autoconf/tea/Makefile.in b438a7020446c8a8156e8d97c8914a04833da6fd
F autoconf/tea/README 3e9a3c060f29a44344ab50aec506f4db903fb873
F autoconf/tea/aclocal.m4 52c47aac44ce0ddb1f918b6993e8beb8eee88f43
F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
- F src/btree.c 7d0dc384f737edf264a3625417f52d2561a0e94c
- F src/btree.h 8b91bee00ad110e0ae1645ca51d52d23db529380
-F src/btree.c a2a0244ea3f0b3f57f75019c2f229c744ca5d202
-F src/btree.h 368ceeb4bd9312dc8df2ffd64b4b7dbcf4db5f8e
-F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
-F src/build.c 33dea2cef04c16a902c55f9d83b1a2065f213979
++F src/btree.c 3d3c562e11ae10f4824f1ea12d7b6dbe13183464
++F src/btree.h 3c4f3fc066071991907e19ccf3fac5ac4a36bfc1
+F src/btreeInt.h ca40607c2c9d4b4b7ded98e3d707b15c2f17f1bf
- F src/build.c 408543fbdded83ff65cee535aa8f787e36a5db7b
++F src/build.c a183756487c190aadad28e7865d84255ffe29aee
F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf
F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e
F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
- F src/os_unix.c b509b49b40a269e7b75ab511b6e92b2dc9444359
- F src/os_win.c 386fba30419e8458b13209781c2af5590eab2811
+ F src/os_unix.c 5bb20172d0c9a6afcfa829a88c406970593c848d
+ F src/os_win.c ccf29ddded3e41e506b6bd98c1171aa0963b23f2
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
- F src/pager.c d718fb21839adc7b7e1e7f568c06d5d3323bf957
-F src/pager.c 2916c66aee50f69d9ec56a7619b62d9c6a3bee61
-F src/pager.h 1c2a49143dfba9e69cc8159ef019f472ed8d260b
-F src/parse.y 426a91fbbbf7cdde3fd4b8798de7317a8782bec5
++F src/pager.c 040531b0c2e4f046ee077600bc5814a4ac42597e
+F src/pager.h 4a489a631d6f6dfcd52f629dd22e9932e58efcaf
- F src/parse.y 2a2b07ab26adc58878bc9c6091e16b87b89c40cc
++F src/parse.y e6a091aeae2d7c3c30ee5f337493065d7a0962e0
F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23
F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c 718954db86277d696c520fe671148db1e9c4ed3c
+ F src/select.c ea6f3b0c279aa37eb3701792d094673a7ad1bf88
F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4
- F src/sqlite.h.in 214476a62012e578f42133a9a3b4f97a9aa421a3
- F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
+ F src/sqlite.h.in cf22ad1d52dca2c9862d63833e581028119aab7e
+ F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
- F src/sqliteInt.h d2bf936ba54f0696ec257e20f49f9663c790edd0
-F src/sqliteInt.h 2f80b9b1506a8d602b2a99f3f0bfae22df3e7d70
++F src/sqliteInt.h 02cef8cd17974ef60c25d27c6a83a3aeb9ebb676
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c bbfb74450643cb5372a43ad4f6cffd7e9dfcecb0
F src/tokenize.c 5606871a377f390af7040ec3c12e0d183512d785
- F src/treeview.c 78842e90c1f71269e7a73a1d4221b6fe360bab66
- F src/trigger.c 056e51182a3677434423e3be0c74e61b90b4a663
+ F src/treeview.c dc39ccf04e9331237388b9cb73289c9d87ea050b
+ F src/trigger.c 72d876b2d0c66604a112362bdae07dae9b104816
F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
- F src/utf.c 32d7f82aa921322f3e1c956f4b58f019ebd2c6b3
- F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
+ F src/utf.c 10cc2519e82e3369344d0969ad4b1a333dc86d18
+ F src/util.c 72d40df0a52d3f30b462a15f0e094fcbade6dc82
-F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c a0a0ada4b51161d3950fe30fc696b6c8235a841f
+F src/vacuum.c 983cc3754718ef169a6ea9aef86798bd28106f21
- F src/vdbe.c 7013f866c0a9d967093a8de5efc21f26eda65fd3
++F src/vdbe.c f4a056b92fac805b61064ac03450a79978ddfbc6
F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337
- F src/vdbeInt.h 42eefa4f9e7432b9968d321b44e48821ec13b189
- F src/vdbeapi.c ffae8f5af4570fbd548504e815e9fb7227f0822e
- F src/vdbeaux.c c7854a476860496fd74d9785e571eb2fca964561
+ F src/vdbeInt.h 4b69d5451bcadd473e745af53ef1e8abfdce0a79
+ F src/vdbeapi.c 9d640d5efd9a140a6bda8da53b220aa258167993
-F src/vdbeaux.c f0e7cfa04f7ac44d69866868531dbaf20659d0a2
++F src/vdbeaux.c f2afda3daa3b89d6ccefffb0ba5b93ba943527ef
F src/vdbeblob.c 37c3d11a753e403698c69e17383d282e1ae73e75
F src/vdbemem.c b9181e77eca2a095929d46250daf85c8d2621fc0
- F src/vdbesort.c 0971557e5d3c289e46f56a52aed2197c13251de7
- F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
+ F src/vdbesort.c ef3c6d1f1a7d44cf67bb2bee59ea3d1fe5bad174
+ F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
F src/vtab.c 320682cca733115b4cbe71320b5c5eeb1074ebde
- F src/vxworks.h 974e7d9a98f602d6310d563e1dc4e08f9fc48e47
+ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
-F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54
-F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
+F src/wal.c 2390cb2e5cc8529ab4dee92ee8292db1a4f824d8
+F src/wal.h 327e94c3e366154f52a8d9be9be0ea790cc4e08c
F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354
- F src/where.c bb69654f841ae7af0a20cc6fb8f0ac57901c31be
+ F src/where.c af9bf5dcec1a0e52726c550924aa91d837166251
F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a
- F src/wherecode.c 8dee26eb181ea9daa8b1a4d96f34c0860aaf99bd
+ F src/wherecode.c 923f5d04b379b7417bc29f3b86b5eae9d1923d72
F src/whereexpr.c 197a448b52073aee43eca3a2233fc113369eb2d4
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
F test/zerodamage.test cf6748bad89553cc1632be51a6f54e487e4039ac
F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5
F tool/GetTclKit.bat 629d87562e0487c386db630033931d12d62e6372
-F tool/addopcodes.tcl 4ca9c3ef196f08da30add5d07ce0c9458dc8c633
+F tool/addopcodes.tcl 783164304cdbf2b473e119b2c4db0c01b92a2b84
- F tool/build-all-msvc.bat 204a039f985d5a4f4f9df3a3aa594fd17848c37e x
+ F tool/build-all-msvc.bat 77f85f4268c2711d637c629610d0cf3df5338638 x
F tool/build-shell.sh 950f47c6174f1eea171319438b93ba67ff5bf367
F tool/cg_anno.tcl 692ce4b8693d59e3a3de77ca97f4139ecfa641b0 x
F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2
F tool/lempar.c 3ec1463a034b37d87d782be5f6b8b10a3b1ecbe7
F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6
- F tool/mkautoconfamal.sh 5a5441280b509d2bb3bdc71bfb63781b0d570373
+ F tool/mkautoconfamal.sh a29b14d54302b33fd892958f6895582ea90e4a45
-F tool/mkkeywordhash.c 06ec0b78bd4fa68c12d90ef2bdfe76b039133ff8
+F tool/mkkeywordhash.c 24c1fb16c51f4f72c9027230ff575c47b6d3b828
- F tool/mkopcodec.tcl edde8adc42621b5e598127f8cdc6d52cfe21f52b
- F tool/mkopcodeh.tcl e04177031532b7aa9379ded50e820231ac4abd6e
+ F tool/mkmsvcmin.tcl d57e6efc9428605f5418d0b235721ddf7b5d9c0b
+ F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c
+ F tool/mkopcodeh.tcl 385c62d78c38b2d92146dcb5abd319dbbc33506d
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/mkpragmatab.tcl f0d5bb266d1d388cf86fce5ba01a891e95d72d41
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P fccc5f20c360fa17c3692a9f1fc1d16612632a7f 18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e
- R c5e7135c9880ad67a6f698683df434c2
-P 6d7d4703ebf3754bec74123d5ba7e861a705f90f
-R a0fd58918162f72722cea72a597641d9
++P 5520f600eade720f465575ab1661dcddaba5adcf d8b7b1996eefae7768bfcb82d4ff22c69392aa63
++R 9213491ac284f4e4eb57c9c322bab19c
U drh
- Z 0f1cff00228814b4a74b5faddee4cad3
-Z 8a77cde1543981fcb216eb719b02e019
++Z a83bc501058d2433447cf9fd85f4cd41
case OP_AutoCommit: {
int desiredAutoCommit;
int iRollback;
- int turnOnAC;
+ int bConcurrent;
+ int hrc;
desiredAutoCommit = pOp->p1;
iRollback = pOp->p2;
- turnOnAC = desiredAutoCommit && !db->autoCommit;
+ bConcurrent = pOp->p3;
assert( desiredAutoCommit==1 || desiredAutoCommit==0 );
assert( desiredAutoCommit==1 || iRollback==0 );
+ assert( desiredAutoCommit==0 || bConcurrent==0 );
+ assert( db->autoCommit==0 || db->bConcurrent==0 );
assert( db->nVdbeActive>0 ); /* At least this one VM is active */
assert( p->bIsReader );
assert( desiredAutoCommit==1 );
sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
db->autoCommit = 1;
- }else if( desiredAutoCommit && db->nVdbeWrite>0 ){
- /* If this instruction implements a COMMIT and other VMs are writing
- ** return an error indicating that the other VMs must complete first.
- */
+ db->bConcurrent = 0;
++ }else if( desiredAutoCommit
++ && (db->nVdbeWrite>0 || (db->bConcurrent && db->nVdbeActive>1)) ){
++ /* A transaction may only be committed if there are no other active
++ ** writer VMs. If the transaction is CONCURRENT, then it may only be
++ ** committed if there are no active VMs at all (readers or writers).
++ **
++ ** If this instruction is a COMMIT and the transaction may not be
++ ** committed due to one of the conditions above, return an error
++ ** indicating that other VMs must complete before the COMMIT can
++ ** be processed. */
+ sqlite3VdbeError(p, "cannot commit transaction - "
+ "SQL statements in progress");
+ rc = SQLITE_BUSY;
+ break;
}else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
goto vdbe_return;
}else{
pDb = &db->aDb[pOp->p1];
assert( pDb->pBt!=0 );
assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
- pIn3 = &aMem[pOp->p3];
- sqlite3VdbeMemIntegerify(pIn3);
+#ifndef SQLITE_OMIT_CONCURRENT
+ if( db->bConcurrent
+ && (pOp->p2==BTREE_USER_VERSION || pOp->p2==BTREE_APPLICATION_ID)
+ ){
+ rc = SQLITE_ERROR;
+ sqlite3VdbeError(p, "cannot modify %s within CONCURRENT transaction",
+ pOp->p2==BTREE_USER_VERSION ? "user_version" : "application_id"
+ );
+ break;
+ }
+#endif
/* See note about index shifting on OP_ReadCookie */
- rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, (int)pIn3->u.i);
+ rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3);
if( pOp->p2==BTREE_SCHEMA_VERSION ){
/* When the schema cookie changes, record the new cookie internally */
- pDb->pSchema->schema_cookie = (int)pIn3->u.i;
+ assert( db->bConcurrent==0 );
+ pDb->pSchema->schema_cookie = pOp->p3;
db->flags |= SQLITE_InternChanges;
}else if( pOp->p2==BTREE_FILE_FORMAT ){
/* Record changes in the file format */