]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Additional test coverage for the btree module. Remove the failsafe() macro
authordrh <drh@noemail.net>
Fri, 11 Jul 2008 16:15:17 +0000 (16:15 +0000)
committerdrh <drh@noemail.net>
Fri, 11 Jul 2008 16:15:17 +0000 (16:15 +0000)
and replace it with ALWAYS() and NEVER(). (CVS 5395)

FossilOrigin-Name: d7e2f0d2d45574d6191c1b191c0daf5260696f27

13 files changed:
manifest
manifest.uuid
src/btree.c
src/btree.h
src/main.c
src/sqlite.h.in
src/sqliteInt.h
src/status.c
src/test_malloc.c
src/util.c
src/vdbeaux.c
src/where.c
test/tester.tcl

index 8ee480c9c243ddd192cb1b9ce66a9114f0a27a30..511fa74c21b41f3ed5422f8696704774b5a280fa 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sminor\sproblems\sin\sthe\stest\sscripts\sand\sharness.\s(CVS\s5394)
-D 2008-07-11T13:53:55
+C Additional\stest\scoverage\sfor\sthe\sbtree\smodule.\s\sRemove\sthe\sfailsafe()\smacro\nand\sreplace\sit\swith\sALWAYS()\sand\sNEVER().\s(CVS\s5395)
+D 2008-07-11T16:15:18
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in a03f7cb4f7ad50bc53a788c6c544430e81f95de4
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -95,8 +95,8 @@ F src/attach.c b18ba42c77f7d3941f5d23d2ca20fa1d841a4e91
 F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
 F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d
 F src/btmutex.c 483ced3c52205b04b97df69161fadbf87f4f1ea2
-F src/btree.c 6ec7584e5f61f2215cec8504ac6d330f1aa6765b
-F src/btree.h 9373128fbd6509a281e0d356cb15f9cffbfa876c
+F src/btree.c 881d5eb6ec2a80421690537e68e63a91644bf3ef
+F src/btree.h 0063e9853aa1ffb55b46f0e798eea8934f032ffd
 F src/btreeInt.h d59e58d39950a17c0fb7e004c90ab7696d3e7df5
 F src/build.c bac7233d984be3805aaa41cf500f7ee12dc97249
 F src/callback.c aa492a0ad8c2d454edff9fb8a57fae13743cf71d
@@ -114,7 +114,7 @@ F src/insert.c e8efc17d037346e4a4a6949e72aab850befe3d5d
 F src/journal.c cffd2cd214e58c0e99c3ff632b3bee6c7cbb260e
 F src/legacy.c 3626c71fb70912abec9a4312beba753a9ce800df
 F src/loadext.c ae0eed9fa96d74172d2a90ee63b5bc36d284295c
-F src/main.c ff7d9e39d014cc36246c334f6076e44e20db45ca
+F src/main.c 453d54b33799bfa0adfdf8a97a196521f9d9e962
 F src/malloc.c 226a532e9e371d1bb3de2553bdd1f9b600ef099c
 F src/md5.c 008216bbb5d34c6fbab5357aa68575ad8a31516a
 F src/mem1.c 8340fa5f969e9f9b9bdeb54106457a2003456d2b
@@ -142,11 +142,11 @@ F src/printf.c 8e5d410220cf8650f502caf71f0de979a3f9031e
 F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a
 F src/select.c fcf51df1818a448edebf55b032d89771ba4536ef
 F src/shell.c 484e7297e066f22830f9c15d7abbcdd2acb097b0
-F src/sqlite.h.in 8d25645bc8aee60e3089d05f3dbb8f66d1af0cd5
+F src/sqlite.h.in a573ab3a22256fc6c28b8f27d5af446f2b712a31
 F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e
-F src/sqliteInt.h ca0dc923bcc51bef0064f34628bd6daeb0d68d38
+F src/sqliteInt.h 83181862609629e04b99ae8087b46a7c9dcde7af
 F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8
-F src/status.c b8d7b1f6b518e71986dfa65058de7a714efd61be
+F src/status.c 2076bc996618b1a112a797f05c1d62026ae01402
 F src/table.c 22744786199c9195720c15a7a42cb97b2e2728d8
 F src/tclsqlite.c ec46084184f033ba396a9ee7b5514b695083d0f3
 F src/test1.c 30bdb22f911efd492c4f49565eae014330231ece
