From: drh Date: Fri, 7 Dec 2012 14:02:14 +0000 (+0000) Subject: Veryquick now row to completion without segfaulting or asserting. But there X-Git-Tag: version-3.7.15~7^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b17cf58559a0759942aa7d984ed1a27b03a76e2;p=thirdparty%2Fsqlite.git Veryquick now row to completion without segfaulting or asserting. But there are still lots of errors. FossilOrigin-Name: 7fafab12e4c0c832c421975f8329c3214403d281 --- diff --git a/manifest b/manifest index 982c3dfca5..0beaa7262a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\sExpr.pColl\sfield\sand\scompute\sthe\scollating\ssequence\sas\sit\sis\sneeded.\nThis\sfixes\sthe\stest\sscript\s"shared9.test",\sthough\sthere\sis\sstill\sa\smemory\sleak.\nAnd\sthere\sare\sother\sproblems.\s\sConsider\sthis\sa\swork-in-progress. -D 2012-12-06T21:16:43.401 +C Veryquick\snow\srow\sto\scompletion\swithout\ssegfaulting\sor\sasserting.\s\sBut\sthere\nare\sstill\slots\sof\serrors. +D 2012-12-07T14:02:14.202 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 690d441a758cbffd13e814dc2724a721a6ebd400 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -130,9 +130,9 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 72a70dcfda75d3a1f81041ce4573e7afddcd8e4e F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4 F src/delete.c 9b8d308979114991e5dc7cee958316e07186941d -F src/expr.c 696c9e664a3d0405fb83ed206500809519f9c1a7 +F src/expr.c f4bb756c02bb5cd1b020f3c9f760961506c18f3c F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb -F src/fkey.c ca70996e72b307d58718e4d1f11668ff76d5f2d4 +F src/fkey.c 0ef356ae0c6f5ccbef14f9fdc8eaf890188148f2 F src/func.c 8147799b048065a1590805be464d05b4913e652c F src/global.c e59ecd2c553ad0d4bfbc84ca71231336f8993a7a F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4 @@ -172,9 +172,9 @@ F src/pragma.c 015723c48072781d2740e310ab04dc92956b76d1 F src/prepare.c 931ad0d852a0df48f79adcba6ce79ca5f475625c F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 -F src/resolve.c 6faf0f337ef89f7f9f6142d766793a87074612dc +F src/resolve.c c05083cb7f72090c238af7082b52e678b6b6f12a F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 -F src/select.c da1af4c2f1ff4d280aa68eb58b714e9b7d0fc1c3 +F src/select.c eb3ded8d6ffcbab20dc3e65ba6a6dc13a01e7fbf F src/shell.c e392dd1ccbb77cc1d75a8367a89b473c24bea019 F src/sqlite.h.in 4e71a210f383b6d060bd3fdf81d850f0f8c4eca3 F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0 @@ -250,7 +250,7 @@ F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83 F src/wal.c f5c7b5027d0ed0e9bc9afeb4a3a8dfea762ec7d2 F src/wal.h 29c197540b19044e6cd73487017e5e47a1d3dac6 F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b -F src/where.c 1c7ff5ad06fe23d9d46008a23f9118926bb4fcb7 +F src/where.c e415f9834292ad93033fe3956b22030462744ce1 F test/8_3_names.test 631ea964a3edb091cf73c3b540f6bcfdb36ce823 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6 @@ -1025,7 +1025,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P cc6e0785df3c2342376351e19ba7dba7b8d2f6a3 -R a2a449d5f80e428bd0ee765a55dfac68 +P fd011cb22f2d899d94ec7ce22641d7a8f5e19972 +R ba9600466f631bd82f758c001af1c41a U drh -Z 434d5050577e1426f5ec867bc43f759c +Z 54f2a394eca4714e815d413b6b9d3ddf diff --git a/manifest.uuid b/manifest.uuid index e5f7e5fe65..909315e162 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fd011cb22f2d899d94ec7ce22641d7a8f5e19972 \ No newline at end of file +7fafab12e4c0c832c421975f8329c3214403d281 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 11feaa216a..34be871149 100644 --- a/src/expr.c +++ b/src/expr.c @@ -106,7 +106,7 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ break; } if( p->flags & EP_Collate ){ - if( p->pLeft->flags & EP_Collate ){ + if( p->pLeft && (p->pLeft->flags & EP_Collate)!=0 ){ p = p->pLeft; }else{ p = p->pRight; @@ -114,14 +114,6 @@ CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){ }else{ break; } -#if 0 - else if( p->flags & EP_TokenOnly ){ - break; - }else{ - pColl = sqlite3ExprCollSeq(pParse, p->pLeft); - p = p->pRight; - } -#endif } if( sqlite3CheckCollSeq(pParse, pColl) ){ pColl = 0; @@ -3355,7 +3347,7 @@ static int evalConstExpr(Walker *pWalker, Expr *pExpr){ int r1 = ++pParse->nMem; int r2; r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); - if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1); + if( r1!=r2 ) sqlite3ReleaseTempReg(pParse, r1); pExpr->op2 = pExpr->op; pExpr->op = TK_REGISTER; pExpr->iTable = r2; @@ -3795,6 +3787,7 @@ int sqlite3ExprCompare(Expr *pA, Expr *pB){ return pA->op==TK_COLLATE ? 1 : 2; } } + if( (pA->flags&EP_Collate)!=(pB->flags&EP_Collate) ) return 1; return 0; } diff --git a/src/fkey.c b/src/fkey.c index a120b7b2b3..f9401ae6c5 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -511,12 +511,17 @@ static void fkScanChildren( ** expression to the parent key column defaults. */ if( pIdx ){ Column *pCol; + Expr *pNew; + Token s; iCol = pIdx->aiColumn[i]; pCol = &pTab->aCol[iCol]; if( pTab->iPKey==iCol ) iCol = -1; pLeft->iTable = regData+iCol+1; pLeft->affinity = pCol->affinity; - // fix me. pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl); + s.z = pCol->zColl; + s.n = sqlite3Strlen30(s.z); + pNew = sqlite3ExprSetCollByToken(pParse, pLeft, &s); + if( pNew ) pLeft = pNew; }else{ pLeft->iTable = regData; pLeft->affinity = SQLITE_AFF_INTEGER; diff --git a/src/resolve.c b/src/resolve.c index c2b0523f08..8ae170ab42 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -114,6 +114,7 @@ static void resolveAlias( pDup->flags2 |= EP2_MallocedToken; pDup->u.zToken = sqlite3DbStrDup(db, zToken); } + pDup->flags |= EP_Collate & pExpr->flags; /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This ** prevents ExprDelete() from deleting the Expr structure itself, diff --git a/src/select.c b/src/select.c index ee1755dbd8..4582d2bc12 100644 --- a/src/select.c +++ b/src/select.c @@ -2337,6 +2337,7 @@ static int multiSelectOrderBy( pColl = sqlite3ExprCollSeq(pParse, pTerm); }else{ pColl = multiSelectCollSeq(pParse, p, aPermute[i]); + pTerm->flags |= EP_Collate; } pKeyMerge->aColl[i] = pColl; pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder; diff --git a/src/where.c b/src/where.c index 02fb722073..459081e3e8 100644 --- a/src/where.c +++ b/src/where.c @@ -665,7 +665,7 @@ static WhereTerm *findTerm( */ assert(pX->pLeft); pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight); - assert(pColl || pParse->nErr); + if( pColl==0 ) pColl = pParse->db->pDfltColl; for(j=0; pIdx->aiColumn[j]!=iColumn; j++){ if( NEVER(j>=pIdx->nColumn) ) return 0;