aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2008-08-25 17:23:29 +0000
committerdrh <drh@noemail.net>2008-08-25 17:23:29 +0000
commit0a846f96ef25cb6bde68ff030ce023391dc05c3f (patch)
tree1db5e56f8fdd64bece78d85a7347f8c41fcb20c0 /src
parent502b74309a6483228fc2e8eca1144dc21f666388 (diff)
downloadsqlite-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.c38
-rw-r--r--src/resolve.c31
-rw-r--r--src/select.c5
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;