--- src/tclsqlite.c
+++ src/tclsqlite.c
@@ -761,7 +761,7 @@
         case SQLITE_INTEGER: {
           sqlite_int64 v = sqlite3_value_int64(pIn);
           if( v>=-2147483647 && v<=2147483647 ){
-            pVal = Tcl_NewIntObj(v);
+            pVal = Tcl_NewIntObj((int)v);
           }else{
             pVal = Tcl_NewWideIntObj(v);
           }
@@ -1441,7 +1441,7 @@
     case SQLITE_INTEGER: {
       sqlite_int64 v = sqlite3_column_int64(pStmt, iCol);
       if( v>=-2147483647 && v<=2147483647 ){
-        return Tcl_NewIntObj(v);
+        return Tcl_NewIntObj((int)v);
       }else{
         return Tcl_NewWideIntObj(v);
       }
--- src/test1.c
+++ src/test1.c
@@ -3207,7 +3207,7 @@
   char *value;
   int rc;
 
-  void (*xDel)() = (objc==6?SQLITE_STATIC:SQLITE_TRANSIENT);
+  void (*xDel)(void*) = (objc==6?SQLITE_STATIC:SQLITE_TRANSIENT);
   Tcl_Obj *oStmt    = objv[objc-4];
   Tcl_Obj *oN       = objv[objc-3];
   Tcl_Obj *oString  = objv[objc-2];
@@ -3555,7 +3555,7 @@
     if( bytes>=0 ){
       bytes = bytes - (zTail-zSql);
     }
-    if( strlen(zTail)<bytes ){
+    if(bytes>-1 && strlen(zTail)<(unsigned int)bytes ){
       bytes = strlen(zTail);
     }
     Tcl_ObjSetVar2(interp, objv[4], 0, Tcl_NewStringObj(zTail, bytes), 0);
@@ -5389,8 +5389,6 @@
   extern int sqlite3_hostid_num;
 #endif
   extern int sqlite3_max_blobsize;
-  extern int sqlite3BtreeSharedCacheReport(void*,
-                                          Tcl_Interp*,int,Tcl_Obj*CONST*);
   static struct {
      char *zName;
      Tcl_CmdProc *xProc;
@@ -5554,7 +5552,6 @@
      { "tcl_variable_type",       tcl_variable_type, 0       },
 #ifndef SQLITE_OMIT_SHARED_CACHE
      { "sqlite3_enable_shared_cache", test_enable_shared, 0  },
-     { "sqlite3_shared_cache_report", sqlite3BtreeSharedCacheReport, 0},
 #endif
      { "sqlite3_libversion_number", test_libversion_number, 0  },
 #ifdef SQLITE_ENABLE_COLUMN_METADATA
--- src/test2.c
+++ src/test2.c
@@ -19,6 +19,7 @@
 #include <string.h>
 #include <ctype.h>
 
+#ifndef SQLITE_OMIT_DISKIO
 /*
 ** Interpret an SQLite error number
 */
@@ -53,470 +54,6 @@
 ** Page size and reserved size used for testing.
 */
 static int test_pagesize = 1024;
-
-/*
-** Dummy page reinitializer
-*/
-static void pager_test_reiniter(DbPage *pNotUsed){
-  return;
-}
-
-/*
-** Usage:   pager_open FILENAME N-PAGE
-**
-** Open a new pager
-*/
-static int pager_open(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  u32 pageSize;
-  Pager *pPager;
-  int nPage;
-  int rc;
-  char zBuf[100];
-  if( argc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " FILENAME N-PAGE\"", 0);
-    return TCL_ERROR;
-  }
-  if( Tcl_GetInt(interp, argv[2], &nPage) ) return TCL_ERROR;
-  rc = sqlite3PagerOpen(sqlite3_vfs_find(0), &pPager, argv[1], 0, 0,
-      SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB,
-      pager_test_reiniter);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  sqlite3PagerSetCachesize(pPager, nPage);
-  pageSize = test_pagesize;
-  sqlite3PagerSetPagesize(pPager, &pageSize, -1);
-  sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPager);
-  Tcl_AppendResult(interp, zBuf, 0);
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_close ID
-**
-** Close the given pager.
-*/
-static int pager_close(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerClose(pPager);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_rollback ID
-**
-** Rollback changes
-*/
-static int pager_rollback(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerRollback(pPager);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_commit ID
-**
-** Commit all changes
-*/
-static int pager_commit(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  rc = sqlite3PagerCommitPhaseTwo(pPager);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_stmt_begin ID
-**
-** Start a new checkpoint.
-*/
-static int pager_stmt_begin(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerOpenSavepoint(pPager, 1);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_stmt_rollback ID
-**
-** Rollback changes to a checkpoint
-*/
-static int pager_stmt_rollback(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, 0);
-  sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_stmt_commit ID
-**
-** Commit changes to a checkpoint
-*/
-static int pager_stmt_commit(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_stats ID
-**
-** Return pager statistics.
-*/
-static int pager_stats(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int i, *a;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  a = sqlite3PagerStats(pPager);
-  for(i=0; i<9; i++){
-    static char *zName[] = {
-      "ref", "page", "max", "size", "state", "err",
-      "hit", "miss", "ovfl",
-    };
-    char zBuf[100];
-    Tcl_AppendElement(interp, zName[i]);
-    sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",a[i]);
-    Tcl_AppendElement(interp, zBuf);
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_pagecount ID
-**
-** Return the size of the database file.
-*/
-static int pager_pagecount(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  char zBuf[100];
-  int nPage;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  sqlite3PagerPagecount(pPager, &nPage);
-  sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", nPage);
-  Tcl_AppendResult(interp, zBuf, 0);
-  return TCL_OK;
-}
-
-/*
-** Usage:   page_get ID PGNO
-**
-** Return a pointer to a page from the database.
-*/
-static int page_get(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  char zBuf[100];
-  DbPage *pPage;
-  int pgno;
-  int rc;
-  if( argc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID PGNO\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;
-  rc = sqlite3PagerSharedLock(pPager);
-  if( rc==SQLITE_OK ){
-    rc = sqlite3PagerGet(pPager, pgno, &pPage);
-  }
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);
-  Tcl_AppendResult(interp, zBuf, 0);
-  return TCL_OK;
-}
-
-/*
-** Usage:   page_lookup ID PGNO
-**
-** Return a pointer to a page if the page is already in cache.
-** If not in cache, return an empty string.
-*/
-static int page_lookup(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  char zBuf[100];
-  DbPage *pPage;
-  int pgno;
-  if( argc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID PGNO\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;
-  pPage = sqlite3PagerLookup(pPager, pgno);
-  if( pPage ){
-    sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);
-    Tcl_AppendResult(interp, zBuf, 0);
-  }
-  return TCL_OK;
-}
-
-/*
-** Usage:   pager_truncate ID PGNO
-*/
-static int pager_truncate(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Pager *pPager;
-  int pgno;
-  if( argc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID PGNO\"", 0);
-    return TCL_ERROR;
-  }
-  pPager = sqlite3TestTextToPtr(argv[1]);
-  if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;
-  sqlite3PagerTruncateImage(pPager, pgno);
-  return TCL_OK;
-}
-
-
-/*
-** Usage:   page_unref PAGE
-**
-** Drop a pointer to a page.
-*/
-static int page_unref(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  DbPage *pPage;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " PAGE\"", 0);
-    return TCL_ERROR;
-  }
-  pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
-  sqlite3PagerUnref(pPage);
-  return TCL_OK;
-}
-
-/*
-** Usage:   page_read PAGE
-**
-** Return the content of a page
-*/
-static int page_read(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  char zBuf[100];
-  DbPage *pPage;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " PAGE\"", 0);
-    return TCL_ERROR;
-  }
-  pPage = sqlite3TestTextToPtr(argv[1]);
-  memcpy(zBuf, sqlite3PagerGetData(pPage), sizeof(zBuf));
-  Tcl_AppendResult(interp, zBuf, 0);
-  return TCL_OK;
-}
-
-/*
-** Usage:   page_number PAGE
-**
-** Return the page number for a page.
-*/
-static int page_number(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  char zBuf[100];
-  DbPage *pPage;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " PAGE\"", 0);
-    return TCL_ERROR;
-  }
-  pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
-  sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", sqlite3PagerPagenumber(pPage));
-  Tcl_AppendResult(interp, zBuf, 0);
-  return TCL_OK;
-}
-
-/*
-** Usage:   page_write PAGE DATA
-**
-** Write something into a page.
-*/
-static int page_write(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  DbPage *pPage;
-  char *pData;
-  int rc;
-  if( argc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " PAGE DATA\"", 0);
-    return TCL_ERROR;
-  }
-  pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
-  rc = sqlite3PagerWrite(pPage);
-  if( rc!=SQLITE_OK ){
-    Tcl_AppendResult(interp, errorName(rc), 0);
-    return TCL_ERROR;
-  }
-  pData = sqlite3PagerGetData(pPage);
-  strncpy(pData, argv[2], test_pagesize-1);
-  pData[test_pagesize-1] = 0;
-  return TCL_OK;
-}
-
-#ifndef SQLITE_OMIT_DISKIO
 /*
  ** Usage:   fake_big_file  N  FILENAME
  **
@@ -544,6 +77,12 @@
   }
   if( Tcl_GetInt(interp, argv[1], &n) ) return TCL_ERROR;
 
+  /*
+   * This does not work with Berkeley DB. Making a large file does not cause
+   * DB to skip the existing pages.
+   */
+  return TCL_ERROR;
+
   pVfs = sqlite3_vfs_find(0);
   rc = sqlite3OsOpenMalloc(pVfs, argv[2], &fd, 
       (SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB), 0
@@ -564,31 +103,6 @@
 }
 #endif
 
-
-/*
-** test_control_pending_byte  PENDING_BYTE
-**
-** Set the PENDING_BYTE using the sqlite3_test_control() interface.
-*/
-static int testPendingByte(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  int pbyte;
-  int rc;
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-                     " PENDING-BYTE\"", (void*)0);
-    return TCL_ERROR;
-  }
-  if( Tcl_GetInt(interp, argv[1], &pbyte) ) return TCL_ERROR;
-  rc = sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, pbyte);
-  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
-  return TCL_OK;
-}  
-
 /*
 ** sqlite3BitvecBuiltinTest SIZE PROGRAM
 **
@@ -623,58 +137,49 @@
   return TCL_OK;
 }  
 
+static int t2_tcl_function_stub(
+  void *NotUsed,
+  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
+  int argc,              /* Number of arguments */
+  const char **argv      /* Text of each argument */
+){
+  return TCL_OK;
+}
+
 /*
 ** Register commands with the TCL interpreter.
 */
 int Sqlitetest2_Init(Tcl_Interp *interp){
-  extern int sqlite3_io_error_persist;
-  extern int sqlite3_io_error_pending;
-  extern int sqlite3_io_error_hit;
-  extern int sqlite3_io_error_hardhit;
-  extern int sqlite3_diskfull_pending;
-  extern int sqlite3_diskfull;
   static struct {
     char *zName;
     Tcl_CmdProc *xProc;
   } aCmd[] = {
-    { "pager_open",              (Tcl_CmdProc*)pager_open          },
-    { "pager_close",             (Tcl_CmdProc*)pager_close         },
-    { "pager_commit",            (Tcl_CmdProc*)pager_commit        },
-    { "pager_rollback",          (Tcl_CmdProc*)pager_rollback      },
-    { "pager_stmt_begin",        (Tcl_CmdProc*)pager_stmt_begin    },
-    { "pager_stmt_commit",       (Tcl_CmdProc*)pager_stmt_commit   },
-    { "pager_stmt_rollback",     (Tcl_CmdProc*)pager_stmt_rollback },
-    { "pager_stats",             (Tcl_CmdProc*)pager_stats         },
-    { "pager_pagecount",         (Tcl_CmdProc*)pager_pagecount     },
-    { "page_get",                (Tcl_CmdProc*)page_get            },
-    { "page_lookup",             (Tcl_CmdProc*)page_lookup         },
-    { "page_unref",              (Tcl_CmdProc*)page_unref          },
-    { "page_read",               (Tcl_CmdProc*)page_read           },
-    { "page_write",              (Tcl_CmdProc*)page_write          },
-    { "page_number",             (Tcl_CmdProc*)page_number         },
-    { "pager_truncate",          (Tcl_CmdProc*)pager_truncate      },
+    { "pager_open",              (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_close",             (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_commit",            (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_rollback",          (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_stmt_begin",        (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_stmt_commit",       (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_stmt_rollback",     (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_stats",             (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_pagecount",         (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_get",                (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_lookup",             (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_unref",              (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_read",               (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_write",              (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "page_number",             (Tcl_CmdProc*)t2_tcl_function_stub },
+    { "pager_truncate",          (Tcl_CmdProc*)t2_tcl_function_stub },
 #ifndef SQLITE_OMIT_DISKIO
     { "fake_big_file",           (Tcl_CmdProc*)fake_big_file       },
 #endif
     { "sqlite3BitvecBuiltinTest",(Tcl_CmdProc*)testBitvecBuiltinTest     },
-    { "sqlite3_test_control_pending_byte", (Tcl_CmdProc*)testPendingByte },
+    { "sqlite3_test_control_pending_byte", (Tcl_CmdProc*)t2_tcl_function_stub },
   };
   int i;
   for(i=0; i<sizeof(aCmd)/sizeof(aCmd[0]); i++){
     Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0);
   }
-  Tcl_LinkVar(interp, "sqlite_io_error_pending",
-     (char*)&sqlite3_io_error_pending, TCL_LINK_INT);
-  Tcl_LinkVar(interp, "sqlite_io_error_persist",
-     (char*)&sqlite3_io_error_persist, TCL_LINK_INT);
-  Tcl_LinkVar(interp, "sqlite_io_error_hit",
-     (char*)&sqlite3_io_error_hit, TCL_LINK_INT);
-  Tcl_LinkVar(interp, "sqlite_io_error_hardhit",
-     (char*)&sqlite3_io_error_hardhit, TCL_LINK_INT);
-  Tcl_LinkVar(interp, "sqlite_diskfull_pending",
-     (char*)&sqlite3_diskfull_pending, TCL_LINK_INT);
-  Tcl_LinkVar(interp, "sqlite_diskfull",
-     (char*)&sqlite3_diskfull, TCL_LINK_INT);
 #ifndef SQLITE_OMIT_WSD
   Tcl_LinkVar(interp, "sqlite_pending_byte",
      (char*)&sqlite3PendingByte, TCL_LINK_INT | TCL_LINK_READ_ONLY);
--- src/test3.c
+++ src/test3.c
@@ -19,6 +19,15 @@
 #include <stdlib.h>
 #include <string.h>
 
+static int t3_tcl_function_stub(
+  void *NotUsed,
+  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
+  int argc,              /* Number of arguments */
+  const char **argv      /* Text of each argument */
+){
+  return TCL_OK;
+}
+
 /*
 ** Interpret an SQLite error number
 */
@@ -355,36 +364,6 @@
 }
 
 /*
-** Usage:   btree_eof ID
-**
-** Return TRUE if the given cursor is not pointing at a valid entry.
-** Return FALSE if the cursor does point to a valid entry.
-*/
-static int btree_eof(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  BtCursor *pCur;
-  int rc;
-  char zBuf[50];
-
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pCur = sqlite3TestTextToPtr(argv[1]);
-  sqlite3BtreeEnter(pCur->pBtree);
-  rc = sqlite3BtreeEof(pCur);
-  sqlite3BtreeLeave(pCur->pBtree);
-  sqlite3_snprintf(sizeof(zBuf),zBuf, "%d", rc);
-  Tcl_AppendResult(interp, zBuf, 0);
-  return SQLITE_OK;
-}
-
-/*
 ** Usage:   btree_payload_size ID
 **
 ** Return the number of bytes of payload
@@ -396,8 +375,7 @@
   const char **argv      /* Text of each argument */
 ){
   BtCursor *pCur;
-  int n2;
-  u64 n1;
+  int n1;
   char zBuf[50];
 
   if( argc!=2 ){
@@ -410,103 +388,13 @@
 
   /* The cursor may be in "require-seek" state. If this is the case, the
   ** call to BtreeDataSize() will fix it. */
-  sqlite3BtreeDataSize(pCur, (u32*)&n2);
-  if( pCur->apPage[pCur->iPage]->intKey ){
-    n1 = 0;
-  }else{
-    sqlite3BtreeKeySize(pCur, (i64*)&n1);
-  }
-  sqlite3BtreeLeave(pCur->pBtree);
-  sqlite3_snprintf(sizeof(zBuf),zBuf, "%d", (int)(n1+n2));
+  sqlite3BtreeDataSize(pCur, (u32*)&n1);
+  sqlite3_snprintf(sizeof(zBuf),zBuf, "%d", (int)n1);
   Tcl_AppendResult(interp, zBuf, 0);
   return SQLITE_OK;
 }
 
 /*
-** usage:   varint_test  START  MULTIPLIER  COUNT  INCREMENT
-**
-** This command tests the putVarint() and getVarint()
-** routines, both for accuracy and for speed.
-**
-** An integer is written using putVarint() and read back with
-** getVarint() and varified to be unchanged.  This repeats COUNT
-** times.  The first integer is START*MULTIPLIER.  Each iteration
-** increases the integer by INCREMENT.
-**
-** This command returns nothing if it works.  It returns an error message
-** if something goes wrong.
-*/
-static int btree_varint_test(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  u32 start, mult, count, incr;
-  u64 in, out;
-  int n1, n2, i, j;
-  unsigned char zBuf[100];
-  if( argc!=5 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " START MULTIPLIER COUNT INCREMENT\"", 0);
-    return TCL_ERROR;
-  }
-  if( Tcl_GetInt(interp, argv[1], (int*)&start) ) return TCL_ERROR;
-  if( Tcl_GetInt(interp, argv[2], (int*)&mult) ) return TCL_ERROR;
-  if( Tcl_GetInt(interp, argv[3], (int*)&count) ) return TCL_ERROR;
-  if( Tcl_GetInt(interp, argv[4], (int*)&incr) ) return TCL_ERROR;
-  in = start;
-  in *= mult;
-  for(i=0; i<count; i++){
-    char zErr[200];
-    n1 = putVarint(zBuf, in);
-    if( n1>9 || n1<1 ){
-      sprintf(zErr, "putVarint returned %d - should be between 1 and 9", n1);
-      Tcl_AppendResult(interp, zErr, 0);
-      return TCL_ERROR;
-    }
-    n2 = getVarint(zBuf, &out);
-    if( n1!=n2 ){
-      sprintf(zErr, "putVarint returned %d and getVarint returned %d", n1, n2);
-      Tcl_AppendResult(interp, zErr, 0);
-      return TCL_ERROR;
-    }
-    if( in!=out ){
-      sprintf(zErr, "Wrote 0x%016llx and got back 0x%016llx", in, out);
-      Tcl_AppendResult(interp, zErr, 0);
-      return TCL_ERROR;
-    }
-    if( (in & 0xffffffff)==in ){
-      u32 out32;
-      n2 = getVarint32(zBuf, out32);
-      out = out32;
-      if( n1!=n2 ){
-        sprintf(zErr, "putVarint returned %d and GetVarint32 returned %d", 
-                  n1, n2);
-        Tcl_AppendResult(interp, zErr, 0);
-        return TCL_ERROR;
-      }
-      if( in!=out ){
-        sprintf(zErr, "Wrote 0x%016llx and got back 0x%016llx from GetVarint32",
-            in, out);
-        Tcl_AppendResult(interp, zErr, 0);
-        return TCL_ERROR;
-      }
-    }
-
-    /* In order to get realistic timings, run getVarint 19 more times.
-    ** This is because getVarint is called about 20 times more often
-    ** than putVarint.
-    */
-    for(j=0; j<19; j++){
-      getVarint(zBuf, &out);
-    }
-    in += incr;
-  }
-  return TCL_OK;
-}
-
-/*
 ** usage:   btree_from_db  DB-HANDLE
 **
 ** This command returns the btree handle for the main database associated
@@ -551,67 +439,6 @@
 }
 
 /*
-** Usage:   btree_ismemdb ID
-**
-** Return true if the B-Tree is in-memory.
-*/
-static int btree_ismemdb(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  Btree *pBt;
-  int res;
-
-  if( argc!=2 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
-       " ID\"", 0);
-    return TCL_ERROR;
-  }
-  pBt = sqlite3TestTextToPtr(argv[1]);
-  sqlite3_mutex_enter(pBt->db->mutex);
-  sqlite3BtreeEnter(pBt);
-  res = sqlite3PagerIsMemdb(sqlite3BtreePager(pBt));
-  sqlite3BtreeLeave(pBt);
-  sqlite3_mutex_leave(pBt->db->mutex);
-  Tcl_SetObjResult(interp, Tcl_NewBooleanObj(res));
-  return SQLITE_OK;
-}
-
-/*
-** usage:   btree_set_cache_size ID NCACHE
-**
-** Set the size of the cache used by btree $ID.
-*/
-static int btree_set_cache_size(
-  void *NotUsed,
-  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
-  int argc,              /* Number of arguments */
-  const char **argv      /* Text of each argument */
-){
-  int nCache;
-  Btree *pBt;
-  
-  if( argc!=3 ){
-    Tcl_AppendResult(
-        interp, "wrong # args: should be \"", argv[0], " BT NCACHE\"", 0);
-    return TCL_ERROR;
-  }
-  pBt = sqlite3TestTextToPtr(argv[1]);
-  if( Tcl_GetInt(interp, argv[2], &nCache) ) return TCL_ERROR;
-
-  sqlite3_mutex_enter(pBt->db->mutex);
-  sqlite3BtreeEnter(pBt);
-  sqlite3BtreeSetCacheSize(pBt, nCache);
-  sqlite3BtreeLeave(pBt);
-  sqlite3_mutex_leave(pBt->db->mutex);
-  return TCL_OK;
-}      
-
-
-
-/*
 ** Register commands with the TCL interpreter.
 */
 int Sqlitetest3_Init(Tcl_Interp *interp){
@@ -622,17 +449,17 @@
      { "btree_open",               (Tcl_CmdProc*)btree_open               },
      { "btree_close",              (Tcl_CmdProc*)btree_close              },
      { "btree_begin_transaction",  (Tcl_CmdProc*)btree_begin_transaction  },
-     { "btree_pager_stats",        (Tcl_CmdProc*)btree_pager_stats        },
+     { "btree_pager_stats",        (Tcl_CmdProc*)btree_pager_stats		  },
      { "btree_cursor",             (Tcl_CmdProc*)btree_cursor             },
      { "btree_close_cursor",       (Tcl_CmdProc*)btree_close_cursor       },
      { "btree_next",               (Tcl_CmdProc*)btree_next               },
-     { "btree_eof",                (Tcl_CmdProc*)btree_eof                },
-     { "btree_payload_size",       (Tcl_CmdProc*)btree_payload_size       },
+     { "btree_eof",                (Tcl_CmdProc*)t3_tcl_function_stub	  },
+     { "btree_payload_size",       (Tcl_CmdProc*)btree_payload_size		  },
      { "btree_first",              (Tcl_CmdProc*)btree_first              },
-     { "btree_varint_test",        (Tcl_CmdProc*)btree_varint_test        },
-     { "btree_from_db",            (Tcl_CmdProc*)btree_from_db            },
-     { "btree_ismemdb",            (Tcl_CmdProc*)btree_ismemdb            },
-     { "btree_set_cache_size",     (Tcl_CmdProc*)btree_set_cache_size     }
+     { "btree_varint_test",        (Tcl_CmdProc*)t3_tcl_function_stub	  },
+     { "btree_from_db",            (Tcl_CmdProc*)btree_from_db			  },
+     { "btree_ismemdb",            (Tcl_CmdProc*)t3_tcl_function_stub	  },
+     { "btree_set_cache_size",     (Tcl_CmdProc*)t3_tcl_function_stub	  }
   };
   int i;
 
--- src/test6.c
+++ src/test6.c
@@ -177,7 +177,7 @@
     iSkip = 512;
   }
   if( (iAmt-iSkip)>0 ){
-    rc = sqlite3OsWrite(p->pRealFile, &z[iSkip], iAmt-iSkip, iOff+iSkip);
+    rc = sqlite3OsWrite(p->pRealFile, &z[iSkip], (int)iAmt-iSkip, iOff+iSkip);
   }
   return rc;
 }
@@ -306,8 +306,8 @@
       }
       case 3: {               /* Trash sectors */
         u8 *zGarbage;
-        int iFirst = (pWrite->iOffset/g.iSectorSize);
-        int iLast = (pWrite->iOffset+pWrite->nBuf-1)/g.iSectorSize;
+        int iFirst = ((int)pWrite->iOffset/g.iSectorSize);
+        int iLast = ((int)pWrite->iOffset+pWrite->nBuf-1)/g.iSectorSize;
 
         assert(pWrite->zBuf);
 
@@ -430,7 +430,7 @@
 ){
   CrashFile *pCrash = (CrashFile *)pFile;
   if( iAmt+iOfst>pCrash->iSize ){
-    pCrash->iSize = iAmt+iOfst;
+    pCrash->iSize = iAmt+(int)iOfst;
   }
   while( pCrash->iSize>pCrash->nData ){
     u8 *zNew;
@@ -454,7 +454,7 @@
   CrashFile *pCrash = (CrashFile *)pFile;
   assert(size>=0);
   if( pCrash->iSize>size ){
-    pCrash->iSize = size;
+    pCrash->iSize = (int)size;
   }
   return writeListAppend(pFile, size, 0, 0);
 }
@@ -612,7 +612,7 @@
       ** never contains valid data anyhow. So avoid doing such a read here.
       */
       const int isDb = (flags&SQLITE_OPEN_MAIN_DB);
-      i64 iChunk = pWrapper->iSize;
+      int iChunk = pWrapper->iSize;
       if( iChunk>PENDING_BYTE && isDb ){
         iChunk = PENDING_BYTE;
       }
@@ -620,7 +620,7 @@
       rc = sqlite3OsRead(pReal, pWrapper->zData, iChunk, 0); 
       if( SQLITE_OK==rc && pWrapper->iSize>(PENDING_BYTE+512) && isDb ){
         i64 iOff = PENDING_BYTE+512;
-        iChunk = pWrapper->iSize - iOff;
+        iChunk = pWrapper->iSize - (int)iOff;
         rc = sqlite3OsRead(pReal, &pWrapper->zData[iOff], iChunk, iOff);
       }
     }else{
--- src/test_btree.c
+++ src/test_btree.c
@@ -13,50 +13,3 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 */
-#include "btreeInt.h"
-#include <tcl.h>
-
-/*
-** Usage: sqlite3_shared_cache_report
-**
-** Return a list of file that are shared and the number of
-** references to each file.
-*/
-int sqlite3BtreeSharedCacheReport(
-  void * clientData,
-  Tcl_Interp *interp,
-  int objc,
-  Tcl_Obj *CONST objv[]
-){
-#ifndef SQLITE_OMIT_SHARED_CACHE
-  extern BtShared *sqlite3SharedCacheList;
-  BtShared *pBt;
-  Tcl_Obj *pRet = Tcl_NewObj();
-  for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
-    const char *zFile = sqlite3PagerFilename(pBt->pPager);
-    Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj(zFile, -1));
-    Tcl_ListObjAppendElement(interp, pRet, Tcl_NewIntObj(pBt->nRef));
-  }
-  Tcl_SetObjResult(interp, pRet);
-#endif
-  return TCL_OK;
-}
-
-/*
-** Print debugging information about all cursors to standard output.
-*/
-void sqlite3BtreeCursorList(Btree *p){
-#ifdef SQLITE_DEBUG
-  BtCursor *pCur;
-  BtShared *pBt = p->pBt;
-  for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
-    MemPage *pPage = pCur->apPage[pCur->iPage];
-    char *zMode = pCur->wrFlag ? "rw" : "ro";
-    sqlite3DebugPrintf("CURSOR %p rooted at %4d(%s) currently at %d.%d%s\n",
-       pCur, pCur->pgnoRoot, zMode,
-       pPage ? pPage->pgno : 0, pCur->aiIdx[pCur->iPage],
-       (pCur->eState==CURSOR_VALID) ? "" : " eof"
-    );
-  }
-#endif
-}
--- src/test_journal.c
+++ src/test_journal.c
@@ -136,7 +136,7 @@
 */
 static int jtClose(sqlite3_file*);
 static int jtRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
