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>