]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge recent enhancements from trunk.
authordrh <drh@noemail.net>
Wed, 20 Jan 2016 11:33:37 +0000 (11:33 +0000)
committerdrh <drh@noemail.net>
Wed, 20 Jan 2016 11:33:37 +0000 (11:33 +0000)
FossilOrigin-Name: 327af5f644a49b2f41d5456958f9d61a2b704e1c

15 files changed:
1  2 
Makefile.in
Makefile.msc
main.mk
manifest
manifest.uuid
src/insert.c
src/main.c
src/sqliteInt.h
src/vdbe.c
src/vdbe.h
src/vdbeapi.c
src/vdbeaux.c
src/vdbeblob.c
src/vdbemem.c
test/hook.test

diff --cc Makefile.in
Simple merge
diff --cc Makefile.msc
Simple merge
diff --cc main.mk
Simple merge
diff --cc manifest
index c13c8d974c8c860b141ca7b10e35f90438899750,1c1653b60ab86929976430a463328fc6607c3fcd..1d86286d5bae0163579a4d5a8e54bf4a5940e0b3
+++ b/manifest
@@@ -1,8 -1,8 +1,8 @@@
- C Merge\sthe\slatest\sfixes\sand\senhancements\sfrom\strunk.
- D 2016-01-14T14:48:17.709
- F Makefile.in c61147c9afcc7a058a3a88876a5b9344fce55353
 -C Improve\sperformance\sof\ssqlite3VtabImportErrmsg().
 -D 2016-01-20T08:47:55.546
 -F Makefile.in a476545d0c8626224d0bacac85c6e2967474af81
++C Merge\srecent\senhancements\sfrom\strunk.
++D 2016-01-20T11:33:37.587
++F Makefile.in a47ec69daac0cdfe3413e50ceea6dc8da3dc4ecb
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
- F Makefile.msc d35026ada75f21433cd34be90dc3865972cea6df
 -F Makefile.msc 01e855f958932d0d3ed62ec675fc63e2cef61fcb
++F Makefile.msc b4d0270955b3f102214b2242f2a1b802c22ee21b
  F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
  F VERSION 866588d1edf0ccb5b0d33896974338f97564f719
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@@ -282,7 -269,7 +289,7 @@@ F ext/userauth/userauth.c 5fa3bdb492f48
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
  F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 727b093cca39460048ae9948b283063857b04402
 -F main.mk 8670f56454bdc59d5e33397bf8c7e43eb33af50c
++F main.mk ad2c0fe02599cf4d58d13776ee57be1e53883909
  F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
  F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
  F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@@ -301,17 -288,17 +308,17 @@@ F src/auth.c b56c78ebe40a2110fd361379f7
  F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
  F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
  F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
- F src/btree.c 5d93e2477acb99d50a8b045f2e26a0be3d7751fe
+ F src/btree.c f224ae877fde69d1a9d430f502edaf8502752dbe
  F src/btree.h 68ef301795e00cdf1d3ab93abc44a43b7fe771e0
  F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
- F src/build.c 9d497ff4bf3c82cecb520436e0e9963785627583
- F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
+ F src/build.c 31af80bba31ac159967951ef58f3144cc7db9d70
+ F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261
  F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
  F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
- F src/date.c e4655393bb403fa310eef66cc4583d75d4d7fd93
+ F src/date.c 997651e3ee6c2818fbf7fcdb7156cef9eb3ece20
  F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
 -F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
 +F src/delete.c 86e3940d07fe69a40270c2aaf6ca6c7adf19246c
- F src/expr.c fe55c489362d1429c364e98c877514f4455f45a6
+ F src/expr.c df0d7c3230d59abd679da22ff5ce4cfd0e3a0e63
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
  F src/fkey.c e18b3dff7d47c7bcac5ac4fc178a89b9fd322b44
  F src/func.c ccaf46fa98f795673afbfab73dff7c18db88f3cd
@@@ -319,12 -306,12 +326,12 @@@ F src/global.c bd5a0af3f30b0c01be6db756
  F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
  F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
- F src/insert.c a2302c96652242b2d871445c9975a7a849316dcf
 -F src/insert.c a00e6d8a843dc22e2c136df04e6300c4528d9b9f
