]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge in minor bug fixes and performance tweaks from trunk leading up to
authordrh <drh@noemail.net>
Thu, 22 Aug 2013 15:07:08 +0000 (15:07 +0000)
committerdrh <drh@noemail.net>
Thu, 22 Aug 2013 15:07:08 +0000 (15:07 +0000)
the version 3.8.0 release.

FossilOrigin-Name: 831492dca8bcfb1a1f83a8bb15de9cc94f29f07e

1  2 
manifest
manifest.uuid
src/sqliteInt.h
src/vdbe.c
src/vdbeaux.c

diff --cc manifest
index e33c6933067ce9b228e58dcaeaf5ca3d063e061b,18542bbdc3e6fc4989aca1887530e963f9d97de4..eeb634ab672f83d292bf998717fa632904c4d2e1
+++ b/manifest
@@@ -1,9 -1,9 +1,9 @@@
- C Merge\sperformance\senhancements\sand\scompiler\swarning\sfixes\sfrom\strunk.
- D 2013-08-20T13:02:16.832
 -C Defer\sthe\screation\sof\sautomatic\sindices\suntil\sthe\sindex\sis\sactually\sused.
 -D 2013-08-22T02:56:28.029
++C Merge\sin\sminor\sbug\sfixes\sand\sperformance\stweaks\sfrom\strunk\sleading\sup\sto\nthe\sversion\s3.8.0\srelease.
++D 2013-08-22T15:07:08.266
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 -F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 +F Makefile.in aff38bc64c582dd147f18739532198372587b0f0
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
 -F Makefile.msc e9f41f89111627baaabd95cab4988b8d1c3e47c9
 +F Makefile.msc e5cc521bbc9fb09f032f7fef563542da7ac5544a
  F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
  F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
  F VERSION f135b651727f978b7191bd6fa12c7fc1e13e13ac
@@@ -184,11 -171,11 +184,11 @@@ F src/callback.c d7e46f40c3cf53c43550b7
  F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
  F src/ctime.c 4262c227bc91cecc61ae37ed3a40f08069cfa267
  F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4
 -F src/delete.c 2317c814866d9aa71fea16b3faf4fdd4d6a49b94
 +F src/delete.c 30ed4bc76a1a32c55bf17ac1528c5867aa5502c0
- F src/expr.c 42d8235af422661ab80be097bebca485b33e2e14
+ F src/expr.c 6bab61c757c4c4c94a92e98d507025d5d18afd3c
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
  F src/fkey.c 914a6bbd987d857c41ac9d244efa6641f36faadb
- F src/func.c 5c50c1ea31fd864b0fe921fe1a8d4c55acd609ef
+ F src/func.c d7be77897c91d5b9887beb372f1e6deb515c92af
  F src/global.c 5caf4deab621abb45b4c607aad1bd21c20aac759
  F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4
  F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
@@@ -231,10 -218,10 +231,10 @@@ F src/resolve.c 9d53899cc6e1f4ec0b4632d
  F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
  F src/select.c 8b148eb851f384412aea57091659d14b369918ca
  F src/shell.c 1c317a4c96d61d8d9fdad9fd1811d9b10b8c7f57
 -F src/sqlite.h.in bd1451ba1ab681022a53bccc3c39580ba094a3ff
 +F src/sqlite.h.in dcca940021f8f6643630fb7711bfd4e3fa002566
  F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
  F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
- F src/sqliteInt.h a24a7f54dd59e8f59d67f7ab0682b5c22f554855
 -F src/sqliteInt.h 124e4b19cd5533116909ccf203bdcdd04a28f99a
++F src/sqliteInt.h 93fe5b4c6234942cb9ca14fc25ad634d0e2ff775
  F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
  F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@@ -290,16 -277,16 +290,16 @@@ F src/update.c e3668141dd97010236812392
  F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
  F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9
  F src/vacuum.c d9c5759f4c5a438bb43c2086f72c5d2edabc36c8