@@ -166,7 +166,7 @@ F src/test_devsym.c 6012cb8e3acf812513511025a4fa5d626e0ba19b
 F src/test_func.c ade4f0117cc96c5a05682e1ef38b84320a866ad9
 F src/test_hexio.c 2f1122aa3f012fa0142ee3c36ce5c902a70cd12f
 F src/test_loadext.c df8ab3a6481ddebbdf0d28ebac5d9e0790f7860f
-F src/test_malloc.c 4f07302a0077f2c1730baa7aeb359e4f51960aa7
+F src/test_malloc.c e655e3ff61845fc23886ee81973638e795477c9e
 F src/test_md5.c 28209a4e2068711b5443c33104fe41f21d160071
 F src/test_mutex.c 86a937f5d28f373b8495faf1347a9d0a306594d4
 F src/test_onefile.c 243157b10275251c5dc2d6619aee2ff9ae22379c
@@ -179,18 +179,18 @@ F src/tokenize.c b5fdc79fb7e00077b9c02af7a0da3b89c9f3398e
 F src/trigger.c bdb56bb9db1a7b18f8505484051221ab5123f21d
 F src/update.c 4e698fcc0c91c241a960304c4236dc3a49603155
 F src/utf.c 8d52f620a7153d90b058502124fe51d821fcdf57
-F src/util.c 06dbffe992bfc69dd8e4462a6baf9528b706fa17
+F src/util.c 172ebad4eb14eada6e2e1d0e202765b0e97905e4
 F src/vacuum.c ef342828002debc97514617af3424aea8ef8522c
 F src/vdbe.c 14d98d1d47041a99a9c98034842772dbbcc062fb
 F src/vdbe.h c46155c221418bea29ee3a749d5950fcf85a70e2
 F src/vdbeInt.h 30535c1d30ba1b5fb58d8f0e1d1261af976558aa
 F src/vdbeapi.c a7c6b8db324cf7eccff32de871dea36aa305c994
-F src/vdbeaux.c 734d27d1e18bb4fb3c7f94d499039a8d3bbf8407
+F src/vdbeaux.c 24ecae4e3e7ebcfb604d6ef0dc268da2cfb3ffa7
 F src/vdbeblob.c a20fe9345062b1a1b4cc187dc5fad45c9414033b
 F src/vdbefifo.c c46dae1194e4277bf007144d7e5b0c0b1c24f136
 F src/vdbemem.c 0c72b58ffd759676ce4829f42bacb83842a58c21
 F src/vtab.c 2096c03ec5540a43c8c73a8f43407dfd3549a982
-F src/where.c 3324f8273a9c40d4b04b65cdef0a8c4954c1cce6
+F src/where.c 087bfd37580cd1b289f534d5727630b247b00ba3
 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/all.test ed6849e7a425620d5d4388409f3b15901b5bc2e7
@@ -483,7 +483,7 @@ F test/tableapi.test 892208d49e7be4817a4d3e4f641dbcbbee8cd03c
 F test/tclsqlite.test aa1781808502271feccfd24f9e2c0d2c1d7c496a
 F test/tempdb.test b88ac8a19823cf771d742bf61eef93ef337c06b1
 F test/temptable.test 19b851b9e3e64d91e9867619b2a3f5fffee6e125
-F test/tester.tcl fbb53d7a92ab9156cf123a2dd47528a22c649860
+F test/tester.tcl 3a121e1a03b29376057b3dfff429ad4f373cd0c3
 F test/thread001.test 8fbd9559da0bbdc273e00318c7fd66c162020af7
 F test/thread002.test 2c4ad2c386f60f6fe268cd91c769ee35b3c1fd0b
 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
@@ -603,7 +603,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P c45d578e4475486dc5df1c1c0b6987d1cef39188
-R fcf7cc9c66cbbb6fac0990a081db5c0e
+P c9ffbfe343b640051161301869698dd9f1f76cb7
+R e52a0e0f0e545d82edca5fee51f0391a
 U drh