++F src/insert.c 0be969e32a28107a4a7008ea4fe7cb15ff47b0ef
  F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
  F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
  F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
- F src/main.c a88a45514be79e5f48b5cf4a147956f267425fa7
- F src/malloc.c 8f787669e79de26efc42272b5797bc00fff527c6
 -F src/main.c b686dabe9a7ece9121da87120d5c7bf402d77eb3
++F src/main.c c7d4a1858446db5f611891ddce62572b1fdec040
+ F src/malloc.c b67c26c359c13836d370350b3f43d228dff5b360
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
  F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
@@@ -351,19 -338,19 +358,19 @@@ F src/parse.y caad1e98edeca6960493d0c60
  F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23
  F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
  F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
- F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6
+ F src/pragma.c ea290193369faa0a26ae2f924e7b86289b4a7987
  F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c
- F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
+ F src/prepare.c 74855ddbdfad6a1c4a4d5c4b0913ebb01174ba19
  F src/printf.c af589a27b7d40f6f4f704e9eea99f02f18ad6d32
  F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
- F src/resolve.c a83b41104e6ff69855d03cd0aaa09e93927ec39f
+ F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c
  F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c 5b0f2aa9f73ec7b65d1711d485471854d5bad23c
+ F src/select.c 718954db86277d696c520fe671148db1e9c4ed3c
 -F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4
 -F src/sqlite.h.in 214476a62012e578f42133a9a3b4f97a9aa421a3
 +F src/shell.c 01e109c27300379b1c35b254cd294cde635f0179
 +F src/sqlite.h.in bb645ccc4090a6e95e7b5d92818f46e41033d076
  F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
  F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
- F src/sqliteInt.h 09f70fe715a74ea0048ae05526f2a1b6e3a3b6a2
 -F src/sqliteInt.h 8c1debffeeb1579bdc264d54c72c05892e23b7ee
++F src/sqliteInt.h cf3ca8ec73daef3b744d41663e124c2275fb6f26
  F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
  F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
  F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
@@@ -418,21 -405,21 +425,21 @@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f
  F src/threads.c bbfb74450643cb5372a43ad4f6cffd7e9dfcecb0
  F src/tokenize.c 5606871a377f390af7040ec3c12e0d183512d785
  F src/treeview.c 78842e90c1f71269e7a73a1d4221b6fe360bab66
- F src/trigger.c de3ed31ad3218a20d7d7e18bf1b3b734e78bda66
+ F src/trigger.c 056e51182a3677434423e3be0c74e61b90b4a663
 -F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
 +F src/update.c d8d675aa299336ac086ad2039d7e812cd6237db0
  F src/utf.c 32d7f82aa921322f3e1c956f4b58f019ebd2c6b3
  F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
  F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
- F src/vdbe.c 9b4da74dbc1554045c69dacbbceb373272d2e0be
- F src/vdbe.h bfe3f80dba435377cdb64fd917f2529f0f48ab77
 -F src/vdbe.c b90d9d38e5e0260c2eafa3cb4c2274d8ea94da27
 -F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337
 -F src/vdbeInt.h 42eefa4f9e7432b9968d321b44e48821ec13b189
 -F src/vdbeapi.c ffae8f5af4570fbd548504e815e9fb7227f0822e
 -F src/vdbeaux.c 07f8f485a6cbc0a62da660f14e303061d45d5cb6
 -F src/vdbeblob.c 37c3d11a753e403698c69e17383d282e1ae73e75
 -F src/vdbemem.c b9181e77eca2a095929d46250daf85c8d2621fc0
++F src/vdbe.c 1443ca69877410c90ba521220d4336d5ef689cdd
++F src/vdbe.h 19162d5d75d00ee9e634ad630f2a873e1cf76359
 +F src/vdbeInt.h 1bff4effc71888e3f304e2e6ac7484e39ab78c28
