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