- F src/vdbe.c 76502f0813c3ecf1a54611fc5262c8bc77a54fb7
 -F src/vdbe.c d37aee2c89e2a589f2b1599e0178eb17a08a3ccb
 -F src/vdbe.h 4f554b5627f26710c4c36d919110a3fc611ca5c4
 -F src/vdbeInt.h cbe71b8b36d8b3bba5709cc3f436c7e3b47b7b08
 -F src/vdbeapi.c 96b24b946cf21894f63d9393e821baa2f0a80979
 -F src/vdbeaux.c c7fe2695e256dbf254113c4fe90d3ec9aabe3bbe
 -F src/vdbeblob.c 5dc79627775bd9a9b494dd956e26297946417d69
++F src/vdbe.c 08a46d04e5bdfd95884664eeeb8fbe5e4de426ee
 +F src/vdbe.h 7aa3ab6210a68471c8490dedfc9aa4ef5684b9a0
 +F src/vdbeInt.h 9bf236dc477fb8f1f54b078cf80064663f8a409a
 +F src/vdbeapi.c ae87d198eb3ce67c02886601baee0fd478092076
- F src/vdbeaux.c 6549864e5fffa3d04941551610e4800de72e1be9
++F src/vdbeaux.c 20ec92cdc43374b6537fbd7bc2cf7a28967bbe44
 +F src/vdbeblob.c 1268e0bcb8e21fa32520b0fc376e1bcdfaa0c642
- F src/vdbemem.c 833005f1cbbf447289f1973dba2a0c2228c7b8ab
+ F src/vdbemem.c 61d5ddb8e4d4e14f625062bf5bcc7ce08bb20af3
  F src/vdbesort.c 3937e06b2a0e354500e17dc206ef4c35770a5017
  F src/vdbetrace.c e7ec40e1999ff3c6414424365d5941178966dcbc
- F src/vtab.c 2e8b489db47e20ae36cd247932dc671c9ded0624
+ F src/vtab.c 165ce0e797c2cd23badb104c9f2ae9042d6d942c
  F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
  F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
  F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
@@@ -1119,7 -1105,7 +1119,7 @@@ F tool/warnings-clang.sh f6aa929dc20ef1
  F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
  F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
  F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
- P 67587a3348b84424b2ab1f2df1ea923a5168e2e4 7f72fc4f47445a2c01910b268335873de9f75059
- R 38645eeb23d643e57952026ace84c002
 -P 617e23ec283d3147fc3fd29c474ccedf4915cdc7
 -R c8cf06f49dffbef3bb0170f8252069c7
++P 3e4033285deb417bd72c008917729dbf3bf4e90d 0775501acf152dcbf4dd039f4511f3d8c4330d85
++R f6e422c39c44105817eb40d9d54618de
  U drh
- Z 8d51de2c92073e757664e09f591c4bfa
 -Z c5e5b20d4589a0c600c887ab3fa62d4e
++Z f9597afebde4efa08f5ab31e24bede7f
diff --cc manifest.uuid
index 04e1209cd373e73055d56a60513b18a38e4b6e8f,296e198d711631c6e2051f5040dfd5f46683a2d7..8fadc4e3f692309e197c2f72ed40d669669863c9
@@@ -1,1 -1,1 +1,1 @@@
- 3e4033285deb417bd72c008917729dbf3bf4e90d
 -0775501acf152dcbf4dd039f4511f3d8c4330d85
++831492dca8bcfb1a1f83a8bb15de9cc94f29f07e
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc src/vdbeaux.c
index 8f7f0a9c4c225410b0c3c56b4cb8717388f1ace3,ec071606a2e54672f274ab181c37e20112ce7db9..3d8d3e3c29829e0c211473808e887f31beb35ed8
@@@ -3307,84 -3305,17 +3307,99 @@@ void sqlite3VdbeSetVarmask(Vdbe *v, in
    }
  }
  
+ #ifndef SQLITE_OMIT_VIRTUALTABLE
+ /*
+ ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
+ ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
+ ** 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;
+ }
+ #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 */