4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
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.
11 *************************************************************************
13 ** This file implements routines used to report what compile-time options
14 ** SQLite was built with.
17 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
19 #include "sqliteInt.h"
22 ** An array of names of all compile-time options. This array should
25 ** This array looks large, but in a typical installation actually uses
26 ** only a handful of compile-time options, so most times this array is usually
27 ** rather short and uses little memory space.
29 static const char * const azCompileOpt
[] = {
31 /* These macros are provided to "stringify" the value of the define
32 ** for those options in which the value is meaningful. */
33 #define CTIMEOPT_VAL_(opt) #opt
34 #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
36 #if SQLITE_32BIT_ROWID
39 #if SQLITE_4_BYTE_ALIGNED_MALLOC
40 "4_BYTE_ALIGNED_MALLOC",
42 #if SQLITE_CASE_SENSITIVE_LIKE
43 "CASE_SENSITIVE_LIKE",
45 #if SQLITE_CHECK_PAGES
48 #if defined(__clang__) && defined(__clang_major__)
49 "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__
) "."
50 CTIMEOPT_VAL(__clang_minor__
) "."
51 CTIMEOPT_VAL(__clang_patchlevel__
),
52 #elif defined(_MSC_VER)
53 "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER
),
54 #elif defined(__GNUC__) && defined(__VERSION__)
55 "COMPILER=gcc-" __VERSION__
,
57 #if SQLITE_COVERAGE_TEST
63 #if SQLITE_DEFAULT_LOCKING_MODE
64 "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE
),
66 #if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc)
67 "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE
),
69 #if SQLITE_DISABLE_DIRSYNC
72 #if SQLITE_DISABLE_LFS
75 #if SQLITE_ENABLE_8_3_NAMES
76 "ENABLE_8_3_NAMES=" CTIMEOPT_VAL(SQLITE_ENABLE_8_3_NAMES
),
78 #if SQLITE_ENABLE_API_ARMOR
81 #if SQLITE_ENABLE_ATOMIC_WRITE
82 "ENABLE_ATOMIC_WRITE",
84 #if SQLITE_ENABLE_CEROD
87 #if SQLITE_ENABLE_COLUMN_METADATA
88 "ENABLE_COLUMN_METADATA",
90 #if SQLITE_ENABLE_DBSTAT_VTAB
93 #if SQLITE_ENABLE_EXPENSIVE_ASSERT
94 "ENABLE_EXPENSIVE_ASSERT",
96 #if SQLITE_ENABLE_FTS1
99 #if SQLITE_ENABLE_FTS2
102 #if SQLITE_ENABLE_FTS3
105 #if SQLITE_ENABLE_FTS3_PARENTHESIS
106 "ENABLE_FTS3_PARENTHESIS",
108 #if SQLITE_ENABLE_FTS4
111 #if SQLITE_ENABLE_FTS5
114 #if SQLITE_ENABLE_ICU
117 #if SQLITE_ENABLE_IOTRACE
120 #if SQLITE_ENABLE_JSON1
123 #if SQLITE_ENABLE_LOAD_EXTENSION
124 "ENABLE_LOAD_EXTENSION",
126 #if SQLITE_ENABLE_LOCKING_STYLE
127 "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE
),
129 #if SQLITE_ENABLE_MEMORY_MANAGEMENT
130 "ENABLE_MEMORY_MANAGEMENT",
132 #if SQLITE_ENABLE_MEMSYS3
135 #if SQLITE_ENABLE_MEMSYS5
138 #if SQLITE_ENABLE_OVERSIZE_CELL_CHECK
139 "ENABLE_OVERSIZE_CELL_CHECK",
141 #if SQLITE_ENABLE_RTREE
144 #if defined(SQLITE_ENABLE_STAT4)
146 #elif defined(SQLITE_ENABLE_STAT3)
149 #if SQLITE_ENABLE_UNLOCK_NOTIFY
150 "ENABLE_UNLOCK_NOTIFY",
152 #if SQLITE_ENABLE_UPDATE_DELETE_LIMIT
153 "ENABLE_UPDATE_DELETE_LIMIT",
158 #if HAVE_ISNAN || SQLITE_HAVE_ISNAN
161 #if SQLITE_HOMEGROWN_RECURSIVE_MUTEX
162 "HOMEGROWN_RECURSIVE_MUTEX",
164 #if SQLITE_IGNORE_AFP_LOCK_ERRORS
165 "IGNORE_AFP_LOCK_ERRORS",
167 #if SQLITE_IGNORE_FLOCK_LOCK_ERRORS
168 "IGNORE_FLOCK_LOCK_ERRORS",
170 #ifdef SQLITE_INT64_TYPE
173 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
174 "LIKE_DOESNT_MATCH_BLOBS",
176 #if SQLITE_LOCK_TRACE
179 #if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc)
180 "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE
),
182 #ifdef SQLITE_MAX_SCHEMA_RETRY
183 "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY
),
188 #if SQLITE_MIXED_ENDIAN_64BIT_FLOAT
189 "MIXED_ENDIAN_64BIT_FLOAT",
194 #if SQLITE_OMIT_ALTERTABLE
197 #if SQLITE_OMIT_ANALYZE
200 #if SQLITE_OMIT_ATTACH
203 #if SQLITE_OMIT_AUTHORIZATION
204 "OMIT_AUTHORIZATION",
206 #if SQLITE_OMIT_AUTOINCREMENT
207 "OMIT_AUTOINCREMENT",
209 #if SQLITE_OMIT_AUTOINIT
212 #if SQLITE_OMIT_AUTOMATIC_INDEX
213 "OMIT_AUTOMATIC_INDEX",
215 #if SQLITE_OMIT_AUTORESET
218 #if SQLITE_OMIT_AUTOVACUUM
221 #if SQLITE_OMIT_BETWEEN_OPTIMIZATION
222 "OMIT_BETWEEN_OPTIMIZATION",
224 #if SQLITE_OMIT_BLOB_LITERAL
227 #if SQLITE_OMIT_BTREECOUNT
230 #if SQLITE_OMIT_BUILTIN_TEST
236 #if SQLITE_OMIT_CHECK
239 #if SQLITE_OMIT_COMPLETE
242 #if SQLITE_OMIT_COMPOUND_SELECT
243 "OMIT_COMPOUND_SELECT",
248 #if SQLITE_OMIT_DATETIME_FUNCS
249 "OMIT_DATETIME_FUNCS",
251 #if SQLITE_OMIT_DECLTYPE
254 #if SQLITE_OMIT_DEPRECATED
257 #if SQLITE_OMIT_DISKIO
260 #if SQLITE_OMIT_EXPLAIN
263 #if SQLITE_OMIT_FLAG_PRAGMAS
266 #if SQLITE_OMIT_FLOATING_POINT
267 "OMIT_FLOATING_POINT",
269 #if SQLITE_OMIT_FOREIGN_KEY
272 #if SQLITE_OMIT_GET_TABLE
275 #if SQLITE_OMIT_INCRBLOB
278 #if SQLITE_OMIT_INTEGRITY_CHECK
279 "OMIT_INTEGRITY_CHECK",
281 #if SQLITE_OMIT_LIKE_OPTIMIZATION
282 "OMIT_LIKE_OPTIMIZATION",
284 #if SQLITE_OMIT_LOAD_EXTENSION
285 "OMIT_LOAD_EXTENSION",
287 #if SQLITE_OMIT_LOCALTIME
290 #if SQLITE_OMIT_LOOKASIDE
293 #if SQLITE_OMIT_MEMORYDB
296 #if SQLITE_OMIT_OR_OPTIMIZATION
297 "OMIT_OR_OPTIMIZATION",
299 #if SQLITE_OMIT_PAGER_PRAGMAS
300 "OMIT_PAGER_PRAGMAS",
302 #if SQLITE_OMIT_PRAGMA
305 #if SQLITE_OMIT_PROGRESS_CALLBACK
306 "OMIT_PROGRESS_CALLBACK",
308 #if SQLITE_OMIT_QUICKBALANCE
311 #if SQLITE_OMIT_REINDEX
314 #if SQLITE_OMIT_SCHEMA_PRAGMAS
315 "OMIT_SCHEMA_PRAGMAS",
317 #if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
318 "OMIT_SCHEMA_VERSION_PRAGMAS",
320 #if SQLITE_OMIT_SHARED_CACHE
323 #if SQLITE_OMIT_SUBQUERY
326 #if SQLITE_OMIT_TCL_VARIABLE
329 #if SQLITE_OMIT_TEMPDB
332 #if SQLITE_OMIT_TRACE
335 #if SQLITE_OMIT_TRIGGER
338 #if SQLITE_OMIT_TRUNCATE_OPTIMIZATION
339 "OMIT_TRUNCATE_OPTIMIZATION",
341 #if SQLITE_OMIT_UTF16
344 #if SQLITE_OMIT_VACUUM
350 #if SQLITE_OMIT_VIRTUALTABLE
359 #if SQLITE_OMIT_XFER_OPT
362 #if SQLITE_PERFORMANCE_TRACE
365 #if SQLITE_PROXY_DEBUG
368 #if SQLITE_RTREE_INT_ONLY
371 #if SQLITE_SECURE_DELETE
374 #if SQLITE_SMALL_STACK
380 #if SQLITE_SYSTEM_MALLOC
386 #if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc)
387 "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE
),
392 #if defined(SQLITE_THREADSAFE)
393 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE
),
395 #if SQLITE_USE_ALLOCA
398 #if SQLITE_USER_AUTHENTICATION
399 "USER_AUTHENTICATION",
401 #if SQLITE_WIN32_MALLOC
404 #if SQLITE_ZERO_MALLOC
410 ** Given the name of a compile-time option, return true if that option
411 ** was used and false if not.
413 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
414 ** is not required for a match.
416 int sqlite3_compileoption_used(const char *zOptName
){
419 #if SQLITE_ENABLE_API_ARMOR
421 (void)SQLITE_MISUSE_BKPT
;
425 if( sqlite3StrNICmp(zOptName
, "SQLITE_", 7)==0 ) zOptName
+= 7;
426 n
= sqlite3Strlen30(zOptName
);
428 /* Since ArraySize(azCompileOpt) is normally in single digits, a
429 ** linear search is adequate. No need for a binary search. */
430 for(i
=0; i
<ArraySize(azCompileOpt
); i
++){
431 if( sqlite3StrNICmp(zOptName
, azCompileOpt
[i
], n
)==0
432 && sqlite3IsIdChar((unsigned char)azCompileOpt
[i
][n
])==0
441 ** Return the N-th compile-time option string. If N is out of range,
442 ** return a NULL pointer.
444 const char *sqlite3_compileoption_get(int N
){
445 if( N
>=0 && N
<ArraySize(azCompileOpt
) ){
446 return azCompileOpt
[N
];
451 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */