blob: e6af8f173aa24e8526634b5b95f8c640a0449319 [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
shanehdc97a8c2010-02-23 20:08:35 +000057#ifdef SQLITE_DISABLE_DIRSYNC
58 "DISABLE_DIRSYNC",
59#endif
60#ifdef SQLITE_DISABLE_LFS
61 "DISABLE_LFS",
62#endif
63#ifdef SQLITE_ENABLE_ATOMIC_WRITE
64 "ENABLE_ATOMIC_WRITE",
65#endif
66#ifdef SQLITE_ENABLE_CEROD
67 "ENABLE_CEROD",
68#endif
69#ifdef SQLITE_ENABLE_COLUMN_METADATA
70 "ENABLE_COLUMN_METADATA",
71#endif
72#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
73 "ENABLE_EXPENSIVE_ASSERT",
74#endif
75#ifdef SQLITE_ENABLE_FTS1
76 "ENABLE_FTS1",
77#endif
78#ifdef SQLITE_ENABLE_FTS2
79 "ENABLE_FTS2",
80#endif
81#ifdef SQLITE_ENABLE_FTS3
82 "ENABLE_FTS3",
83#endif
84#ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
85 "ENABLE_FTS3_PARENTHESIS",
86#endif
87#ifdef SQLITE_ENABLE_FTS4
88 "ENABLE_FTS4",
89#endif
90#ifdef SQLITE_ENABLE_ICU
91 "ENABLE_ICU",
92#endif
93#ifdef SQLITE_ENABLE_IOTRACE
94 "ENABLE_IOTRACE",
95#endif
96#ifdef SQLITE_ENABLE_LOAD_EXTENSION
97 "ENABLE_LOAD_EXTENSION",
98#endif
99#ifdef SQLITE_ENABLE_LOCKING_STYLE
shaneh915c8bd2010-02-24 19:36:10 +0000100 "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
shanehdc97a8c2010-02-23 20:08:35 +0000101#endif
102#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
103 "ENABLE_MEMORY_MANAGEMENT",
104#endif
105#ifdef SQLITE_ENABLE_MEMSYS3
106 "ENABLE_MEMSYS3",
107#endif
108#ifdef SQLITE_ENABLE_MEMSYS5
109 "ENABLE_MEMSYS5",
110#endif
111#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
112 "ENABLE_OVERSIZE_CELL_CHECK",
113#endif
114#ifdef SQLITE_ENABLE_RTREE
115 "ENABLE_RTREE",
116#endif
117#ifdef SQLITE_ENABLE_STAT2
118 "ENABLE_STAT2",
119#endif
120#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
121 "ENABLE_UNLOCK_NOTIFY",
122#endif
123#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
124 "ENABLE_UPDATE_DELETE_LIMIT",
125#endif
126#ifdef SQLITE_HAS_CODEC
127 "HAS_CODEC",
128#endif
129#ifdef SQLITE_HAVE_ISNAN
130 "HAVE_ISNAN",
131#endif
132#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
133 "HOMEGROWN_RECURSIVE_MUTEX",
134#endif
135#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
136 "IGNORE_AFP_LOCK_ERRORS",
137#endif
138#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
139 "IGNORE_FLOCK_LOCK_ERRORS",
140#endif
141#ifdef SQLITE_INT64_TYPE
142 "INT64_TYPE",
143#endif
144#ifdef SQLITE_LOCK_TRACE
145 "LOCK_TRACE",
146#endif
147#ifdef SQLITE_MEMDEBUG
148 "MEMDEBUG",
149#endif
150#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
151 "MIXED_ENDIAN_64BIT_FLOAT",
152#endif
153#ifdef SQLITE_NO_SYNC
154 "NO_SYNC",
155#endif
156#ifdef SQLITE_OMIT_ALTERTABLE
157 "OMIT_ALTERTABLE",
158#endif
159#ifdef SQLITE_OMIT_ANALYZE
160 "OMIT_ANALYZE",
161#endif
162#ifdef SQLITE_OMIT_ATTACH
163 "OMIT_ATTACH",
164#endif
165#ifdef SQLITE_OMIT_AUTHORIZATION
166 "OMIT_AUTHORIZATION",
167#endif
168#ifdef SQLITE_OMIT_AUTOINCREMENT
169 "OMIT_AUTOINCREMENT",
170#endif
171#ifdef SQLITE_OMIT_AUTOINIT
172 "OMIT_AUTOINIT",
173#endif
drhc6339082010-04-07 16:54:58 +0000174#ifdef SQLITE_OMIT_AUTOMATIC_INDEX
175 "OMIT_AUTOMATIC_INDEX",
176#endif
shanehdc97a8c2010-02-23 20:08:35 +0000177#ifdef SQLITE_OMIT_AUTOVACUUM
178 "OMIT_AUTOVACUUM",
179#endif
180#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
181 "OMIT_BETWEEN_OPTIMIZATION",
182#endif
183#ifdef SQLITE_OMIT_BLOB_LITERAL
184 "OMIT_BLOB_LITERAL",
185#endif
186#ifdef SQLITE_OMIT_BTREECOUNT
187 "OMIT_BTREECOUNT",
188#endif
189#ifdef SQLITE_OMIT_BUILTIN_TEST
190 "OMIT_BUILTIN_TEST",
191#endif
192#ifdef SQLITE_OMIT_CAST
193 "OMIT_CAST",
194#endif
195#ifdef SQLITE_OMIT_CHECK
196 "OMIT_CHECK",
197#endif
198#ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
199 "OMIT_COMPILEOPTION_DIAGS",
200#endif
201#ifdef SQLITE_OMIT_COMPLETE
202 "OMIT_COMPLETE",
203#endif
204#ifdef SQLITE_OMIT_COMPOUND_SELECT
205 "OMIT_COMPOUND_SELECT",
206#endif
207#ifdef SQLITE_OMIT_DATETIME_FUNCS
208 "OMIT_DATETIME_FUNCS",
209#endif
210#ifdef SQLITE_OMIT_DECLTYPE
211 "OMIT_DECLTYPE",
212#endif
213#ifdef SQLITE_OMIT_DEPRECATED
214 "OMIT_DEPRECATED",
215#endif
216#ifdef SQLITE_OMIT_DISKIO
217 "OMIT_DISKIO",
218#endif
219#ifdef SQLITE_OMIT_EXPLAIN
220 "OMIT_EXPLAIN",
221#endif
222#ifdef SQLITE_OMIT_FLAG_PRAGMAS
223 "OMIT_FLAG_PRAGMAS",
224#endif
225#ifdef SQLITE_OMIT_FLOATING_POINT
226 "OMIT_FLOATING_POINT",
227#endif
228#ifdef SQLITE_OMIT_FOREIGN_KEY
229 "OMIT_FOREIGN_KEY",
230#endif
231#ifdef SQLITE_OMIT_GET_TABLE
232 "OMIT_GET_TABLE",
233#endif
234#ifdef SQLITE_OMIT_GLOBALRECOVER
235 "OMIT_GLOBALRECOVER",
236#endif
237#ifdef SQLITE_OMIT_INCRBLOB
238 "OMIT_INCRBLOB",
239#endif
240#ifdef SQLITE_OMIT_INTEGRITY_CHECK
241 "OMIT_INTEGRITY_CHECK",
242#endif
243#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
244 "OMIT_LIKE_OPTIMIZATION",
245#endif
246#ifdef SQLITE_OMIT_LOAD_EXTENSION
247 "OMIT_LOAD_EXTENSION",
248#endif
249#ifdef SQLITE_OMIT_LOCALTIME
250 "OMIT_LOCALTIME",
251#endif
252#ifdef SQLITE_OMIT_LOOKASIDE
253 "OMIT_LOOKASIDE",
254#endif
255#ifdef SQLITE_OMIT_MEMORYDB
256 "OMIT_MEMORYDB",
257#endif
258#ifdef SQLITE_OMIT_OR_OPTIMIZATION
259 "OMIT_OR_OPTIMIZATION",
260#endif
261#ifdef SQLITE_OMIT_PAGER_PRAGMAS
262 "OMIT_PAGER_PRAGMAS",
263#endif
264#ifdef SQLITE_OMIT_PRAGMA
265 "OMIT_PRAGMA",
266#endif
267#ifdef SQLITE_OMIT_PROGRESS_CALLBACK
268 "OMIT_PROGRESS_CALLBACK",
269#endif
270#ifdef SQLITE_OMIT_QUICKBALANCE
271 "OMIT_QUICKBALANCE",
272#endif
273#ifdef SQLITE_OMIT_REINDEX
274 "OMIT_REINDEX",
275#endif
276#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
277 "OMIT_SCHEMA_PRAGMAS",
278#endif
279#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
280 "OMIT_SCHEMA_VERSION_PRAGMAS",
281#endif
282#ifdef SQLITE_OMIT_SHARED_CACHE
283 "OMIT_SHARED_CACHE",
284#endif
285#ifdef SQLITE_OMIT_SUBQUERY
286 "OMIT_SUBQUERY",
287#endif
288#ifdef SQLITE_OMIT_TCL_VARIABLE
289 "OMIT_TCL_VARIABLE",
290#endif
291#ifdef SQLITE_OMIT_TEMPDB
292 "OMIT_TEMPDB",
293#endif
294#ifdef SQLITE_OMIT_TRACE
295 "OMIT_TRACE",
296#endif
297#ifdef SQLITE_OMIT_TRIGGER
298 "OMIT_TRIGGER",
299#endif
300#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
301 "OMIT_TRUNCATE_OPTIMIZATION",
302#endif
303#ifdef SQLITE_OMIT_UTF16
304 "OMIT_UTF16",
305#endif
306#ifdef SQLITE_OMIT_VACUUM
307 "OMIT_VACUUM",
308#endif
309#ifdef SQLITE_OMIT_VIEW
310 "OMIT_VIEW",
311#endif
312#ifdef SQLITE_OMIT_VIRTUALTABLE
313 "OMIT_VIRTUALTABLE",
314#endif
315#ifdef SQLITE_OMIT_WSD
316 "OMIT_WSD",
317#endif
318#ifdef SQLITE_OMIT_XFER_OPT
319 "OMIT_XFER_OPT",
320#endif
321#ifdef SQLITE_PERFORMANCE_TRACE
322 "PERFORMANCE_TRACE",
323#endif
324#ifdef SQLITE_PROXY_DEBUG
325 "PROXY_DEBUG",
326#endif
327#ifdef SQLITE_SECURE_DELETE
328 "SECURE_DELETE",
329#endif
330#ifdef SQLITE_SMALL_STACK
331 "SMALL_STACK",
332#endif
333#ifdef SQLITE_SOUNDEX
334 "SOUNDEX",
335#endif
336#ifdef SQLITE_TCL
337 "TCL",
338#endif
shaneh915c8bd2010-02-24 19:36:10 +0000339#ifdef SQLITE_TEMP_STORE
340 "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
341#endif
shanehdc97a8c2010-02-23 20:08:35 +0000342#ifdef SQLITE_TEST
343 "TEST",
344#endif
shaneh915c8bd2010-02-24 19:36:10 +0000345#ifdef SQLITE_THREADSAFE
346 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
347#endif
shanehdc97a8c2010-02-23 20:08:35 +0000348#ifdef SQLITE_USE_ALLOCA
349 "USE_ALLOCA",
350#endif
351#ifdef SQLITE_ZERO_MALLOC
shaneh915c8bd2010-02-24 19:36:10 +0000352 "ZERO_MALLOC"
shanehdc97a8c2010-02-23 20:08:35 +0000353#endif
354};
355
356/*
357** Given the name of a compile-time option, return true if that option
358** was used and false if not.
359**
360** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
361** is not required for a match.
362*/
363int sqlite3_compileoption_used(const char *zOptName){
364 int i, n;
365 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
366 n = sqlite3Strlen30(zOptName);
367
368 /* Since ArraySize(azCompileOpt) is normally in single digits, a
369 ** linear search is adequate. No need for a binary search. */
370 for(i=0; i<ArraySize(azCompileOpt); i++){
shaneh915c8bd2010-02-24 19:36:10 +0000371 if( (sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0)
372 && ( (azCompileOpt[i][n]==0) || (azCompileOpt[i][n]=='=') ) ) return 1;
shanehdc97a8c2010-02-23 20:08:35 +0000373 }
374 return 0;
375}
376
377/*
378** Return the N-th compile-time option string. If N is out of range,
379** return a NULL pointer.
380*/
drh380083c2010-02-23 20:32:15 +0000381const char *sqlite3_compileoption_get(int N){
shanehdc97a8c2010-02-23 20:08:35 +0000382 if( N>=0 && N<ArraySize(azCompileOpt) ){
383 return azCompileOpt[N];
384 }
385 return 0;
386}
387
388#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */