📄 test9.c
字号:
/*** 2007 March 29**** The author disclaims copyright to this source code. In place of** a legal notice, here is a blessing:**** May you do good and not evil.** May you find forgiveness for yourself and forgive others.** May you share freely, never taking more than you give.******************************************************************************* This file contains obscure tests of the C-interface required** for completeness. Test code is written in C for these cases** as there is not much point in binding to Tcl.**** $Id: test9.c,v 1.3 2007/04/23 23:56:32 drh Exp $*/#include "sqliteInt.h"#include "tcl.h"#include "os.h"#include <stdlib.h>#include <string.h>/*** c_collation_test*/static int c_collation_test( ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */){ const char *zErrFunction = "N/A"; sqlite3 *db; int rc; if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } /* Open a database. */ rc = sqlite3_open(":memory:", &db); if( rc!=SQLITE_OK ){ zErrFunction = "sqlite3_open"; goto error_out; } rc = sqlite3_create_collation(db, "collate", 456, 0, 0); if( rc!=SQLITE_ERROR ){ sqlite3_close(db); zErrFunction = "sqlite3_create_collation"; goto error_out; } sqlite3_close(db); return TCL_OK;error_out: Tcl_ResetResult(interp); Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0); return TCL_ERROR;}/*** c_realloc_test*/static int c_realloc_test( ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */){ void *p; const char *zErrFunction = "N/A"; if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } p = sqlite3_malloc(5); if( !p ){ zErrFunction = "sqlite3_malloc"; goto error_out; } /* Test that realloc()ing a block of memory to a negative size is ** the same as free()ing that memory. */ p = sqlite3_realloc(p, -1); if( p ){ zErrFunction = "sqlite3_realloc"; goto error_out; } return TCL_OK;error_out: Tcl_ResetResult(interp); Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0); return TCL_ERROR;}/*** c_misuse_test*/static int c_misuse_test( ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */){ const char *zErrFunction = "N/A"; sqlite3 *db = 0; int rc; if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } /* Open a database. Then close it again. We need to do this so that ** we have a "closed database handle" to pass to various API functions. */ rc = sqlite3_open(":memory:", &db); if( rc!=SQLITE_OK ){ zErrFunction = "sqlite3_open"; goto error_out; } sqlite3_close(db);#ifndef SQLITE_OMIT_UTF16 rc = sqlite3_collation_needed16(db, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_collation_needed16"; goto error_out; }#endif rc = sqlite3_collation_needed(db, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_collation_needed"; goto error_out; } rc = sqlite3_create_collation(db, 0, 0, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_create_collation"; goto error_out; } rc = sqlite3_create_function(db, 0, 0, 0, 0, 0, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_create_function"; goto error_out; } rc = sqlite3_busy_handler(db, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_busy_handler"; goto error_out; } rc = sqlite3_errcode(db); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_busy_handler"; goto error_out; }#ifndef SQLITE_OMIT_UTF16 rc = sqlite3_prepare16(db, 0, 0, 0, 0); if( rc!=SQLITE_MISUSE ){ zErrFunction = "sqlite3_prepare16"; goto error_out; }#endif return TCL_OK;error_out: Tcl_ResetResult(interp); Tcl_AppendResult(interp, "Error testing function: ", zErrFunction, 0); return TCL_ERROR;}/*** Register commands with the TCL interpreter.*/int Sqlitetest9_Init(Tcl_Interp *interp){ static struct { char *zName; Tcl_ObjCmdProc *xProc; void *clientData; } aObjCmd[] = { { "c_misuse_test", c_misuse_test, 0 }, { "c_realloc_test", c_realloc_test, 0 }, { "c_collation_test", c_collation_test, 0 }, }; int i; for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, aObjCmd[i].clientData, 0); } return TCL_OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -