Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
test_autoext.c222 linesDownload Raw Back to src
1/*2** 2006 August 233**4** The author disclaims copyright to this source code.  In place of5** 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 "tclsqlite.h"15#include "sqlite3ext.h"16 17#ifndef SQLITE_OMIT_LOAD_EXTENSION18SQLITE_EXTENSION_INIT119 20/*21** The sqr() SQL function returns the square of its input value.22*/23static void sqrFunc(24  sqlite3_context *context,25  int argc,26  sqlite3_value **argv27){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*/35static int sqr_init(36  sqlite3 *db, 37  char **pzErrMsg, 38  const sqlite3_api_routines *pApi39){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*/48static void cubeFunc(49  sqlite3_context *context,50  int argc,51  sqlite3_value **argv52){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*/60static int cube_init(61  sqlite3 *db, 62  char **pzErrMsg, 63  const sqlite3_api_routines *pApi64){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 point72*/73static int broken_init(74  sqlite3 *db, 75  char **pzErrMsg, 76  const sqlite3_api_routines *pApi77){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_sqr87**88** Register the "sqr" extension to be loaded automatically.89*/90static int SQLITE_TCLAPI autoExtSqrObjCmd(91  void * clientData,92  Tcl_Interp *interp,93  int objc,94  Tcl_Obj *CONST objv[]95){96  int rc = sqlite3_auto_extension((void(*)(void))sqr_init);97  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));98  return SQLITE_OK;99}100 101/*102** tclcmd:   sqlite3_cancel_auto_extension_sqr103**104** Unregister the "sqr" extension.105*/106static int SQLITE_TCLAPI cancelAutoExtSqrObjCmd(107  void * clientData,108  Tcl_Interp *interp,109  int objc,110  Tcl_Obj *CONST objv[]111){112  int rc = sqlite3_cancel_auto_extension((void(*)(void))sqr_init);113  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));114  return SQLITE_OK;115}116 117/*118** tclcmd:   sqlite3_auto_extension_cube119**120** Register the "cube" extension to be loaded automatically.121*/122static int SQLITE_TCLAPI autoExtCubeObjCmd(123  void * clientData,124  Tcl_Interp *interp,125  int objc,126  Tcl_Obj *CONST objv[]127){128  int rc = sqlite3_auto_extension((void(*)(void))cube_init);129  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));130  return SQLITE_OK;131}132 133/*134** tclcmd:   sqlite3_cancel_auto_extension_cube135**136** Unregister the "cube" extension.137*/138static int SQLITE_TCLAPI cancelAutoExtCubeObjCmd(139  void * clientData,140  Tcl_Interp *interp,141  int objc,142  Tcl_Obj *CONST objv[]143){144  int rc = sqlite3_cancel_auto_extension((void(*)(void))cube_init);145  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));146  return SQLITE_OK;147}148 149/*150** tclcmd:   sqlite3_auto_extension_broken151**152** Register the broken extension to be loaded automatically.153*/154static int SQLITE_TCLAPI autoExtBrokenObjCmd(155  void * clientData,156  Tcl_Interp *interp,157  int objc,158  Tcl_Obj *CONST objv[]159){160  int rc = sqlite3_auto_extension((void(*)(void))broken_init);161  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));162  return SQLITE_OK;163}164 165/*166** tclcmd:   sqlite3_cancel_auto_extension_broken167**168** Unregister the broken extension.169*/170static int SQLITE_TCLAPI cancelAutoExtBrokenObjCmd(171  void * clientData,172  Tcl_Interp *interp,173  int objc,174  Tcl_Obj *CONST objv[]175){176  int rc = sqlite3_cancel_auto_extension((void(*)(void))broken_init);177  Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));178  return SQLITE_OK;179}180 181#endif /* SQLITE_OMIT_LOAD_EXTENSION */182 183 184/*185** tclcmd:   sqlite3_reset_auto_extension186**187** Reset all auto-extensions188*/189static int SQLITE_TCLAPI resetAutoExtObjCmd(190  void * clientData,191  Tcl_Interp *interp,192  int objc,193  Tcl_Obj *CONST objv[]194){195  sqlite3_reset_auto_extension();196  return SQLITE_OK;197}198 199 200/*201** This procedure registers the TCL procs defined in this file.202*/203int Sqlitetest_autoext_Init(Tcl_Interp *interp){204#ifndef SQLITE_OMIT_LOAD_EXTENSION205  Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_sqr",206          autoExtSqrObjCmd, 0, 0);207  Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_cube",208          autoExtCubeObjCmd, 0, 0);209  Tcl_CreateObjCommand(interp, "sqlite3_auto_extension_broken",210          autoExtBrokenObjCmd, 0, 0);211  Tcl_CreateObjCommand(interp, "sqlite3_cancel_auto_extension_sqr",212          cancelAutoExtSqrObjCmd, 0, 0);213  Tcl_CreateObjCommand(interp, "sqlite3_cancel_auto_extension_cube",214          cancelAutoExtCubeObjCmd, 0, 0);215  Tcl_CreateObjCommand(interp, "sqlite3_cancel_auto_extension_broken",216          cancelAutoExtBrokenObjCmd, 0, 0);217#endif218  Tcl_CreateObjCommand(interp, "sqlite3_reset_auto_extension",219          resetAutoExtObjCmd, 0, 0);220  return TCL_OK;221}222