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