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