]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge latest wal2 changes into this branch.
authordan <Dan Kennedy>
Thu, 4 May 2023 14:41:10 +0000 (14:41 +0000)
committerdan <Dan Kennedy>
Thu, 4 May 2023 14:41:10 +0000 (14:41 +0000)
FossilOrigin-Name: b2e0800b24f8c676e189d63abd77ca45a972de9722ece5de6efe2db6ede75cbd

24 files changed:
1  2 
Makefile.in
ext/fts5/fts5_main.c
ext/session/sessionH.test
ext/session/sqlite3session.c
ext/session/sqlite3session.h
ext/session/test_session.c
manifest
manifest.uuid
src/btree.c
src/btreeInt.h
src/build.c
src/func.c
src/main.c
src/os_unix.c
src/pager.c
src/parse.y
src/select.c
src/sqlite.h.in
src/sqliteInt.h
src/test1.c
src/update.c
src/vdbe.c
src/vdbeaux.c
src/wal.c

diff --cc Makefile.in
Simple merge
index 5d38c97f21dad892a9c2ba82544d343c806337a5,13921ce49e6e74e756c516584d6c77030c1899b8..f41570d73be9dc2725cebef4f2438c1efe05ac15
@@@ -1732,7 -1742,19 +1742,20 @@@ static int fts5UpdateMethod
      }
    }
  
+   if( rc==SQLITE_OK 
+    && bUpdateOrDelete 
+    && pConfig->bSecureDelete 
+    && pConfig->iVersion==FTS5_CURRENT_VERSION 
+   ){
+     rc = sqlite3Fts5StorageConfigValue(
+         pTab->pStorage, "version", 0, FTS5_CURRENT_VERSION_SECUREDELETE
+     );
+     if( rc==SQLITE_OK ){
+       pConfig->iVersion = FTS5_CURRENT_VERSION_SECUREDELETE;
+     }
+   }
 +  sqlite3Fts5IndexCloseReader(pTab->p.pIndex);
    pTab->p.pConfig->pzErrmsg = 0;
    return rc;
  }
Simple merge
index e576186a94d3cde17de0e9eb622bc3b1da4e963c,67940884949c060542d4cca72f116ad2870c53e1..b41a41b69242e4d134e78942a876cf15d20f23af
@@@ -25,13 -25,8 +25,15 @@@ typedef struct SessionInput SessionInpu
  # endif
  #endif
  
+ #define SESSIONS_ROWID "_rowid_"
 +/*
 +** The three different types of changesets generated.
 +*/
 +#define SESSIONS_PATCHSET      0
 +#define SESSIONS_CHANGESET     1
 +#define SESSIONS_FULLCHANGESET 2
 +
  static int sessions_strm_chunk_size = SESSIONS_STRM_CHUNK_SIZE;
  
  typedef struct SessionHook SessionHook;
@@@ -2305,10 -2405,10 +2413,10 @@@ static int sessionAppendUpdate
      /* If at least one field has been modified, this is not a no-op. */
      if( bChanged ) bNoop = 0;
  