-static int jtWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst);
+static int jtWrite(sqlite3_file*,const void*, int iAmt, sqlite3_int64 iOfst);
 static int jtTruncate(sqlite3_file*, sqlite3_int64 size);
 static int jtSync(sqlite3_file*, int flags);
 static int jtFileSize(sqlite3_file*, sqlite3_int64 *pSize);
@@ -405,7 +405,7 @@
 
     /* Calculate and store a checksum for each page in the database file. */
     if( rc==SQLITE_OK ){
-      int ii;
+      unsigned int ii;
       for(ii=0; rc==SQLITE_OK && ii<pMain->nPage; ii++){
         i64 iOff = (i64)(pMain->nPagesize) * (i64)ii;
         if( iOff==PENDING_BYTE ) continue;
@@ -467,7 +467,7 @@
           continue;
         }
       }
-      nRec = (iSize-iOff) / (pMain->nPagesize+8);
+      nRec = (u32)((iSize-iOff) / (pMain->nPagesize+8));
     }
 
     /* Read all the records that follow the journal-header just read. */
@@ -539,7 +539,7 @@
   }
 
   if( p->flags&SQLITE_OPEN_MAIN_DB && p->pWritable ){
-    if( iAmt<p->nPagesize 
+    if( (u32)iAmt<p->nPagesize 
      && p->nPagesize%iAmt==0 
      && iOfst>=(PENDING_BYTE+512) 
      && iOfst+iAmt<=PENDING_BYTE+p->nPagesize
@@ -550,7 +550,7 @@
       ** pending-byte page.
       */
     }else{
-      u32 pgno = iOfst/p->nPagesize + 1;
+      u32 pgno = (u32)(iOfst/p->nPagesize + 1);
       assert( (iAmt==1||iAmt==p->nPagesize) && ((iOfst+iAmt)%p->nPagesize)==0 );
       assert( pgno<=p->nPage || p->nSync>0 );
       assert( pgno>p->nPage || sqlite3BitvecTest(p->pWritable, pgno) );
@@ -579,7 +579,7 @@
   if( p->flags&SQLITE_OPEN_MAIN_DB && p->pWritable ){
     u32 pgno;
     u32 locking_page = (u32)(PENDING_BYTE/p->nPagesize+1);
-    for(pgno=size/p->nPagesize+1; pgno<=p->nPage; pgno++){
+    for(pgno=(u32)(size/p->nPagesize+1); pgno<=p->nPage; pgno++){
       assert( pgno==locking_page || sqlite3BitvecTest(p->pWritable, pgno) );
     }
   }
--- src/test_malloc.c
+++ src/test_malloc.c
@@ -749,7 +749,7 @@
     int isNew;
 
     int aKey[MALLOC_LOG_KEYINTS];
-    int nKey = sizeof(int)*MALLOC_LOG_KEYINTS;
+    unsigned int nKey = sizeof(int)*MALLOC_LOG_FRAMES;
 
     memset(aKey, 0, nKey);
     if( (sizeof(void*)*nFrame)<nKey ){
--- src/test_onefile.c
+++ src/test_onefile.c
@@ -288,7 +288,7 @@
 ){
   tmp_file *pTmp = (tmp_file *)pFile;
   if( (iAmt+iOfst)>pTmp->nAlloc ){
-    int nNew = 2*(iAmt+iOfst+pTmp->nAlloc);
+    int nNew = 2*(iAmt+(int)iOfst+pTmp->nAlloc);
     char *zNew = sqlite3_realloc(pTmp->zAlloc, nNew);
     if( !zNew ){
       return SQLITE_NOMEM;
@@ -297,7 +297,7 @@
     pTmp->nAlloc = nNew;
   }
   memcpy(&pTmp->zAlloc[iOfst], zBuf, iAmt);
-  pTmp->nSize = MAX(pTmp->nSize, iOfst+iAmt);
+  pTmp->nSize = (int)MAX(pTmp->nSize, iOfst+iAmt);
   return SQLITE_OK;
 }
 
@@ -306,7 +306,7 @@
 */
 static int tmpTruncate(sqlite3_file *pFile, sqlite_int64 size){
   tmp_file *pTmp = (tmp_file *)pFile;
-  pTmp->nSize = MIN(pTmp->nSize, size);
+  pTmp->nSize = (int)MIN(pTmp->nSize, size);
   return SQLITE_OK;
 }
 
@@ -418,7 +418,7 @@
     /* Journal file. */
     int iRem = iAmt;
     int iBuf = 0;
-    int ii = iOfst;
+    int ii = (int)iOfst;
     while( iRem>0 && rc==SQLITE_OK ){
       int iRealOff = pReal->nBlob - BLOCKSIZE*((ii/BLOCKSIZE)+1) + ii%BLOCKSIZE;
       int iRealAmt = MIN(iRem, BLOCKSIZE - (iRealOff%BLOCKSIZE));
@@ -453,14 +453,14 @@
     }else{
       rc = pF->pMethods->xWrite(pF, zBuf, iAmt, iOfst+BLOCKSIZE);
       if( rc==SQLITE_OK ){
-        pReal->nDatabase = MAX(pReal->nDatabase, iAmt+iOfst);
+        pReal->nDatabase = (int)MAX(pReal->nDatabase, iAmt+iOfst);
       }
     }
   }else{
     /* Journal file. */
     int iRem = iAmt;
     int iBuf = 0;
-    int ii = iOfst;
+    int ii = (int)iOfst;
     while( iRem>0 && rc==SQLITE_OK ){
       int iRealOff = pReal->nBlob - BLOCKSIZE*((ii/BLOCKSIZE)+1) + ii%BLOCKSIZE;
       int iRealAmt = MIN(iRem, BLOCKSIZE - (iRealOff%BLOCKSIZE));
@@ -475,7 +475,7 @@
       }
     }
     if( rc==SQLITE_OK ){
-      pReal->nJournal = MAX(pReal->nJournal, iAmt+iOfst);
+      pReal->nJournal = (int)MAX(pReal->nJournal, iAmt+iOfst);
     }
   }
 
@@ -489,9 +489,9 @@
   fs_file *p = (fs_file *)pFile;
   fs_real_file *pReal = p->pReal;
   if( p->eType==DATABASE_FILE ){
-    pReal->nDatabase = MIN(pReal->nDatabase, size);
+    pReal->nDatabase = (int)MIN(pReal->nDatabase, size);
   }else{
-    pReal->nJournal = MIN(pReal->nJournal, size);
+    pReal->nJournal = (int)MIN(pReal->nJournal, size);
   }
   return SQLITE_OK;
 }
@@ -641,7 +641,7 @@
       pReal->nBlob = BLOBSIZE;
     }else{
       unsigned char zS[4];
-      pReal->nBlob = size;
+      pReal->nBlob = (int)size;
       rc = pRealFile->pMethods->xRead(pRealFile, zS, 4, 0);
       pReal->nDatabase = (zS[0]<<24)+(zS[1]<<16)+(zS[2]<<8)+zS[3];
       if( rc==SQLITE_OK ){
