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