-     /* Add a field to the old.* record. This is omitted if this modules is
+     /* Add a field to the old.* record. This is omitted if this module is
      ** currently generating a patchset. */
 -    if( bPatchset==0 ){
 -      if( bChanged || abPK[i] ){
 +    if( ePatchset!=SESSIONS_PATCHSET ){
 +      if( ePatchset==SESSIONS_FULLCHANGESET || bChanged || abPK[i] ){
          sessionAppendBlob(pBuf, pCsr, nAdvance, &rc);
        }else{
          sessionAppendByte(pBuf, 0, &rc);
Simple merge
index 63023d5a95fa17ca2382bbc99556af74e821c16d,0836238b5d320f62a5d21e0905a2b5ceb57b6f37..d21decf1c3c7958bcc9f230d1d54c526fceca41f
@@@ -248,20 -249,20 +250,20 @@@ static int SQLITE_TCLAPI test_session_c
      const char *zSub;
      int nArg;
      const char *zMsg;
 -    int iSub;
    } aSub[] = {
 -    { "attach",       1, "TABLE",      }, /* 0 */
 -    { "changeset",    0, "",           }, /* 1 */
 -    { "delete",       0, "",           }, /* 2 */
 -    { "enable",       1, "BOOL",       }, /* 3 */
 -    { "indirect",     1, "BOOL",       }, /* 4 */
 -    { "isempty",      0, "",           }, /* 5 */
 -    { "table_filter", 1, "SCRIPT",     }, /* 6 */
 +    { "attach",       1, "TABLE"       }, /* 0 */
 +    { "changeset",    0, ""            }, /* 1 */
 +    { "delete",       0, ""            }, /* 2 */
 +    { "enable",       1, "BOOL"        }, /* 3 */
 +    { "indirect",     1, "BOOL"        }, /* 4 */
 +    { "isempty",      0, ""            }, /* 5 */
 +    { "table_filter", 1, "SCRIPT"      }, /* 6 */
      { "patchset",     0, "",           }, /* 7 */
 -    { "diff",         2, "FROMDB TBL", }, /* 8 */
 -    { "memory_used",  0, "",           }, /* 9 */
 -    { "changeset_size", 0, "",         }, /* 10 */
 -    { "object_config", 2, "OPTION INTEGER", }, /* 11 */
 +    { "diff",         2, "FROMDB TBL"  }, /* 8 */
 +    { "fullchangeset",0, ""            }, /* 9 */
 +    { "memory_used",  0, "",           }, /* 10 */
 +    { "changeset_size", 0, "",         }, /* 11 */
-     { "object_config_size", 1, "INTEGER", }, /* 12 */
++    { "object_config", 2, "OPTION INTEGER", }, /* 12 */
      { 0 }
    };
    int iSub;
        Tcl_SetObjResult(interp, Tcl_NewWideIntObj(nSize));
        break;
      }
-     case 12: {
 -    case 11: {    /* object_config */
++    case 12: {    /* object_config */
+       struct ObjConfOpt {
+         const char *zName;
+         int opt;
+       } aOpt[] = {
+         { "size", SQLITE_SESSION_OBJCONFIG_SIZE },
+         { "rowid", SQLITE_SESSION_OBJCONFIG_ROWID },
+         { 0, 0 }
+       };
+       size_t sz = sizeof(aOpt[0]);
 -
        int rc;
        int iArg;
-       if( Tcl_GetIntFromObj(interp, objv[2], &iArg) ){
+       int iOpt;
+       if( Tcl_GetIndexFromObjStruct(interp,objv[2],aOpt,sz,"option",0,&iOpt) ){
          return TCL_ERROR;
        }
-       rc = sqlite3session_object_config(
-           pSession, SQLITE_SESSION_OBJCONFIG_SIZE, &iArg
-       );
+       if( Tcl_GetIntFromObj(interp, objv[3], &iArg) ){
+         return TCL_ERROR;
+       }
+       rc = sqlite3session_object_config(pSession, aOpt[iOpt].opt, &iArg);
        if( rc!=SQLITE_OK ){
          extern const char *sqlite3ErrName(int);
          Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1));
diff --cc manifest
index cdf59343001d80e4f2f19aab9063919c78e6c406,fd0000778cd060e646b92370e7640c1066838b6b..730a2c437152d0f643eac530283ddb448436c6e0
+++ b/manifest
@@@ -1,13 -1,13 +1,13 @@@
- C Fix\sa\sproblem\swith\sthe\ssqlite3sessions_fullchangeset()\sand\ssqlite3changebatch_add()\sAPIs\son\sthis\sbranch.
- D 2023-02-24T19:58:56.018
 -C Update\sthis\sbranch\swith\slatest\schanges\sfrom\strunk.
 -D 2023-05-04T14:31:17.113
++C Merge\slatest\swal2\schanges\sinto\sthis\sbranch.
++D 2023-05-04T14:41:10.021
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
  F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
- F Makefile.in 25a8940b13d297de050136c8439ae5543431dbcf2ecc1ac27f4f21bde947dd29
 -F Makefile.in e9c71f89ac588465e882ac424fa2f567d628ccaf18c967ddfb99a068d0679a71
++F Makefile.in 4921a22ab33b7f0af9854a9b089451e5e7c612eb7fe8dfb90cdff982681e368a
  F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
- F Makefile.msc 85b14c8ed0ec7885c3feaf68dce5cee8d916d510f8d72ae6f62ad608c909f8f2
- F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e
- F VERSION 413ec94920a487ae32c9a2a8819544d690662d6f7c7ce025c0d0b8a1e74fa9db
+ F Makefile.msc 1305ba03fb050fe0a00cbd8aed04456f68a49b53a355ea0b180cf19d2e0c5abc
+ F README.md e05bd8fcb45da04ab045c37f79a98654e8aa3b3b8f302cfbba80a0d510df75f7
+ F VERSION 17f95ae2fdf21f0e9575eb0b0511ea63f15d71dfff431b21c2b4adbfa70cfbbf
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
@@@ -88,14 -87,14 +88,14 @@@ F ext/fts3/unicode/mkunicode.tcl d5aebf
  F ext/fts3/unicode/parseunicode.tcl a981bd6466d12dd17967515801c3ff23f74a281be1a03cf1e6f52a6959fc77eb
  F ext/fts5/extract_api_docs.tcl a36e54ec777172ddd3f9a88daf593b00848368e0
  F ext/fts5/fts5.h c132a9323f22a972c4c93a8d5a3d901113a6e612faf30ca8e695788438c5ca2a
- F ext/fts5/fts5Int.h c0d46e399e345e35985b72a1c1af025973bfaa5b1e3563b0ce3bb0ce144a7ca3
- F ext/fts5/fts5_aux.c f558e1fb9f0f86a4f7489e258c162e1f947de5ff2709087fbb465fddb7092f98
+ F ext/fts5/fts5Int.h ed48a096418ff4a7c02ac9bd1e8d40c46de21b79a132b8b08d3f32233703de7d
+ F ext/fts5/fts5_aux.c 572d5ec92ba7301df2fea3258576332f2f4d2dfd66d8263afd157d9deceac480
  F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b729225eeaf6a5
- F ext/fts5/fts5_config.c 501e7d3566bc92766b0e11c0109a7c5a6146bc41144195459af5422f6c2078aa
- F ext/fts5/fts5_expr.c 48e8e45261c6030cf5c77f606217a22722b1a4d0b34e2ba6cbfc386581627989
+ F ext/fts5/fts5_config.c 051056a9052f5d3a4d1c695f996fd364f920e341f136c60ab2c04aa7e267113f
+ F ext/fts5/fts5_expr.c 7d298d76ea010c339b26ca47f6f69e9aef520ea46c083deaa4e83e87cf0e94b1
  F ext/fts5/fts5_hash.c d4fb70940359f2120ccd1de7ffe64cc3efe65de9e8995b822cd536ff64c96982
- F ext/fts5/fts5_index.c df5b29576a409f673e54b470723d817df9d5167cff208c48ab9a3773cba6fa89
- F ext/fts5/fts5_main.c fa213e1b894441b4ee5dbcc597a17a3fab8daf34b8d1c4d9691d53281d968746
+ F ext/fts5/fts5_index.c de3cdae2e0056594aad97a728be5c43b6d7a6cdc7e9cc16f197892b2d8689c21
 -F ext/fts5/fts5_main.c b4dba04a36aaf9b8e8cef0100b6dbb422cc74753eacc11d6401cac7a87c0f38d
++F ext/fts5/fts5_main.c b49be6efe6b63b69ea6954fc690b833b2e020e4e071cc57c3d79c57abf722aaa
  F ext/fts5/fts5_storage.c 76c6085239eb44424004c022e9da17a5ecd5aaec859fba90ad47d3b08f4c8082
  F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae
  F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
@@@ -447,30 -453,30 +457,32 @@@ F ext/session/session9.test 5409d90d814
  F ext/session/sessionA.test 1feeab0b8e03527f08f2f1defb442da25480138f
  F ext/session/sessionB.test c4fb7f8a688787111606e123a555f18ee04f65bb9f2a4bb2aa71d55ce4e6d02c
  F ext/session/sessionC.test f8a5508bc059ae646e5ec9bdbca66ad24bc92fe99fda5790ac57e1f59fce2fdf
- F ext/session/sessionD.test 4f91d0ca8afc4c3969c72c9f0b5ea9527e21de29039937d0d973f821e8470724
+ F ext/session/sessionD.test f5c6a762d00bc6ca9d561695c322ba8ecca2bed370486707ef37cf565d2f6c73
  F ext/session/sessionE.test b2010949c9d7415306f64e3c2072ddabc4b8250c98478d3c0c4d064bce83111d
  F ext/session/sessionF.test d37ed800881e742c208df443537bf29aa49fd56eac520d0f0c6df3e6320f3401
- F ext/session/sessionG.test 3828b944cd1285f4379340fd36f8b64c464fc84df6ff3ccbc95578fd87140b9c
- F ext/session/sessionH.test ecabc041e04e48671a94cd7c02993bc73f75dced943280a026e89cdf64374eef
- F ext/session/session_common.tcl f613174665456b2d916ae8df3e5735092a1c1712f36f46840172e9a01e8cc53e
+ F ext/session/sessionG.test 3efe388282d641b65485b5462e67851002cd91a282dc95b685d085eb8efdad0a
 -F ext/session/sessionH.test 71bbff6b1abb2c4ac62b84dee53273c37e0b21e5fde3aed80929403e091ef859
++F ext/session/sessionH.test 29a5441c3dc0a63fa596d745e64bc6c636e062ae04cd89bc84e32c7d98b1fa9b
+ F ext/session/session_common.tcl e5598096425486b363718e2cda48ee85d660c96b4f8ea9d9d7a4c3ef514769da
  F ext/session/session_speed_test.c dcf0ef58d76b70c8fbd9eab3be77cf9deb8bc1638fed8be518b62d6cbdef88b3
- F ext/session/sessionat.test 46fd847f6ed194ebb7ebef9fe68b2e2ec88d9c2383a6846cddc5604b35f1d4ae
- F ext/session/sessionbig.test 890ade19e3f80f3d3a3e83821ff79c5e2af906a67ecb5450879f0015cadf101e
+ F ext/session/sessionat.test 00c8badb35e43a2f12a716d2734a44d614ff62361979b6b85419035bc04b45ee
+ F ext/session/sessionbig.test 47c381e7acfabeef17d98519a3080d69151723354d220afa2053852182ca7adf
  F ext/session/sessiondiff.test ad13dd65664bae26744e1f18eb3cbd5588349b7e9118851d8f9364248d67bcec
- F ext/session/sessionfault.test da273f2712b6411e85e71465a1733b8501dbf6f7
- F ext/session/sessionfault2.test dd593f80b6b4786f7adfe83c5939620bc505559770cc181332da26f29cddd7bb
+ F ext/session/sessionfault.test 573bf027fb870d57bd4e7cf50822a3e4b17b2b923407438747aaa918dec57a09
+ F ext/session/sessionfault2.test b0d6a7c1d7398a7e800d84657404909c7d385965ea8576dc79ed344c46fbf41c
  F ext/session/sessioninvert.test 04075517a9497a80d39c495ba6b44f3982c7371129b89e2c52219819bc105a25
  F ext/session/sessionmem.test f2a735db84a3e9e19f571033b725b0b2daf847f3f28b1da55a0c1a4e74f1de09
  F ext/session/sessionnoop.test a9366a36a95ef85f8a3687856ebef46983df399541174cb1ede2ee53b8011bc7
- F ext/session/sessionrebase.test ccfa716b23bd1d3b03217ee58cfd90c78d4b99f53e6a9a2f05e82363b9142810
- F ext/session/sessionsize.test 6f644aff31c7f1e4871e9ff3542766e18da68fc7e587b83a347ea9820a002dd8
- F ext/session/sessionstat1.test 218d351cf9fcd6648f125a26b607b140310160184723c2666091b54450a68fb5
+ F ext/session/sessionnoop2.test 5c9a882219e54711c98dccd2fd81392f189a59325e4fb5d8ed25e33a0c2f0ba2
+ F ext/session/sessionrebase.test 702378bdcb5062f1106e74457beca8797d09c113a81768734a58b197b5b334e2
+ F ext/session/sessionrowid.test 6323ba831721205fd729929745038fd54e9d128c66c654b8d0b26853095a321c
+ F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795
+ F ext/session/sessionstat1.test b039e38e2ba83767b464baf39b297cc0b1cc6f3292255cb467ea7e12d0d0280c
  F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
 -F ext/session/sqlite3session.c e50a9218ee360db0a25298adc6614162d80ebe65d3f6a5b0a021e0902f6536a1
 -F ext/session/sqlite3session.h 653e9d49c4edae231df8a4c8d69c2145195aedb32462d4b44229dbee7d2680fb
 -F ext/session/test_session.c 5285482f83cd92b4c1fe12fcf88210566a18312f4f2aa110f6399dae46aeccbb
 +F ext/session/sqlite3changebatch.c d488b42d8fd49fb013a1e9c4535232680dabeb28ae8f9421b65ea0ccc3b430f7
 +F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
- F ext/session/sqlite3session.c caa800fc9665e2e1bc15861ae285e47277c0950292fc5efa982503ce46b73929
- F ext/session/sqlite3session.h 55221fa46444a39b99a845d4e0e23ad192e152a88ba6e45b084b5bc9be5bdef8
- F ext/session/test_session.c 40fbe5761b910dbf81d7b34197ef7b8956a2095cdd35b3e42e9c63778a67dec5
++F ext/session/sqlite3session.c 2a1cd984ace4215b1c992ac83721316685ba9c0b29fb28a15d08f39d68de53df
++F ext/session/sqlite3session.h e4c9333fab6086b70d73e17daa36212945412ab45fd42871c37991d2ba22af62
++F ext/session/test_session.c dd6a4db90a15c0b5d41c69250be5cfe2fa8a45a12062f1db2e205dcd91ea2c6b
  F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
  F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
  F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
@@@ -561,38 -569,38 +575,38 @@@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
  F sqlite_cfg.h.in baf2e409c63d4e7a765e17769b6ff17c5a82bbd9cbf1e284fd2e4cefaff3fcf2
- F src/alter.c 3ca2f449c890f8b86ec9e06f0c4fccf0648941c3308a16904cb2852227db83f7
- F src/analyze.c b597c382f23b19cce563211181e84b7e8edddd6871d5f630bbadedb57e562806
+ F src/alter.c 482c534877fbb543f8295992cde925df55443febac5db5438d5aaba6f78c4940
+ F src/analyze.c a1f3061af16c99f73aed0362160176c31a6452de1b02ada1d68f6839f2a37df0
  F src/attach.c cc9d00d30da916ff656038211410ccf04ed784b7564639b9b61d1839ed69fd39
  F src/auth.c f4fa91b6a90bbc8e0d0f738aa284551739c9543a367071f55574681e0f24f8cf
- F src/backup.c a2891172438e385fdbe97c11c9745676bec54f518d4447090af97189fd8e52d7
+ F src/backup.c 5c97e8023aab1ce14a42387eb3ae00ba5a0644569e3476f38661fa6f824c3523
 -F src/bitvec.c 7c849aac407230278445cb069bebc5f89bf2ddd87c5ed9459b070a9175707b3d
 +F src/bitvec.c 3907fcbe8a0c8c2db58d97087d15cdabbf2842adb9125df9ab9ff87d3db16775
  F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca
- F src/btree.c a8fedc8ac6583a393ad88077cbb8d9bc82fd372c6d8cfa383bcb159b1b1b11db
 -F src/btree.c 744b442cac7ffaf4619810485f5eae9d115eab5abf5f109f8c6e3474f39be3c3
 -F src/btree.h aa354b9bad4120af71e214666b35132712b8f2ec11869cb2315c52c81fad45cc
 -F src/btreeInt.h a9ae91868acc4b3146d47ae2a072aac2cf41ecb7386015752160c8e1a212d9f2
 -F src/build.c 8357d6ca9a8c9afc297c431df28bc2af407b47f3ef2311875276c944b30c4d54
++F src/btree.c 827ca2c3508bfb97cffdb64c46015b9d454298431397cf01dd565b6a34ac4a9d
 +F src/btree.h 77a092acf63526827e74e88d0480123212d079593a841ff1fe85507adf256ef6
- F src/btreeInt.h c7ee54b020d7895ca7bee154c0d5e52e435587475a0a34543cd982cb190af42f
- F src/build.c a5641434e3ae4050da833f1df9ab2b1475866112df16568e0ad196c8b6e25f7d
++F src/btreeInt.h 6b0e8a3bcd995cb0019729c0d3138b7aea19e6cc26d78f8d55e7597e70e8c6cf
++F src/build.c 58d1e9f2272c35068d99df45e63ac049ce13ee5933013f253b8bf1f909d04312
  F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a
  F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
  F src/ctime.c f439c21d439aaf4706950a2597474f1a796b557a0750666308202c0f601ef0fd
  F src/date.c f21815ca7172ce073db3163ac54c8d9f2841077165c1a6123b4d1c376a0c7ec7
- F src/dbpage.c d47549716549311f79dc39fe5c8fb19390a6eb2c960f8e37c89a9c4de0c1052e
+ F src/dbpage.c f3eea5f7ec47e09ee7da40f42b25092ecbe961fc59566b8e5f705f34335b2387
  F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef
- F src/delete.c 86573edae75e3d3e9a8b590d87db8e47222103029df4f3e11fa56044459b514e
- F src/expr.c 2e5e67e800c9416996df52409746a2f3c7dadf5d38b5a367ce379b239e3f40c8
+ F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873
+ F src/expr.c 871cfd80c516ee39d90414b2d3da2b5bc9c9e21fe87b7eb787ea7ae4b6461758
  F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
- F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
- F src/func.c 9274f1c5c664b35108dfdaaee1444488573317e1ba58f14a4c12638677b1119a
- F src/global.c e06ff8e0acd85aec13563c9ecb44fbbf38232ccf73594998fd880b92d619594b
+ F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83
 -F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122
++F src/func.c 48acd78a3a583f42d9b5c2172f90f4de570045b37c930a2d8284e67f08c63664
+ F src/global.c bd0892ade7289f6e20bff44c07d06371f2ff9b53cea359e7854b9b72f65adc30
  F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565
  F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
  F src/hwtime.h b638809e083b601b618df877b2e89cb87c2a47a01f4def10be4c4ebb54664ac7
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
- F src/insert.c 1b11a2e33ee52db93c02fddac67e39d00161d61b69fac2675b82f2aa68c1b61c
- F src/json.c c85ed6fce06f43d414b0d7fff64749d43a0dbd1067123ee407bd3a0752454161
+ F src/insert.c a8de1db43335fc4946370a7a7e47d89975ad678ddb15078a150e993ba2fb37d4
+ F src/json.c 7297dbd1d623850578c21bb8a99b87e745d09e14fd36ebc965ace67c86f902b4
  F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
- F src/loadext.c b04eb648cedc45efe4298e1ef439ac4f0096ae27b5f01accb0a1f49d57789128
- F src/main.c 938078d665c7fd2971a205d3912315291e0c1a6d669004d0ce5616d7eddcaf4f
+ F src/loadext.c be5af440f3192c58681b5d43167dbca3ccbfce394d89faa22378a14264781136
 -F src/main.c 035be2e9ba2a0fc1701a8ab1880af3001a968a24556433538a6c073558ee4341
++F src/main.c 711be7ef7cc818de5f89887bad67e8196fcad8af9bd27a4ac354447e2b5a4833
  F src/malloc.c 47b82c5daad557d9b963e3873e99c22570fb470719082c6658bf64e3012f7d23
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
@@@ -613,33 -621,33 +627,33 @@@ F src/os.h 1ff5ae51d339d0e30d8a9d814f4b
  F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e06
  F src/os_kv.c 4d39e1f1c180b11162c6dc4aa8ad34053873a639bac6baae23272fc03349986a
  F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d872107
- F src/os_unix.c d861b444c69a9889a8a7c039c0d99f65344f71e458ae4a3ea659169f4f7bbb46
- F src/os_win.c 295fe45f18bd86f2477f4cd79f3377c6f883ceb941b1f46808665c73747f2345
 -F src/os_unix.c 1b3ddb7814c4bf37f494c04d2ab30c1ced5b2c927267e1930ce7cd388787a96d
++F src/os_unix.c a585801080e5d36365a409221813534216f503b58f1f7a4398f225c4ae0bc424
+ F src/os_win.c 2b2411279f7b24f927591561303fc5871845732df42641cbf695c23640b16975
  F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
- F src/pager.c e5b7c68297f0192f5e3262604c79544284969d6267c305a66708cddadd620be8
 -F src/pager.c 33aaa2ca2fa637c86a844bc50c68f1380ea6ba69d623d0846af399927e56bb43
 -F src/pager.h c49ff262186a78bc5f27e3891edefb900afa769b9e2eaeca0322c7f3553536d4
 -F src/parse.y 146f9a1db7db5ef4299c6897d335e5abed348c2626190d2877d45ffa210fd4ca
++F src/pager.c c0de0168428e951e5e2f7ee6b63a5dced0b71f74e5dabcdde82bd3e3e270e93e
 +F src/pager.h 3ddab454e313da7c93f92fea35c842ad17ae9f4e96254871ddb0171b2bfb859a
- F src/parse.y 9006b990da7f22268bb7825603a2d4c32140e13ce15771f4cf35dbb114216c31
- F src/pcache.c f4268f7f73c6a3db12ce22fd25bc68dc42315d19599414ab1207d7cf32f79197
- F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
++F src/parse.y 03d4d7a079481e6fab9f9256971fa87c716af20d46fffba2ecea21583e6f05db
+ F src/pcache.c 8ee13acccfd9accbf0af94910b7323dd7f7d55300d92ddafcf40e34fcc8e21be
+ F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
 -F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc
 +F src/pcache1.c f3d06b0c1bd400cf657095757d427b149f6c1788e9447b2ce019988a5344ede8
- F src/pragma.c bcd8519da83da8023fd340f71cddfca33805d332e89b55cc974285f146e42e76
+ F src/pragma.c 450aab7bd07c7570355f3b34df830869c86882f33b7acca842fbdf45146c0c8a
 -F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 +F src/pragma.h 1f421360eed1a7721e8c521463df8519a7c8d0d5893ebd9dbfe0dba8de996f8c
- F src/prepare.c ce87a08cfddd45a147150db34190b1986f2d4a0e0828858cb6bd908c78fb02e3
- F src/printf.c ff4b05e38bf928ff1b80d3dda4f977b10fe39ecbfe69c018224c7e5594fb2455
+ F src/prepare.c 6350675966bd0e7ac3a464af9dbfe26db6f0d4237f4e1f1acdb17b12ad371e6e
+ F src/printf.c 7eac1a9896a80697e03e08963e210830532ae2ff610e16c193e95af007ca5623
 -F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 +F src/random.c 9bd018738ec450bf35d28050b4b33fa9a6eebf3aaefb1a1cff42dc14a7725673
- F src/resolve.c d62c5665279cc7485f9d45b5e20911cc7b19c203f268321a90d05d74f4725750
+ F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032
  F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
- F src/select.c 25b8637206ab12fd7240998e5b7cb52c55ea7efafd054ab789e4aee0004de975
- F src/shell.c.in 6f36f5ca05f1bebf74935a7fcf2dce983016e807a09cbd752a673583ad7da087
- F src/sqlite.h.in f62533504074a363fcf423f2efeb9635a1290afd11805a1ef0e27a47699b7bea
 -F src/select.c f879cef11c462a2c37a8c906932781e384c3bb32042c355a704a043029c90d27
++F src/select.c 79a6e11500d373b538aef918295d66a27f43481368557e06a07666b3b1c22017
+ F src/shell.c.in 39ea3d9c17c65c42c6c415222d89a32ae683b245c8af7b4bfc544d9246055d16
 -F src/sqlite.h.in d6b0b83b2deab8f92ef7cc6f6fb94fa59d21c59f7b55f4c693bfff161ce42238
++F src/sqlite.h.in e0cb5c60fb0654c2e772f61c920dc9d43ae26c9d4f22f038ce09600b8a527a16
  F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
  F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4
- F src/sqliteInt.h dba61730ba58f7686f5746d676fff240d54aaf259c56212b6e65a97fb3900a67
 -F src/sqliteInt.h 91303fb4ee858b85ae1a8a48cc8f723339b81ba7138b42ee5c000083bfff0934
++F src/sqliteInt.h 4dfafdb2314a331174b5754a77cdbe1d028268215786468e858d6821c8990415
  F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
  F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
  F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
  F src/tclsqlite.c 8522a04fb9c84faa1d80354430ae0ee9349727a3a4b32e3cfe39b9be8324cabd
- F src/test1.c 1c4eab4d0357624dd7db93ddb27e1bedbc3be57dae0cd19a4dcf20bec7cd32b0
 -F src/test1.c 8eab61fb2813aa212d97ab188e85fc9ca7b89d9ff5ff05d59d9aa0c491a6c721
++F src/test1.c fce757d6c5cc7ecf010283fabe674cb021c1ce3f874803b21c978e6c768138e1
  F src/test2.c 827446e259a3b7ab949da1542953edda7b5117982576d3e6f1c24a0dd20a5cef
  F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
  F src/test4.c 4533b76419e7feb41b40582554663ed3cd77aaa54e135cf76b3205098cd6e664
@@@ -678,8 -686,8 +692,8 @@@ F src/test_quota.h 2a8ad1952d1d2ca9af0c
  F src/test_rtree.c 671f3fae50ff116ef2e32a3bf1fe21b5615b4b7b
  F src/test_schema.c f5d6067dfc2f2845c4dd56df63e66ee826fb23877855c785f75cc2ca83fd0c1b
  F src/test_sqllog.c 540feaea7280cd5f926168aee9deb1065ae136d0bbbe7361e2ef3541783e187a
 -F src/test_superlock.c 4839644b9201da822f181c5bc406c0b2385f672e
 +F src/test_superlock.c f4d4cc7319a608a54b7608158e8c7135fac19b88d6179e5bf17080e89d1f0278
- F src/test_syscall.c 1073306ba2e9bfc886771871a13d3de281ed3939
+ F src/test_syscall.c 9fdb13b1df05e639808d44fcb8f6064aaded32b6565c00b215cfd05a060d1aca
  F src/test_tclsh.c 01c76e2ee362cda246710c476351b105371cf4620857c8492121858744998dc9
  F src/test_tclvar.c 33ff42149494a39c5fbb0df3d25d6fafb2f668888e41c0688d07273dcb268dfc
  F src/test_thread.c 7ddcf0c8b79fa3c1d172f82f322302c963d923cdb503c6171f3c8081586d0b01
@@@ -693,32 -701,32 +707,32 @@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f
  F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
  F src/tokenize.c 1305797eab3542a0896b552c6e7669c972c1468e11e92b370533c1f37a37082b
  F src/treeview.c fccf3b8c517c1f55cb380c1522febe6921fcb2bd800c16c78cab571d0eb0ccbd
- F src/trigger.c 5e68b790f022b8dafbfb0eb244786512a95c9575fc198719d2557d73e5795858
- F src/update.c 898711048832006296d5b5f7dfad059c8f436048226bb0640f90fd8c0752fb65
+ F src/trigger.c ad6ab9452715fa9a8075442e15196022275b414b9141b566af8cdb7a1605f2b0
 -F src/update.c 3f4fb5ad7c9b48d7911974d6579192bb3a6c27f46140b6cbb9139cc8a77b8691
++F src/update.c d45803226442cc84bfe9d48dde9978f5bd51e526b703a836719815eacf8e440c
  F src/upsert.c 5303dc6c518fa7d4b280ec65170f465c7a70b7ac2b22491598f6d0b4875b3145
  F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
- F src/util.c 3ff7bc2b48dd425b1448304bb86273b05da1621f136d51dbb9789f8803559a1f
+ F src/util.c d4bcb560471cd94e6e17d448311f8d5bf81a7e5276295a53501058ef1b95dd1a
 -F src/vacuum.c 84ce7f01f8a7a08748e107a441db83bcec13970190ddcb0c9ff522adbc1c23fd
 -F src/vdbe.c 4c2c3da54799a253ef7a76128ff2c28e4537946ae0032929a0c46ebb3c86c79a
 +F src/vacuum.c f6e47729554e0d2c576bb710c415d5bc414935be0d7a70f38d1f58ffa7a6d8c0
- F src/vdbe.c ff9be73325b46a019609d028bffa7b8816e00184aca95832a19ca521ef6ffcde
- F src/vdbe.h 73b904a6b3bb27f308c6cc287a5751ebc7f1f89456be0ed068a12b92844c6e8c
++F src/vdbe.c fe7fa949ffd17f52c4b518751fc4fd49cecc3e64c84dedf77a2e4a30333eafea
+ F src/vdbe.h 637ae853b7d42ae3951034cc63ab7c8af837861f79504cdb5399552fcd89a884
  F src/vdbeInt.h a4147a4ddf613cb1bcb555ace9e9e74a9c099d65facd88155f191b1fb4d74cfb
- F src/vdbeapi.c 40c47b1528d308a322203de21d2e0d711753257ed9771771b6129214b1d65932
- F src/vdbeaux.c 9aa60599fb2a94a7f3603f14c184576963bf29556d42fd6299669047a87ec616
+ F src/vdbeapi.c b4982cde547054c4f7341198db3c3008a48e1eb028f757601bf5bf2fc026cbcf
 -F src/vdbeaux.c 6ee48db408d4c297a363f1e31145c09793a580e7c508bb36063dd017d67117a2
++F src/vdbeaux.c f6d04ddce4450244ef4e845deb74462edd01f731bc57b737ae2d5a13d34a6092
  F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd
- F src/vdbemem.c 0388576b7cf0be13ce14b9e3b8aa90b8a1b923b60321d0242131ae0b5732b43b
+ F src/vdbemem.c 1cac4028c0dabbf1f3259f107440e2780e05ac9fe419e9709e6eb4e166ba714b
  F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35
  F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
  F src/vdbevtab.c aae4bd769410eb7e1d02c42613eec961d514459b1c3c1c63cfc84e92a137daac
- F src/vtab.c a39f6ed161f16a84ff445af9dba4776b2cf0898be08a33bee8e1128a66c0074b
+ F src/vtab.c 4a1b231b5938de0282fbb605eb068ca673a1b6a383130f54d1bcbbac951988ad
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c b3378fe90ee98d63dc2f054423b552be61ec5d73c19e4438b6bb62d4724256d4
 -F src/wal.c 2bda91cfc1d42df42b013f59c008a6b9ad8827b3453779020b355bc809344272
 -F src/wal.h d01234e828943e002040c22a7e017642962f9fd9b2dc142fa599769ae4e459e9
++F src/wal.c b6c4ad0a5689dbba6f339cff30b8fb029b092db81544821cf05f670368eb5ff8
 +F src/wal.h 7a733af13b966ecb81872ce397e862116b3575ea53245b90b139a2873ee87825
  F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
- F src/where.c 38c36bb654b4172148aef3b295bbbc1342b52078cf20174f771c746caa98f69a
+ F src/where.c f69d94f34e1c523cd9b66041e4afe015cad29888617f3c09a2a5bc36018917d0
  F src/whereInt.h e25203e5bfee149f5f1225ae0166cfb4f1e65490c998a024249e98bb0647377c
- F src/wherecode.c b82d0d33315e1526904b95155e55e61149c4462147668e1cc4567c812735eff1
- F src/whereexpr.c a60a1f88650c561eded95c5affbe846cda71fac35033e1280f28e47934df33c8
- F src/window.c 76a27cff9ea2ded0c2c3527187029259440fabcc4cc4c07b11d942c78494a614
+ F src/wherecode.c b300db0bcd84ad6c2642bf3f509f92fad7b7d697b9856b64dd66d692d184d054
+ F src/whereexpr.c 22cf19b0ececeaf838daed1039c5231a8778784eba5ad67b991442a23473fd3f
+ F src/window.c e075ea85bea322e30e361fa6e69eddba74f461e99e2a564dc09973f8a1fb27d9
  F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
  F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
  F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2a510a9
@@@ -903,15 -900,15 +918,15 @@@ F test/corruptE.test 4143791f2dfb443aec
  F test/corruptF.test be9fde98e4c93648f1ba52b74e5318edc8f59fe4
  F test/corruptG.test adf79b669cbfd19e28c8191a610d083ae53a6d51
  F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454
- F test/corruptI.test a17bbf54fdde78d43cf3cc34b0057719fd4a173a3d824285b67dc5257c064c7b
+ F test/corruptI.test 9d8cbf6214e492abe9e822e759b9751ae336cec0a6fe3ff3b37bfbd8ff9c22ca
  F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4
  F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af
- F test/corruptL.test 9d1a0055c8db19baccd12f22ac36a33ec7d63afb59e82eb30835aea8f89b94df
+ F test/corruptL.test b42978028afc5eefc8b51d8d7cd6a9344ba7362d7ed4511ee2070f56e06d5a1c
  F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067
 -F test/corruptN.test 7c099d153a554001b4fb829c799b01f2ea6276cbc32479131e0db0da4efd9cc4
 +F test/corruptN.test 57985a0737f5e008283a91c24630cd3c7003d3c7b62824edaa21258e46da9455
  F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576
  F test/count.test cd4bd531066e8d77ef8fe1e3fc8253d042072e117ccab214b290cf83f1602249
- F test/countofview.test e17d6e6688cf74f22783c9ec6e788c0790ee4fbbaee713affd00b1ac0bb39b86
+ F test/countofview.test 4088e461a10ee33e69803c177a69aa1d7bba81a9ffc2df66d76465a22ca7fdfc
  F test/coveridxscan.test f35c7208dedc4f98e471c569df64c0f95a49f6e072d8dc7c8f99bdee2697de1b
  F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f
  F test/crash2.test 5b14d4eb58b880e231361d3b609b216acda86651
@@@ -1391,9 -1396,9 +1413,9 @@@ F test/pcache.test c8acbedd3b6fd0f9a7ca
  F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
  F test/pendingrace.test cbdf0f74bc939fb43cebad64dda7a0b5a3941a10b7e9cc2b596ff3e423a18156
  F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
 -F test/permutations.test 1f9b143250923886db3d5793e703a51b892e7f3fcd0e8cff5b6e30915687afe0
 +F test/permutations.test afbe9e54e88b93bb9b9b55d078d6c826de33a48b784258ba74d9549d2eb000a1
  F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f
- F test/pragma.test aeefa47ba5ebbf4ffc6addc223568d2a95dc7ec3ba3e3c4a26b199e805f94514
+ F test/pragma.test 57a36226218c03cfb381019fe43234b2cefbd8a1f12825514f906a17ccf7991e
  F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
  F test/pragma3.test 92a46bbea12322dd94a404f49edcfbfc913a2c98115f0d030a7459bb4712ef31
  F test/pragma4.test ca5e4dfc46adfe490f75d73734f70349d95a199e6510973899e502eef2c8b1f8
@@@ -2081,8 -2082,8 +2104,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P dc1d85707b130aae2f07b6b1961e0acd42d7a302b3518670f3dbfa96c179386d
- R 1b0ad48979e97c455633409f6f0e3549
 -P 0215dcc76d7b3a1dad10b8e6fd8b54f2ab5006a156db5cee992ab2dac98d9284 d3370d59cffb7ab982d6c620c93d22aa6a9dc786e1c4af95ca8d45ff0b9b7d6f
 -R 4c52475278c5ccef59c6ec833b8f6544
++P a95a4bce8892eba3ab6e76a49975a52efeedebfd9af22bb31af30301b1d92328 49777032f29517d23c8c7483536f8ba828e7000dc303415da6881cc458620be2
++R 30d81d321a4c80a366fe52a9c425623c
  U dan
- Z 0fc1f6413ec534a029873988710cdbc0
 -Z f87e8c5c1721799925f2f360f33a9b2f
++Z 3610e2d3aeed2452f8a2e1ddcf7df823
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 670798fba318fa12ffaa0d7ef8a89862cb91bb3a,2838b6d8b0f89f8b5d6acd202d19b8632cca72be..f2a27ab0b47eea415f735645c8df5795be0d2ae3
@@@ -1,1 -1,1 +1,1 @@@
- a95a4bce8892eba3ab6e76a49975a52efeedebfd9af22bb31af30301b1d92328
 -49777032f29517d23c8c7483536f8ba828e7000dc303415da6881cc458620be2
++b2e0800b24f8c676e189d63abd77ca45a972de9722ece5de6efe2db6ede75cbd
diff --cc src/btree.c
index 0eff77fea475292684bd8fdba06667517565832c,a9332051ef4614b2b07946490275813ae1ba297e..4fa4ed320671dd4a4c1727daa25f7e0ded9f5d5c
@@@ -7541,9 -7149,97 +7617,98 @@@ static int insertCell
        memcpy(pTemp, pCell, sz);
        pCell = pTemp;
      }
-     if( iChild ){
-       put4byte(pCell, iChild);
+     put4byte(pCell, iChild);
+     j = pPage->nOverflow++;
+     /* Comparison against ArraySize-1 since we hold back one extra slot
+     ** as a contingency.  In other words, never need more than 3 overflow
+     ** slots but 4 are allocated, just to be safe. */
+     assert( j < ArraySize(pPage->apOvfl)-1 );
+     pPage->apOvfl[j] = pCell;
+     pPage->aiOvfl[j] = (u16)i;
+     /* When multiple overflows occur, they are always sequential and in
+     ** sorted order.  This invariants arise because multiple overflows can
+     ** only occur when inserting divider cells into the parent page during
+     ** balancing, and the dividers are adjacent and sorted.
+     */
+     assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */
+     assert( j==0 || i==pPage->aiOvfl[j-1]+1 );   /* Overflows are sequential */
+   }else{
++    BtShared *pBt = pPage->pBt;
+     int rc = sqlite3PagerWrite(pPage->pDbPage);
+     if( NEVER(rc!=SQLITE_OK) ){
+       return rc;
+     }
+     assert( sqlite3PagerIswriteable(pPage->pDbPage) );
+     data = pPage->aData;
+     assert( &data[pPage->cellOffset]==pPage->aCellIdx );
+     rc = allocateSpace(pPage, sz, &idx);
+     if( rc ){ return rc; }
+     /* The allocateSpace() routine guarantees the following properties
+     ** if it returns successfully */
+     assert( idx >= 0 );
+     assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB );
+     assert( idx+sz <= (int)pPage->pBt->usableSize );
+     pPage->nFree -= (u16)(2 + sz);
+     /* In a corrupt database where an entry in the cell index section of
+     ** a btree page has a value of 3 or less, the pCell value might point
+     ** as many as 4 bytes in front of the start of the aData buffer for
+     ** the source page.  Make sure this does not cause problems by not
+     ** reading the first 4 bytes */
+     memcpy(&data[idx+4], pCell+4, sz-4);
+     put4byte(&data[idx], iChild);
+     pIns = pPage->aCellIdx + i*2;
+     memmove(pIns+2, pIns, 2*(pPage->nCell - i));
+     put2byte(pIns, idx);
+     pPage->nCell++;
+     /* increment the cell count */
+     if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++;
+     assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB );
+ #ifndef SQLITE_OMIT_AUTOVACUUM
 -    if( pPage->pBt->autoVacuum ){
++    if( REQUIRE_PTRMAP ){
+       int rc2 = SQLITE_OK;
+       /* The cell may contain a pointer to an overflow page. If so, write
+       ** the entry for the overflow page into the pointer map.
+       */
+       ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2);
+       if( rc2 ) return rc2;
      }
+ #endif
+   }
+   return SQLITE_OK;
+ }
+ /*
+ ** This variant of insertCell() assumes that the pTemp and iChild
+ ** parameters are both zero.  Use this variant in sqlite3BtreeInsert()
+ ** for performance improvement, and also so that this variant is only
+ ** called from that one place, and is thus inlined, and thus runs must
+ ** faster.
+ **
+ ** Fixes or enhancements to this routine should be reflected into
+ ** the insertCell() routine.
+ */
+ static int insertCellFast(
+   MemPage *pPage,   /* Page into which we are copying */
+   int i,            /* New cell becomes the i-th cell of the page */
+   u8 *pCell,        /* Content of the new cell */
+   int sz            /* Bytes of content in pCell */
+ ){
+   int idx = 0;      /* Where to write new cell content in data[] */
+   int j;            /* Loop counter */
+   u8 *data;         /* The content of the whole page */
+   u8 *pIns;         /* The point in pPage->aCellIdx[] where no cell inserted */
+   assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
+   assert( MX_CELL(pPage->pBt)<=10921 );
+   assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );
+   assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );
+   assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );
+   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
+   assert( sz==pPage->xCellSize(pPage, pCell) || CORRUPT_DB );
+   assert( pPage->nFree>=0 );
+   assert( pPage->nOverflow==0 );
+   if( sz+2>pPage->nFree ){
      j = pPage->nOverflow++;
      /* Comparison against ArraySize-1 since we hold back one extra slot
      ** as a contingency.  In other words, never need more than 3 overflow
      ** if it returns successfully */
      assert( idx >= 0 );
      assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB );
 -    assert( idx+sz <= (int)pPage->pBt->usableSize );
 +    assert( idx+sz <= (int)pBt->usableSize );
      pPage->nFree -= (u16)(2 + sz);