-Z a83f4b571a6e380574d50c852424d70b
+Z 3dba639b9a1f25eb1dff3dc290a1617a
index ef930fc21f5c19152a323956e09c95a6fc112e0a..170193605945d4776c84886a0e1822f987aeff7d 100644 (file)
@@ -1 +1 @@
-c9ffbfe343b640051161301869698dd9f1f76cb7
\ No newline at end of file
+d7e2f0d2d45574d6191c1b191c0daf5260696f27
\ No newline at end of file
index dab5c64b1ee2a50ebd0c4f87806b032bbf002176..cdff148c6d84f42271986eae786fcb02b408ecb4 100644 (file)
@@ -9,7 +9,7 @@
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: btree.c,v 1.478 2008/07/11 03:38:41 drh Exp $
+** $Id: btree.c,v 1.479 2008/07/11 16:15:18 drh Exp $
 **
 ** This file implements a external (disk-based) database using BTrees.
 ** See the header comment on "btreeInt.h" for additional information.
@@ -793,7 +793,7 @@ static void freeSpace(MemPage *pPage, int start, int size){
   assert( start>=pPage->hdrOffset+6+(pPage->leaf?0:4) );
   assert( (start + size)<=pPage->pBt->usableSize );
   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
-  if( size<4 ) size = 4;
+  assert( size>=0 );   /* Minimum cell size is 4 */
 
 #ifdef SQLITE_SECURE_DELETE
   /* Overwrite deleted information with zeros when the SECURE_DELETE 
@@ -1177,8 +1177,7 @@ int sqlite3BtreeOpen(
   ** If this Btree is a candidate for shared cache, try to find an
   ** existing BtShared object that we can share with
   */
-  if( (flags & BTREE_PRIVATE)==0
-   && isMemdb==0
+  if( isMemdb==0
    && (db->flags & SQLITE_Vtab)==0
    && zFilename && zFilename[0]
   ){
@@ -1187,9 +1186,7 @@ int sqlite3BtreeOpen(
       char *zFullPathname = sqlite3Malloc(nFullPathname);
       sqlite3_mutex *mutexShared;
       p->sharable = 1;
-      if( db ){
-        db->flags |= SQLITE_SharedCache;
-      }
+      db->flags |= SQLITE_SharedCache;
       if( !zFullPathname ){
         sqlite3_free(p);
         return SQLITE_NOMEM;
@@ -1375,10 +1372,10 @@ static int removeFromSharingList(BtShared *pBt){
       sqlite3SharedCacheList = pBt->pNext;
     }else{
       pList = sqlite3SharedCacheList;
-      while( pList && pList->pNext!=pBt ){
+      while( ALWAYS(pList) && pList->pNext!=pBt ){
         pList=pList->pNext;
       }
-      if( pList ){
+      if( ALWAYS(pList) ){
         pList->pNext = pBt->pNext;
       }
     }
index 43e7853d4c098ec8fb52c9872d62b0abeca9eb52..780f1d3f1469701bc1c54907f8b3e8050e011159 100644 (file)
@@ -13,7 +13,7 @@
 ** subsystem.  See comments in the source code for a detailed description
 ** of what each interface routine does.
 **
-** @(#) $Id: btree.h,v 1.100 2008/07/10 00:32:42 drh Exp $
+** @(#) $Id: btree.h,v 1.101 2008/07/11 16:15:18 drh Exp $
 */
 #ifndef _BTREE_H_
 #define _BTREE_H_
@@ -76,11 +76,6 @@ int sqlite3BtreeOpen(
 #define BTREE_READWRITE    16  /* Open for both reading and writing */
 #define BTREE_CREATE       32  /* Create the database if it does not exist */
 
-/* Additional values for the 4th argument of sqlite3BtreeOpen that
-** are not associated with PAGER_ values.
-*/
-#define BTREE_PRIVATE      64  /* Never share with other connections */
-
 int sqlite3BtreeClose(Btree*);
 int sqlite3BtreeSetCacheSize(Btree*,int);
 int sqlite3BtreeSetSafetyLevel(Btree*,int,int);
index 479ed610497a7fe5330de99ad3ad70e16d54f5f3..9da03f292f4d890d644b9cc7487c050adcdb4176 100644 (file)
@@ -14,7 +14,7 @@
 ** other files are for internal use by SQLite and should not be
 ** accessed by users of the library.
 **
-** $Id: main.c,v 1.475 2008/07/10 18:13:42 drh Exp $
+** $Id: main.c,v 1.476 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -584,8 +584,7 @@ static int sqliteDefaultBusyCallback(
 */
 int sqlite3InvokeBusyHandler(BusyHandler *p){
   int rc;
-  failsafe( p==0, 0x912aaf8d, {return 0;})
-  if( p->xFunc==0 || p->nBusy<0 ) return 0;
+  if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
   rc = p->xFunc(p->pArg, p->nBusy);
   if( rc==0 ){
     p->nBusy = -1;
index 7bfcd7d503d8633bc84d393cde946237770020e6..b1a77a03bb51510734887e1950da5ce2e6223be9 100644 (file)
@@ -30,7 +30,7 @@
 ** the version number) and changes its name to "sqlite3.h" as
 ** part of the build process.
 **
-** @(#) $Id: sqlite.h.in,v 1.367 2008/07/10 18:13:42 drh Exp $
+** @(#) $Id: sqlite.h.in,v 1.368 2008/07/11 16:15:18 drh Exp $
 */
 #ifndef _SQLITE3_H_
 #define _SQLITE3_H_
@@ -6112,7 +6112,6 @@ int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
 #define SQLITE_STATUS_SCRATCH_USED         3
 #define SQLITE_STATUS_SCRATCH_OVERFLOW     4
 #define SQLITE_STATUS_MALLOC_SIZE          5
-#define SQLITE_STATUS_FAILSAFE             6
 
 
 /*
index b019dffab9f468b0bad327b24611cf4b306ceb6b..acb6ffa7298c2d28fdbe0db71b80d15fdbb37347 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** Internal interface definitions for SQLite.
 **
-** @(#) $Id: sqliteInt.h,v 1.740 2008/07/10 00:32:42 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.741 2008/07/11 16:15:18 drh Exp $
 */
 #ifndef _SQLITEINT_H_
 #define _SQLITEINT_H_
 #endif
 
 /*
-** The failsafe() macro is used to test for error conditions that
-** should never occur.  This is similar to assert() except that with
-** failsafe() the application attempts to recover gracefully rather
-** than abort.  If a error condition is detected, a global flag is
-** set to the "Id" prior to recovery in order to alert the application 
-** to the error condition.
+** The ALWAYS and NEVER macros surround boolean expressions which 
+** are intended to always be true or false, respectively.  Such
+** expressions could be omitted from the code completely.  But they
+** are included in a few cases in order to enhance the resilience
+** of SQLite to unexpected behavior - to make the code "self-healing"
+** or "ductile" rather than being "brittle" and crashing at the first
+** hint of unplanned behavior.
 **
-** The Id should be a random integer.  The idea behind the Id is that
-** failsafe() faults in the field can be mapped back to specific failsafe()
-** macros, even if line numbers and filenames have changed.
-**
-** The test condition is argument Cond.  The recovery action is
-** argument Action.
+** When doing coverage testing ALWAYS and NEVER are hard-coded to
+** be true and false so that the unreachable code then specify will
+** not be counted as untested code.
 */
 #ifdef SQLITE_COVERAGE_TEST
-# define failsafe(Cond,Id,Action)
+# define ALWAYS(X)      (1)
+# define NEVER(X)       (0)
 #else
-# define failsafe(Cond,Id,Action)  if( Cond ){ sqlite3Failsafe(Id); Action; }
+# define ALWAYS(X)      (X)
+# define NEVER(X)       (X)
 #endif
 
 /*
@@ -1775,7 +1775,6 @@ struct Sqlite3Config {
   int bCoreMutex;                   /* True to enable core mutexing */
   int bFullMutex;                   /* True to enable full mutexing */
   int mxStrlen;                     /* Maximum string length */
-  int iFailsafe;                    /* Id of failed failsafe() */
   sqlite3_mem_methods m;            /* Low-level memory allocation interface */
   sqlite3_mutex_methods mutex;      /* Low-level mutex interface */
   void *pHeap;                      /* Heap storage space */
@@ -2019,7 +2018,6 @@ void sqlite3RegisterDateTimeFunctions(sqlite3*);
 #endif
 int sqlite3SafetyCheckOk(sqlite3*);
 int sqlite3SafetyCheckSickOrOk(sqlite3*);
-void sqlite3Failsafe(int);
 void sqlite3ChangeCookie(Parse*, int);
 void sqlite3MaterializeView(Parse*, Select*, Expr*, int);
 
index e5d54f06a78c1feae78d164e1d4c31526557166f..5d7d6faa4ad95b80f7c0d6ce3697ca7bf9dbcf9d 100644 (file)
@@ -13,7 +13,7 @@
 ** This module implements the sqlite3_status() interface and related
 ** functionality.
 **
-** $Id: status.c,v 1.2 2008/07/09 13:28:54 drh Exp $
+** $Id: status.c,v 1.3 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -73,11 +73,6 @@ void sqlite3StatusSet(int op, int X){
 ** then this routine is not threadsafe.
 */
 int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
-  if( op==SQLITE_STATUS_FAILSAFE ){
-    *pCurrent = *pHighwater = sqlite3Config.iFailsafe;
-    if( resetFlag ) sqlite3Config.iFailsafe = 0;
-    return SQLITE_OK;
-  }
   if( op<0 || op>=ArraySize(sqlite3Stat.nowValue) ){
     return SQLITE_MISUSE;
   }
index ee233e844fdbc94dcd558825a64a016b294bc9eb..b67bcccab836847b4209397b268372d6836df605 100644 (file)
@@ -13,7 +13,7 @@
 ** This file contains code used to implement test interfaces to the
 ** memory allocation subsystem.
 **
-** $Id: test_malloc.c,v 1.36 2008/07/10 18:13:42 drh Exp $
+** $Id: test_malloc.c,v 1.37 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -1058,7 +1058,6 @@ static int test_status(
     { "SQLITE_STATUS_SCRATCH_USED",        SQLITE_STATUS_SCRATCH_USED        },
     { "SQLITE_STATUS_SCRATCH_OVERFLOW",    SQLITE_STATUS_SCRATCH_OVERFLOW    },
     { "SQLITE_STATUS_MALLOC_SIZE",         SQLITE_STATUS_MALLOC_SIZE         },
-    { "SQLITE_STATUS_FAILSAFE",            SQLITE_STATUS_FAILSAFE            },
   };
   Tcl_Obj *pResult;
   if( objc!=3 ){
index ad1865c4e4e9b7dbae81d37c66d015248d364eb3..f7a819353bb4cd3594fe377466871484773c9ceb 100644 (file)
@@ -14,7 +14,7 @@
 ** This file contains functions for allocating memory, comparing
 ** strings, and stuff like that.
 **
-** $Id: util.c,v 1.236 2008/07/10 00:32:42 drh Exp $
+** $Id: util.c,v 1.237 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 #include <stdarg.h>
@@ -936,19 +936,3 @@ int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
       magic!=SQLITE_MAGIC_BUSY ) return 0;
   return 1;
 }
-
-#ifndef SQLITE_COVERAGE_TEST
-/*
-** Report a failsafe() macro failure
-*/
-void sqlite3Failsafe(int iCode){
-  sqlite3Config.iFailsafe = iCode;
-
-  /* The following assert is always false.  When assert() is enabled,
-  ** the following causes a failsafe() failure to work like an assert()
-  ** failure.  Normal operating mode for SQLite is for assert() to be
-  ** disabled, however, so the following is normally a no-op.
-  */
-  assert( iCode==0 );   /* Always fails if assert() is enabled */
-}
-#endif
index b774d994e52b2789ad8d12fe0103c3ff0cbb07c7..6e61ce446f9d0ee8922e553e630693e4b08a43b9 100644 (file)
@@ -14,7 +14,7 @@
 ** to version 2.8.7, all this code was combined into the vdbe.c source file.
 ** But that file was getting too big so this subroutines were split out.
 **
-** $Id: vdbeaux.c,v 1.395 2008/07/08 22:28:49 shane Exp $
+** $Id: vdbeaux.c,v 1.396 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -1083,11 +1083,12 @@ void sqlite3VdbeFreeCursor(Vdbe *p, Cursor *pCx){
   if( pCx==0 ){
     return;
   }
-  if( pCx->pCursor ){
-    sqlite3BtreeCloseCursor(pCx->pCursor);
-  }
   if( pCx->pBt ){
     sqlite3BtreeClose(pCx->pBt);
+    /* The pCx->pCursor will be close automatically, if it exists, by
+    ** the call above. */
+  }else if( pCx->pCursor ){
+    sqlite3BtreeCloseCursor(pCx->pCursor);
   }
 #ifndef SQLITE_OMIT_VIRTUALTABLE
   if( pCx->pVtabCursor ){
index 0f5ba2a5eefa5636d1b9d344787243db7b16363e..1b5a5f7b8fd2cb5cefe3790d0493df6a1caf634a 100644 (file)
@@ -16,7 +16,7 @@
 ** so is applicable.  Because this module is responsible for selecting
 ** indices, you might also think of this module as the "query optimizer".
 **
-** $Id: where.c,v 1.315 2008/07/09 13:28:54 drh Exp $
+** $Id: where.c,v 1.316 2008/07/11 16:15:18 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -478,7 +478,7 @@ static WhereTerm *findTerm(
         }
 
         for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
-          failsafe( j>=pIdx->nColumn, 0x0128fc98, {return 0;});
+          if( NEVER(j>=pIdx->nColumn) ) return 0;
         }
         if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
       }
@@ -1608,8 +1608,7 @@ static double bestIndex(
         flags |= WHERE_COLUMN_IN;
         if( pExpr->pSelect!=0 ){
           inMultiplier *= 25;
-        }else{
-          failsafe( pExpr->pList==0, 0x16b91d0f, continue);
+        }else if( ALWAYS(pExpr->pList) ){
           inMultiplier *= pExpr->pList->nExpr + 1;
         }
       }
@@ -1725,9 +1724,9 @@ static double bestIndex(
 */
 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
   if( pTerm
+      && ALWAYS((pTerm->flags & TERM_CODED)==0)
       && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
   ){
-    failsafe( (pTerm->flags & TERM_CODED)!=0, 0x641154a4, /* no-op */ );
     pTerm->flags |= TERM_CODED;
     if( pTerm->iParent>=0 ){
       WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
@@ -1873,7 +1872,7 @@ static int codeAllEqualityTerms(
     int r1;
     int k = pIdx->aiColumn[j];
     pTerm = findTerm(pWC, iCur, k, notReady, pLevel->flags, pIdx);
-    failsafe( pTerm==0, 0x7592494c, break );
+    if( NEVER(pTerm==0) ) break;
     assert( (pTerm->flags & TERM_CODED)==0 );
     r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
     if( r1!=regBase+j ){
index 8eac43c2023de9625fbb6708ae8e60925d0823e6..009f36b1932ab8dd2ad2a7ba0daa611a821d9341 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements some common TCL routines used for regression
 # testing the SQLite library
 #
-# $Id: tester.tcl,v 1.130 2008/07/09 16:51:52 drh Exp $
+# $Id: tester.tcl,v 1.131 2008/07/11 16:15:18 drh Exp $
 
 #
 # What for user input before continuing.  This gives an opportunity
@@ -287,16 +287,6 @@ proc finalize_testing {} {
   if {$nErr>0} {
     puts "Failures on these tests: $::failList"
   }
-  set failsafe [lindex [sqlite3_status SQLITE_STATUS_FAILSAFE 1] 1]
-  if {$failsafe} {
-    puts "Failsafe error code [format 0x%08x $failsafe]"
-    incr nErr
-  }
-  set fs2 [lindex [sqlite3_status SQLITE_STATUS_FAILSAFE 0] 1]
-  if {$fs2} {
-    puts "Failsafe failed to reset"
-    incr nErr
-  }
   if {[llength $omitList]>0} {
     puts "Omitted test cases:"
     set prec {}