From: drh Date: Wed, 30 Jul 2014 14:44:24 +0000 (+0000) Subject: Merge recent trunk changes, and especially the fix for the CREATE UNIQUE INDEX X-Git-Tag: version-3.8.7~132^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bd1c881a91fa7573208262e4bcd5651464c586db;p=thirdparty%2Fsqlite.git Merge recent trunk changes, and especially the fix for the CREATE UNIQUE INDEX problem of ticket [9a6daf340df99ba9]. FossilOrigin-Name: 5b50a8380b2b678c1646ff303e3696efc1d7d92c --- bd1c881a91fa7573208262e4bcd5651464c586db diff --cc manifest index 1054831700,551a1332b7..7a190a12d7 --- a/manifest +++ b/manifest @@@ -1,9 -1,9 +1,9 @@@ - C Disable\san\sassert\sthat\sis\ssometimes\sgenerated\sspuriously. - D 2014-07-29T21:44:13.328 -C Ensure\sthat\sthe\scorrect\snumber\sof\scolumns\sin\sa\sUNIQUE\sindex\sare\schecked\sfor\nuniqueness,\sregardless\sof\swhether\sor\snot\sthe\soriginal\stable\shas\sa\sROWID\sor\nif\sthe\scolumns\sare\sNOT\sNULL,\setc.\s\sTicket\s[9a6daf340df99ba93c]. -D 2014-07-30T13:56:48.415 ++C Merge\srecent\strunk\schanges,\sand\sespecially\sthe\sfix\sfor\sthe\sCREATE\sUNIQUE\sINDEX\nproblem\sof\sticket\s[9a6daf340df99ba9]. ++D 2014-07-30T14:44:24.940 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308 +F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 -F Makefile.msc 5b04e657cf08a9ac7fc47d876c5c8be962c47d6b +F Makefile.msc e31dee24038965fb6269d6d61073fd6b7e331dec F Makefile.vxworks 034289efa9d591b04b1a73598623119c306cbba0 F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 F VERSION 1c877615a9db323e3cd301e3d57d853f9d5c4a07 @@@ -167,10 -167,10 +167,10 @@@ F src/auth.c 523da7fb4979469955d822ff92 F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53 F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 -F src/btree.c b5531339cd826af46b9621e4a9323971a9380e12 +F src/btree.c dff8e7789730e835b66d81f9eb68de2352845012 F src/btree.h 4245a349bfe09611d7ff887dbc3a80cee8b7955a F src/btreeInt.h cf180d86b2e9e418f638d65baa425c4c69c0e0e3 - F src/build.c af833cdcba64a465eeba5f2d0c9fc012a9f6c31d -F src/build.c 7ba21d8f0f5f1e8b5a0ed21aab9be2b39d1af516 ++F src/build.c f6e49e1b32fe1aed6971da5712131d9272d7d81c F src/callback.c 174e3c8656bc29f91d710ab61550d16eea34be98 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a @@@ -189,7 -189,7 +189,7 @@@ F src/journal.c b4124532212b6952f42eb2c F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12 F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b F src/loadext.c 867c7b330b740c6c917af9956b13b81d0a048303 - F src/main.c e2fded3600437acd3faae4182648e846ccdc3c7c -F src/main.c bbf7f993843fc3fc496089747f6849272d77e824 ++F src/main.c 42ba5977d1c4324620b2ef2bc05b7bb28a2331e4 F src/malloc.c 0203ebce9152c6a0e5de520140b8ba65187350be F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b @@@ -208,7 -208,7 +208,7 @@@ F src/os.h 60d419395e32a8029fa380a80a3d F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c a7baf1b30f3c58ba20b813e01aab23b18ae44f85 - F src/os_win.c 5f8c5568cc749d6ab44006124e7701f463559223 -F src/os_win.c c29e3a80b47ebdbabd61fc3d4015e52d2654d8c5 ++F src/os_win.c c4d89c7e38a2ac1c6c90bf084131a44ed682790b F src/os_win.h 057344a6720b4c8405d9bd98f58cb37a6ee46c25 F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428 @@@ -284,14 -283,14 +284,14 @@@ F src/update.c 01564b3c430f6c7b0a35afaf F src/utf.c a0314e637768a030e6e84a957d0c4f6ba910cc05 F src/util.c 3076bdd51cdbf60a6e2e57fada745be37133c73e F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 - F src/vdbe.c c28f377d29cfa4db713581fc3a134642e38d9fcf -F src/vdbe.c f87f77b0049cbef1fa68b331c3551d82b4d9fba4 ++F src/vdbe.c e27749e6a5f65b3ff3388eab1472c0eaf6823b43 F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8 -F src/vdbeInt.h f5513f2b5ac1e2c5128996c7ea23add256a301df +F src/vdbeInt.h 8870adf012235708f125f8cd1c988f487dc3eb6f F src/vdbeapi.c 24e40422382beb774daab11fe9fe9d37e8a04949 -F src/vdbeaux.c ac063f36c929f88bf6cecdbcc413000e272265bb +F src/vdbeaux.c 3f1d2baa4a8cbdad33cb255a5f4fd1af7a414683 F src/vdbeblob.c 9205ce9d3b064d9600f8418a897fc88b5687d9ac F src/vdbemem.c d90a1e8acf8b63dc9d14cbbea12bfec6cec31394 - F src/vdbesort.c 2198e33de4c2c32bdb3fb4f06dbe2ae90a0fce33 -F src/vdbesort.c f7f5563bf7d4695ca8f3203f3bf9de96d04ed0b3 ++F src/vdbesort.c cab84b480d5c616e830d9b20c8903e42de3b60b3 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd F src/wal.c 264df50a1b33124130b23180ded2e2c5663c652a @@@ -1189,7 -1185,7 +1190,7 @@@ F tool/vdbe_profile.tcl 67746953071a9f8 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P 3144a16f91364b455e54e6030714e1c12ab0bdb7 - R 9e96844dee61c8b0e69a9d02798bc497 - U mistachkin - Z d96e323c9f24218fc7129fc10b94c004 -P ca9868cdae19045dc522490b34dee0f14d928ebe -R aa3d0aadabff4023861d0c947293977e ++P bd9ee0ea69181526cfc3cadac33a5ec5190112b0 6b785e92f279cb65746834d5cd25594fd3333342 ++R 5abc11219614f612d7ef9f82b784bc0c + U drh -Z 0e144877cde1d96e38c3dc4f9894f6d4 ++Z f20a2d1678a8f4c3f64fec3d49fad416 diff --cc manifest.uuid index 157c4b0987,194b99221e..96ada87e5a --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - bd9ee0ea69181526cfc3cadac33a5ec5190112b0 -6b785e92f279cb65746834d5cd25594fd3333342 ++5b50a8380b2b678c1646ff303e3696efc1d7d92c diff --cc src/vdbe.c index 8251ca9aec,52f0f3aa74..e56f0366d8 --- a/src/vdbe.c +++ b/src/vdbe.c @@@ -4316,9 -4294,8 +4316,9 @@@ case OP_SorterCompare: assert( isSorter(pC) ); assert( pOp->p4type==P4_INT32 ); pIn3 = &aMem[pOp->p3]; - nIgnore = pOp->p4.i; + nKeyCol = pOp->p4.i; + res = 0; - rc = sqlite3VdbeSorterCompare(pC, pIn3, nIgnore, &res); + rc = sqlite3VdbeSorterCompare(pC, pIn3, nKeyCol, &res); VdbeBranchTaken(res!=0,2); if( res ){ pc = pOp->p2-1; diff --cc src/vdbesort.c index d4a2cc757e,6a5855f2ef..9110bd67b0 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@@ -2455,33 -1083,13 +2455,33 @@@ int sqlite3VdbeSorterRowkey(const VdbeC int sqlite3VdbeSorterCompare( const VdbeCursor *pCsr, /* Sorter cursor */ Mem *pVal, /* Value to compare to current sorter key */ - int nIgnore, /* Ignore this many fields at the end */ - int nKeyCol, /* Only compare this many fields */ ++ int nKeyCol, /* Compare this many columns */ int *pRes /* OUT: Result of comparison */ ){ VdbeSorter *pSorter = pCsr->pSorter; + UnpackedRecord *r2 = pSorter->pUnpacked; + KeyInfo *pKeyInfo = pCsr->pKeyInfo; + int i; void *pKey; int nKey; /* Sorter key to compare pVal with */ + if( r2==0 ){ + char *p; + r2 = pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pKeyInfo,0,0,&p); + assert( pSorter->pUnpacked==(UnpackedRecord*)p ); + if( r2==0 ) return SQLITE_NOMEM; - r2->nField = pKeyInfo->nField-nIgnore; ++ r2->nField = nKeyCol; + } - assert( r2->nField>=pKeyInfo->nField-nIgnore ); ++ assert( r2->nField==nKeyCol ); + pKey = vdbeSorterRowkey(pSorter, &nKey); - vdbeSorterCompare(pCsr, nKeyCol, pVal->z, pVal->n, pKey, nKey, pRes); + sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, r2); - for(i=0; inField; i++){ ++ for(i=0; iaMem[i].flags & MEM_Null ){ + *pRes = -1; + return SQLITE_OK; + } + } + + *pRes = sqlite3VdbeRecordCompare(pVal->n, pVal->z, r2, 0); return SQLITE_OK; }