From: drh Date: Fri, 24 Sep 2004 12:24:06 +0000 (+0000) Subject: Fix for tickets #912 and #922. Problem introduced by check-in (1973). (CVS 1975) X-Git-Tag: version-3.0.8~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=145716b323bee1770fa4d1a88cb9fcc2065abdf8;p=thirdparty%2Fsqlite.git Fix for tickets #912 and #922. Problem introduced by check-in (1973). (CVS 1975) FossilOrigin-Name: 9001e2220d2e35b81a9b7dc70c012f94bb6db679 --- diff --git a/manifest b/manifest index c9732c2487..78520274a0 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index a6734bc79b..978975c2fc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a35e52276998f8db2407115b07f30bd490982944 \ No newline at end of file +9001e2220d2e35b81a9b7dc70c012f94bb6db679 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index c173be5245..c081555068 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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 @@ -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; inExpr; i++, pItem++){ + pOldItem = p->a; + for(i=0; inExpr; 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); }