]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix for tickets #912 and #922. Problem introduced by check-in (1973). (CVS 1975)
authordrh <drh@noemail.net>
Fri, 24 Sep 2004 12:24:06 +0000 (12:24 +0000)
committerdrh <drh@noemail.net>
Fri, 24 Sep 2004 12:24:06 +0000 (12:24 +0000)
FossilOrigin-Name: 9001e2220d2e35b81a9b7dc70c012f94bb6db679

manifest
manifest.uuid
src/expr.c

index c9732c248774f20da26a6a2a1e7540be56fa1fe6..78520274a026d9c69fc3f0276879a127cef21789 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Pthread\sis\snow\sconditionally\sincluded\sin\smakefile,\ssee\sticket\s#910\s(CVS\s1974)
-D 2004-09-20T14:57:23
+C Fix\sfor\stickets\s#912\sand\s#922.\s\sProblem\sintroduced\sby\scheck-in\s(1973).\s(CVS\s1975)
+D 2004-09-24T12:24:07
 F Makefile.in abdeb5bd9d017822691884935c320037c33f6ee6
 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -33,7 +33,7 @@ F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029
 F src/build.c c5ecf114af4ebc2963a03142b6bd6f2284ee35fc
 F src/date.c eb8d5fa1a6d5cfc09031c8852d10ff742a94b15b
 F src/delete.c d862b383a9abc0b79f4588783c2619fe52d74ea7
-F src/expr.c 4a674ed1c91967096aa73af2d0b6f3b93313fc98
+F src/expr.c 16ccea21ffb60f32ce2a9dd56d6d2c2cfdb0f1c6
 F src/func.c 1fbc5256639586573fd0e70814d6dcd8bc10afc1
 F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5
 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
@@ -247,7 +247,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25
 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P 4871c77f8fce36ff230e1f026f4e4e49492515e9
-R bede9b44ed7ebb616aa1848cfc38c778
-U dougcurrie
-Z fde2d4fad7076c6aba6215b69248b2e7
+P a35e52276998f8db2407115b07f30bd490982944
+R 5792bfa085a00a00bd1d4a9801cd2ff0
+U drh
+Z d6e2d9c37d8b22b397c88a0920962493
index a6734bc79b6521e9b43eb9b04a7778e0bd48c1df..978975c2fcf04e470d5e2879404a5b9f1a7e62a8 100644 (file)
@@ -1 +1 @@
-a35e52276998f8db2407115b07f30bd490982944
\ No newline at end of file
+9001e2220d2e35b81a9b7dc70c012f94bb6db679
\ No newline at end of file
index c173be5245c84389d38f45f1538af8a26e92cd28..c0815550686dbc842c7010cdf44cc7b6655aeb01 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.163 2004/09/19 02:15:25 drh Exp $
+** $Id: expr.c,v 1.164 2004/09/24 12:24:07 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -204,17 +204,9 @@ Expr *sqlite3Expr(int op, Expr *pLeft, Expr *pRight, Token *pToken){
   pNew->pRight = pRight;
   if( pToken ){
     assert( pToken->dyn==0 );
-    pNew->token = *pToken;
-    pNew->span = *pToken;
-  }else{
-    assert( pNew->token.dyn==0 );
-    assert( pNew->token.z==0 );
-    assert( pNew->token.n==0 );
-    if( pLeft && pRight ){
-      sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
-    }else{
-      pNew->span = pNew->token;
-    }
+    pNew->span = pNew->token = *pToken;
+  }else if( pLeft && pRight ){
+    sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
   }
   return pNew;
 }
@@ -242,7 +234,7 @@ void sqlite3ExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
   assert( pLeft!=0 );
   if( !sqlite3_malloc_failed && pRight->z && pLeft->z ){
     assert( pLeft->dyn==0 || pLeft->z[pLeft->n]==0 );
-    if( pLeft->z[pLeft->n]!=0 && pRight->dyn==0 ){
+    if( pLeft->dyn==0 && pRight->dyn==0 ){
       pExpr->span.z = pLeft->z;
       pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z);
     }else{
@@ -401,7 +393,7 @@ void sqlite3TokenCopy(Token *pTo, Token *pFrom){
 }
 ExprList *sqlite3ExprListDup(ExprList *p){
   ExprList *pNew;
-  struct ExprList_item *pItem;
+  struct ExprList_item *pItem, *pOldItem;
   int i;
   if( p==0 ) return 0;
   pNew = sqliteMalloc( sizeof(*pNew) );
@@ -412,9 +404,10 @@ ExprList *sqlite3ExprListDup(ExprList *p){
     sqliteFree(pNew);
     return 0;
   } 
-  for(i=0; i<p->nExpr; i++, pItem++){
+  pOldItem = p->a;
+  for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
     Expr *pNewExpr, *pOldExpr;
-    pItem->pExpr = pNewExpr = sqlite3ExprDup(pOldExpr = p->a[i].pExpr);
+    pItem->pExpr = pNewExpr = sqlite3ExprDup(pOldExpr = pOldItem->pExpr);
     if( pOldExpr->span.z!=0 && pNewExpr ){
       /* Always make a copy of the span for top-level expressions in the
       ** expression list.  The logic in SELECT processing that determines
@@ -423,9 +416,9 @@ ExprList *sqlite3ExprListDup(ExprList *p){
     }
     assert( pNewExpr==0 || pNewExpr->span.z!=0 
             || pOldExpr->span.z==0 || sqlite3_malloc_failed );
-    pItem->zName = sqliteStrDup(p->a[i].zName);
-    pItem->sortOrder = p->a[i].sortOrder;
-    pItem->isAgg = p->a[i].isAgg;
+    pItem->zName = sqliteStrDup(pOldItem->zName);
+    pItem->sortOrder = pOldItem->sortOrder;
+    pItem->isAgg = pOldItem->isAgg;
     pItem->done = 0;
   }
   return pNew;
@@ -1242,7 +1235,11 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr){
         sqlite3VdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
       }else if( pExpr->iColumn>=0 ){
         sqlite3VdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn);
-        VdbeComment((v, "# %T", &pExpr->span));
+#ifndef NDEBUG
+        if( pExpr->span.z && pExpr->span.n>0 && pExpr->span.n<100 ){
+          VdbeComment((v, "# %T", &pExpr->span));
+        }
+#endif
       }else{
         sqlite3VdbeAddOp(v, OP_Recno, pExpr->iTable, 0);
       }