Annotation of embedaddon/sqlite3/src/test_autoext.c, revision 1.1
1.1 ! misho 1: /*
! 2: ** 2006 August 23
! 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: ** Test extension for testing the sqlite3_auto_extension() function.
! 13: */
! 14: #include "tcl.h"
! 15: #include "sqlite3ext.h"
! 16:
! 17: #ifndef SQLITE_OMIT_LOAD_EXTENSION
! 18: static SQLITE_EXTENSION_INIT1
! 19:
! 20: /*
! 21: ** The sqr() SQL function returns the square of its input value.
! 22: */
! 23: static void sqrFunc(
! 24: sqlite3_context *context,
! 25: int argc,
! 26: sqlite3_value **argv
! 27: ){
! 28: double r = sqlite3_value_double(argv[0]);
! 29: sqlite3_result_double(context, r*r);
! 30: }
! 31:
! 32: /*
! 33: ** This is the entry point to register the extension for the sqr() function.
! 34: */
! 35: static int sqr_init(
! 36: sqlite3 *db,
! 37: char **pzErrMsg,
! 38: const sqlite3_api_routines *pApi
! 39: ){
! 40: SQLITE_EXTENSION_INIT2(pApi);
! 41: sqlite3_create_function(db, "sqr", 1, SQLITE_ANY, 0, sqrFunc, 0, 0);
! 42: return 0;
! 43: }
! 44:
! 45: /*
! 46: ** The cube() SQL function returns the cube of its input value.
! 47: */
! 48: static void cubeFunc(
! 49: sqlite3_context *context,
! 50: int argc,
! 51: sqlite3_value **argv
! 52: ){
! 53: double r = sqlite3_value_double(argv[0]);
! 54: sqlite3_result_double(context, r*r*r);
! 55: }
! 56:
! 57: /*
! 58: ** This is the entry point to register the extension for the cube() function.
! 59: */
! 60: static int cube_init(
! 61: sqlite3 *db,
! 62: char **pzErrMsg,
! 63: const sqlite3_api_routines *pApi
! 64: ){
! 65: SQLITE_EXTENSION_INIT2(pApi);
! 66: sqlite3_create_function(db, "cube", 1, SQLITE_ANY, 0, cubeFunc, 0, 0);
! 67: return 0;
! 68: }
! 69:
! 70: /*
! 71: ** This is a broken extension entry point
! 72: */
! 73: static int broken_init(
! 74: sqlite3 *db,
! 75: char **pzErrMsg,
! 76: const sqlite3_api_routines *pApi
! 77: ){
! 78: char *zErr;
! 79: SQLITE_EXTENSION_INIT2(pApi);
! 80: zErr = sqlite3_mprintf("broken autoext!");
! 81: *pzErrMsg = zErr;
! 82: return 1;
! 83: }
! 84:
! 85: /*
! 86: ** tclcmd: sqlite3_auto_extension_sqr
! 87: **
! 88: ** Register the "sqr" extension to be loaded automatically.
! 89: */
! 90: static int autoExtSqrObjCmd(
! 91: void * clientData,
! 92: Tcl_Interp *interp,
! 93: int objc,
! 94: Tcl_Obj *CONST objv[]
! 95: ){
! 96: int rc = sqlite3_auto_extension((void*)sqr_init);
! 97: Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
! 98: return SQLITE_OK;
! 99: }
! 100:
! 101: /*
! 102: ** tclcmd: sqlite3_auto_extension_cube
! 103: **
! 104: ** Register the "cube" extension to be loaded automatically.
! 105: */
! 106: static int autoExtCubeObjCmd(
! 107: void * clientData,
! 108: Tcl_Interp *interp,
! 109: int objc,
! 110: Tcl_Obj *CONST objv[]
! 111: ){
! 112: int rc = sqlite3_auto_extension((void*)cube_init);
! 113: Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
! 114: return SQLITE_OK;
! 115: }
! 116:
! 117: /*
! 118: ** tclcmd: sqlite3_auto_extension_broken
! 119: **
! 120: ** Register the broken extension to be loaded automatically.
! 121: */
! 122: static int autoExtBrokenObjCmd(
! 123: void * clientData,
! 124: Tcl_Interp *interp,
! 125: int objc,
! 126: Tcl_Obj *CONST objv[]
! 127: ){
! 128: int rc = sqlite3_auto_extension((void*)broken_init);
! 129: Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
! 130: return SQLITE_OK;
! 131: }
! 132:
! 133: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
! 134:
! 135:
! 136: /*
! 137: ** tclcmd: sqlite3_reset_auto_extension
! 138: **
! 139: ** Reset all auto-extensions
! 140: */
! 141: static int resetAutoExtObjCmd(
! 142: void * clientData,
! 143: Tcl_Interp *interp,
! 144: int objc,
! 145: Tcl_Obj *CONST objv[]
! 146: ){
! 147: sqlite3_reset_auto_extension();
! 148: return SQLITE_OK;
! 149: }
! 150:
! 151:
! 152: /*
! 153: ** This procedure registers the TCL procs defined in this file.
! 154: */
! 155: int Sqlitetest_autoext_Init(Tcl_Interp *interp){
! 156: #ifndef SQLITE_OMIT_LOAD_EXTENSION
! 157: Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_sqr",
! 158: autoExtSqrObjCmd, 0, 0);
! 159: Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_cube",
! 160: autoExtCubeObjCmd, 0, 0);
! 161: Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_broken",
! 162: autoExtBrokenObjCmd, 0, 0);
! 163: #endif
! 164: Tcl_CreateObjCommand(interp, "sqlite3_reset_auto_extension",
! 165: resetAutoExtObjCmd, 0, 0);
! 166: return TCL_OK;
! 167: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>