]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add TCL test bindings and some more test cases for the new query API. (CVS 1467)
authordanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 01:04:07 +0000 (01:04 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 01:04:07 +0000 (01:04 +0000)
FossilOrigin-Name: d72adf0c522b442d5e1663862bdd639c282d4495

manifest
manifest.uuid
src/test1.c
test/capi3.test

index ccae17782dc337df0651b752d1bfc666bf713a38..a5c7dd6bc8dfa7b7e631c69daedfc41491329086 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Break\sMem.flags\sinto\sMem.type\sand\sMem.enc.\s(CVS\s1466)
-D 2004-05-26T23:43:12
+C Add\sTCL\stest\sbindings\sand\ssome\smore\stest\scases\sfor\sthe\snew\squery\sAPI.\s(CVS\s1467)
+D 2004-05-27T01:04:07
 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -59,7 +59,7 @@ F src/sqlite.h.in 68e165dc4dc2d477c95c76b9ede13eed5fbaabf4
 F src/sqliteInt.h 6b0d8d856c4af325eb5a00d1c32d89aacf432875
 F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
 F src/tclsqlite.c 86daf7bf6ba715bf0f0c7a47beb1d947a15cb868
-F src/test1.c f9d1e36b87b5a2253dabd4c563e110e8d8273dbf
+F src/test1.c 039659c18c6746199fe6e23863bb117a8e216f54
 F src/test2.c 6195a1ca2c8d0d2d93644e86da3289b403486872
 F src/test3.c 5e4a6d596f982f6f47a5f9f75ede9b4a3b739968
 F src/test4.c 34848a9fd31aa65857b20a8bfc03aff77d8c3426
@@ -90,7 +90,7 @@ F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
 F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
 F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027
 F test/capi2.test 8fb64e8ab7f78b8254cd4d04bb96822167f731b2
-F test/capi3.test 7ee3e33971ca5301f6a01e92cffaab95f91f417b
+F test/capi3.test 64b7bad608d896468a5b4b926ed9037d112b6d77
 F test/conflict.test 0911bb2f079046914a6e9c3341b36658c4e2103e
 F test/copy.test f07ea8d60878da7a67416ab62f78e9706b9d3c45
 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
@@ -205,7 +205,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P bba6684d502ba1ecd9614d2470ec94296e3c07c2
-R 3631e4c50022e315d656f5e4e18ecf0f
-U drh
-Z 55bf782fc149a5ef1b23628e3441dfe2
+P 68ef17028621681f5d091e77d5df84f663a15e27
+R 7a2016da4fa120ff352ff7111a3e7361
+U danielk1977
+Z d6c93a1d5f40d138f387c99f637a146d
index 67c0e42ba1dd13186d3b83626e00686eb5579f31..f4c23351b2a95362632d642b73d5dd6ffaa9a98a 100644 (file)
@@ -1 +1 @@
-68ef17028621681f5d091e77d5df84f663a15e27
\ No newline at end of file
+d72adf0c522b442d5e1663862bdd639c282d4495
\ No newline at end of file
index c09ced4cd83df90681d32046cc6708a185a16835..c803bdbcf0a281cedfc8286a3295464dca6b1346 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test1.c,v 1.59 2004/05/26 23:25:31 drh Exp $
+** $Id: test1.c,v 1.60 2004/05/27 01:04:07 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -1316,46 +1316,36 @@ static int test_step(
 }
 
 /*
-** Usage: sqlite3_column_text STMT column
+** Usage: sqlite3_column_count STMT 
 **
-** Advance the statement to the next row.
+** Return the number of columns returned by the sql statement STMT.
 */
-static int test_column_text(
+static int test_column_count(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
   Tcl_Obj *CONST objv[]
 ){
   sqlite3_stmt *pStmt;
-  int col;
-  Tcl_Obj *pRet;
 
-  if( objc!=3 ){
+  if( objc!=2 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
        Tcl_GetString(objv[0]), " STMT column", 0);
     return TCL_ERROR;
   }
 
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
-  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
-
-  if( SQLITE3_BLOB==sqlite3_column_type(pStmt, col) ){
-    int len = sqlite3_column_bytes(pStmt, col);
-    pRet = Tcl_NewByteArrayObj(sqlite3_column_text(pStmt, col), len);
-  }else{
-    pRet = Tcl_NewStringObj(sqlite3_column_text(pStmt, col), -1);
-  }
-  Tcl_SetObjResult(interp, pRet);
 
+  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_column_count(pStmt)));
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_text16 STMT column
+** Usage: sqlite3_column_type STMT column
 **
-** Advance the statement to the next row.
+** Return the type of the data in column 'column' of the current row.
 */
-static int test_column_text16(
+static int test_column_type(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
@@ -1363,8 +1353,7 @@ static int test_column_text16(
 ){
   sqlite3_stmt *pStmt;
   int col;
-  Tcl_Obj *pRet;
-  int len;
+  int tp;
 
   if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
@@ -1375,19 +1364,37 @@ static int test_column_text16(
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
 
-  len = sqlite3_column_bytes16(pStmt, col);
-  pRet = Tcl_NewByteArrayObj(sqlite3_column_text16(pStmt, col), len);
-  Tcl_SetObjResult(interp, pRet);
+  tp = sqlite3_column_type(pStmt, col);
+  switch( tp ){
+    case SQLITE3_INTEGER: 
+      Tcl_SetResult(interp, "INTEGER", TCL_STATIC); 
+      break;
+    case SQLITE3_NULL:
+      Tcl_SetResult(interp, "NULL", TCL_STATIC); 
+      break;
+    case SQLITE3_FLOAT:
+      Tcl_SetResult(interp, "FLOAT", TCL_STATIC); 
+      break;
+    case SQLITE3_TEXT:
+      Tcl_SetResult(interp, "TEXT", TCL_STATIC); 
+      break;
+    case SQLITE3_BLOB:
+      Tcl_SetResult(interp, "BLOB", TCL_STATIC); 
+      break;
+    default:
+      assert(0);
+  }
 
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_name STMT column
+** Usage: sqlite3_column_int64 STMT column
 **
-** Advance the statement to the next row.
+** Return the data in column 'column' of the current row cast as an
+** wide (64-bit) integer.
 */
-static int test_column_name(
+static int test_column_int64(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
@@ -1395,6 +1402,7 @@ static int test_column_name(
 ){
   sqlite3_stmt *pStmt;
   int col;
+  i64 iVal;
 
   if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
@@ -1405,17 +1413,17 @@ static int test_column_name(
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
 
-  Tcl_SetResult(interp, (char *)sqlite3_column_name(pStmt, col), 0);
-
+  iVal = sqlite3_column_int64(pStmt, col);
+  Tcl_SetObjResult(interp, Tcl_NewWideIntObj(iVal));
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_name16 STMT column
+** Usage: sqlite3_column_double STMT column
 **
-** Advance the statement to the next row.
+** Return the data in column 'column' of the current row cast as a double.
 */
-static int test_column_name16(
+static int test_column_double(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
@@ -1423,8 +1431,7 @@ static int test_column_name16(
 ){
   sqlite3_stmt *pStmt;
   int col;
-  Tcl_Obj *pRet;
-  const void *zName16;
+  double rVal;
 
   if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
@@ -1435,19 +1442,17 @@ static int test_column_name16(
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
 
-  zName16 = sqlite3_column_name16(pStmt, col);
-  pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2);
-  Tcl_SetObjResult(interp, pRet);
-
+  rVal = sqlite3_column_double(pStmt, col);
+  Tcl_SetObjResult(interp, Tcl_NewDoubleObj(iVal));
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_count STMT 
+** Usage: sqlite3_data_count STMT 
 **
 ** Return the number of columns returned by the sql statement STMT.
 */
-static int test_column_count(
+static int test_data_count(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
@@ -1463,65 +1468,59 @@ static int test_column_count(
 
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
 
-  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_column_count(pStmt)));
+  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_data_count(pStmt)));
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_type STMT column
+** This is a collating function named "REVERSE" which sorts text
+** in reverse order.
+*/
+static int reverseCollatingFunc(
+  void *NotUsed,
+  int nKey1, const void *pKey1,
+  int nKey2, const void *pKey2
+){
+  int rc, n;
+  n = nKey1<nKey2 ? nKey1 : nKey2;
+  rc = memcmp(pKey1, pKey2, n);
+  if( rc==0 ){
+    rc = nKey1 - nKey2;
+  }
+  return -rc;
+}
+
+/*
+** Usage: add_reverse_collating_func DB 
 **
-** Return the type of the data in column 'column' of the current row.
+** This routine adds a collation named "REVERSE" to database given.
+** REVERSE is used for testing only.
 */
-static int test_column_type(
+static int reverse_collfunc(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
   Tcl_Obj *CONST objv[]
 ){
-  sqlite3_stmt *pStmt;
-  int col;
-  int tp;
+  sqlite3 *db;
 
-  if( objc!=3 ){
-    Tcl_AppendResult(interp, "wrong # args: should be \"", 
-       Tcl_GetString(objv[0]), " STMT column", 0);
+  if( objc!=2 ){
+    Tcl_WrongNumArgs(interp, 1, objv, "DB");
     return TCL_ERROR;
   }
-
-  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
-  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
-
-  tp = sqlite3_column_type(pStmt, col);
-  switch( tp ){
-    case SQLITE3_INTEGER: 
-      Tcl_SetResult(interp, "INTEGER", TCL_STATIC); 
-      break;
-    case SQLITE3_NULL:
-      Tcl_SetResult(interp, "NULL", TCL_STATIC); 
-      break;
-    case SQLITE3_FLOAT:
-      Tcl_SetResult(interp, "FLOAT", TCL_STATIC); 
-      break;
-    case SQLITE3_TEXT:
-      Tcl_SetResult(interp, "TEXT", TCL_STATIC); 
-      break;
-    case SQLITE3_BLOB:
-      Tcl_SetResult(interp, "BLOB", TCL_STATIC); 
-      break;
-    default:
-      assert(0);
-  }
-
+  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
+  sqlite3ChangeCollatingFunction(db, "REVERSE", 7, 0, reverseCollatingFunc);
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_column_int STMT column
+** Usage: sqlite3_column_text STMT column
 **
-** Return the data in column 'column' of the current row cast as an
-** integer.
+** Usage: sqlite3_column_decltype STMT column
+**
+** Usage: sqlite3_column_name STMT column
 */
-static int test_column_int(
+static int test_stmt_utf8(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
@@ -1529,6 +1528,7 @@ static int test_column_int(
 ){
   sqlite3_stmt *pStmt;
   int col;
+  const char *(xFunc *)(sqlite3_stmt*, int) = clientData;
 
   if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
@@ -1538,78 +1538,78 @@ static int test_column_int(
 
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
-
-  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_column_int(pStmt, col)));
+  Tcl_SetResult(interp, (char *)xFunc(pStmt, col), 0);
   return TCL_OK;
 }
 
 /*
-** Usage: sqlite3_data_count STMT 
+** Usage: sqlite3_column_text STMT column
 **
-** Return the number of columns returned by the sql statement STMT.
+** Usage: sqlite3_column_decltype STMT column
+**
+** Usage: sqlite3_column_name STMT column
 */
-static int test_data_count(
+static int test_stmt_utf16(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
   Tcl_Obj *CONST objv[]
 ){
   sqlite3_stmt *pStmt;
+  int col;
+  Tcl_Obj *pRet;
+  const void *zName16;
+  const void *(xFunc *)(sqlite3_stmt*, int) = clientData;
 
-  if( objc!=2 ){
+  if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
        Tcl_GetString(objv[0]), " STMT column", 0);
     return TCL_ERROR;
   }
 
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
+  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
 
-  Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_data_count(pStmt)));
-  return TCL_OK;
-}
+  zName16 = xFunc(pStmt, col);
+  pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2);
+  Tcl_SetObjResult(interp, pRet);
 
-/*
-** This is a collating function named "REVERSE" which sorts text
-** in reverse order.
-*/
-static int reverseCollatingFunc(
-  void *NotUsed,
-  int nKey1, const void *pKey1,
-  int nKey2, const void *pKey2
-){
-  int rc, n;
-  n = nKey1<nKey2 ? nKey1 : nKey2;
-  rc = memcmp(pKey1, pKey2, n);
-  if( rc==0 ){
-    rc = nKey1 - nKey2;
-  }
-  return -rc;
+  return TCL_OK;
 }
 
 /*
-** Usage: add_reverse_collating_func DB 
+** Usage: sqlite3_column_int STMT column
+**
+** Usage: sqlite3_column_bytes STMT column
+**
+** Usage: sqlite3_column_bytes16 STMT column
 **
-** This routine adds a collation named "REVERSE" to database given.
-** REVERSE is used for testing only.
 */
-static int reverse_collfunc(
+static int test_stmt_int(
   void * clientData,
   Tcl_Interp *interp,
   int objc,
   Tcl_Obj *CONST objv[]
 ){
-  sqlite3 *db;
+  sqlite3_stmt *pStmt;
+  int col;
+  int (xFunc *)(sqlite3_stmt*, int) = clientData;
 
-  if( objc!=2 ){
-    Tcl_WrongNumArgs(interp, 1, objv, "DB");
+  if( objc!=3 ){
+    Tcl_AppendResult(interp, "wrong # args: should be \"", 
+       Tcl_GetString(objv[0]), " STMT column", 0);
     return TCL_ERROR;
   }
-  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
-  sqlite3ChangeCollatingFunction(db, "REVERSE", 7, 0, reverseCollatingFunc);
+
+  if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
+  if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
+
+  Tcl_SetObjResult(interp, Tcl_NewIntObj(xFunc(pStmt, col)));
   return TCL_OK;
 }
 
 
+
 /*
 ** Register commands with the TCL interpreter.
 */
@@ -1645,33 +1645,45 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
   static struct {
      char *zName;
      Tcl_ObjCmdProc *xProc;
+     void *clientData;
   } aObjCmd[] = {
-     { "sqlite3_bind_int32",            (Tcl_ObjCmdProc*)test_bind_int32    },
-     { "sqlite3_bind_int64",            (Tcl_ObjCmdProc*)test_bind_int64    },
-     { "sqlite3_bind_double",           (Tcl_ObjCmdProc*)test_bind_double   },
-     { "sqlite3_bind_null",             (Tcl_ObjCmdProc*)test_bind_null     },
-     { "sqlite3_bind_text",             (Tcl_ObjCmdProc*)test_bind_text     },
-     { "sqlite3_bind_text16",           (Tcl_ObjCmdProc*)test_bind_text16   },
-     { "sqlite3_bind_blob",             (Tcl_ObjCmdProc*)test_bind_blob     },
-     { "sqlite3_errcode",               (Tcl_ObjCmdProc*)test_errcode       },
-     { "sqlite3_errmsg",                (Tcl_ObjCmdProc*)test_errmsg        },
-     { "sqlite3_errmsg16",              (Tcl_ObjCmdProc*)test_errmsg16      },
-     { "sqlite3_prepare",               (Tcl_ObjCmdProc*)test_prepare       },
-     { "sqlite3_prepare16",             (Tcl_ObjCmdProc*)test_prepare16     },
-     { "sqlite3_open",                  (Tcl_ObjCmdProc*)test_open          },
-     { "sqlite3_open16",                (Tcl_ObjCmdProc*)test_open16        },
-     { "sqlite3_finalize",              (Tcl_ObjCmdProc*)test_finalize      },
-     { "sqlite3_reset",                 (Tcl_ObjCmdProc*)test_reset         },
-     { "sqlite3_step",                  (Tcl_ObjCmdProc*)test_step},
-     { "sqlite3_column_text",           (Tcl_ObjCmdProc*)test_column_text   },
-     { "sqlite3_column_text16",         (Tcl_ObjCmdProc*)test_column_text16 },
-     { "sqlite3_column_count",          (Tcl_ObjCmdProc*)test_column_count  },
-     { "sqlite3_column_name",           (Tcl_ObjCmdProc*)test_column_name   },
-     { "sqlite3_column_name16",         (Tcl_ObjCmdProc*)test_column_name16 },
-     { "sqlite3_column_type",           (Tcl_ObjCmdProc*)test_column_type   },
-     { "sqlite3_column_int",            (Tcl_ObjCmdProc*)test_column_int   },
-     { "sqlite3_data_count",            (Tcl_ObjCmdProc*)test_data_count   },
-     { "add_reverse_collating_func",    (Tcl_ObjCmdProc*)reverse_collfunc   },
+     { "sqlite3_bind_int32",            test_bind_int32, 0    },
+     { "sqlite3_bind_int64",            test_bind_int64 , 0   },
+     { "sqlite3_bind_double",           test_bind_double, 0   },
+     { "sqlite3_bind_null",             test_bind_null     ,0 },
+     { "sqlite3_bind_text",             test_bind_text     ,0 },
+     { "sqlite3_bind_text16",           test_bind_text16   ,0 },
+     { "sqlite3_bind_blob",             test_bind_blob     ,0 },
+     { "sqlite3_errcode",               test_errcode       ,0 },
+     { "sqlite3_errmsg",                test_errmsg        ,0 },
+     { "sqlite3_errmsg16",              test_errmsg16      ,0 },
+     { "sqlite3_open",                  test_open          ,0 },
+     { "sqlite3_open16",                test_open16        ,0 },
+     { "add_reverse_collating_func",    reverse_collfunc   ,0 },
+
+     { "sqlite3_prepare",               test_prepare       ,0 },
+     { "sqlite3_prepare16",             test_prepare16     ,0 },
+     { "sqlite3_finalize",              test_finalize      ,0 },
+     { "sqlite3_reset",                 test_reset         ,0 },
+     { "sqlite3_step",                  test_step,0 },
+
+     /* sqlite3_column_*() API */
+     { "sqlite3_column_count",          test_column_count  ,0 },
+     { "sqlite3_data_count",            test_data_count    ,0 },
+     { "sqlite3_column_type",           test_column_type   ,0 },
+     { "sqlite3_column_blob",           test_column_name   ,0 },
+     { "sqlite3_column_double",         test_column_double ,0 },
+     { "sqlite3_column_int64",          test_column_int64  ,0 },
+     { "sqlite3_column_int", test_stmt_int ,sqlite3_column_int },
+     { "sqlite3_column_bytes", test_stmt_int ,sqlite3_column_bytes },
+     { "sqlite3_column_bytes16", test_stmt_int ,sqlite3_column_bytes16 },
+     { "sqlite3_column_text", test_stmt_utf8,       sqlite3_column_text},
+     { "sqlite3_column_decltype", test_stmt_utf8,   sqlite3_column_decltype},
+     { "sqlite3_column_name", test_stmt_utf8,       sqlite3_column_name},
+     { "sqlite3_column_text16", test_stmt_utf16,    sqlite3_column_text16},
+     { "sqlite3_column_decltype16", test_stmt_utf16,sqlite3_column_decltype16},
+     { "sqlite3_column_name16", test_stmt_utf16,    sqlite3_column_name16},
+
   };
   int i;
 
index a5ab208c28e2950e9a3139f11ac9e55ae7331c4b..4e5dc3fb01ae9f7249a815d7c72413d83b1c254c 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script testing the callback-free C/C++ API.
 #
-# $Id: capi3.test,v 1.5 2004/05/26 13:27:00 danielk1977 Exp $
+# $Id: capi3.test,v 1.6 2004/05/27 01:04:07 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -162,16 +162,21 @@ do_test capi3-4.4 {
 #            columns (before the statement is executed).
 # capi3-5.1: Check we can retrieve column names (before statement execution)
 # capi3-5.2: Check we can retrieve column names in UTF-16
-# capi3-5.3: Step the statement.
-# capi3-5.4: Check the types of the values.
-# capi3-5.5: Check the values can be retrieved as integers.
-# capi3-5.6: Check the values can be retrieved as UTF-8 text.
-# capi3-5.7: Check the values can be retrieved as UTF-16 text.
-# capi3-5.8: Check that the types of the values have not been altered by
-#            retrieving the values as text.
 #
-# Test cases capi3-5.9 - capi3-5.14 are a repeat of 3-8, with a different
-# row of data.
+# capi3-5.1.3: Step the statement.
+# capi3-5.1.4: Check the types of the values.
+# capi3-5.1.5: Check the values can be retrieved as integers.
+# capi3-5.1.6: Check the values can be retrieved as UTF-8 text.
+# capi3-5.1.7: Check the values can be retrieved as floats.
+# capi3-5.1.8: Check the values can be retrieved as UTF-16 text.
+# capi3-5.1.9: Check the values can be retrieved as integers.
+# capi3-5.1.10: Check the values can be retrieved as floats.
+# capi3-5.1.11: Check the values can still be retrieved as UTF-8 text.
+# capi3-5.1.12: Check that the types of the values have not been altered by
+#               retrieving the values as text.
+#
+# Test cases capi3-5.2.3 - capi3-5.2.12 are a repeat of 1.3-1.12, with a
+# different row of data.
 #
 
 do_test capi3-5.0 {
@@ -198,37 +203,68 @@ do_test capi3-5.2 {
   set cnamelist
 } {a b c}
 
-do_test capi3-5.3 {
+do_test capi3-5.1.3 {
   sqlite3_step $STMT
 } SQLITE_ROW
 
-do_test capi3-5.4 {
+# types
+do_test capi3-5.1.4 {
   set types [list]
   foreach i {0 1 2} {lappend types [sqlite3_column_type $STMT $i]}
   set types
 } {INTEGER INTEGER TEXT}
 
-if 0 {
-do_test capi3-5.5 {
+# Integers
+do_test capi3-5.1.5 {
   set ints [list]
   foreach i {0 1 2} {lappend ints [sqlite3_column_int $STMT $i]}
   set ints
 } {1 2 3}
 
-do_test capi3-5.6 {
+# UTF-8
+do_test capi3-5.1.6 {
   set utf8 [list]
   foreach i {0 1 2} {lappend utf8 [sqlite3_column_data $STMT $i]}
   set utf8
 } {1 2 3}
-}
 
-do_test capi3-5.7 {
+# Floats
+do_test capi3-5.1.7 {
+  set utf8 [list]
+  foreach i {0 1 2} {lappend utf8 [sqlite3_column_double $STMT $i]}
+  set utf8
+} {1 2 3}
+
+# UTF-16
+do_test capi3-5.1.8 {
   set utf8 [list]
   foreach i {0 1 2} {lappend utf8 [utf8 [sqlite3_column_data16 $STMT $i]]}
   set utf8
 } {1 2 3}
 
-do_test capi3-5.8 {
+# Integers
+do_test capi3-5.1.9 {
+  set ints [list]
+  foreach i {0 1 2} {lappend ints [sqlite3_column_int $STMT $i]}
+  set ints
+} {1 2 3}
+
+# Floats
+do_test capi3-5.1.10 {
+  set utf8 [list]
+  foreach i {0 1 2} {lappend utf8 [sqlite3_column_double $STMT $i]}
+  set utf8
+} {1 2 3}
+
+# UTF-8
+do_test capi3-5.1.11 {
+  set utf8 [list]
+  foreach i {0 1 2} {lappend utf8 [sqlite3_column_data $STMT $i]}
+  set utf8
+} {1 2 3}
+
+# Types
+do_test capi3-5.1.12 {
   set types [list]
   foreach i {0 1 2} {lappend types [sqlite3_column_type $STMT $i]}
   set types