-C Allocate\sthe\scorrect\ssize\sfor\sthe\soutput\sbuffer\sin\sfts3DoclistOrMerge().\sFix\sfor\s[56be976859].
-D 2011-09-13T19:08:43.953
+C Remove\scode\sfrom\svdbesort.c\sthat\swas\smade\sunreachable\sby\sthe\srecent\nsqlite3VdbeRecordUnpack()\soptimizations.
+D 2011-09-14T13:23:21.875
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in d314143fa6be24828021d3f583ad37d9afdce505
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/vdbeaux.c 079d37d4afac8359b2bbbf4af9876be04cc857b8
F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3
F src/vdbemem.c 5e6effb96dd53d233361cbfaa3f0a43b9af689e9
-F src/vdbesort.c 667bc65254a9ebaf7bc466ebb7e58884933e351f
+F src/vdbesort.c df1953a4929c4e82603d67ee7e5f6703f8a9135e
F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582
F src/wal.c 3154756177d6219e233d84291d5b05f4e06ff5e9
F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
-P a9db247b752bcda0131b8f01c6f0182f3101d154
-R d155e7b5d9350f72a6fc8ad44a77ee3c
-U dan
-Z 8c4428f39d0d1ba0e8478a40bc187eaf
+P 07788c0f7f3740c1c280f6ce4dc68401c30bae6e
+R 10acdf81d291f1b22f3bc7924f505649
+U drh
+Z eeb8c9d9c6395f39be328ccc4c54c823
** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace
** has been allocated and contains an unpacked record that is used as key2.
*/
-static int vdbeSorterCompare(
+static void vdbeSorterCompare(
VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */
int bOmitRowid, /* Ignore rowid field at end of keys */
void *pKey1, int nKey1, /* Left side of comparison */
for(i=0; i<r2->nField; i++){
if( r2->aMem[i].flags & MEM_Null ){
*pRes = -1;
- return SQLITE_OK;
+ return;
}
}
r2->flags |= UNPACKED_PREFIX_MATCH;
}
*pRes = sqlite3VdbeRecordCompare(nKey1, pKey1, r2);
- return SQLITE_OK;
}
/*
iRes = i1;
}else{
int res;
- int rc;
assert( pCsr->pSorter->pUnpacked!=0 ); /* allocated in vdbeSorterMerge() */
- rc = vdbeSorterCompare(
+ vdbeSorterCompare(
pCsr, 0, p1->aKey, p1->nKey, p2->aKey, p2->nKey, &res
);
- /* The vdbeSorterCompare() call cannot fail since pCsr->pSorter->pUnpacked
- ** has already been allocated. */
- assert( rc==SQLITE_OK );
-
if( res<=0 ){
iRes = i1;
}else{
}
/*
-** Attemp to merge the two sorted lists p1 and p2 into a single list. If no
-** error occurs set *ppOut to the head of the new list and return SQLITE_OK.
+** Merge the two sorted lists p1 and p2 into a single list.
+** Set *ppOut to the head of the new list.
*/
-static int vdbeSorterMerge(
+static void vdbeSorterMerge(
sqlite3 *db, /* Database handle */
VdbeCursor *pCsr, /* For pKeyInfo */
SorterRecord *p1, /* First list to merge */
SorterRecord *p2, /* Second list to merge */
SorterRecord **ppOut /* OUT: Head of merged list */
){
- int rc = SQLITE_OK;
SorterRecord *pFinal = 0;
SorterRecord **pp = &pFinal;
void *pVal2 = p2 ? p2->pVal : 0;
while( p1 && p2 ){
int res;
- rc = vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
- if( rc!=SQLITE_OK ){
- *pp = 0;
- vdbeSorterRecordFree(db, p1);
- vdbeSorterRecordFree(db, p2);
- vdbeSorterRecordFree(db, pFinal);
- *ppOut = 0;
- return rc;
- }
+ vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
if( res<=0 ){
*pp = p1;
pp = &p1->pNext;
}
}
*pp = p1 ? p1 : p2;
-
*ppOut = pFinal;
- return SQLITE_OK;
}
/*
** occurs.
*/
static int vdbeSorterSort(sqlite3 *db, VdbeCursor *pCsr){
- int rc = SQLITE_OK;
int i;
SorterRecord **aSlot;
SorterRecord *p;
while( p ){
SorterRecord *pNext = p->pNext;
p->pNext = 0;
- for(i=0; rc==SQLITE_OK && aSlot[i]; i++){
- rc = vdbeSorterMerge(db, pCsr, p, aSlot[i], &p);
+ for(i=0; aSlot[i]; i++){
+ vdbeSorterMerge(db, pCsr, p, aSlot[i], &p);
aSlot[i] = 0;
}
- if( rc!=SQLITE_OK ){
- vdbeSorterRecordFree(db, pNext);
- break;
- }
aSlot[i] = p;
p = pNext;
}
p = 0;
for(i=0; i<64; i++){
- if( rc==SQLITE_OK ){
- rc = vdbeSorterMerge(db, pCsr, p, aSlot[i], &p);
- }else{
- vdbeSorterRecordFree(db, aSlot[i]);
- }
+ vdbeSorterMerge(db, pCsr, p, aSlot[i], &p);
}
pSorter->pRecord = p;
sqlite3_free(aSlot);
- return rc;
+ return SQLITE_OK;
}
Mem *pVal, /* Value to compare to current sorter key */
int *pRes /* OUT: Result of comparison */
){
- int rc;
VdbeSorter *pSorter = pCsr->pSorter;
void *pKey; int nKey; /* Sorter key to compare pVal with */
pKey = vdbeSorterRowkey(pSorter, &nKey);
- rc = vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes);
- assert( rc!=SQLITE_OK || pVal->db->mallocFailed || (*pRes)<=0 );
- return rc;
+ vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes);
+ return SQLITE_OK;
}
#endif /* #ifndef SQLITE_OMIT_MERGE_SORT */