]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Veryquick now row to completion without segfaulting or asserting. But there
authordrh <drh@noemail.net>
Fri, 7 Dec 2012 14:02:14 +0000 (14:02 +0000)
committerdrh <drh@noemail.net>
Fri, 7 Dec 2012 14:02:14 +0000 (14:02 +0000)
are still lots of errors.

FossilOrigin-Name: 7fafab12e4c0c832c421975f8329c3214403d281

manifest
manifest.uuid
src/expr.c
src/fkey.c
src/resolve.c
src/select.c
src/where.c

index 982c3dfca5933eec187d29f11ffd8dc75a277e54..0beaa7262ab6ab5932809e4d298400ada10974b8 100644 (file)
--- 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
index e5f7e5fe65beb8c59afa6ef7620f865fb77f0801..909315e162ec97e4b1d1f2a755587bfe1e19eb80 100644 (file)
@@ -1 +1 @@
-fd011cb22f2d899d94ec7ce22641d7a8f5e19972
\ No newline at end of file
+7fafab12e4c0c832c421975f8329c3214403d281
\ No newline at end of file
index 11feaa216a680b20b89dc68d112bda295eb84c72..34be871149b64432af740f9838c58a2f64a8279a 100644 (file)
@@ -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;
 }
 
index a120b7b2b34ef8859ff3c073335f973af4416315..f9401ae6c54e214c234c1f65bfbaf3f79aebdacb 100644 (file)
@@ -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;
index c2b0523f0852cce52c0c7ebaebfb82ac1bcac055..8ae170ab4278d9606b0b1a2759dbc883d01b0aa1 100644 (file)
@@ -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,
index ee1755dbd82de68b5af2b8f118c7d395e030977c..4582d2bc12bee1821fb98413f8c7616ad9c5e468 100644 (file)
@@ -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;
index 02fb72207313a56083d5ee86b470a96bc488ec7a..459081e3e8144fa1c19be04fe4b7ed054680b832 100644 (file)
@@ -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;