Annotation of embedaddon/sqlite3/src/test9.c, revision 1.1

1.1     ! misho       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>