- F src/vdbeapi.c ab2cb8fe23fb9f3195f1311eaa800495d83b6118
- F src/vdbeaux.c 30f329b90af08d92739185788c6fbfd1c233b8b4
- F src/vdbeblob.c cc13eca96b8ec51b6248de785a1aec5df11f5805
- F src/vdbemem.c 25b6cfd665b5073480452426e84136edd94140c0
++F src/vdbeapi.c 75fa852c0d6e7e9c1334aaaa91b6821cba6a713b
++F src/vdbeaux.c 3781db199a8d9376c9512fb7e1304aae7af67dfa
++F src/vdbeblob.c 6ccda01a78b3f9d9a0c75f79e7a1150f3fb0cb39
++F src/vdbemem.c 6c962ee0a77de009dafb6d7f3c7e8bf7b82c47f8
  F src/vdbesort.c 0971557e5d3c289e46f56a52aed2197c13251de7
  F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
- F src/vtab.c 2a8b44aa372c33f6154208e7a7f6c44254549806
+ F src/vtab.c 320682cca733115b4cbe71320b5c5eeb1074ebde
  F src/vxworks.h 974e7d9a98f602d6310d563e1dc4e08f9fc48e47
  F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54
  F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
@@@ -784,7 -771,7 +791,7 @@@ F test/fuzzerfault.test 8792cd77fd5bce7
  F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
  F test/hexlit.test d7b0a5f41123df1e43985b91b8b2e70f95282d21
  F test/hidden.test 23c1393a79e846d68fd902d72c85d5e5dcf98711
- F test/hook.test aa41c095d26822b8a51aa4c82904a14347961be6
 -F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f
++F test/hook.test 40523db3aa76d62bda71c26f824fa0eabc420f0e
  F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
  F test/ieee754.test 806fc0ce7f305f57e3331eaceeddcfec9339e607
  F test/imposter1.test c3f1db2d3db2c24611a6596a3fc0ffc14f1466c8
@@@ -1433,7 -1419,7 +1440,7 @@@ F tool/vdbe_profile.tcl 246d0da094856d7
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
  F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P c4a858b228a164be2f89f5b01833f0b5e0d7735b 8dedff3b9ac3e6bf9c131fee19f7d26dc1ebd61f
- R 99385ae0fdf1facdff7c072dfc1f2a57
 -P ff8eadbed5004ab03438f737492387dee6b9750a
 -R 9def3e1e6201afa0dc73a868079c61c0
 -U dan
 -Z 16223910bb7e7f6f85293111cf2f150d
++P 007e5c6df60f9743ac6914332f59925e4a7a861c 18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e
++R 062849fc5c2e599b32ec755e50c1d8e3
 +U drh
- Z c131c7ae38d871cc572c248d8ac0f193
++Z 10a2fcf1cf68156c27545982ac8f140d
diff --cc manifest.uuid
index 448e42f7f4c4add01571da8f9f56eddcff25f5f8,eacc6db99072cd0c75395e87db371332f277383a..230276985d9daea9207836bfff497b6c07307eeb
@@@ -1,1 -1,1 +1,1 @@@
- 007e5c6df60f9743ac6914332f59925e4a7a861c
 -18d61c8e40ed1466b6a3a2f53bf0eeb09687c20e
++327af5f644a49b2f41d5456958f9d61a2b704e1c
diff --cc src/insert.c
index 6261d45898970218f5d65b513616c1b0a40874ad,8082bcb45910facaa8643ababa85e47e66efa8b4..910216b8ba545912e39c451785ba683912fbed15
@@@ -2020,9 -2011,9 +2020,9 @@@ static int xferOptimization
        assert( (pDest->tabFlags & TF_Autoincrement)==0 );
      }
      sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
-     sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
+     sqlite3VdbeAddOp4(v, OP_Insert, iDest, regData, regRowid,
 -                      pDest->zName, 0);
++                      (char*)pDest, P4_TABLE);
      sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
-     sqlite3VdbeChangeP4(v, -1, (char*)pDest, P4_TABLE);
      sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v);
      sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
      sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
