Thanks to visit codestin.com
Credit goes to chromium.googlesource.com

blob: 74ca55879fdffdacb6fb3e3f7a150ed5aea05704 [file] [log] [blame]
drh1409be62006-08-23 20:07:201/*
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.
drh1409be62006-08-23 20:07:2013*/
drh064b6812024-07-30 15:49:0214#include "tclsqlite.h"
drh1409be62006-08-23 20:07:2015#include "sqlite3ext.h"
mlcreech9323f762008-03-19 23:52:3416
17#ifndef SQLITE_OMIT_LOAD_EXTENSION
drh08ef8d72013-04-19 01:23:0618SQLITE_EXTENSION_INIT1
drh1409be62006-08-23 20:07:2019
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 **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*/
35static 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*/
48static 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*/
60static 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*/
73static 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*/
mistachkin7617e4a2016-07-28 17:11:2090static int SQLITE_TCLAPI autoExtSqrObjCmd(
drh1409be62006-08-23 20:07:2091 void * clientData,
92 Tcl_Interp *interp,
93 int objc,
94 Tcl_Obj *CONST objv[]
95){
drh32c83c82016-08-01 14:35:4896 int rc = sqlite3_auto_extension((void(*)(void))sqr_init);
drhc8d75672008-07-08 02:12:3797 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
drh1409be62006-08-23 20:07:2098 return SQLITE_OK;
99}
100
101/*
drh425e27d2013-07-15 17:02:28102** tclcmd: sqlite3_cancel_auto_extension_sqr
103**
104** Unregister the "sqr" extension.
105*/
mistachkin7617e4a2016-07-28 17:11:20106static int SQLITE_TCLAPI cancelAutoExtSqrObjCmd(
drh425e27d2013-07-15 17:02:28107 void * clientData,
108 Tcl_Interp *interp,
109 int objc,
110 Tcl_Obj *CONST objv[]
111){
drh32c83c82016-08-01 14:35:48112 int rc = sqlite3_cancel_auto_extension((void(*)(void))sqr_init);
drh425e27d2013-07-15 17:02:28113 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
114 return SQLITE_OK;
115}
116
117/*
drh1409be62006-08-23 20:07:20118** tclcmd: sqlite3_auto_extension_cube
119**
120** Register the "cube" extension to be loaded automatically.
121*/
mistachkin7617e4a2016-07-28 17:11:20122static int SQLITE_TCLAPI autoExtCubeObjCmd(
drh1409be62006-08-23 20:07:20123 void * clientData,
124 Tcl_Interp *interp,
125 int objc,
126 Tcl_Obj *CONST objv[]
127){
drh32c83c82016-08-01 14:35:48128 int rc = sqlite3_auto_extension((void(*)(void))cube_init);
drhc8d75672008-07-08 02:12:37129 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
drh1409be62006-08-23 20:07:20130 return SQLITE_OK;
131}
132
133/*
drh425e27d2013-07-15 17:02:28134** tclcmd: sqlite3_cancel_auto_extension_cube
135**
136** Unregister the "cube" extension.
137*/
mistachkin7617e4a2016-07-28 17:11:20138static int SQLITE_TCLAPI cancelAutoExtCubeObjCmd(
drh425e27d2013-07-15 17:02:28139 void * clientData,
140 Tcl_Interp *interp,
141 int objc,
142 Tcl_Obj *CONST objv[]
143){
drh32c83c82016-08-01 14:35:48144 int rc = sqlite3_cancel_auto_extension((void(*)(void))cube_init);
drh425e27d2013-07-15 17:02:28145 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
146 return SQLITE_OK;
147}
148
149/*
drh1409be62006-08-23 20:07:20150** tclcmd: sqlite3_auto_extension_broken
151**
152** Register the broken extension to be loaded automatically.
153*/
mistachkin7617e4a2016-07-28 17:11:20154static int SQLITE_TCLAPI autoExtBrokenObjCmd(
drh1409be62006-08-23 20:07:20155 void * clientData,
156 Tcl_Interp *interp,
157 int objc,
158 Tcl_Obj *CONST objv[]
159){
drh32c83c82016-08-01 14:35:48160 int rc = sqlite3_auto_extension((void(*)(void))broken_init);
drhc8d75672008-07-08 02:12:37161 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
drh1409be62006-08-23 20:07:20162 return SQLITE_OK;
163}
164
drh425e27d2013-07-15 17:02:28165/*
166** tclcmd: sqlite3_cancel_auto_extension_broken
167**
168** Unregister the broken extension.
169*/
mistachkin7617e4a2016-07-28 17:11:20170static int SQLITE_TCLAPI cancelAutoExtBrokenObjCmd(
drh425e27d2013-07-15 17:02:28171 void * clientData,
172 Tcl_Interp *interp,
173 int objc,
174 Tcl_Obj *CONST objv[]
175){
drh32c83c82016-08-01 14:35:48176 int rc = sqlite3_cancel_auto_extension((void(*)(void))broken_init);
drh425e27d2013-07-15 17:02:28177 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
178 return SQLITE_OK;
179}
180
mlcreech9323f762008-03-19 23:52:34181#endif /* SQLITE_OMIT_LOAD_EXTENSION */
182
183
drh1409be62006-08-23 20:07:20184/*
185** tclcmd: sqlite3_reset_auto_extension
186**
187** Reset all auto-extensions
188*/
mistachkin7617e4a2016-07-28 17:11:20189static int SQLITE_TCLAPI resetAutoExtObjCmd(
drh1409be62006-08-23 20:07:20190 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
drh1409be62006-08-23 20:07:20200/*
201** This procedure registers the TCL procs defined in this file.
202*/
203int Sqlitetest_autoext_Init(Tcl_Interp *interp){
204#ifndef SQLITE_OMIT_LOAD_EXTENSION
205 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);
drh425e27d2013-07-15 17:02:28211 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);
drhd3f49642013-08-06 18:35:31217#endif
drh1409be62006-08-23 20:07:20218 Tcl_CreateObjCommand(interp, "sqlite3_reset_auto_extension",
219 resetAutoExtObjCmd, 0, 0);
drh1409be62006-08-23 20:07:20220 return TCL_OK;
221}