- C Update\sthe\ssessionfault-9.1\sand\s-9.2\stests\sto\saccount\sfor\sthe\schange\sin\nversion\s3.7.11\sin\swhich\sa\spending\sstatement\sno\slonger\sblocks\sROLLBACK\sbut\ninstead\scauses\sthe\snext\scall\son\sthat\sstatement\sto\sreturn\sSQLITE_ABORT.
- D 2012-09-28T12:55:56.421
-C Query\splanner\senhancements\sto\sbe\smore\sagressive\sabout\soptimizing\sout\sORDER\sBY\nclauses\s-\sin\sparticular\sthe\squery\splanner\snow\shas\sthe\sability\sto\somit\sORDER\sBY\nclauses\sthat\sspan\smultiple\stables\sin\sa\sjoin.
-D 2012-09-28T00:44:28.903
++C Merge\sthe\slatest\strunk\schanges\s(especially\s"PRAGMA\sbusy_timeout"\sand\sthe\nORDER\sBY\squery\splanner\soptimizations)\sinto\sthe\ssessions\sbranch.
++D 2012-09-28T13:05:48.372
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
- F Makefile.in abd5c10d21d1395f140d9e50ea999df8fa4d6376
+ F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
- F Makefile.msc f153aec9a398d04df7a6dbd4ec092bf3f8edcad3
- F Makefile.vxworks 879f034a64062a364b21000266bbd5bc6e0c19b9
-F Makefile.msc 1102ce2c75965b9b5534efce380007ffcb08c52e
++F Makefile.msc 321efe6f572a1d4f8e27794c4575dd9b51d3e731
+ F Makefile.vxworks b18ad88e9a8c6a001f5cf4a389116a4f1a7ab45f
F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
- F VERSION a71848df48082f1d6585d4b0819d530fc455485d
+ F VERSION edab4af5a4623f8198833ea481ce98ab53750a8d
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977
F config.h.in 0921066a13130082764ab4ab6456f7b5bebe56de
F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55
- F configure 4dd7d5fa033f649d7372e9ebd4aff68db6026da4 x
-F configure 4907207e1627a394e8892cce8dcc8068fbe5f7cd x
++F configure 2f40e28f141c324333498977b01f744fe189462e x
F configure.ac 6e909664785b8184db2179013cd9d574f96ca3a3
F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
F doc/lemon.html 334dbf6621b8fb8790297ec1abf3cfa4621709d1
F ext/rtree/sqlite3rtree.h c34c1e41d1ab80bb8ad09aae402c9c956871a765
F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
+F ext/session/session1.test 502086908e4144dfaccb1baa77bc29d75a9daace
+F ext/session/session2.test 99ca0da7ddb617d42bafd83adccf99f18ae0384b
+F ext/session/session3.test a7a9ce59b8d1e49e2cc23d81421ac485be0eea01
+F ext/session/session4.test a6ed685da7a5293c5d6f99855bcf41dbc352ca84
+F ext/session/session5.test 8fdfaf9dba28a2f1c6b89b06168bdab1fef2d478
+F ext/session/session6.test 443789bc2fca12e4f7075cf692c60b8a2bea1a26
+F ext/session/session8.test 7d35947ad329b8966f095d34f9617a9eff52dc65
+F ext/session/session_common.tcl 1539d8973b2aea0025c133eb0cc4c89fcef541a5
+F ext/session/sessionfault.test 496291b287ba3c0b14ca2e074425e29cc92a64a6
+F ext/session/sqlite3session.c 57d04e1d6a3579e673e61dea29f214fb4e0fc505
+F ext/session/sqlite3session.h f374c9c4c96e08f67ac418871c29d423245c7673
+F ext/session/test_session.c ea4dc9b4a1895c8e6bddcbfe3838d7eb57df2d99
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
- F main.mk 1e1c4a0f975cc43e3e4221249367a40c076b34c0
-F main.mk 7b60c2663388270258f01b59fbf8b9bd78f946bf
++F main.mk 9c55b39d4887aa834ca2e827b7361d95703887bc
F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
F mkextw.sh 4123480947681d9b434a5e7b1ee08135abe409ac
F src/btree.c 9cf6de113d23d47967df24b8d8ce6501c879d7e6
F src/btree.h 4aee02e879211bfcfd3f551769578d2e940ab6c2
F src/btreeInt.h 4e5c2bd0f9b36b2a815a6d84f771a61a65830621
- F src/build.c a3b700afd475e6387da59be6f2e86161e80d6d87
+ F src/build.c c4555e16f8ccdadb2616014c617ed8166c5a93f7
F src/callback.c 0cb4228cdcd827dcc5def98fb099edcc9142dbcd
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
- F src/ctime.c 500d019da966631ad957c37705642be87524463b
+ F src/ctime.c 72a70dcfda75d3a1f81041ce4573e7afddcd8e4e
F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4
- F src/delete.c 38f7517f76c61b971a51c91cc343e77897ef6a12
- F src/expr.c 217840a107dcc1e5dbb57cea311daad04bedbb9a
-F src/delete.c 4f7d773ec44b7db22b30ec9144f58a69154e09b7
++F src/delete.c c856ca31177a5cc1612b47ca0c628cd227aa072e
+ F src/expr.c 4de967b85f577ba00a7cdcb53d22070def6198db
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
- F src/fkey.c 9c77d842dc9961d92a06a65abb80c64ef1750296
- F src/func.c 18dfedfb857e100b05755a1b12e88b389f957879
- F src/global.c 4cfdca5cb0edd33c4d021baec4ede958cb2c793b
+ F src/fkey.c c82a04e7a92bb728f9ab972b76590403283be2af
+ F src/func.c cbb90dc84b22eea25caf39528d342279e61b8898
+ F src/global.c fb44b11e02e06c995e6ed6642509edd23599d584
F src/hash.c a4031441741932da9e7a65bee2b36b5d0e81c073
F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
- F src/insert.c 8c5a3aba0e97c39679de3b33f95e7795d336fc87
-F src/insert.c 6e2aa7fbb5d4c5f34d412772751ed0aff0b9e87b
++F src/insert.c 08ec5cec28c692fc27a23659875cc167f5c6ece7
F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e
F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
F src/lempar.c 0ee69fca0be54cd93939df98d2aca4ca46f44416
F src/loadext.c f20382fbaeec832438a1ba7797bee3d3c8a6d51d
- F src/main.c 1f15146d32b183d45fd0d41e8370a326c5d647ac
-F src/main.c 5249486037f88e765cce7c4870846dc5a2cd2ed1
++F src/main.c febaf66b42c36433b170e4704fef5b8b073a6d61
F src/malloc.c fe085aa851b666b7c375c1ff957643dc20a04bf6
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c 437c7c4af964895d4650f29881df63535caaa1fa
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
F src/resolve.c 9e28280ec98035f31900fdd1db01f86f68ca6c32
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
- F src/select.c f843c872a97baa1594c2cc3d4c003409a7bd03af
- F src/shell.c 87953c5d9c73d9494db97d1607e2e2280418f261
- F src/sqlite.h.in 930b719ce295058817aa58e7b65c43dc668cc098
+ F src/select.c 75c5e37cc882c468383c9d9e07496b9a16cfae3e
+ F src/shell.c 8ee5a3cb502e2d574f97b43972e6c1e275e7bec7
-F src/sqlite.h.in cbe846facaba903654b4136c97e7f57b3ac0bac7
++F src/sqlite.h.in 2f2822ac789d820e05afb19831e62fd83e69c60b
+ F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
- F src/sqliteInt.h 569cb02b6555db22dbe38566ed904f40f0ae5eb8
-F src/sqliteInt.h c29395d6e68cfbcb2661787ae4820e5e256c916a
++F src/sqliteInt.h 34844b666512c2c5656c5d470f165ed1db0fcd48
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
- F src/tclsqlite.c e4feb5698ee09f8b32ee40baa1d3577871125042
- F src/test1.c 3d70f7c5987f186884cfebbfa7151a7d3d67d86e
-F src/tclsqlite.c e4de2458b3ef38fdd0498bc4e5ea5367a241b0f3
++F src/tclsqlite.c 79ac64bdd8555b8967032e1e69051d88366f9b77
+ F src/test1.c 0354b555639c92d2a63c0ad4e74ed152ba47e604
F src/test2.c 4178056dd1e7d70f954ad8a1e3edb71a2a784daf
F src/test3.c 3c3c2407fa6ec7a19e24ae23f7cb439d0275a60d
F src/test4.c bf9fa9bece01de08e6f5e02314e4af5c13590dfa
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
F src/trigger.c 3f258307040173aff383eb23fb74c44fe829078c
-F src/update.c 28d2d098b43a2c70dae399896ea8a02f622410ef
+F src/update.c abb0fcabe551dae0a133fd2a4370b5a8c23b1831
- F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84
+ F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
F src/util.c 0af2e515dc0dabacec931bca39525f6c3f1c5455
F src/vacuum.c 587a52bb8833d7ac15af8916f25437e2575028bd
- F src/vdbe.c b01b505ced376ee6a9310300c9cb1a0980731f94
-F src/vdbe.c 31523df2b986fc6c959dd54ca640ba865884641b
-F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb
-F src/vdbeInt.h 573a43ab5697b648a1e8f3dfc7d8667d5ca55729
-F src/vdbeapi.c 4c2418161cf45392ba76a7ca92f9a5f06b96f89c
-F src/vdbeaux.c fac025c798ad19070451b41eddc5dcd4696fdd1e
-F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
++F src/vdbe.c e8e2e34c23a474c38f494d572a0d8accaabd0b4a
+F src/vdbe.h 87b8ff40de3f55dbcdc33029416862f517c37a2f
- F src/vdbeInt.h 3f5d994703b6d61032d48f3086329c960b1697e9
- F src/vdbeapi.c 7d23764ea26c1fff2959e6a0984dd96de0fa8f75
- F src/vdbeaux.c 797201e170a8bcc746d62aa82e2a280419b3839b
++F src/vdbeInt.h 39acf85fa83f98e27e728722a0f53daf7d174b61
++F src/vdbeapi.c 58fdcd56109c05876f69c25d47a138ef370d3647
++F src/vdbeaux.c 857c8372d3b06d66e37428712265f9033932f3ec
+F src/vdbeblob.c 11248c6362389569764682eb0f59ce910f3cc381
F src/vdbemem.c cb55e84b8e2c15704968ee05f0fae25883299b74
F src/vdbesort.c 0dc1b274dcb4d4c8e71b0b2b15261f286caba39b
F src/vdbetrace.c 8bd5da325fc90f28464335e4cc4ad1407fe30835
F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0
F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16
F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
- F test/permutations.test 02dd9f7fd2fc874d25572b9ae431181bd69a174f
-F test/permutations.test 360b92859c0af814b3fe10b68746936389606501
++F test/permutations.test 379cfbb9a5eea2499d05008c04d18ddb4f2c01a9
F test/pragma.test a62f73293b0f0d79b0c87f8dd32d46fe53b0bd17
F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
F test/sysfault.test c79441d88d23696fbec7b147dba98d42a04f523f
F test/table.test a59d985ca366e39b17b175f387f9d5db5a18d4e2
F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
- F test/tclsqlite.test 2f2aa887763af30641f5561bdc26c5d3fbc73a88
-F test/tclsqlite.test a3d2df21ee98957f5de4f9dc1db0eab68047ab5d
++F test/tclsqlite.test 02b2c268d38203987dd1839598ac524f7612ec3c
F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
F test/temptable.test 51edd31c65ed1560dd600b1796e8325df96318e2
F test/temptrigger.test 26670ed7a39cf2296a7f0a9e0a1d7bdb7abe936d
- F test/tester.tcl 184ef244e01486ba1625f71f501b07dd483f5a54
-F test/tester.tcl 2f383e811010b05a83c0f00fc168cae1dd63a6d9
++F test/tester.tcl ac81733138d2b159f0b7f0379b6509e301f47cd4
F test/thread001.test 7cc2ce08f9cde95964736d11e91f9ab610f82f91
F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9
- P 87995dc9409482f0a7a367bfc51d78ac0f63b8c3
- R 0ffae7a510db2af1076692fe90154443
-P 20caf80cb3b65e69a99dbc142db8ee435fb2dbdc 98b633717a1c9a08f6a1d00bc6bc891564ae7e9b
-R 4c8024fc13aa6a5fc65357b963a76180
++P fae9eb197fcef726fd2c7c701afe6805fc008cf9 1e874629d7cf568368b912b295bd3001147d0b52
++R 3dd4bfa3bb20bc9f3b355292d5659141
U drh
- Z a5785b316a6ee7492de59cea784cd09f
-Z 885caf237f331087362c9bb98b2de660
++Z d6a15b3f33482cbc762a2fcdf6bf0623
v->expmask |= ((u32)1 << (iVar-1));
}
}
+
+#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 = &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 */