blob: 59dc972d8dd534e5a7c3aed9e8d95483ffad5bb8 [file] [log] [blame]
shanehdc97a8c2010-02-23 20:08:35 +00001/*
2** 2010 February 23
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 implements routines used to report what compile-time options
14** SQLite was built with.
15*/
16
17#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
18
19#include "sqliteInt.h"
20
21/*
shaneh915c8bd2010-02-24 19:36:10 +000022** An array of names of all compile-time options. This array should
23** be sorted A-Z.
shanehdc97a8c2010-02-23 20:08:35 +000024**
25** This array looks large, but in a typical installation actually uses
shaneh915c8bd2010-02-24 19:36:10 +000026** only a handful of compile-time options, so most times this array is usually
shanehdc97a8c2010-02-23 20:08:35 +000027** rather short and uses little memory space.
28*/
29static const char * const azCompileOpt[] = {
shaneh915c8bd2010-02-24 19:36:10 +000030
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)
35
shanehdc97a8c2010-02-23 20:08:35 +000036#ifdef SQLITE_32BIT_ROWID
37 "32BIT_ROWID",
38#endif
39#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
40 "4_BYTE_ALIGNED_MALLOC",
41#endif
42#ifdef SQLITE_CASE_SENSITIVE_LIKE
43 "CASE_SENSITIVE_LIKE",
44#endif
45#ifdef SQLITE_CHECK_PAGES
46 "CHECK_PAGES",
47#endif
48#ifdef SQLITE_COVERAGE_TEST
49 "COVERAGE_TEST",
50#endif
51#ifdef SQLITE_DEBUG
52 "DEBUG",
53#endif
shaneh915c8bd2010-02-24 19:36:10 +000054#ifdef SQLITE_DEFAULT_LOCKING_MODE
55 "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE),
56#endif
drhd16d0bc2013-04-16 18:24:34 +000057#if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc)
drh9b4c59f2013-04-15 17:03:42 +000058 "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE),
drh34f74902013-04-03 13:09:18 +000059#endif
shanehdc97a8c2010-02-23 20:08:35 +000060#ifdef SQLITE_DISABLE_DIRSYNC
61 "DISABLE_DIRSYNC",
62#endif
63#ifdef SQLITE_DISABLE_LFS
64 "DISABLE_LFS",
65#endif
drh9ca95732014-10-24 00:35:58 +000066#ifdef SQLITE_ENABLE_API_ARMOR
67 "ENABLE_API_ARMOR",
68#endif
shanehdc97a8c2010-02-23 20:08:35 +000069#ifdef SQLITE_ENABLE_ATOMIC_WRITE
70 "ENABLE_ATOMIC_WRITE",
71#endif
72#ifdef SQLITE_ENABLE_CEROD
73 "ENABLE_CEROD",
74#endif
75#ifdef SQLITE_ENABLE_COLUMN_METADATA
76 "ENABLE_COLUMN_METADATA",
77#endif
78#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
79 "ENABLE_EXPENSIVE_ASSERT",
80#endif
81#ifdef SQLITE_ENABLE_FTS1
82 "ENABLE_FTS1",
83#endif
84#ifdef SQLITE_ENABLE_FTS2
85 "ENABLE_FTS2",
86#endif
87#ifdef SQLITE_ENABLE_FTS3
88 "ENABLE_FTS3",
89#endif
90#ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
91 "ENABLE_FTS3_PARENTHESIS",
92#endif
93#ifdef SQLITE_ENABLE_FTS4
94 "ENABLE_FTS4",
95#endif
96#ifdef SQLITE_ENABLE_ICU
97 "ENABLE_ICU",
98#endif
99#ifdef SQLITE_ENABLE_IOTRACE
100 "ENABLE_IOTRACE",
101#endif
102#ifdef SQLITE_ENABLE_LOAD_EXTENSION
103 "ENABLE_LOAD_EXTENSION",
104#endif
105#ifdef SQLITE_ENABLE_LOCKING_STYLE
shaneh915c8bd2010-02-24 19:36:10 +0000106 "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
shanehdc97a8c2010-02-23 20:08:35 +0000107#endif
108#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
109 "ENABLE_MEMORY_MANAGEMENT",
110#endif
111#ifdef SQLITE_ENABLE_MEMSYS3
112 "ENABLE_MEMSYS3",
113#endif
114#ifdef SQLITE_ENABLE_MEMSYS5
115 "ENABLE_MEMSYS5",
116#endif
117#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
118 "ENABLE_OVERSIZE_CELL_CHECK",
119#endif
120#ifdef SQLITE_ENABLE_RTREE
121 "ENABLE_RTREE",
122#endif
dan8ad169a2013-08-12 20:14:04 +0000123#if defined(SQLITE_ENABLE_STAT4)
danf52bb8d2013-08-03 20:24:58 +0000124 "ENABLE_STAT4",
dan8ad169a2013-08-12 20:14:04 +0000125#elif defined(SQLITE_ENABLE_STAT3)
126 "ENABLE_STAT3",
drhfaacf172011-08-12 01:51:45 +0000127#endif
shanehdc97a8c2010-02-23 20:08:35 +0000128#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
129 "ENABLE_UNLOCK_NOTIFY",
130#endif
131#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
132 "ENABLE_UPDATE_DELETE_LIMIT",
133#endif
134#ifdef SQLITE_HAS_CODEC
135 "HAS_CODEC",
136#endif
137#ifdef SQLITE_HAVE_ISNAN
138 "HAVE_ISNAN",
139#endif
140#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
141 "HOMEGROWN_RECURSIVE_MUTEX",
142#endif
143#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
144 "IGNORE_AFP_LOCK_ERRORS",
145#endif
146#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
147 "IGNORE_FLOCK_LOCK_ERRORS",
148#endif
149#ifdef SQLITE_INT64_TYPE
150 "INT64_TYPE",
151#endif
152#ifdef SQLITE_LOCK_TRACE
153 "LOCK_TRACE",
154#endif
drhd16d0bc2013-04-16 18:24:34 +0000155#if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc)
drh9b4c59f2013-04-15 17:03:42 +0000156 "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE),
157#endif
drh5a201fb2011-08-31 20:47:50 +0000158#ifdef SQLITE_MAX_SCHEMA_RETRY
159 "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY),
160#endif
shanehdc97a8c2010-02-23 20:08:35 +0000161#ifdef SQLITE_MEMDEBUG
162 "MEMDEBUG",
163#endif
164#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
165 "MIXED_ENDIAN_64BIT_FLOAT",
166#endif
167#ifdef SQLITE_NO_SYNC
168 "NO_SYNC",
169#endif
170#ifdef SQLITE_OMIT_ALTERTABLE
171 "OMIT_ALTERTABLE",
172#endif
173#ifdef SQLITE_OMIT_ANALYZE
174 "OMIT_ANALYZE",
175#endif
176#ifdef SQLITE_OMIT_ATTACH
177 "OMIT_ATTACH",
178#endif
179#ifdef SQLITE_OMIT_AUTHORIZATION
180 "OMIT_AUTHORIZATION",
181#endif
182#ifdef SQLITE_OMIT_AUTOINCREMENT
183 "OMIT_AUTOINCREMENT",
184#endif
185#ifdef SQLITE_OMIT_AUTOINIT
186 "OMIT_AUTOINIT",
187#endif
drhc6339082010-04-07 16:54:58 +0000188#ifdef SQLITE_OMIT_AUTOMATIC_INDEX
189 "OMIT_AUTOMATIC_INDEX",
190#endif
drh602acb42011-01-17 17:42:37 +0000191#ifdef SQLITE_OMIT_AUTORESET
192 "OMIT_AUTORESET",
193#endif
shanehdc97a8c2010-02-23 20:08:35 +0000194#ifdef SQLITE_OMIT_AUTOVACUUM
195 "OMIT_AUTOVACUUM",
196#endif
197#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
198 "OMIT_BETWEEN_OPTIMIZATION",
199#endif
200#ifdef SQLITE_OMIT_BLOB_LITERAL
201 "OMIT_BLOB_LITERAL",
202#endif
203#ifdef SQLITE_OMIT_BTREECOUNT
204 "OMIT_BTREECOUNT",
205#endif
206#ifdef SQLITE_OMIT_BUILTIN_TEST
207 "OMIT_BUILTIN_TEST",
208#endif
209#ifdef SQLITE_OMIT_CAST
210 "OMIT_CAST",
211#endif
212#ifdef SQLITE_OMIT_CHECK
213 "OMIT_CHECK",
214#endif
shanehdc97a8c2010-02-23 20:08:35 +0000215#ifdef SQLITE_OMIT_COMPLETE
216 "OMIT_COMPLETE",
217#endif
218#ifdef SQLITE_OMIT_COMPOUND_SELECT
219 "OMIT_COMPOUND_SELECT",
220#endif
dan03af2162014-03-05 17:29:34 +0000221#ifdef SQLITE_OMIT_CTE
222 "OMIT_CTE",
223#endif
shanehdc97a8c2010-02-23 20:08:35 +0000224#ifdef SQLITE_OMIT_DATETIME_FUNCS
225 "OMIT_DATETIME_FUNCS",
226#endif
227#ifdef SQLITE_OMIT_DECLTYPE
228 "OMIT_DECLTYPE",
229#endif
230#ifdef SQLITE_OMIT_DEPRECATED
231 "OMIT_DEPRECATED",
232#endif
233#ifdef SQLITE_OMIT_DISKIO
234 "OMIT_DISKIO",
235#endif
236#ifdef SQLITE_OMIT_EXPLAIN
237 "OMIT_EXPLAIN",
238#endif
239#ifdef SQLITE_OMIT_FLAG_PRAGMAS
240 "OMIT_FLAG_PRAGMAS",
241#endif
242#ifdef SQLITE_OMIT_FLOATING_POINT
243 "OMIT_FLOATING_POINT",
244#endif
245#ifdef SQLITE_OMIT_FOREIGN_KEY
246 "OMIT_FOREIGN_KEY",
247#endif
248#ifdef SQLITE_OMIT_GET_TABLE
249 "OMIT_GET_TABLE",
250#endif
shanehdc97a8c2010-02-23 20:08:35 +0000251#ifdef SQLITE_OMIT_INCRBLOB
252 "OMIT_INCRBLOB",
253#endif
254#ifdef SQLITE_OMIT_INTEGRITY_CHECK
255 "OMIT_INTEGRITY_CHECK",
256#endif
257#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
258 "OMIT_LIKE_OPTIMIZATION",
259#endif
260#ifdef SQLITE_OMIT_LOAD_EXTENSION
261 "OMIT_LOAD_EXTENSION",
262#endif
263#ifdef SQLITE_OMIT_LOCALTIME
264 "OMIT_LOCALTIME",
265#endif
266#ifdef SQLITE_OMIT_LOOKASIDE
267 "OMIT_LOOKASIDE",
268#endif
269#ifdef SQLITE_OMIT_MEMORYDB
270 "OMIT_MEMORYDB",
271#endif
272#ifdef SQLITE_OMIT_OR_OPTIMIZATION
273 "OMIT_OR_OPTIMIZATION",
274#endif
275#ifdef SQLITE_OMIT_PAGER_PRAGMAS
276 "OMIT_PAGER_PRAGMAS",
277#endif
278#ifdef SQLITE_OMIT_PRAGMA
279 "OMIT_PRAGMA",
280#endif
281#ifdef SQLITE_OMIT_PROGRESS_CALLBACK
282 "OMIT_PROGRESS_CALLBACK",
283#endif
284#ifdef SQLITE_OMIT_QUICKBALANCE
285 "OMIT_QUICKBALANCE",
286#endif
287#ifdef SQLITE_OMIT_REINDEX
288 "OMIT_REINDEX",
289#endif
290#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
291 "OMIT_SCHEMA_PRAGMAS",
292#endif
293#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
294 "OMIT_SCHEMA_VERSION_PRAGMAS",
295#endif
296#ifdef SQLITE_OMIT_SHARED_CACHE
297 "OMIT_SHARED_CACHE",
298#endif
299#ifdef SQLITE_OMIT_SUBQUERY
300 "OMIT_SUBQUERY",
301#endif
302#ifdef SQLITE_OMIT_TCL_VARIABLE
303 "OMIT_TCL_VARIABLE",
304#endif
305#ifdef SQLITE_OMIT_TEMPDB
306 "OMIT_TEMPDB",
307#endif
308#ifdef SQLITE_OMIT_TRACE
309 "OMIT_TRACE",
310#endif
311#ifdef SQLITE_OMIT_TRIGGER
312 "OMIT_TRIGGER",
313#endif
314#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
315 "OMIT_TRUNCATE_OPTIMIZATION",
316#endif
317#ifdef SQLITE_OMIT_UTF16
318 "OMIT_UTF16",
319#endif
320#ifdef SQLITE_OMIT_VACUUM
321 "OMIT_VACUUM",
322#endif
323#ifdef SQLITE_OMIT_VIEW
324 "OMIT_VIEW",
325#endif
326#ifdef SQLITE_OMIT_VIRTUALTABLE
327 "OMIT_VIRTUALTABLE",
328#endif
drh4d9a7bf2010-07-07 01:52:31 +0000329#ifdef SQLITE_OMIT_WAL
330 "OMIT_WAL",
331#endif
shanehdc97a8c2010-02-23 20:08:35 +0000332#ifdef SQLITE_OMIT_WSD
333 "OMIT_WSD",
334#endif
335#ifdef SQLITE_OMIT_XFER_OPT
336 "OMIT_XFER_OPT",
337#endif
338#ifdef SQLITE_PERFORMANCE_TRACE
339 "PERFORMANCE_TRACE",
340#endif
341#ifdef SQLITE_PROXY_DEBUG
342 "PROXY_DEBUG",
343#endif
drhdf324142012-09-13 12:10:55 +0000344#ifdef SQLITE_RTREE_INT_ONLY
345 "RTREE_INT_ONLY",
346#endif
shanehdc97a8c2010-02-23 20:08:35 +0000347#ifdef SQLITE_SECURE_DELETE
348 "SECURE_DELETE",
349#endif
350#ifdef SQLITE_SMALL_STACK
351 "SMALL_STACK",
352#endif
353#ifdef SQLITE_SOUNDEX
354 "SOUNDEX",
355#endif
mistachkin1fa85a12013-12-03 22:32:48 +0000356#ifdef SQLITE_SYSTEM_MALLOC
357 "SYSTEM_MALLOC",
358#endif
shanehdc97a8c2010-02-23 20:08:35 +0000359#ifdef SQLITE_TCL
360 "TCL",
361#endif
drhd16d0bc2013-04-16 18:24:34 +0000362#if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc)
shaneh915c8bd2010-02-24 19:36:10 +0000363 "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
364#endif
shanehdc97a8c2010-02-23 20:08:35 +0000365#ifdef SQLITE_TEST
366 "TEST",
367#endif
drhd16d0bc2013-04-16 18:24:34 +0000368#if defined(SQLITE_THREADSAFE)
shaneh915c8bd2010-02-24 19:36:10 +0000369 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
370#endif
shanehdc97a8c2010-02-23 20:08:35 +0000371#ifdef SQLITE_USE_ALLOCA
372 "USE_ALLOCA",
373#endif
drh09e60542014-09-10 22:46:46 +0000374#ifdef SQLITE_USER_AUTHENTICATION
375 "USER_AUTHENTICATION",
376#endif
mistachkin1fa85a12013-12-03 22:32:48 +0000377#ifdef SQLITE_WIN32_MALLOC
378 "WIN32_MALLOC",
379#endif
shanehdc97a8c2010-02-23 20:08:35 +0000380#ifdef SQLITE_ZERO_MALLOC
shaneh915c8bd2010-02-24 19:36:10 +0000381 "ZERO_MALLOC"
shanehdc97a8c2010-02-23 20:08:35 +0000382#endif
383};
384
385/*
386** Given the name of a compile-time option, return true if that option
387** was used and false if not.
388**
389** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
390** is not required for a match.
391*/
392int sqlite3_compileoption_used(const char *zOptName){
393 int i, n;
drh9ca95732014-10-24 00:35:58 +0000394
drh98d94212014-10-27 19:39:51 +0000395#ifdef SQLITE_ENABLE_API_ARMOR
drh9ca95732014-10-24 00:35:58 +0000396 if( zOptName==0 ){
397 (void)SQLITE_MISUSE_BKPT;
398 return 0;
399 }
400#endif
shanehdc97a8c2010-02-23 20:08:35 +0000401 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
402 n = sqlite3Strlen30(zOptName);
403
404 /* Since ArraySize(azCompileOpt) is normally in single digits, a
405 ** linear search is adequate. No need for a binary search. */
406 for(i=0; i<ArraySize(azCompileOpt); i++){
drhd16d0bc2013-04-16 18:24:34 +0000407 if( sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0
drh97348b32014-09-25 02:44:29 +0000408 && sqlite3IsIdChar((unsigned char)azCompileOpt[i][n])==0
drhd16d0bc2013-04-16 18:24:34 +0000409 ){
410 return 1;
411 }
shanehdc97a8c2010-02-23 20:08:35 +0000412 }
413 return 0;
414}
415
416/*
417** Return the N-th compile-time option string. If N is out of range,
418** return a NULL pointer.
419*/
drh380083c2010-02-23 20:32:15 +0000420const char *sqlite3_compileoption_get(int N){
shanehdc97a8c2010-02-23 20:08:35 +0000421 if( N>=0 && N<ArraySize(azCompileOpt) ){
422 return azCompileOpt[N];
423 }
424 return 0;
425}
426
427#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */