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 #if 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_DEFAULT_CKPTFULLFSYNC 83 Tcl_SetVar2(interp, "sqlite_options", "default_ckptfullfsync", 84 SQLITE_DEFAULT_CKPTFULLFSYNC ? "1" : "0", TCL_GLOBAL_ONLY); 85 #else 86 Tcl_SetVar2(interp, "sqlite_options", "default_ckptfullfsync", "0", TCL_GLOBAL_ONLY); 87 #endif 88 89 #ifdef SQLITE_DIRECT_OVERFLOW_READ 90 Tcl_SetVar2(interp, "sqlite_options", "direct_read", "1", TCL_GLOBAL_ONLY); 91 #else 92 Tcl_SetVar2(interp, "sqlite_options", "direct_read", "0", TCL_GLOBAL_ONLY); 93 #endif 94 95 #ifdef SQLITE_DISABLE_DIRSYNC 96 Tcl_SetVar2(interp, "sqlite_options", "dirsync", "0", TCL_GLOBAL_ONLY); 97 #else 98 Tcl_SetVar2(interp, "sqlite_options", "dirsync", "1", TCL_GLOBAL_ONLY); 99 #endif 100 101 #ifdef SQLITE_DISABLE_LFS 102 Tcl_SetVar2(interp, "sqlite_options", "lfs", "0", TCL_GLOBAL_ONLY); 103 #else 104 Tcl_SetVar2(interp, "sqlite_options", "lfs", "1", TCL_GLOBAL_ONLY); 105 #endif 106 107 #ifdef SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS 108 Tcl_SetVar2(interp, "sqlite_options", "pagecache_overflow_stats","0",TCL_GLOBAL_ONLY); 109 #else 110 Tcl_SetVar2(interp, "sqlite_options", "pagecache_overflow_stats","1",TCL_GLOBAL_ONLY); 111 #endif 112 113 #if SQLITE_MAX_MMAP_SIZE>0 114 Tcl_SetVar2(interp, "sqlite_options", "mmap", "1", TCL_GLOBAL_ONLY); 115 #else 116 Tcl_SetVar2(interp, "sqlite_options", "mmap", "0", TCL_GLOBAL_ONLY); 117 #endif 118 119 Tcl_SetVar2(interp, "sqlite_options", "worker_threads", 120 STRINGVALUE(SQLITE_MAX_WORKER_THREADS), TCL_GLOBAL_ONLY 121 ); 122 123 #if 1 /* def SQLITE_MEMDEBUG */ 124 Tcl_SetVar2(interp, "sqlite_options", "memdebug", "1", TCL_GLOBAL_ONLY); 125 #else 126 Tcl_SetVar2(interp, "sqlite_options", "memdebug", "0", TCL_GLOBAL_ONLY); 127 #endif 128 129 #ifdef SQLITE_ENABLE_8_3_NAMES 130 Tcl_SetVar2(interp, "sqlite_options", "8_3_names", "1", TCL_GLOBAL_ONLY); 131 #else 132 Tcl_SetVar2(interp, "sqlite_options", "8_3_names", "0", TCL_GLOBAL_ONLY); 133 #endif 134 135 #ifdef SQLITE_ENABLE_CURSOR_HINTS 136 Tcl_SetVar2(interp, "sqlite_options", "cursorhints", "1", TCL_GLOBAL_ONLY); 137 #else 138 Tcl_SetVar2(interp, "sqlite_options", "cursorhints", "0", TCL_GLOBAL_ONLY); 139 #endif 140 141 #ifdef SQLITE_ENABLE_HIDDEN_COLUMNS 142 Tcl_SetVar2(interp, "sqlite_options", "hiddencolumns", "1", TCL_GLOBAL_ONLY); 143 #else 144 Tcl_SetVar2(interp, "sqlite_options", "hiddencolumns", "0", TCL_GLOBAL_ONLY); 145 #endif 146 147 #ifdef SQLITE_ENABLE_MEMSYS3 148 Tcl_SetVar2(interp, "sqlite_options", "mem3", "1", TCL_GLOBAL_ONLY); 149 #else 150 Tcl_SetVar2(interp, "sqlite_options", "mem3", "0", TCL_GLOBAL_ONLY); 151 #endif 152 153 #ifdef SQLITE_ENABLE_MEMSYS5 154 Tcl_SetVar2(interp, "sqlite_options", "mem5", "1", TCL_GLOBAL_ONLY); 155 #else 156 Tcl_SetVar2(interp, "sqlite_options", "mem5", "0", TCL_GLOBAL_ONLY); 157 #endif 158 159 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK 160 Tcl_SetVar2(interp, "sqlite_options", "preupdate", "1", TCL_GLOBAL_ONLY); 161 #else 162 Tcl_SetVar2(interp, "sqlite_options", "preupdate", "0", TCL_GLOBAL_ONLY); 163 #endif 164 165 #ifdef SQLITE_ENABLE_SNAPSHOT 166 Tcl_SetVar2(interp, "sqlite_options", "snapshot", "1", TCL_GLOBAL_ONLY); 167 #else 168 Tcl_SetVar2(interp, "sqlite_options", "snapshot", "0", TCL_GLOBAL_ONLY); 169 #endif 170 171 #ifdef SQLITE_MUTEX_OMIT 172 Tcl_SetVar2(interp, "sqlite_options", "mutex", "0", TCL_GLOBAL_ONLY); 173 #else 174 Tcl_SetVar2(interp, "sqlite_options", "mutex", "1", TCL_GLOBAL_ONLY); 175 #endif 176 177 #ifdef SQLITE_MUTEX_NOOP 178 Tcl_SetVar2(interp, "sqlite_options", "mutex_noop", "1", TCL_GLOBAL_ONLY); 179 #else 180 Tcl_SetVar2(interp, "sqlite_options", "mutex_noop", "0", TCL_GLOBAL_ONLY); 181 #endif 182 183 #ifdef SQLITE_OMIT_ALTERTABLE 184 Tcl_SetVar2(interp, "sqlite_options", "altertable", "0", TCL_GLOBAL_ONLY); 185 #else 186 Tcl_SetVar2(interp, "sqlite_options", "altertable", "1", TCL_GLOBAL_ONLY); 187 #endif 188 189 #ifdef SQLITE_OMIT_ANALYZE 190 Tcl_SetVar2(interp, "sqlite_options", "analyze", "0", TCL_GLOBAL_ONLY); 191 #else 192 Tcl_SetVar2(interp, "sqlite_options", "analyze", "1", TCL_GLOBAL_ONLY); 193 #endif 194 195 #ifdef SQLITE_ENABLE_API_ARMOR 196 Tcl_SetVar2(interp, "sqlite_options", "api_armor", "1", TCL_GLOBAL_ONLY); 197 #else 198 Tcl_SetVar2(interp, "sqlite_options", "api_armor", "0", TCL_GLOBAL_ONLY); 199 #endif 200 201 #ifdef SQLITE_ENABLE_ATOMIC_WRITE 202 Tcl_SetVar2(interp, "sqlite_options", "atomicwrite", "1", TCL_GLOBAL_ONLY); 203 #else 204 Tcl_SetVar2(interp, "sqlite_options", "atomicwrite", "0", TCL_GLOBAL_ONLY); 205 #endif 206 207 #ifdef SQLITE_ENABLE_JSON1 208 Tcl_SetVar2(interp, "sqlite_options", "json1", "1", TCL_GLOBAL_ONLY); 209 #else 210 Tcl_SetVar2(interp, "sqlite_options", "json1", "0", TCL_GLOBAL_ONLY); 211 #endif 212 213 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS 214 Tcl_SetVar2(interp, "sqlite_options", "like_match_blobs", "0", TCL_GLOBAL_ONLY); 215 #else 216 Tcl_SetVar2(interp, "sqlite_options", "like_match_blobs", "1", TCL_GLOBAL_ONLY); 217 #endif 218 219 #ifdef SQLITE_OMIT_ATTACH 220 Tcl_SetVar2(interp, "sqlite_options", "attach", "0", TCL_GLOBAL_ONLY); 221 #else 222 Tcl_SetVar2(interp, "sqlite_options", "attach", "1", TCL_GLOBAL_ONLY); 223 #endif 224 225 #ifdef SQLITE_OMIT_AUTHORIZATION 226 Tcl_SetVar2(interp, "sqlite_options", "auth", "0", TCL_GLOBAL_ONLY); 227 #else 228 Tcl_SetVar2(interp, "sqlite_options", "auth", "1", TCL_GLOBAL_ONLY); 229 #endif 230 231 #ifdef SQLITE_OMIT_AUTOINCREMENT 232 Tcl_SetVar2(interp, "sqlite_options", "autoinc", "0", TCL_GLOBAL_ONLY); 233 #else 234 Tcl_SetVar2(interp, "sqlite_options", "autoinc", "1", TCL_GLOBAL_ONLY); 235 #endif 236 237 #ifdef SQLITE_OMIT_AUTOMATIC_INDEX 238 Tcl_SetVar2(interp, "sqlite_options", "autoindex", "0", TCL_GLOBAL_ONLY); 239 #else 240 Tcl_SetVar2(interp, "sqlite_options", "autoindex", "1", TCL_GLOBAL_ONLY); 241 #endif 242 243 #ifdef SQLITE_OMIT_AUTORESET 244 Tcl_SetVar2(interp, "sqlite_options", "autoreset", "0", TCL_GLOBAL_ONLY); 245 #else 246 Tcl_SetVar2(interp, "sqlite_options", "autoreset", "1", TCL_GLOBAL_ONLY); 247 #endif 248 249 #ifdef SQLITE_OMIT_AUTOVACUUM 250 Tcl_SetVar2(interp, "sqlite_options", "autovacuum", "0", TCL_GLOBAL_ONLY); 251 #else 252 Tcl_SetVar2(interp, "sqlite_options", "autovacuum", "1", TCL_GLOBAL_ONLY); 253 #endif /* SQLITE_OMIT_AUTOVACUUM */ 254 #if !defined(SQLITE_DEFAULT_AUTOVACUUM) 255 Tcl_SetVar2(interp,"sqlite_options","default_autovacuum","0",TCL_GLOBAL_ONLY); 256 #else 257 Tcl_SetVar2(interp, "sqlite_options", "default_autovacuum", 258 STRINGVALUE(SQLITE_DEFAULT_AUTOVACUUM), TCL_GLOBAL_ONLY); 259 #endif 260 261 #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION 262 Tcl_SetVar2(interp, "sqlite_options", "between_opt", "0", TCL_GLOBAL_ONLY); 263 #else 264 Tcl_SetVar2(interp, "sqlite_options", "between_opt", "1", TCL_GLOBAL_ONLY); 265 #endif 266 267 #ifdef SQLITE_OMIT_BUILTIN_TEST 268 Tcl_SetVar2(interp, "sqlite_options", "builtin_test", "0", TCL_GLOBAL_ONLY); 269 #else 270 Tcl_SetVar2(interp, "sqlite_options", "builtin_test", "1", TCL_GLOBAL_ONLY); 271 #endif 272 273 #ifdef SQLITE_OMIT_BLOB_LITERAL 274 Tcl_SetVar2(interp, "sqlite_options", "bloblit", "0", TCL_GLOBAL_ONLY); 275 #else 276 Tcl_SetVar2(interp, "sqlite_options", "bloblit", "1", TCL_GLOBAL_ONLY); 277 #endif 278 279 #ifdef SQLITE_OMIT_CAST 280 Tcl_SetVar2(interp, "sqlite_options", "cast", "0", TCL_GLOBAL_ONLY); 281 #else 282 Tcl_SetVar2(interp, "sqlite_options", "cast", "1", TCL_GLOBAL_ONLY); 283 #endif 284 285 #ifdef SQLITE_OMIT_CHECK 286 Tcl_SetVar2(interp, "sqlite_options", "check", "0", TCL_GLOBAL_ONLY); 287 #else 288 Tcl_SetVar2(interp, "sqlite_options", "check", "1", TCL_GLOBAL_ONLY); 289 #endif 290 291 #ifdef SQLITE_OMIT_CTE 292 Tcl_SetVar2(interp, "sqlite_options", "cte", "0", TCL_GLOBAL_ONLY); 293 #else 294 Tcl_SetVar2(interp, "sqlite_options", "cte", "1", TCL_GLOBAL_ONLY); 295 #endif 296 297 #ifdef SQLITE_ENABLE_COLUMN_METADATA 298 Tcl_SetVar2(interp, "sqlite_options", "columnmetadata", "1", TCL_GLOBAL_ONLY); 299 #else 300 Tcl_SetVar2(interp, "sqlite_options", "columnmetadata", "0", TCL_GLOBAL_ONLY); 301 #endif 302 303 #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK 304 Tcl_SetVar2(interp, "sqlite_options", "oversize_cell_check", "1", 305 TCL_GLOBAL_ONLY); 306 #else 307 Tcl_SetVar2(interp, "sqlite_options", "oversize_cell_check", "0", 308 TCL_GLOBAL_ONLY); 309 #endif 310 311 #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS 312 Tcl_SetVar2(interp, "sqlite_options", "compileoption_diags", "0", TCL_GLOBAL_ONLY); 313 #else 314 Tcl_SetVar2(interp, "sqlite_options", "compileoption_diags", "1", TCL_GLOBAL_ONLY); 315 #endif 316 317 #ifdef SQLITE_OMIT_COMPLETE 318 Tcl_SetVar2(interp, "sqlite_options", "complete", "0", TCL_GLOBAL_ONLY); 319 #else 320 Tcl_SetVar2(interp, "sqlite_options", "complete", "1", TCL_GLOBAL_ONLY); 321 #endif 322 323 #ifdef SQLITE_OMIT_COMPOUND_SELECT 324 Tcl_SetVar2(interp, "sqlite_options", "compound", "0", TCL_GLOBAL_ONLY); 325 #else 326 Tcl_SetVar2(interp, "sqlite_options", "compound", "1", TCL_GLOBAL_ONLY); 327 #endif 328 329 Tcl_SetVar2(interp, "sqlite_options", "conflict", "1", TCL_GLOBAL_ONLY); 330 Tcl_SetVar2(interp, "sqlite_options", "crashtest", "1", TCL_GLOBAL_ONLY); 331 332 #ifdef SQLITE_OMIT_DATETIME_FUNCS 333 Tcl_SetVar2(interp, "sqlite_options", "datetime", "0", TCL_GLOBAL_ONLY); 334 #else 335 Tcl_SetVar2(interp, "sqlite_options", "datetime", "1", TCL_GLOBAL_ONLY); 336 #endif 337 338 #ifdef SQLITE_OMIT_DECLTYPE 339 Tcl_SetVar2(interp, "sqlite_options", "decltype", "0", TCL_GLOBAL_ONLY); 340 #else 341 Tcl_SetVar2(interp, "sqlite_options", "decltype", "1", TCL_GLOBAL_ONLY); 342 #endif 343 344 #ifdef SQLITE_OMIT_DEPRECATED 345 Tcl_SetVar2(interp, "sqlite_options", "deprecated", "0", TCL_GLOBAL_ONLY); 346 #else 347 Tcl_SetVar2(interp, "sqlite_options", "deprecated", "1", TCL_GLOBAL_ONLY); 348 #endif 349 350 #ifdef SQLITE_OMIT_DISKIO 351 Tcl_SetVar2(interp, "sqlite_options", "diskio", "0", TCL_GLOBAL_ONLY); 352 #else 353 Tcl_SetVar2(interp, "sqlite_options", "diskio", "1", TCL_GLOBAL_ONLY); 354 #endif 355 356 #ifdef SQLITE_OMIT_EXPLAIN 357 Tcl_SetVar2(interp, "sqlite_options", "explain", "0", TCL_GLOBAL_ONLY); 358 #else 359 Tcl_SetVar2(interp, "sqlite_options", "explain", "1", TCL_GLOBAL_ONLY); 360 #endif 361 362 #ifdef SQLITE_OMIT_FLOATING_POINT 363 Tcl_SetVar2(interp, "sqlite_options", "floatingpoint", "0", TCL_GLOBAL_ONLY); 364 #else 365 Tcl_SetVar2(interp, "sqlite_options", "floatingpoint", "1", TCL_GLOBAL_ONLY); 366 #endif 367 368 #ifdef SQLITE_OMIT_FOREIGN_KEY 369 Tcl_SetVar2(interp, "sqlite_options", "foreignkey", "0", TCL_GLOBAL_ONLY); 370 #else 371 Tcl_SetVar2(interp, "sqlite_options", "foreignkey", "1", TCL_GLOBAL_ONLY); 372 #endif 373 374 #ifdef SQLITE_ENABLE_FTS1 375 Tcl_SetVar2(interp, "sqlite_options", "fts1", "1", TCL_GLOBAL_ONLY); 376 #else 377 Tcl_SetVar2(interp, "sqlite_options", "fts1", "0", TCL_GLOBAL_ONLY); 378 #endif 379 380 #ifdef SQLITE_ENABLE_FTS2 381 Tcl_SetVar2(interp, "sqlite_options", "fts2", "1", TCL_GLOBAL_ONLY); 382 #else 383 Tcl_SetVar2(interp, "sqlite_options", "fts2", "0", TCL_GLOBAL_ONLY); 384 #endif 385 386 #ifdef SQLITE_ENABLE_FTS3 387 Tcl_SetVar2(interp, "sqlite_options", "fts3", "1", TCL_GLOBAL_ONLY); 388 #else 389 Tcl_SetVar2(interp, "sqlite_options", "fts3", "0", TCL_GLOBAL_ONLY); 390 #endif 391 392 #ifdef SQLITE_ENABLE_FTS5 393 Tcl_SetVar2(interp, "sqlite_options", "fts5", "1", TCL_GLOBAL_ONLY); 394 #else 395 Tcl_SetVar2(interp, "sqlite_options", "fts5", "0", TCL_GLOBAL_ONLY); 396 #endif 397 398 #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_DISABLE_FTS3_UNICODE) 399 Tcl_SetVar2(interp, "sqlite_options", "fts3_unicode", "1", TCL_GLOBAL_ONLY); 400 #else 401 Tcl_SetVar2(interp, "sqlite_options", "fts3_unicode", "0", TCL_GLOBAL_ONLY); 402 #endif 403 404 #ifdef SQLITE_DISABLE_FTS4_DEFERRED 405 Tcl_SetVar2(interp, "sqlite_options", "fts4_deferred", "0", TCL_GLOBAL_ONLY); 406 #else 407 Tcl_SetVar2(interp, "sqlite_options", "fts4_deferred", "1", TCL_GLOBAL_ONLY); 408 #endif 409 410 #ifdef SQLITE_OMIT_GET_TABLE 411 Tcl_SetVar2(interp, "sqlite_options", "gettable", "0", TCL_GLOBAL_ONLY); 412 #else 413 Tcl_SetVar2(interp, "sqlite_options", "gettable", "1", TCL_GLOBAL_ONLY); 414 #endif 415 416 #ifdef SQLITE_ENABLE_ICU 417 Tcl_SetVar2(interp, "sqlite_options", "icu", "1", TCL_GLOBAL_ONLY); 418 #else 419 Tcl_SetVar2(interp, "sqlite_options", "icu", "0", TCL_GLOBAL_ONLY); 420 #endif 421 422 #ifdef SQLITE_OMIT_INCRBLOB 423 Tcl_SetVar2(interp, "sqlite_options", "incrblob", "0", TCL_GLOBAL_ONLY); 424 #else 425 Tcl_SetVar2(interp, "sqlite_options", "incrblob", "1", TCL_GLOBAL_ONLY); 426 #endif /* SQLITE_OMIT_AUTOVACUUM */ 427 428 #ifdef SQLITE_OMIT_INTEGRITY_CHECK 429 Tcl_SetVar2(interp, "sqlite_options", "integrityck", "0", TCL_GLOBAL_ONLY); 430 #else 431 Tcl_SetVar2(interp, "sqlite_options", "integrityck", "1", TCL_GLOBAL_ONLY); 432 #endif 433 434 #if defined(SQLITE_DEFAULT_FILE_FORMAT) && SQLITE_DEFAULT_FILE_FORMAT==1 435 Tcl_SetVar2(interp, "sqlite_options", "legacyformat", "1", TCL_GLOBAL_ONLY); 436 #else 437 Tcl_SetVar2(interp, "sqlite_options", "legacyformat", "0", TCL_GLOBAL_ONLY); 438 #endif 439 440 #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION 441 Tcl_SetVar2(interp, "sqlite_options", "like_opt", "0", TCL_GLOBAL_ONLY); 442 #else 443 Tcl_SetVar2(interp, "sqlite_options", "like_opt", "1", TCL_GLOBAL_ONLY); 444 #endif 445 446 #ifdef SQLITE_OMIT_LOAD_EXTENSION 447 Tcl_SetVar2(interp, "sqlite_options", "load_ext", "0", TCL_GLOBAL_ONLY); 448 #else 449 Tcl_SetVar2(interp, "sqlite_options", "load_ext", "1", TCL_GLOBAL_ONLY); 450 #endif 451 452 #ifdef SQLITE_OMIT_LOCALTIME 453 Tcl_SetVar2(interp, "sqlite_options", "localtime", "0", TCL_GLOBAL_ONLY); 454 #else 455 Tcl_SetVar2(interp, "sqlite_options", "localtime", "1", TCL_GLOBAL_ONLY); 456 #endif 457 458 #ifdef SQLITE_OMIT_LOOKASIDE 459 Tcl_SetVar2(interp, "sqlite_options", "lookaside", "0", TCL_GLOBAL_ONLY); 460 #else 461 Tcl_SetVar2(interp, "sqlite_options", "lookaside", "1", TCL_GLOBAL_ONLY); 462 #endif 463 464 Tcl_SetVar2(interp, "sqlite_options", "long_double", 465 sizeof(LONGDOUBLE_TYPE)>sizeof(double) ? "1" : "0", 466 TCL_GLOBAL_ONLY); 467 468 #ifdef SQLITE_OMIT_MEMORYDB 469 Tcl_SetVar2(interp, "sqlite_options", "memorydb", "0", TCL_GLOBAL_ONLY); 470 #else 471 Tcl_SetVar2(interp, "sqlite_options", "memorydb", "1", TCL_GLOBAL_ONLY); 472 #endif 473 474 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 475 Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "1", TCL_GLOBAL_ONLY); 476 #else 477 Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "0", TCL_GLOBAL_ONLY); 478 #endif 479 480 Tcl_SetVar2(interp, "sqlite_options", "mergesort", "1", TCL_GLOBAL_ONLY); 481 482 #ifdef SQLITE_OMIT_OR_OPTIMIZATION 483 Tcl_SetVar2(interp, "sqlite_options", "or_opt", "0", TCL_GLOBAL_ONLY); 484 #else 485 Tcl_SetVar2(interp, "sqlite_options", "or_opt", "1", TCL_GLOBAL_ONLY); 486 #endif 487 488 #ifdef SQLITE_ENABLE_RBU 489 Tcl_SetVar2(interp, "sqlite_options", "rbu", "1", TCL_GLOBAL_ONLY); 490 #else 491 Tcl_SetVar2(interp, "sqlite_options", "rbu", "0", TCL_GLOBAL_ONLY); 492 #endif 493 494 #ifdef SQLITE_OMIT_PAGER_PRAGMAS 495 Tcl_SetVar2(interp, "sqlite_options", "pager_pragmas", "0", TCL_GLOBAL_ONLY); 496 #else 497 Tcl_SetVar2(interp, "sqlite_options", "pager_pragmas", "1", TCL_GLOBAL_ONLY); 498 #endif 499 500 #if defined(SQLITE_OMIT_PRAGMA) || defined(SQLITE_OMIT_FLAG_PRAGMAS) 501 Tcl_SetVar2(interp, "sqlite_options", "pragma", "0", TCL_GLOBAL_ONLY); 502 Tcl_SetVar2(interp, "sqlite_options", "integrityck", "0", TCL_GLOBAL_ONLY); 503 #else 504 Tcl_SetVar2(interp, "sqlite_options", "pragma", "1", TCL_GLOBAL_ONLY); 505 #endif 506 507 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK 508 Tcl_SetVar2(interp, "sqlite_options", "progress", "0", TCL_GLOBAL_ONLY); 509 #else 510 Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY); 511 #endif 512 513 #ifdef SQLITE_OMIT_REINDEX 514 Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY); 515 #else 516 Tcl_SetVar2(interp, "sqlite_options", "reindex", "1", TCL_GLOBAL_ONLY); 517 #endif 518 519 #ifdef SQLITE_ENABLE_RTREE 520 Tcl_SetVar2(interp, "sqlite_options", "rtree", "1", TCL_GLOBAL_ONLY); 521 #else 522 Tcl_SetVar2(interp, "sqlite_options", "rtree", "0", TCL_GLOBAL_ONLY); 523 #endif 524 525 #ifdef SQLITE_RTREE_INT_ONLY 526 Tcl_SetVar2(interp, "sqlite_options", "rtree_int_only", "1", TCL_GLOBAL_ONLY); 527 #else 528 Tcl_SetVar2(interp, "sqlite_options", "rtree_int_only", "0", TCL_GLOBAL_ONLY); 529 #endif 530 531 #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS 532 Tcl_SetVar2(interp, "sqlite_options", "schema_pragmas", "0", TCL_GLOBAL_ONLY); 533 #else 534 Tcl_SetVar2(interp, "sqlite_options", "schema_pragmas", "1", TCL_GLOBAL_ONLY); 535 #endif 536 537 #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS 538 Tcl_SetVar2(interp, "sqlite_options", "schema_version", "0", TCL_GLOBAL_ONLY); 539 #else 540 Tcl_SetVar2(interp, "sqlite_options", "schema_version", "1", TCL_GLOBAL_ONLY); 541 #endif 542 543 #ifdef SQLITE_ENABLE_SESSION 544 Tcl_SetVar2(interp, "sqlite_options", "session", "1", TCL_GLOBAL_ONLY); 545 #else 546 Tcl_SetVar2(interp, "sqlite_options", "session", "0", TCL_GLOBAL_ONLY); 547 #endif 548 549 #ifdef SQLITE_ENABLE_STAT4 550 Tcl_SetVar2(interp, "sqlite_options", "stat4", "1", TCL_GLOBAL_ONLY); 551 #else 552 Tcl_SetVar2(interp, "sqlite_options", "stat4", "0", TCL_GLOBAL_ONLY); 553 #endif 554 #if defined(SQLITE_ENABLE_STAT3) && !defined(SQLITE_ENABLE_STAT4) 555 Tcl_SetVar2(interp, "sqlite_options", "stat3", "1", TCL_GLOBAL_ONLY); 556 #else 557 Tcl_SetVar2(interp, "sqlite_options", "stat3", "0", TCL_GLOBAL_ONLY); 558 #endif 559 560 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS 561 Tcl_SetVar2(interp, "sqlite_options", "scanstatus", "1", TCL_GLOBAL_ONLY); 562 #else 563 Tcl_SetVar2(interp, "sqlite_options", "scanstatus", "0", TCL_GLOBAL_ONLY); 564 #endif 565 566 #if !defined(SQLITE_ENABLE_LOCKING_STYLE) 567 # if defined(__APPLE__) 568 # define SQLITE_ENABLE_LOCKING_STYLE 1 569 # else 570 # define SQLITE_ENABLE_LOCKING_STYLE 0 571 # endif 572 #endif 573 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) 574 Tcl_SetVar2(interp,"sqlite_options","lock_proxy_pragmas","1",TCL_GLOBAL_ONLY); 575 #else 576 Tcl_SetVar2(interp,"sqlite_options","lock_proxy_pragmas","0",TCL_GLOBAL_ONLY); 577 #endif 578 #if defined(SQLITE_PREFER_PROXY_LOCKING) && defined(__APPLE__) 579 Tcl_SetVar2(interp,"sqlite_options","prefer_proxy_locking","1",TCL_GLOBAL_ONLY); 580 #else 581 Tcl_SetVar2(interp,"sqlite_options","prefer_proxy_locking","0",TCL_GLOBAL_ONLY); 582 #endif 583 584 585 #ifdef SQLITE_OMIT_SHARED_CACHE 586 Tcl_SetVar2(interp, "sqlite_options", "shared_cache", "0", TCL_GLOBAL_ONLY); 587 #else 588 Tcl_SetVar2(interp, "sqlite_options", "shared_cache", "1", TCL_GLOBAL_ONLY); 589 #endif 590 591 #ifdef SQLITE_OMIT_SUBQUERY 592 Tcl_SetVar2(interp, "sqlite_options", "subquery", "0", TCL_GLOBAL_ONLY); 593 #else 594 Tcl_SetVar2(interp, "sqlite_options", "subquery", "1", TCL_GLOBAL_ONLY); 595 #endif 596 597 #ifdef SQLITE_OMIT_TCL_VARIABLE 598 Tcl_SetVar2(interp, "sqlite_options", "tclvar", "0", TCL_GLOBAL_ONLY); 599 #else 600 Tcl_SetVar2(interp, "sqlite_options", "tclvar", "1", TCL_GLOBAL_ONLY); 601 #endif 602 603 Tcl_SetVar2(interp, "sqlite_options", "threadsafe", 604 SQLITE_THREADSAFE ? "1" : "0", TCL_GLOBAL_ONLY); 605 Tcl_SetVar2(interp, "sqlite_options", "threadsafe1", 606 SQLITE_THREADSAFE==1 ? "1" : "0", TCL_GLOBAL_ONLY); 607 Tcl_SetVar2(interp, "sqlite_options", "threadsafe2", 608 SQLITE_THREADSAFE==2 ? "1" : "0", TCL_GLOBAL_ONLY); 609 assert( sqlite3_threadsafe()==SQLITE_THREADSAFE ); 610 611 #ifdef SQLITE_OMIT_TEMPDB 612 Tcl_SetVar2(interp, "sqlite_options", "tempdb", "0", TCL_GLOBAL_ONLY); 613 #else 614 Tcl_SetVar2(interp, "sqlite_options", "tempdb", "1", TCL_GLOBAL_ONLY); 615 #endif 616 617 #ifdef SQLITE_OMIT_TRACE 618 Tcl_SetVar2(interp, "sqlite_options", "trace", "0", TCL_GLOBAL_ONLY); 619 #else 620 Tcl_SetVar2(interp, "sqlite_options", "trace", "1", TCL_GLOBAL_ONLY); 621 #endif 622 623 #ifdef SQLITE_OMIT_TRIGGER 624 Tcl_SetVar2(interp, "sqlite_options", "trigger", "0", TCL_GLOBAL_ONLY); 625 #else 626 Tcl_SetVar2(interp, "sqlite_options", "trigger", "1", TCL_GLOBAL_ONLY); 627 #endif 628 629 #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION 630 Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "0", TCL_GLOBAL_ONLY); 631 #else 632 Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "1", TCL_GLOBAL_ONLY); 633 #endif 634 635 #ifdef SQLITE_OMIT_UTF16 636 Tcl_SetVar2(interp, "sqlite_options", "utf16", "0", TCL_GLOBAL_ONLY); 637 #else 638 Tcl_SetVar2(interp, "sqlite_options", "utf16", "1", TCL_GLOBAL_ONLY); 639 #endif 640 641 #if defined(SQLITE_OMIT_VACUUM) || defined(SQLITE_OMIT_ATTACH) 642 Tcl_SetVar2(interp, "sqlite_options", "vacuum", "0", TCL_GLOBAL_ONLY); 643 #else 644 Tcl_SetVar2(interp, "sqlite_options", "vacuum", "1", TCL_GLOBAL_ONLY); 645 #endif 646 647 #ifdef SQLITE_OMIT_VIEW 648 Tcl_SetVar2(interp, "sqlite_options", "view", "0", TCL_GLOBAL_ONLY); 649 #else 650 Tcl_SetVar2(interp, "sqlite_options", "view", "1", TCL_GLOBAL_ONLY); 651 #endif 652 653 #ifdef SQLITE_OMIT_VIRTUALTABLE 654 Tcl_SetVar2(interp, "sqlite_options", "vtab", "0", TCL_GLOBAL_ONLY); 655 #else 656 Tcl_SetVar2(interp, "sqlite_options", "vtab", "1", TCL_GLOBAL_ONLY); 657 #endif 658 659 #ifdef SQLITE_OMIT_WAL 660 Tcl_SetVar2(interp, "sqlite_options", "wal", "0", TCL_GLOBAL_ONLY); 661 #else 662 Tcl_SetVar2(interp, "sqlite_options", "wal", "1", TCL_GLOBAL_ONLY); 663 #endif 664 665 #ifdef SQLITE_OMIT_WSD 666 Tcl_SetVar2(interp, "sqlite_options", "wsd", "0", TCL_GLOBAL_ONLY); 667 #else 668 Tcl_SetVar2(interp, "sqlite_options", "wsd", "1", TCL_GLOBAL_ONLY); 669 #endif 670 671 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) 672 Tcl_SetVar2(interp, "sqlite_options", "update_delete_limit", "1", TCL_GLOBAL_ONLY); 673 #else 674 Tcl_SetVar2(interp, "sqlite_options", "update_delete_limit", "0", TCL_GLOBAL_ONLY); 675 #endif 676 677 #if defined(SQLITE_ENABLE_UNLOCK_NOTIFY) 678 Tcl_SetVar2(interp, "sqlite_options", "unlock_notify", "1", TCL_GLOBAL_ONLY); 679 #else 680 Tcl_SetVar2(interp, "sqlite_options", "unlock_notify", "0", TCL_GLOBAL_ONLY); 681 #endif 682 683 #ifdef SQLITE_SECURE_DELETE 684 Tcl_SetVar2(interp, "sqlite_options", "secure_delete", "1", TCL_GLOBAL_ONLY); 685 #else 686 Tcl_SetVar2(interp, "sqlite_options", "secure_delete", "0", TCL_GLOBAL_ONLY); 687 #endif 688 689 #ifdef SQLITE_USER_AUTHENTICATION 690 Tcl_SetVar2(interp, "sqlite_options", "userauth", "1", TCL_GLOBAL_ONLY); 691 #else 692 Tcl_SetVar2(interp, "sqlite_options", "userauth", "0", TCL_GLOBAL_ONLY); 693 #endif 694 695 #ifdef SQLITE_MULTIPLEX_EXT_OVWR 696 Tcl_SetVar2(interp, "sqlite_options", "multiplex_ext_overwrite", "1", TCL_GLOBAL_ONLY); 697 #else 698 Tcl_SetVar2(interp, "sqlite_options", "multiplex_ext_overwrite", "0", TCL_GLOBAL_ONLY); 699 #endif 700 701 #ifdef YYTRACKMAXSTACKDEPTH 702 Tcl_SetVar2(interp, "sqlite_options", "yytrackmaxstackdepth", "1", TCL_GLOBAL_ONLY); 703 #else 704 Tcl_SetVar2(interp, "sqlite_options", "yytrackmaxstackdepth", "0", TCL_GLOBAL_ONLY); 705 #endif 706 707 #ifdef SQLITE_ENABLE_SQLLOG 708 Tcl_SetVar2(interp, "sqlite_options", "sqllog", "1", TCL_GLOBAL_ONLY); 709 #else 710 Tcl_SetVar2(interp, "sqlite_options", "sqllog", "0", TCL_GLOBAL_ONLY); 711 #endif 712 713 #define LINKVAR(x) { \ 714 static const int cv_ ## x = SQLITE_ ## x; \ 715 Tcl_LinkVar(interp, "SQLITE_" #x, (char *)&(cv_ ## x), \ 716 TCL_LINK_INT | TCL_LINK_READ_ONLY); } 717 718 LINKVAR( MAX_LENGTH ); 719 LINKVAR( MAX_COLUMN ); 720 LINKVAR( MAX_SQL_LENGTH ); 721 LINKVAR( MAX_EXPR_DEPTH ); 722 LINKVAR( MAX_COMPOUND_SELECT ); 723 LINKVAR( MAX_VDBE_OP ); 724 LINKVAR( MAX_FUNCTION_ARG ); 725 LINKVAR( MAX_VARIABLE_NUMBER ); 726 LINKVAR( MAX_PAGE_SIZE ); 727 LINKVAR( MAX_PAGE_COUNT ); 728 LINKVAR( MAX_LIKE_PATTERN_LENGTH ); 729 LINKVAR( MAX_TRIGGER_DEPTH ); 730 LINKVAR( DEFAULT_CACHE_SIZE ); 731 LINKVAR( DEFAULT_PAGE_SIZE ); 732 LINKVAR( DEFAULT_FILE_FORMAT ); 733 LINKVAR( MAX_ATTACHED ); 734 LINKVAR( MAX_DEFAULT_PAGE_SIZE ); 735 LINKVAR( MAX_WORKER_THREADS ); 736 737 { 738 static const int cv_TEMP_STORE = SQLITE_TEMP_STORE; 739 Tcl_LinkVar(interp, "TEMP_STORE", (char *)&(cv_TEMP_STORE), 740 TCL_LINK_INT | TCL_LINK_READ_ONLY); 741 } 742 743 #ifdef _MSC_VER 744 { 745 static const int cv__MSC_VER = 1; 746 Tcl_LinkVar(interp, "_MSC_VER", (char *)&(cv__MSC_VER), 747 TCL_LINK_INT | TCL_LINK_READ_ONLY); 748 } 749 #endif 750 #ifdef __GNUC__ 751 { 752 static const int cv___GNUC__ = 1; 753 Tcl_LinkVar(interp, "__GNUC__", (char *)&(cv___GNUC__), 754 TCL_LINK_INT | TCL_LINK_READ_ONLY); 755 } 756 #endif 757 } 758 759 760 /* 761 ** Register commands with the TCL interpreter. 762 */ 763 int Sqliteconfig_Init(Tcl_Interp *interp){ 764 set_options(interp); 765 return TCL_OK; 766 } 767