diff options
author | drh <drh@noemail.net> | 2008-08-25 17:23:29 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2008-08-25 17:23:29 +0000 |
commit | 0a846f96ef25cb6bde68ff030ce023391dc05c3f (patch) | |
tree | 1db5e56f8fdd64bece78d85a7347f8c41fcb20c0 /src | |
parent | 502b74309a6483228fc2e8eca1144dc21f666388 (diff) | |
download | sqlite-0a846f96ef25cb6bde68ff030ce023391dc05c3f.tar.gz sqlite-0a846f96ef25cb6bde68ff030ce023391dc05c3f.zip |
Fix bug in the premutation testing that was causing many permutations from
begin skipped. There are now 16 errors reported by the permutation test. (CVS 5610)
FossilOrigin-Name: 4ad096bda1fc5c7b66f71ff5b32a4085c9a40574
Diffstat (limited to 'src')
-rw-r--r-- | src/pager.c | 38 | ||||
-rw-r--r-- | src/resolve.c | 31 | ||||
-rw-r--r-- | src/select.c | 5 |
3 files changed, 34 insertions, 40 deletions
diff --git a/src/pager.c b/src/pager.c index 1903fb1e7..cd3f57426 100644 --- a/src/pager.c +++ b/src/pager.c @@ -18,7 +18,7 @@ ** file simultaneously, or one process from reading the database while ** another is writing. ** -** @(#) $Id: pager.c,v 1.478 2008/08/25 07:12:29 danielk1977 Exp $ +** @(#) $Id: pager.c,v 1.479 2008/08/25 17:23:29 drh Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" @@ -2495,29 +2495,27 @@ static int pagerStress(void *p, PgHdr *pPg){ static int hasHotJournal(Pager *pPager, int *pExists){ sqlite3_vfs *pVfs = pPager->pVfs; int rc = SQLITE_OK; + int exists; + int locked; + assert( pPager!=0 ); + assert( pPager->useJournal ); + assert( pPager->fd->pMethods ); *pExists = 0; - if( pPager->useJournal && pPager->fd->pMethods ){ - int exists; - int locked; - - rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists); - if( rc==SQLITE_OK && exists ){ - rc = sqlite3OsCheckReservedLock(pPager->fd, &locked); - } - - if( rc==SQLITE_OK && exists && !locked ){ - int nPage; - rc = sqlite3PagerPagecount(pPager, &nPage); - if( rc==SQLITE_OK ){ - if( nPage==0 ){ - sqlite3OsDelete(pVfs, pPager->zJournal, 0); - }else{ - *pExists = 1; - } + rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists); + if( rc==SQLITE_OK && exists ){ + rc = sqlite3OsCheckReservedLock(pPager->fd, &locked); + } + if( rc==SQLITE_OK && exists && !locked ){ + int nPage; + rc = sqlite3PagerPagecount(pPager, &nPage); + if( rc==SQLITE_OK ){ + if( nPage==0 ){ + sqlite3OsDelete(pVfs, pPager->zJournal, 0); + }else{ + *pExists = 1; } } } - return rc; } diff --git a/src/resolve.c b/src/resolve.c index b9d536093..439fc745f 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -14,7 +14,7 @@ ** resolve all identifiers by associating them with a particular ** table and column. ** -** $Id: resolve.c,v 1.3 2008/08/25 12:14:09 drh Exp $ +** $Id: resolve.c,v 1.4 2008/08/25 17:23:29 drh Exp $ */ #include "sqliteInt.h" #include <stdlib.h> @@ -647,9 +647,7 @@ static int resolveCompoundOrderBy( struct ExprList_item *pItem; moreToDo = 0; pEList = pSelect->pEList; - if( pEList==0 ){ - return 1; - } + assert( pEList!=0 ); for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){ int iCol = -1; Expr *pE, *pDup; @@ -730,9 +728,7 @@ int sqlite3ResolveOrderGroupBy( } #endif pEList = pSelect->pEList; - if( pEList==0 ){ - return 0; - } + assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */ for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){ if( pItem->iCol ){ Expr *pE; @@ -749,7 +745,7 @@ int sqlite3ResolveOrderGroupBy( sqlite3ExprDelete(db, pE); pE = sqlite3ExprDup(db, pEList->a[pItem->iCol-1].pExpr); pItem->pExpr = pE; - if( pE && pColl && flags ){ + if( pE && flags ){ pE->pColl = pColl; pE->flags |= flags; } @@ -809,7 +805,7 @@ static int resolveOrderGroupBy( /* The ORDER BY term is an integer constant. Again, set the column ** number so that sqlite3ResolveOrderGroupBy() will convert the ** order-by term to a copy of the result-set expression */ - if( iCol<1 || iCol>nResult ){ + if( iCol<1 ){ resolveOutOfRangeError(pParse, zType, i+1, nResult); return 1; } @@ -842,7 +838,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ sqlite3 *db; /* Database connection */ - if( p==0 ) return WRC_Continue; + assert( p!=0 ); if( p->selFlags & SF_Resolved ){ return WRC_Prune; } @@ -890,7 +886,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ /* Resolve names in the result set. */ pEList = p->pEList; - if( !pEList ) return WRC_Abort; + assert( pEList!=0 ); for(i=0; i<pEList->nExpr; i++){ Expr *pX = pEList->a[i].pExpr; if( sqlite3ResolveExprNames(&sNC, pX) ){ @@ -1102,11 +1098,10 @@ void sqlite3ResolveSelectNames( ){ Walker w; - if( p ){ - w.xExprCallback = resolveExprStep; - w.xSelectCallback = resolveSelectStep; - w.pParse = pParse; - w.u.pNC = pOuterNC; - sqlite3WalkSelect(&w, p); - } + assert( p!=0 ); + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.pParse = pParse; + w.u.pNC = pOuterNC; + sqlite3WalkSelect(&w, p); } diff --git a/src/select.c b/src/select.c index 3af289df1..8cd5325b3 100644 --- a/src/select.c +++ b/src/select.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** -** $Id: select.c,v 1.469 2008/08/22 16:29:51 drh Exp $ +** $Id: select.c,v 1.470 2008/08/25 17:23:29 drh Exp $ */ #include "sqliteInt.h" @@ -87,8 +87,9 @@ Select *sqlite3SelectNew( pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; pNew->addrOpenEphm[2] = -1; - if( pNew==&standin) { + if( db->mallocFailed ) { clearSelect(db, pNew); + if( pNew!=&standin ) sqlite3DbFree(db, pNew); pNew = 0; } return pNew; |