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

blob: 989cb97a62755d69efda50872fa5cd14adb87da7 [file] [log] [blame]
drhc318f732017-10-13 15:06:061/*
2** 2017-10-13
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**
13** This file contains extensions to the the "tclsqlite.c" module used for
14** testing. Basically, all of the other "test_*.c" modules are linked
15** into the enhanced tclsh used for testing (and named "testfixture" or
16** "testfixture.exe") using logic encoded by this file.
17**
18** The code in this file used to be found in tclsqlite3.c, contained within
19** #if SQLITE_TEST ... #endif. It is factored out into this separate module
20** in an effort to keep the tclsqlite.c file pure.
21*/
22#include "sqlite3.h"
drh064b6812024-07-30 15:49:0223#include "tclsqlite.h"
drhc318f732017-10-13 15:06:0624
25/* Needed for the setrlimit() system call on unix */
26#if defined(unix)
27#include <sys/resource.h>
28#endif
29
30/* Forward declaration */
31static int SQLITE_TCLAPI load_testfixture_extensions(
32 ClientData cd,
33 Tcl_Interp *interp,
34 int objc,
35 Tcl_Obj *CONST objv[]
36);
37
38/*
39** This routine is the primary export of this file.
40**
41** Configure the interpreter passed as the first argument to have access
42** to the commands and linked variables that make up:
43**
44** * the [sqlite3] extension itself,
45**
46** * If SQLITE_TCLMD5 or SQLITE_TEST is defined, the Md5 commands, and
47**
48** * If SQLITE_TEST is set, the various test interfaces used by the Tcl
49** test suite.
50*/
drh96a206f2017-10-13 20:14:0651const char *sqlite3TestInit(Tcl_Interp *interp){
52 extern int Sqlite3_Init(Tcl_Interp*);
53 extern int Sqliteconfig_Init(Tcl_Interp*);
54 extern int Sqlitetest1_Init(Tcl_Interp*);
55 extern int Sqlitetest2_Init(Tcl_Interp*);
56 extern int Sqlitetest3_Init(Tcl_Interp*);
57 extern int Sqlitetest4_Init(Tcl_Interp*);
58 extern int Sqlitetest5_Init(Tcl_Interp*);
59 extern int Sqlitetest6_Init(Tcl_Interp*);
drh96a206f2017-10-13 20:14:0660 extern int Sqlitetest8_Init(Tcl_Interp*);
61 extern int Sqlitetest9_Init(Tcl_Interp*);
drh96a206f2017-10-13 20:14:0662 extern int Sqlitetest_autoext_Init(Tcl_Interp*);
63 extern int Sqlitetest_blob_Init(Tcl_Interp*);
64 extern int Sqlitetest_demovfs_Init(Tcl_Interp *);
65 extern int Sqlitetest_func_Init(Tcl_Interp*);
66 extern int Sqlitetest_hexio_Init(Tcl_Interp*);
67 extern int Sqlitetest_init_Init(Tcl_Interp*);
68 extern int Sqlitetest_malloc_Init(Tcl_Interp*);
69 extern int Sqlitetest_mutex_Init(Tcl_Interp*);
70 extern int Sqlitetestschema_Init(Tcl_Interp*);
71 extern int Sqlitetestsse_Init(Tcl_Interp*);
72 extern int Sqlitetesttclvar_Init(Tcl_Interp*);
73 extern int Sqlitetestfs_Init(Tcl_Interp*);
74 extern int SqlitetestThread_Init(Tcl_Interp*);
75 extern int SqlitetestOnefile_Init();
76 extern int SqlitetestOsinst_Init(Tcl_Interp*);
77 extern int Sqlitetestbackup_Init(Tcl_Interp*);
78 extern int Sqlitetestintarray_Init(Tcl_Interp*);
79 extern int Sqlitetestvfs_Init(Tcl_Interp *);
80 extern int Sqlitetestrtree_Init(Tcl_Interp*);
dan01ed72f2021-09-17 20:43:2781 extern int Sqlitetestrtreedoc_Init(Tcl_Interp*);
drh96a206f2017-10-13 20:14:0682 extern int Sqlitequota_Init(Tcl_Interp*);
83 extern int Sqlitemultiplex_Init(Tcl_Interp*);
84 extern int SqliteSuperlock_Init(Tcl_Interp*);
85 extern int SqlitetestSyscall_Init(Tcl_Interp*);
86#if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
87 extern int TestSession_Init(Tcl_Interp*);
88#endif
89 extern int Md5_Init(Tcl_Interp*);
90 extern int Fts5tcl_Init(Tcl_Interp *);
91 extern int SqliteRbu_Init(Tcl_Interp*);
92 extern int Sqlitetesttcl_Init(Tcl_Interp*);
93#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4)
94 extern int Sqlitetestfts3_Init(Tcl_Interp *interp);
95#endif
96#ifdef SQLITE_ENABLE_ZIPVFS
97 extern int Zipvfs_Init(Tcl_Interp*);
98#endif
dan3d9c7c32017-11-29 16:16:2999 extern int TestExpert_Init(Tcl_Interp*);
dan660af932018-06-18 16:55:22100 extern int Sqlitetest_window_Init(Tcl_Interp *);
dan1d07f1d2019-04-01 17:24:20101 extern int Sqlitetestvdbecov_Init(Tcl_Interp *);
dan73b09b82022-08-31 20:45:43102 extern int TestRecover_Init(Tcl_Interp*);
dan99a94a12024-02-17 20:55:01103 extern int Sqlitetestintck_Init(Tcl_Interp*);
dan3d9c7c32017-11-29 16:16:29104
drh96a206f2017-10-13 20:14:06105 Tcl_CmdInfo cmdInfo;
106
drhc318f732017-10-13 15:06:06107 /* Since the primary use case for this binary is testing of SQLite,
108 ** be sure to generate core files if we crash */
109#if defined(unix)
110 { struct rlimit x;
111 getrlimit(RLIMIT_CORE, &x);
112 x.rlim_cur = x.rlim_max;
113 setrlimit(RLIMIT_CORE, &x);
114 }
115#endif /* unix */
116
drh96a206f2017-10-13 20:14:06117 if( Tcl_GetCommandInfo(interp, "sqlite3", &cmdInfo)==0 ){
drhc318f732017-10-13 15:06:06118 Sqlite3_Init(interp);
drh96a206f2017-10-13 20:14:06119 }
drhc318f732017-10-13 15:06:06120#ifdef SQLITE_ENABLE_ZIPVFS
drh96a206f2017-10-13 20:14:06121 Zipvfs_Init(interp);
drhc318f732017-10-13 15:06:06122#endif
drh96a206f2017-10-13 20:14:06123 Md5_Init(interp);
124 Sqliteconfig_Init(interp);
125 Sqlitetest1_Init(interp);
126 Sqlitetest2_Init(interp);
127 Sqlitetest3_Init(interp);
128 Sqlitetest4_Init(interp);
129 Sqlitetest5_Init(interp);
130 Sqlitetest6_Init(interp);
drh96a206f2017-10-13 20:14:06131 Sqlitetest8_Init(interp);
132 Sqlitetest9_Init(interp);
drh96a206f2017-10-13 20:14:06133 Sqlitetest_autoext_Init(interp);
134 Sqlitetest_blob_Init(interp);
135 Sqlitetest_demovfs_Init(interp);
136 Sqlitetest_func_Init(interp);
137 Sqlitetest_hexio_Init(interp);
138 Sqlitetest_init_Init(interp);
139 Sqlitetest_malloc_Init(interp);
140 Sqlitetest_mutex_Init(interp);
141 Sqlitetestschema_Init(interp);
142 Sqlitetesttclvar_Init(interp);
143 Sqlitetestfs_Init(interp);
144 SqlitetestThread_Init(interp);
145 SqlitetestOnefile_Init();
146 SqlitetestOsinst_Init(interp);
147 Sqlitetestbackup_Init(interp);
148 Sqlitetestintarray_Init(interp);
149 Sqlitetestvfs_Init(interp);
150 Sqlitetestrtree_Init(interp);
dan01ed72f2021-09-17 20:43:27151 Sqlitetestrtreedoc_Init(interp);
drh96a206f2017-10-13 20:14:06152 Sqlitequota_Init(interp);
153 Sqlitemultiplex_Init(interp);
154 SqliteSuperlock_Init(interp);
155 SqlitetestSyscall_Init(interp);
drhc318f732017-10-13 15:06:06156#if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
drh96a206f2017-10-13 20:14:06157 TestSession_Init(interp);
drhc318f732017-10-13 15:06:06158#endif
drh96a206f2017-10-13 20:14:06159 Fts5tcl_Init(interp);
160 SqliteRbu_Init(interp);
161 Sqlitetesttcl_Init(interp);
drhc318f732017-10-13 15:06:06162
163#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4)
drh96a206f2017-10-13 20:14:06164 Sqlitetestfts3_Init(interp);
drhc318f732017-10-13 15:06:06165#endif
dan3d9c7c32017-11-29 16:16:29166 TestExpert_Init(interp);
dan660af932018-06-18 16:55:22167 Sqlitetest_window_Init(interp);
dan1d07f1d2019-04-01 17:24:20168 Sqlitetestvdbecov_Init(interp);
dan73b09b82022-08-31 20:45:43169 TestRecover_Init(interp);
dan99a94a12024-02-17 20:55:01170 Sqlitetestintck_Init(interp);
drhc318f732017-10-13 15:06:06171
drh96a206f2017-10-13 20:14:06172 Tcl_CreateObjCommand(
173 interp, "load_testfixture_extensions", load_testfixture_extensions,0,0
174 );
175 return 0;
drhc318f732017-10-13 15:06:06176}
177
178/* tclcmd: load_testfixture_extensions
179*/
180static int SQLITE_TCLAPI load_testfixture_extensions(
181 ClientData cd,
182 Tcl_Interp *interp,
183 int objc,
184 Tcl_Obj *CONST objv[]
185){
186
187 Tcl_Interp *slave;
188 if( objc!=2 ){
189 Tcl_WrongNumArgs(interp, 1, objv, "SLAVE");
190 return TCL_ERROR;
191 }
192
193 slave = Tcl_GetSlave(interp, Tcl_GetString(objv[1]));
194 if( !slave ){
195 return TCL_ERROR;
196 }
197
drh96a206f2017-10-13 20:14:06198 (void)sqlite3TestInit(slave);
drhc318f732017-10-13 15:06:06199 return TCL_OK;
200}