diff --cc src/main.c
Simple merge
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/vdbe.h
Simple merge
diff --cc src/vdbeapi.c
Simple merge
diff --cc src/vdbeaux.c
index b1646f6109b3e45a4fb86f6dc106c2d5d8c1be9e,17f1cb7dc40fbfe68f9939141b5b8485febe87c9..8348cee9b2573060da36aa1771131dbe17371bdd
@@@ -4430,92 -4445,12 +4447,94 @@@ void sqlite3VdbeSetVarmask(Vdbe *v, in
  ** in memory obtained from sqlite3DbMalloc).
  */
  void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){
-   sqlite3 *db = p->db;
-   sqlite3DbFree(db, p->zErrMsg);
-   p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
-   sqlite3_free(pVtab->zErrMsg);
-   pVtab->zErrMsg = 0;
+   if( pVtab->zErrMsg ){
+     sqlite3 *db = p->db;
+     sqlite3DbFree(db, p->zErrMsg);
+     p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
+     sqlite3_free(pVtab->zErrMsg);
+     pVtab->zErrMsg = 0;
+   }
  }
  #endif /* SQLITE_OMIT_VIRTUALTABLE */
 +
 +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
 +
 +/*
 +** If the second argument is not NULL, release any allocations associated 
 +** with the memory cells in the p->aMem[] array. Also free the UnpackedRecord
 +** structure itself, using sqlite3DbFree().
 +**
 +** This function is used to free UnpackedRecord structures allocated by
 +** the vdbeUnpackRecord() function found in vdbeapi.c.
 +*/
 +static void vdbeFreeUnpacked(sqlite3 *db, UnpackedRecord *p){
 +  if( p ){
 +    int i;
 +    for(i=0; i<p->nField; i++){
 +      Mem *pMem = &p->aMem[i];
 +      if( pMem->zMalloc ) sqlite3VdbeMemRelease(pMem);
 +    }
 +    sqlite3DbFree(db, p);
 +  }
 +}
 +
 +/*
 +** Invoke the pre-update hook. If this is an UPDATE or DELETE pre-update call,
 +** then cursor passed as the second argument should point to the row about
 +** to be update or deleted. If the application calls sqlite3_preupdate_old(),
 +** the required value will be read from the row the cursor points to.
 +*/
 +void sqlite3VdbePreUpdateHook(
 +  Vdbe *v,                        /* Vdbe pre-update hook is invoked by */
 +  VdbeCursor *pCsr,               /* Cursor to grab old.* values from */
 +  int op,                         /* SQLITE_INSERT, UPDATE or DELETE */
 +  const char *zDb,                /* Database name */
 +  Table *pTab,                    /* Modified table */
 +  i64 iKey1,                      /* Initial key value */
 +  int iReg                        /* Register for new.* record */
 +){
 +  sqlite3 *db = v->db;
 +  i64 iKey2;
 +  PreUpdate preupdate;
 +  const char *zTbl = pTab->zName;
 +  static const u8 fakeSortOrder = 0;
 +
 +  assert( db->pPreUpdate==0 );
 +  memset(&preupdate, 0, sizeof(PreUpdate));
 +  if( op==SQLITE_UPDATE ){
 +    iKey2 = v->aMem[iReg].u.i;
 +  }else{
 +    iKey2 = iKey1;
 +  }
 +
 +  assert( pCsr->nField==pTab->nCol 
 +       || (pCsr->nField==pTab->nCol+1 && op==SQLITE_DELETE && iReg==-1)
 +  );
 +
 +  preupdate.v = v;
 +  preupdate.pCsr = pCsr;
 +  preupdate.op = op;
 +  preupdate.iNewReg = iReg;
 +  preupdate.keyinfo.db = db;
 +  preupdate.keyinfo.enc = ENC(db);
 +  preupdate.keyinfo.nField = pTab->nCol;
 +  preupdate.keyinfo.aSortOrder = (u8*)&fakeSortOrder;
 +  preupdate.iKey1 = iKey1;
 +  preupdate.iKey2 = iKey2;
 +  preupdate.iPKey = pTab->iPKey;
 +
 +  db->pPreUpdate = &preupdate;
 +  db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2);
 +  db->pPreUpdate = 0;
 +  sqlite3DbFree(db, preupdate.aRecord);
 +  vdbeFreeUnpacked(db, preupdate.pUnpacked);
 +  vdbeFreeUnpacked(db, preupdate.pNewUnpacked);
 +  if( preupdate.aNew ){
 +    int i;
 +    for(i=0; i<pCsr->nField; i++){
 +      sqlite3VdbeMemRelease(&preupdate.aNew[i]);
 +    }
 +    sqlite3DbFree(db, preupdate.aNew);
 +  }
 +}
 +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
diff --cc src/vdbeblob.c
Simple merge
diff --cc src/vdbemem.c
Simple merge
diff --cc test/hook.test
Simple merge