Annotation of embedaddon/sqlite3/src/test_autoext.c, revision 1.1.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>