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>