-     if( iChild ){
-       /* In a corrupt database where an entry in the cell index section of
-       ** a btree page has a value of 3 or less, the pCell value might point
-       ** as many as 4 bytes in front of the start of the aData buffer for
-       ** the source page.  Make sure this does not cause problems by not
-       ** reading the first 4 bytes */
-       memcpy(&data[idx+4], pCell+4, sz-4);
-       put4byte(&data[idx], iChild);
-     }else{
-       memcpy(&data[idx], pCell, sz);
-     }
+     memcpy(&data[idx], pCell, sz);
      pIns = pPage->aCellIdx + i*2;
      memmove(pIns+2, pIns, 2*(pPage->nCell - i));
      put2byte(pIns, idx);
@@@ -9682,9 -9375,9 +9845,10 @@@ int sqlite3BtreeInsert
    assert( szNew==pPage->xCellSize(pPage, newCell) );
    assert( szNew <= MX_CELL_SIZE(p->pBt) );
    idx = pCur->ix;
+   pCur->info.nSize = 0;
    if( loc==0 ){
      CellInfo info;
 +    BtShared *pBt = p->pBt;
      assert( idx>=0 );
      if( idx>=pPage->nCell ){
        return SQLITE_CORRUPT_BKPT;
@@@ -11311,15 -11003,13 +11478,15 @@@ int sqlite3BtreeIntegrityCheck
    }
    pBt->db->flags = savedDbFlags;
  
 -  /* Make sure every page in the file is referenced
 -  */
 +  /* Make sure every page in the file is referenced. Skip this if the
 +  ** database is currently being written by a CONCURRENT transaction (it 
 +  ** may fail as pages that were part of the free-list when the transaction
 +  ** was opened cannot be counted).  */
    if( !bPartial ){
 -    for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
 +    for(i=1; ISCONCURRENT==0 && i<=sCheck.nPage && sCheck.mxErr; i++){
  #ifdef SQLITE_OMIT_AUTOVACUUM
        if( getPageReferenced(&sCheck, i)==0 ){
-         checkAppendMsg(&sCheck, "Page %d is never used", i);
+         checkAppendMsg(&sCheck, "Page %u: never used", i);
        }
  #else
        /* If the database supports auto-vacuum, make sure no tables contain
diff --cc src/btreeInt.h
Simple merge
diff --cc src/build.c
Simple merge
diff --cc src/func.c
Simple merge
diff --cc src/main.c
Simple merge
diff --cc src/os_unix.c
Simple merge
diff --cc src/pager.c
Simple merge
diff --cc src/parse.y
index 2400bf68d84b145b32fbd9551fd909eb629e8f59,541b9ffe584c31381219afa7cad1fc767822c13c..a5294df2f28b88da03843e3303ce4402dc530f33
@@@ -311,7 -295,7 +311,6 @@@ columnname(A) ::= nm(A) typetoken(Y). {
  // keywords.  Any non-standard keyword can also be an identifier.
  //
  %token_class id  ID|INDEXED.
--
  // And "ids" is an identifer-or-string.
  //
  %token_class ids  ID|STRING.
diff --cc src/select.c
Simple merge
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
index 0144db640f53f439beb76c7cf573242c0e700afc,ea12116caf66cab299613df94c9a624a871f0a76..a9ab4d5463fb7f7a050ccf29cc743590938802cc
@@@ -1801,8 -1790,8 +1808,9 @@@ struct sqlite3 
                                            /*   DELETE, or UPDATE and return */
                                            /*   the count using a callback. */
  #define SQLITE_CorruptRdOnly  HI(0x00002) /* Prohibit writes due to error */
+ #define SQLITE_ReadUncommit   HI(0x00004) /* READ UNCOMMITTED in shared-cache */
  
 +#define SQLITE_NoopUpdate     0x01000000  /* UPDATE operations are no-ops */
  /* Flags used only if debugging */
  #ifdef SQLITE_DEBUG
  #define SQLITE_SqlTrace       HI(0x0100000) /* Debug print SQL as it executes */
diff --cc src/test1.c
Simple merge
diff --cc src/update.c
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/wal.c
Simple merge