xref: /sqlite-3.40.0/src/test_config.c (revision e8f2c9dc)
1 /*
2 ** 2007 May 7
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 code used for testing the SQLite system.
14 ** None of the code in this file goes into a deliverable build.
15 **
16 ** The focus of this file is providing the TCL testing layer
17 ** access to compile-time constants.
18 */
19 
20 #include "sqliteLimit.h"
21 
22 #include "sqliteInt.h"
23 #if SQLITE_OS_WIN
24 #  include "os_win.h"
25 #endif
26 
27 #include "tcl.h"
28 #include <stdlib.h>
29 #include <string.h>
30 
31 /*
32 ** Macro to stringify the results of the evaluation a pre-processor
33 ** macro. i.e. so that STRINGVALUE(SQLITE_NOMEM) -> "7".
34 */
35 #define STRINGVALUE2(x) #x
36 #define STRINGVALUE(x) STRINGVALUE2(x)
37 
38 /*
39 ** This routine sets entries in the global ::sqlite_options() array variable
40 ** according to the compile-time configuration of the database.  Test
41 ** procedures use this to determine when tests should be omitted.
42 */
43 static void set_options(Tcl_Interp *interp){
44 #ifdef HAVE_MALLOC_USABLE_SIZE
45   Tcl_SetVar2(interp, "sqlite_options", "malloc_usable_size", "1",
46               TCL_GLOBAL_ONLY);
47 #else
48   Tcl_SetVar2(interp, "sqlite_options", "malloc_usable_size", "0",
49               TCL_GLOBAL_ONLY);
50 #endif
51 
52 #ifdef SQLITE_32BIT_ROWID
53   Tcl_SetVar2(interp, "sqlite_options", "rowid32", "1", TCL_GLOBAL_ONLY);
54 #else
55   Tcl_SetVar2(interp, "sqlite_options", "rowid32", "0", TCL_GLOBAL_ONLY);
56 #endif
57 
58 #ifdef SQLITE_CASE_SENSITIVE_LIKE
59   Tcl_SetVar2(interp, "sqlite_options","casesensitivelike","1",TCL_GLOBAL_ONLY);
60 #else
61   Tcl_SetVar2(interp, "sqlite_options","casesensitivelike","0",TCL_GLOBAL_ONLY);
62 #endif
63 
64 #if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT
65   Tcl_SetVar2(interp, "sqlite_options", "curdir", "1", TCL_GLOBAL_ONLY);
66 #else
67   Tcl_SetVar2(interp, "sqlite_options", "curdir", "0", TCL_GLOBAL_ONLY);
68 #endif
69 
70 #ifdef SQLITE_WIN32_MALLOC
71   Tcl_SetVar2(interp, "sqlite_options", "win32malloc", "1", TCL_GLOBAL_ONLY);
72 #else
73   Tcl_SetVar2(interp, "sqlite_options", "win32malloc", "0", TCL_GLOBAL_ONLY);
74 #endif
75 
76 #ifdef SQLITE_DEBUG
77   Tcl_SetVar2(interp, "sqlite_options", "debug", "1", TCL_GLOBAL_ONLY);
78 #else
79   Tcl_SetVar2(interp, "sqlite_options", "debug", "0", TCL_GLOBAL_ONLY);
80 #endif
81 
82 #ifdef SQLITE_DIRECT_OVERFLOW_READ
83   Tcl_SetVar2(interp, "sqlite_options", "direct_read", "1", TCL_GLOBAL_ONLY);
84 #else
85   Tcl_SetVar2(interp, "sqlite_options", "direct_read", "0", TCL_GLOBAL_ONLY);
86 #endif
87 
88 #ifdef SQLITE_DISABLE_DIRSYNC
89   Tcl_SetVar2(interp, "sqlite_options", "dirsync", "0", TCL_GLOBAL_ONLY);
90 #else
91   Tcl_SetVar2(interp, "sqlite_options", "dirsync", "1", TCL_GLOBAL_ONLY);
92 #endif
93 
94 #ifdef SQLITE_DISABLE_LFS
95   Tcl_SetVar2(interp, "sqlite_options", "lfs", "0", TCL_GLOBAL_ONLY);
96 #else
97   Tcl_SetVar2(interp, "sqlite_options", "lfs", "1", TCL_GLOBAL_ONLY);
98 #endif
99 
100 #if SQLITE_MAX_MMAP_SIZE>0
101   Tcl_SetVar2(interp, "sqlite_options", "mmap", "1", TCL_GLOBAL_ONLY);
102 #else
103   Tcl_SetVar2(interp, "sqlite_options", "mmap", "0", TCL_GLOBAL_ONLY);
104 #endif
105 
106 #if 1 /* def SQLITE_MEMDEBUG */
107   Tcl_SetVar2(interp, "sqlite_options", "memdebug", "1", TCL_GLOBAL_ONLY);
108 #else
109   Tcl_SetVar2(interp, "sqlite_options", "memdebug", "0", TCL_GLOBAL_ONLY);
110 #endif
111 
112 #ifdef SQLITE_ENABLE_8_3_NAMES
113   Tcl_SetVar2(interp, "sqlite_options", "8_3_names", "1", TCL_GLOBAL_ONLY);
114 #else
115   Tcl_SetVar2(interp, "sqlite_options", "8_3_names", "0", TCL_GLOBAL_ONLY);
116 #endif
117 
118 #ifdef SQLITE_ENABLE_MEMSYS3
119   Tcl_SetVar2(interp, "sqlite_options", "mem3", "1", TCL_GLOBAL_ONLY);
120 #else
121   Tcl_SetVar2(interp, "sqlite_options", "mem3", "0", TCL_GLOBAL_ONLY);
122 #endif
123 
124 #ifdef SQLITE_ENABLE_MEMSYS5
125   Tcl_SetVar2(interp, "sqlite_options", "mem5", "1", TCL_GLOBAL_ONLY);
126 #else
127   Tcl_SetVar2(interp, "sqlite_options", "mem5", "0", TCL_GLOBAL_ONLY);
128 #endif
129 
130 #ifdef SQLITE_MUTEX_OMIT
131   Tcl_SetVar2(interp, "sqlite_options", "mutex", "0", TCL_GLOBAL_ONLY);
132 #else
133   Tcl_SetVar2(interp, "sqlite_options", "mutex", "1", TCL_GLOBAL_ONLY);
134 #endif
135 
136 #ifdef SQLITE_MUTEX_NOOP
137   Tcl_SetVar2(interp, "sqlite_options", "mutex_noop", "1", TCL_GLOBAL_ONLY);
138 #else
139   Tcl_SetVar2(interp, "sqlite_options", "mutex_noop", "0", TCL_GLOBAL_ONLY);
140 #endif
141 
142 #ifdef SQLITE_OMIT_ALTERTABLE
143   Tcl_SetVar2(interp, "sqlite_options", "altertable", "0", TCL_GLOBAL_ONLY);
144 #else
145   Tcl_SetVar2(interp, "sqlite_options", "altertable", "1", TCL_GLOBAL_ONLY);
146 #endif
147 
148 #ifdef SQLITE_OMIT_ANALYZE
149   Tcl_SetVar2(interp, "sqlite_options", "analyze", "0", TCL_GLOBAL_ONLY);
150 #else
151   Tcl_SetVar2(interp, "sqlite_options", "analyze", "1", TCL_GLOBAL_ONLY);
152 #endif
153 
154 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
155   Tcl_SetVar2(interp, "sqlite_options", "atomicwrite", "1", TCL_GLOBAL_ONLY);
156 #else
157   Tcl_SetVar2(interp, "sqlite_options", "atomicwrite", "0", TCL_GLOBAL_ONLY);
158 #endif
159 
160 #ifdef SQLITE_OMIT_ATTACH
161   Tcl_SetVar2(interp, "sqlite_options", "attach", "0", TCL_GLOBAL_ONLY);
162 #else
163   Tcl_SetVar2(interp, "sqlite_options", "attach", "1", TCL_GLOBAL_ONLY);
164 #endif
165 
166 #ifdef SQLITE_OMIT_AUTHORIZATION
167   Tcl_SetVar2(interp, "sqlite_options", "auth", "0", TCL_GLOBAL_ONLY);
168 #else
169   Tcl_SetVar2(interp, "sqlite_options", "auth", "1", TCL_GLOBAL_ONLY);
170 #endif
171 
172 #ifdef SQLITE_OMIT_AUTOINCREMENT
173   Tcl_SetVar2(interp, "sqlite_options", "autoinc", "0", TCL_GLOBAL_ONLY);
174 #else
175   Tcl_SetVar2(interp, "sqlite_options", "autoinc", "1", TCL_GLOBAL_ONLY);
176 #endif
177 
178 #ifdef SQLITE_OMIT_AUTOMATIC_INDEX
179   Tcl_SetVar2(interp, "sqlite_options", "autoindex", "0", TCL_GLOBAL_ONLY);
180 #else
181   Tcl_SetVar2(interp, "sqlite_options", "autoindex", "1", TCL_GLOBAL_ONLY);
182 #endif
183 
184 #ifdef SQLITE_OMIT_AUTORESET
185   Tcl_SetVar2(interp, "sqlite_options", "autoreset", "0", TCL_GLOBAL_ONLY);
186 #else
187   Tcl_SetVar2(interp, "sqlite_options", "autoreset", "1", TCL_GLOBAL_ONLY);
188 #endif
189 
190 #ifdef SQLITE_OMIT_AUTOVACUUM
191   Tcl_SetVar2(interp, "sqlite_options", "autovacuum", "0", TCL_GLOBAL_ONLY);
192 #else
193   Tcl_SetVar2(interp, "sqlite_options", "autovacuum", "1", TCL_GLOBAL_ONLY);
194 #endif /* SQLITE_OMIT_AUTOVACUUM */
195 #if !defined(SQLITE_DEFAULT_AUTOVACUUM)
196   Tcl_SetVar2(interp,"sqlite_options","default_autovacuum","0",TCL_GLOBAL_ONLY);
197 #else
198   Tcl_SetVar2(interp, "sqlite_options", "default_autovacuum",
199       STRINGVALUE(SQLITE_DEFAULT_AUTOVACUUM), TCL_GLOBAL_ONLY);
200 #endif
201 
202 #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
203   Tcl_SetVar2(interp, "sqlite_options", "between_opt", "0", TCL_GLOBAL_ONLY);
204 #else
205   Tcl_SetVar2(interp, "sqlite_options", "between_opt", "1", TCL_GLOBAL_ONLY);
206 #endif
207 
208 #ifdef SQLITE_OMIT_BUILTIN_TEST
209   Tcl_SetVar2(interp, "sqlite_options", "builtin_test", "0", TCL_GLOBAL_ONLY);
210 #else
211   Tcl_SetVar2(interp, "sqlite_options", "builtin_test", "1", TCL_GLOBAL_ONLY);
212 #endif
213 
214 #ifdef SQLITE_OMIT_BLOB_LITERAL
215   Tcl_SetVar2(interp, "sqlite_options", "bloblit", "0", TCL_GLOBAL_ONLY);
216 #else
217   Tcl_SetVar2(interp, "sqlite_options", "bloblit", "1", TCL_GLOBAL_ONLY);
218 #endif
219 
220 #ifdef SQLITE_OMIT_CAST
221   Tcl_SetVar2(interp, "sqlite_options", "cast", "0", TCL_GLOBAL_ONLY);
222 #else
223   Tcl_SetVar2(interp, "sqlite_options", "cast", "1", TCL_GLOBAL_ONLY);
224 #endif
225 
226 #ifdef SQLITE_OMIT_CHECK
227   Tcl_SetVar2(interp, "sqlite_options", "check", "0", TCL_GLOBAL_ONLY);
228 #else
229   Tcl_SetVar2(interp, "sqlite_options", "check", "1", TCL_GLOBAL_ONLY);
230 #endif
231 
232 #ifdef SQLITE_OMIT_CTE
233   Tcl_SetVar2(interp, "sqlite_options", "cte", "0", TCL_GLOBAL_ONLY);
234 #else
235   Tcl_SetVar2(interp, "sqlite_options", "cte", "1", TCL_GLOBAL_ONLY);
236 #endif
237 
238 #ifdef SQLITE_ENABLE_COLUMN_METADATA
239   Tcl_SetVar2(interp, "sqlite_options", "columnmetadata", "1", TCL_GLOBAL_ONLY);
240 #else
241   Tcl_SetVar2(interp, "sqlite_options", "columnmetadata", "0", TCL_GLOBAL_ONLY);
242 #endif
243 
244 #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
245   Tcl_SetVar2(interp, "sqlite_options", "oversize_cell_check", "1",
246               TCL_GLOBAL_ONLY);
247 #else
248   Tcl_SetVar2(interp, "sqlite_options", "oversize_cell_check", "0",
249               TCL_GLOBAL_ONLY);
250 #endif
251 
252 #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
253   Tcl_SetVar2(interp, "sqlite_options", "compileoption_diags", "0", TCL_GLOBAL_ONLY);
254 #else
255   Tcl_SetVar2(interp, "sqlite_options", "compileoption_diags", "1", TCL_GLOBAL_ONLY);
256 #endif
257 
258 #ifdef SQLITE_OMIT_COMPLETE
259   Tcl_SetVar2(interp, "sqlite_options", "complete", "0", TCL_GLOBAL_ONLY);
260 #else
261   Tcl_SetVar2(interp, "sqlite_options", "complete", "1", TCL_GLOBAL_ONLY);
262 #endif
263 
264 #ifdef SQLITE_OMIT_COMPOUND_SELECT
265   Tcl_SetVar2(interp, "sqlite_options", "compound", "0", TCL_GLOBAL_ONLY);
266 #else
267   Tcl_SetVar2(interp, "sqlite_options", "compound", "1", TCL_GLOBAL_ONLY);
268 #endif
269 
270   Tcl_SetVar2(interp, "sqlite_options", "conflict", "1", TCL_GLOBAL_ONLY);
271   Tcl_SetVar2(interp, "sqlite_options", "crashtest", "1", TCL_GLOBAL_ONLY);
272 
273 #ifdef SQLITE_OMIT_DATETIME_FUNCS
274   Tcl_SetVar2(interp, "sqlite_options", "datetime", "0", TCL_GLOBAL_ONLY);
275 #else
276   Tcl_SetVar2(interp, "sqlite_options", "datetime", "1", TCL_GLOBAL_ONLY);
277 #endif
278 
279 #ifdef SQLITE_OMIT_DECLTYPE
280   Tcl_SetVar2(interp, "sqlite_options", "decltype", "0", TCL_GLOBAL_ONLY);
281 #else
282   Tcl_SetVar2(interp, "sqlite_options", "decltype", "1", TCL_GLOBAL_ONLY);
283 #endif
284 
285 #ifdef SQLITE_OMIT_DEPRECATED
286   Tcl_SetVar2(interp, "sqlite_options", "deprecated", "0", TCL_GLOBAL_ONLY);
287 #else
288   Tcl_SetVar2(interp, "sqlite_options", "deprecated", "1", TCL_GLOBAL_ONLY);
289 #endif
290 
291 #ifdef SQLITE_OMIT_DISKIO
292   Tcl_SetVar2(interp, "sqlite_options", "diskio", "0", TCL_GLOBAL_ONLY);
293 #else
294   Tcl_SetVar2(interp, "sqlite_options", "diskio", "1", TCL_GLOBAL_ONLY);
295 #endif
296 
297 #ifdef SQLITE_OMIT_EXPLAIN
298   Tcl_SetVar2(interp, "sqlite_options", "explain", "0", TCL_GLOBAL_ONLY);
299 #else
300   Tcl_SetVar2(interp, "sqlite_options", "explain", "1", TCL_GLOBAL_ONLY);
301 #endif
302 
303 #ifdef SQLITE_OMIT_FLOATING_POINT
304   Tcl_SetVar2(interp, "sqlite_options", "floatingpoint", "0", TCL_GLOBAL_ONLY);
305 #else
306   Tcl_SetVar2(interp, "sqlite_options", "floatingpoint", "1", TCL_GLOBAL_ONLY);
307 #endif
308 
309 #ifdef SQLITE_OMIT_FOREIGN_KEY
310   Tcl_SetVar2(interp, "sqlite_options", "foreignkey", "0", TCL_GLOBAL_ONLY);
311 #else
312   Tcl_SetVar2(interp, "sqlite_options", "foreignkey", "1", TCL_GLOBAL_ONLY);
313 #endif
314 
315 #ifdef SQLITE_ENABLE_FTS1
316   Tcl_SetVar2(interp, "sqlite_options", "fts1", "1", TCL_GLOBAL_ONLY);
317 #else
318   Tcl_SetVar2(interp, "sqlite_options", "fts1", "0", TCL_GLOBAL_ONLY);
319 #endif
320 
321 #ifdef SQLITE_ENABLE_FTS2
322   Tcl_SetVar2(interp, "sqlite_options", "fts2", "1", TCL_GLOBAL_ONLY);
323 #else
324   Tcl_SetVar2(interp, "sqlite_options", "fts2", "0", TCL_GLOBAL_ONLY);
325 #endif
326 
327 #ifdef SQLITE_ENABLE_FTS3
328   Tcl_SetVar2(interp, "sqlite_options", "fts3", "1", TCL_GLOBAL_ONLY);
329 #else
330   Tcl_SetVar2(interp, "sqlite_options", "fts3", "0", TCL_GLOBAL_ONLY);
331 #endif
332 
333 #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_DISABLE_FTS3_UNICODE)
334   Tcl_SetVar2(interp, "sqlite_options", "fts3_unicode", "1", TCL_GLOBAL_ONLY);
335 #else
336   Tcl_SetVar2(interp, "sqlite_options", "fts3_unicode", "0", TCL_GLOBAL_ONLY);
337 #endif
338 
339 #ifdef SQLITE_DISABLE_FTS4_DEFERRED
340   Tcl_SetVar2(interp, "sqlite_options", "fts4_deferred", "0", TCL_GLOBAL_ONLY);
341 #else
342   Tcl_SetVar2(interp, "sqlite_options", "fts4_deferred", "1", TCL_GLOBAL_ONLY);
343 #endif
344 
345 #ifdef SQLITE_OMIT_GET_TABLE
346   Tcl_SetVar2(interp, "sqlite_options", "gettable", "0", TCL_GLOBAL_ONLY);
347 #else
348   Tcl_SetVar2(interp, "sqlite_options", "gettable", "1", TCL_GLOBAL_ONLY);
349 #endif
350 
351 #ifdef SQLITE_ENABLE_ICU
352   Tcl_SetVar2(interp, "sqlite_options", "icu", "1", TCL_GLOBAL_ONLY);
353 #else
354   Tcl_SetVar2(interp, "sqlite_options", "icu", "0", TCL_GLOBAL_ONLY);
355 #endif
356 
357 #ifdef SQLITE_OMIT_INCRBLOB
358   Tcl_SetVar2(interp, "sqlite_options", "incrblob", "0", TCL_GLOBAL_ONLY);
359 #else
360   Tcl_SetVar2(interp, "sqlite_options", "incrblob", "1", TCL_GLOBAL_ONLY);
361 #endif /* SQLITE_OMIT_AUTOVACUUM */
362 
363 #ifdef SQLITE_OMIT_INTEGRITY_CHECK
364   Tcl_SetVar2(interp, "sqlite_options", "integrityck", "0", TCL_GLOBAL_ONLY);
365 #else
366   Tcl_SetVar2(interp, "sqlite_options", "integrityck", "1", TCL_GLOBAL_ONLY);
367 #endif
368 
369 #if defined(SQLITE_DEFAULT_FILE_FORMAT) && SQLITE_DEFAULT_FILE_FORMAT==1
370   Tcl_SetVar2(interp, "sqlite_options", "legacyformat", "1", TCL_GLOBAL_ONLY);
371 #else
372   Tcl_SetVar2(interp, "sqlite_options", "legacyformat", "0", TCL_GLOBAL_ONLY);
373 #endif
374 
375 #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
376   Tcl_SetVar2(interp, "sqlite_options", "like_opt", "0", TCL_GLOBAL_ONLY);
377 #else
378   Tcl_SetVar2(interp, "sqlite_options", "like_opt", "1", TCL_GLOBAL_ONLY);
379 #endif
380 
381 #ifdef SQLITE_OMIT_LOAD_EXTENSION
382   Tcl_SetVar2(interp, "sqlite_options", "load_ext", "0", TCL_GLOBAL_ONLY);
383 #else
384   Tcl_SetVar2(interp, "sqlite_options", "load_ext", "1", TCL_GLOBAL_ONLY);
385 #endif
386 
387 #ifdef SQLITE_OMIT_LOCALTIME
388   Tcl_SetVar2(interp, "sqlite_options", "localtime", "0", TCL_GLOBAL_ONLY);
389 #else
390   Tcl_SetVar2(interp, "sqlite_options", "localtime", "1", TCL_GLOBAL_ONLY);
391 #endif
392 
393 #ifdef SQLITE_OMIT_LOOKASIDE
394   Tcl_SetVar2(interp, "sqlite_options", "lookaside", "0", TCL_GLOBAL_ONLY);
395 #else
396   Tcl_SetVar2(interp, "sqlite_options", "lookaside", "1", TCL_GLOBAL_ONLY);
397 #endif
398 
399 Tcl_SetVar2(interp, "sqlite_options", "long_double",
400               sizeof(LONGDOUBLE_TYPE)>sizeof(double) ? "1" : "0",
401               TCL_GLOBAL_ONLY);
402 
403 #ifdef SQLITE_OMIT_MEMORYDB
404   Tcl_SetVar2(interp, "sqlite_options", "memorydb", "0", TCL_GLOBAL_ONLY);
405 #else
406   Tcl_SetVar2(interp, "sqlite_options", "memorydb", "1", TCL_GLOBAL_ONLY);
407 #endif
408 
409 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
410   Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "1", TCL_GLOBAL_ONLY);
411 #else
412   Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "0", TCL_GLOBAL_ONLY);
413 #endif
414 
415 Tcl_SetVar2(interp, "sqlite_options", "mergesort", "1", TCL_GLOBAL_ONLY);
416 
417 #ifdef SQLITE_OMIT_OR_OPTIMIZATION
418   Tcl_SetVar2(interp, "sqlite_options", "or_opt", "0", TCL_GLOBAL_ONLY);
419 #else
420   Tcl_SetVar2(interp, "sqlite_options", "or_opt", "1", TCL_GLOBAL_ONLY);
421 #endif
422 
423 #ifdef SQLITE_OMIT_PAGER_PRAGMAS
424   Tcl_SetVar2(interp, "sqlite_options", "pager_pragmas", "0", TCL_GLOBAL_ONLY);
425 #else
426   Tcl_SetVar2(interp, "sqlite_options", "pager_pragmas", "1", TCL_GLOBAL_ONLY);
427 #endif
428 
429 #if defined(SQLITE_OMIT_PRAGMA) || defined(SQLITE_OMIT_FLAG_PRAGMAS)
430   Tcl_SetVar2(interp, "sqlite_options", "pragma", "0", TCL_GLOBAL_ONLY);
431   Tcl_SetVar2(interp, "sqlite_options", "integrityck", "0", TCL_GLOBAL_ONLY);
432 #else
433   Tcl_SetVar2(interp, "sqlite_options", "pragma", "1", TCL_GLOBAL_ONLY);
434 #endif
435 
436 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
437   Tcl_SetVar2(interp, "sqlite_options", "progress", "0", TCL_GLOBAL_ONLY);
438 #else
439   Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY);
440 #endif
441 
442 #ifdef SQLITE_OMIT_REINDEX
443   Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY);
444 #else
445   Tcl_SetVar2(interp, "sqlite_options", "reindex", "1", TCL_GLOBAL_ONLY);
446 #endif
447 
448 #ifdef SQLITE_ENABLE_RTREE
449   Tcl_SetVar2(interp, "sqlite_options", "rtree", "1", TCL_GLOBAL_ONLY);
450 #else
451   Tcl_SetVar2(interp, "sqlite_options", "rtree", "0", TCL_GLOBAL_ONLY);
452 #endif
453 
454 #ifdef SQLITE_RTREE_INT_ONLY
455   Tcl_SetVar2(interp, "sqlite_options", "rtree_int_only", "1", TCL_GLOBAL_ONLY);
456 #else
457   Tcl_SetVar2(interp, "sqlite_options", "rtree_int_only", "0", TCL_GLOBAL_ONLY);
458 #endif
459 
460 #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
461   Tcl_SetVar2(interp, "sqlite_options", "schema_pragmas", "0", TCL_GLOBAL_ONLY);
462 #else
463   Tcl_SetVar2(interp, "sqlite_options", "schema_pragmas", "1", TCL_GLOBAL_ONLY);
464 #endif
465 
466 #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
467   Tcl_SetVar2(interp, "sqlite_options", "schema_version", "0", TCL_GLOBAL_ONLY);
468 #else
469   Tcl_SetVar2(interp, "sqlite_options", "schema_version", "1", TCL_GLOBAL_ONLY);
470 #endif
471 
472 #ifdef SQLITE_ENABLE_STAT4
473   Tcl_SetVar2(interp, "sqlite_options", "stat4", "1", TCL_GLOBAL_ONLY);
474 #else
475   Tcl_SetVar2(interp, "sqlite_options", "stat4", "0", TCL_GLOBAL_ONLY);
476 #endif
477 #if defined(SQLITE_ENABLE_STAT3) && !defined(SQLITE_ENABLE_STAT4)
478   Tcl_SetVar2(interp, "sqlite_options", "stat3", "1", TCL_GLOBAL_ONLY);
479 #else
480   Tcl_SetVar2(interp, "sqlite_options", "stat3", "0", TCL_GLOBAL_ONLY);
481 #endif
482 
483 #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
484 #  if defined(__APPLE__)
485 #    define SQLITE_ENABLE_LOCKING_STYLE 1
486 #  else
487 #    define SQLITE_ENABLE_LOCKING_STYLE 0
488 #  endif
489 #endif
490 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
491   Tcl_SetVar2(interp,"sqlite_options","lock_proxy_pragmas","1",TCL_GLOBAL_ONLY);
492 #else
493   Tcl_SetVar2(interp,"sqlite_options","lock_proxy_pragmas","0",TCL_GLOBAL_ONLY);
494 #endif
495 #if defined(SQLITE_PREFER_PROXY_LOCKING) && defined(__APPLE__)
496   Tcl_SetVar2(interp,"sqlite_options","prefer_proxy_locking","1",TCL_GLOBAL_ONLY);
497 #else
498   Tcl_SetVar2(interp,"sqlite_options","prefer_proxy_locking","0",TCL_GLOBAL_ONLY);
499 #endif
500 
501 
502 #ifdef SQLITE_OMIT_SHARED_CACHE
503   Tcl_SetVar2(interp, "sqlite_options", "shared_cache", "0", TCL_GLOBAL_ONLY);
504 #else
505   Tcl_SetVar2(interp, "sqlite_options", "shared_cache", "1", TCL_GLOBAL_ONLY);
506 #endif
507 
508 #ifdef SQLITE_OMIT_SUBQUERY
509   Tcl_SetVar2(interp, "sqlite_options", "subquery", "0", TCL_GLOBAL_ONLY);
510 #else
511   Tcl_SetVar2(interp, "sqlite_options", "subquery", "1", TCL_GLOBAL_ONLY);
512 #endif
513 
514 #ifdef SQLITE_OMIT_TCL_VARIABLE
515   Tcl_SetVar2(interp, "sqlite_options", "tclvar", "0", TCL_GLOBAL_ONLY);
516 #else
517   Tcl_SetVar2(interp, "sqlite_options", "tclvar", "1", TCL_GLOBAL_ONLY);
518 #endif
519 
520   Tcl_SetVar2(interp, "sqlite_options", "threadsafe",
521       STRINGVALUE(SQLITE_THREADSAFE), TCL_GLOBAL_ONLY);
522   assert( sqlite3_threadsafe()==SQLITE_THREADSAFE );
523 
524 #ifdef SQLITE_OMIT_TEMPDB
525   Tcl_SetVar2(interp, "sqlite_options", "tempdb", "0", TCL_GLOBAL_ONLY);
526 #else
527   Tcl_SetVar2(interp, "sqlite_options", "tempdb", "1", TCL_GLOBAL_ONLY);
528 #endif
529 
530 #ifdef SQLITE_OMIT_TRACE
531   Tcl_SetVar2(interp, "sqlite_options", "trace", "0", TCL_GLOBAL_ONLY);
532 #else
533   Tcl_SetVar2(interp, "sqlite_options", "trace", "1", TCL_GLOBAL_ONLY);
534 #endif
535 
536 #ifdef SQLITE_OMIT_TRIGGER
537   Tcl_SetVar2(interp, "sqlite_options", "trigger", "0", TCL_GLOBAL_ONLY);
538 #else
539   Tcl_SetVar2(interp, "sqlite_options", "trigger", "1", TCL_GLOBAL_ONLY);
540 #endif
541 
542 #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
543   Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "0", TCL_GLOBAL_ONLY);
544 #else
545   Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "1", TCL_GLOBAL_ONLY);
546 #endif
547 
548 #ifdef SQLITE_OMIT_UTF16
549   Tcl_SetVar2(interp, "sqlite_options", "utf16", "0", TCL_GLOBAL_ONLY);
550 #else
551   Tcl_SetVar2(interp, "sqlite_options", "utf16", "1", TCL_GLOBAL_ONLY);
552 #endif
553 
554 #if defined(SQLITE_OMIT_VACUUM) || defined(SQLITE_OMIT_ATTACH)
555   Tcl_SetVar2(interp, "sqlite_options", "vacuum", "0", TCL_GLOBAL_ONLY);
556 #else
557   Tcl_SetVar2(interp, "sqlite_options", "vacuum", "1", TCL_GLOBAL_ONLY);
558 #endif
559 
560 #ifdef SQLITE_OMIT_VIEW
561   Tcl_SetVar2(interp, "sqlite_options", "view", "0", TCL_GLOBAL_ONLY);
562 #else
563   Tcl_SetVar2(interp, "sqlite_options", "view", "1", TCL_GLOBAL_ONLY);
564 #endif
565 
566 #ifdef SQLITE_OMIT_VIRTUALTABLE
567   Tcl_SetVar2(interp, "sqlite_options", "vtab", "0", TCL_GLOBAL_ONLY);
568 #else
569   Tcl_SetVar2(interp, "sqlite_options", "vtab", "1", TCL_GLOBAL_ONLY);
570 #endif
571 
572 #ifdef SQLITE_OMIT_WAL
573   Tcl_SetVar2(interp, "sqlite_options", "wal", "0", TCL_GLOBAL_ONLY);
574 #else
575   Tcl_SetVar2(interp, "sqlite_options", "wal", "1", TCL_GLOBAL_ONLY);
576 #endif
577 
578 #ifdef SQLITE_OMIT_WSD
579   Tcl_SetVar2(interp, "sqlite_options", "wsd", "0", TCL_GLOBAL_ONLY);
580 #else
581   Tcl_SetVar2(interp, "sqlite_options", "wsd", "1", TCL_GLOBAL_ONLY);
582 #endif
583 
584 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
585   Tcl_SetVar2(interp, "sqlite_options", "update_delete_limit", "1", TCL_GLOBAL_ONLY);
586 #else
587   Tcl_SetVar2(interp, "sqlite_options", "update_delete_limit", "0", TCL_GLOBAL_ONLY);
588 #endif
589 
590 #if defined(SQLITE_ENABLE_UNLOCK_NOTIFY)
591   Tcl_SetVar2(interp, "sqlite_options", "unlock_notify", "1", TCL_GLOBAL_ONLY);
592 #else
593   Tcl_SetVar2(interp, "sqlite_options", "unlock_notify", "0", TCL_GLOBAL_ONLY);
594 #endif
595 
596 #ifdef SQLITE_SECURE_DELETE
597   Tcl_SetVar2(interp, "sqlite_options", "secure_delete", "1", TCL_GLOBAL_ONLY);
598 #else
599   Tcl_SetVar2(interp, "sqlite_options", "secure_delete", "0", TCL_GLOBAL_ONLY);
600 #endif
601 
602 #ifdef SQLITE_MULTIPLEX_EXT_OVWR
603   Tcl_SetVar2(interp, "sqlite_options", "multiplex_ext_overwrite", "1", TCL_GLOBAL_ONLY);
604 #else
605   Tcl_SetVar2(interp, "sqlite_options", "multiplex_ext_overwrite", "0", TCL_GLOBAL_ONLY);
606 #endif
607 
608 #ifdef YYTRACKMAXSTACKDEPTH
609   Tcl_SetVar2(interp, "sqlite_options", "yytrackmaxstackdepth", "1", TCL_GLOBAL_ONLY);
610 #else
611   Tcl_SetVar2(interp, "sqlite_options", "yytrackmaxstackdepth", "0", TCL_GLOBAL_ONLY);
612 #endif
613 
614 #define LINKVAR(x) { \
615     static const int cv_ ## x = SQLITE_ ## x; \
616     Tcl_LinkVar(interp, "SQLITE_" #x, (char *)&(cv_ ## x), \
617                 TCL_LINK_INT | TCL_LINK_READ_ONLY); }
618 
619   LINKVAR( MAX_LENGTH );
620   LINKVAR( MAX_COLUMN );
621   LINKVAR( MAX_SQL_LENGTH );
622   LINKVAR( MAX_EXPR_DEPTH );
623   LINKVAR( MAX_COMPOUND_SELECT );
624   LINKVAR( MAX_VDBE_OP );
625   LINKVAR( MAX_FUNCTION_ARG );
626   LINKVAR( MAX_VARIABLE_NUMBER );
627   LINKVAR( MAX_PAGE_SIZE );
628   LINKVAR( MAX_PAGE_COUNT );
629   LINKVAR( MAX_LIKE_PATTERN_LENGTH );
630   LINKVAR( MAX_TRIGGER_DEPTH );
631   LINKVAR( DEFAULT_TEMP_CACHE_SIZE );
632   LINKVAR( DEFAULT_CACHE_SIZE );
633   LINKVAR( DEFAULT_PAGE_SIZE );
634   LINKVAR( DEFAULT_FILE_FORMAT );
635   LINKVAR( MAX_ATTACHED );
636   LINKVAR( MAX_DEFAULT_PAGE_SIZE );
637 
638   {
639     static const int cv_TEMP_STORE = SQLITE_TEMP_STORE;
640     Tcl_LinkVar(interp, "TEMP_STORE", (char *)&(cv_TEMP_STORE),
641                 TCL_LINK_INT | TCL_LINK_READ_ONLY);
642   }
643 
644 #ifdef _MSC_VER
645   {
646     static const int cv__MSC_VER = 1;
647     Tcl_LinkVar(interp, "_MSC_VER", (char *)&(cv__MSC_VER),
648                 TCL_LINK_INT | TCL_LINK_READ_ONLY);
649   }
650 #endif
651 #ifdef __GNUC__
652   {
653     static const int cv___GNUC__ = 1;
654     Tcl_LinkVar(interp, "__GNUC__", (char *)&(cv___GNUC__),
655                 TCL_LINK_INT | TCL_LINK_READ_ONLY);
656   }
657 #endif
658 }
659 
660 
661 /*
662 ** Register commands with the TCL interpreter.
663 */
664 int Sqliteconfig_Init(Tcl_Interp *interp){
665   set_options(interp);
666   return TCL_OK;
667 }
668