test_config.c 21 KB

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