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