File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / src / test9.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (12 years, 8 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: /*
    2: ** 2007 March 29
    3: **
    4: ** The author disclaims copyright to this source code.  In place of
    5: ** a legal notice, here is a blessing:
    6: **
    7: **    May you do good and not evil.
    8: **    May you find forgiveness for yourself and forgive others.
    9: **    May you share freely, never taking more than you give.
   10: **
   11: *************************************************************************
   12: **
   13: ** This file contains obscure tests of the C-interface required
   14: ** for completeness. Test code is written in C for these cases
   15: ** as there is not much point in binding to Tcl.
   16: */
   17: #include "sqliteInt.h"
   18: #include "tcl.h"
   19: #include <stdlib.h>
   20: #include <string.h>
   21: 
   22: /*
   23: ** c_collation_test
   24: */
   25: static int c_collation_test(
   26:   ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
   27:   Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
   28:   int objc,              /* Number of arguments */
   29:   Tcl_Obj *CONST objv[]  /* Command arguments */
   30: ){
   31:   const char *zErrFunction = "N/A";
   32:   sqlite3 *db;
   33: 
   34:   int rc;
   35:   if( objc!=1 ){
   36:     Tcl_WrongNumArgs(interp, 1, objv, "");
   37:     return TCL_ERROR;
   38:   }
   39: 
   40:   /* Open a database. */
   41:   rc = sqlite3_open(":memory:", &db);
   42:   if( rc!=SQLITE_OK ){
   43:     zErrFunction = "sqlite3_open";
   44:     goto error_out;
   45:   }
   46: 
   47:   rc = sqlite3_create_collation(db, "collate", 456, 0, 0);
   48:   if( rc!=SQLITE_MISUSE ){
   49:     sqlite3_close(db);
   50:     zErrFunction = "sqlite3_create_collation";
   51:     goto error_out;
   52:   }
   53: 
   54:   sqlite3_close(db);
   55:   return TCL_OK;
   56: 
   57: error_out:
   58:   Tcl_ResetResult(interp);
   59:   Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0);
   60:   return TCL_ERROR;
   61: }
   62: 
   63: /*
   64: ** c_realloc_test
   65: */
   66: static int c_realloc_test(
   67:   ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
   68:   Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
   69:   int objc,              /* Number of arguments */
   70:   Tcl_Obj *CONST objv[]  /* Command arguments */
   71: ){
   72:   void *p;
   73:   const char *zErrFunction = "N/A";
   74: 
   75:   if( objc!=1 ){
   76:     Tcl_WrongNumArgs(interp, 1, objv, "");
   77:     return TCL_ERROR;
   78:   }
   79: 
   80:   p = sqlite3_malloc(5);
   81:   if( !p ){
   82:     zErrFunction = "sqlite3_malloc";
   83:     goto error_out;
   84:   }
   85: 
   86:   /* Test that realloc()ing a block of memory to a negative size is
   87:   ** the same as free()ing that memory.
   88:   */
   89:   p = sqlite3_realloc(p, -1);
   90:   if( p ){
   91:     zErrFunction = "sqlite3_realloc";
   92:     goto error_out;
   93:   }
   94: 
   95:   return TCL_OK;
   96: 
   97: error_out:
   98:   Tcl_ResetResult(interp);
   99:   Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0);
  100:   return TCL_ERROR;
  101: }
  102: 
  103: 
  104: /*
  105: ** c_misuse_test
  106: */
  107: static int c_misuse_test(
  108:   ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
  109:   Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
  110:   int objc,              /* Number of arguments */
  111:   Tcl_Obj *CONST objv[]  /* Command arguments */
  112: ){
  113:   const char *zErrFunction = "N/A";
  114:   sqlite3 *db = 0;
  115:   sqlite3_stmt *pStmt;
  116:   int rc;
  117: 
  118:   if( objc!=1 ){
  119:     Tcl_WrongNumArgs(interp, 1, objv, "");
  120:     return TCL_ERROR;
  121:   }
  122: 
  123:   /* Open a database. Then close it again. We need to do this so that
  124:   ** we have a "closed database handle" to pass to various API functions.
  125:   */
  126:   rc = sqlite3_open(":memory:", &db);
  127:   if( rc!=SQLITE_OK ){
  128:     zErrFunction = "sqlite3_open";
  129:     goto error_out;
  130:   }
  131:   sqlite3_close(db);
  132: 
  133: 
  134:   rc = sqlite3_errcode(db);
  135:   if( rc!=SQLITE_MISUSE ){
  136:     zErrFunction = "sqlite3_errcode";
  137:     goto error_out;
  138:   }
  139: 
  140:   pStmt = (sqlite3_stmt*)1234;
  141:   rc = sqlite3_prepare(db, 0, 0, &pStmt, 0);
  142:   if( rc!=SQLITE_MISUSE ){
  143:     zErrFunction = "sqlite3_prepare";
  144:     goto error_out;
  145:   }
  146:   assert( pStmt==0 ); /* Verify that pStmt is zeroed even on a MISUSE error */
  147: 
  148:   pStmt = (sqlite3_stmt*)1234;
  149:   rc = sqlite3_prepare_v2(db, 0, 0, &pStmt, 0);
  150:   if( rc!=SQLITE_MISUSE ){
  151:     zErrFunction = "sqlite3_prepare_v2";
  152:     goto error_out;
  153:   }
  154:   assert( pStmt==0 );
  155: 
  156: #ifndef SQLITE_OMIT_UTF16
  157:   pStmt = (sqlite3_stmt*)1234;
  158:   rc = sqlite3_prepare16(db, 0, 0, &pStmt, 0);
  159:   if( rc!=SQLITE_MISUSE ){
  160:     zErrFunction = "sqlite3_prepare16";
  161:     goto error_out;
  162:   }
  163:   assert( pStmt==0 );
  164:   pStmt = (sqlite3_stmt*)1234;
  165:   rc = sqlite3_prepare16_v2(db, 0, 0, &pStmt, 0);
  166:   if( rc!=SQLITE_MISUSE ){
  167:     zErrFunction = "sqlite3_prepare16_v2";
  168:     goto error_out;
  169:   }
  170:   assert( pStmt==0 );
  171: #endif
  172: 
  173:   return TCL_OK;
  174: 
  175: error_out:
  176:   Tcl_ResetResult(interp);
  177:   Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0);
  178:   return TCL_ERROR;
  179: }
  180: 
  181: /*
  182: ** Register commands with the TCL interpreter.
  183: */
  184: int Sqlitetest9_Init(Tcl_Interp *interp){
  185:   static struct {
  186:      char *zName;
  187:      Tcl_ObjCmdProc *xProc;
  188:      void *clientData;
  189:   } aObjCmd[] = {
  190:      { "c_misuse_test",    c_misuse_test, 0 },
  191:      { "c_realloc_test",   c_realloc_test, 0 },
  192:      { "c_collation_test", c_collation_test, 0 },
  193:   };
  194:   int i;
  195:   for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){
  196:     Tcl_CreateObjCommand(interp, aObjCmd[i].zName, 
  197:         aObjCmd[i].xProc, aObjCmd[i].clientData, 0);
  198:   }
  199:   return TCL_OK;
  200: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>