OLD | NEW |
| (Empty) |
1 /* | |
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. This array should | |
23 ** be sorted A-Z. | |
24 ** | |
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. | |
28 */ | |
29 static const char * const azCompileOpt[] = { | |
30 | |
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 | |
36 #if SQLITE_32BIT_ROWID | |
37 "32BIT_ROWID", | |
38 #endif | |
39 #if SQLITE_4_BYTE_ALIGNED_MALLOC | |
40 "4_BYTE_ALIGNED_MALLOC", | |
41 #endif | |
42 #if SQLITE_CASE_SENSITIVE_LIKE | |
43 "CASE_SENSITIVE_LIKE", | |
44 #endif | |
45 #if SQLITE_CHECK_PAGES | |
46 "CHECK_PAGES", | |
47 #endif | |
48 #if SQLITE_COVERAGE_TEST | |
49 "COVERAGE_TEST", | |
50 #endif | |
51 #if SQLITE_DEBUG | |
52 "DEBUG", | |
53 #endif | |
54 #if SQLITE_DEFAULT_LOCKING_MODE | |
55 "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), | |
56 #endif | |
57 #if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc) | |
58 "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE), | |
59 #endif | |
60 #if SQLITE_DISABLE_DIRSYNC | |
61 "DISABLE_DIRSYNC", | |
62 #endif | |
63 #if SQLITE_DISABLE_LFS | |
64 "DISABLE_LFS", | |
65 #endif | |
66 #if SQLITE_ENABLE_8_3_NAMES | |
67 "ENABLE_8_3_NAMES", | |
68 #endif | |
69 #if SQLITE_ENABLE_API_ARMOR | |
70 "ENABLE_API_ARMOR", | |
71 #endif | |
72 #if SQLITE_ENABLE_ATOMIC_WRITE | |
73 "ENABLE_ATOMIC_WRITE", | |
74 #endif | |
75 #if SQLITE_ENABLE_CEROD | |
76 "ENABLE_CEROD", | |
77 #endif | |
78 #if SQLITE_ENABLE_COLUMN_METADATA | |
79 "ENABLE_COLUMN_METADATA", | |
80 #endif | |
81 #if SQLITE_ENABLE_DBSTAT_VTAB | |
82 "ENABLE_DBSTAT_VTAB", | |
83 #endif | |
84 #if SQLITE_ENABLE_EXPENSIVE_ASSERT | |
85 "ENABLE_EXPENSIVE_ASSERT", | |
86 #endif | |
87 #if SQLITE_ENABLE_FTS1 | |
88 "ENABLE_FTS1", | |
89 #endif | |
90 #if SQLITE_ENABLE_FTS2 | |
91 "ENABLE_FTS2", | |
92 #endif | |
93 #if SQLITE_ENABLE_FTS3 | |
94 "ENABLE_FTS3", | |
95 #endif | |
96 #if SQLITE_ENABLE_FTS3_PARENTHESIS | |
97 "ENABLE_FTS3_PARENTHESIS", | |
98 #endif | |
99 #if SQLITE_ENABLE_FTS4 | |
100 "ENABLE_FTS4", | |
101 #endif | |
102 #if SQLITE_ENABLE_FTS5 | |
103 "ENABLE_FTS5", | |
104 #endif | |
105 #if SQLITE_ENABLE_ICU | |
106 "ENABLE_ICU", | |
107 #endif | |
108 #if SQLITE_ENABLE_IOTRACE | |
109 "ENABLE_IOTRACE", | |
110 #endif | |
111 #if SQLITE_ENABLE_JSON1 | |
112 "ENABLE_JSON1", | |
113 #endif | |
114 #if SQLITE_ENABLE_LOAD_EXTENSION | |
115 "ENABLE_LOAD_EXTENSION", | |
116 #endif | |
117 #if SQLITE_ENABLE_LOCKING_STYLE | |
118 "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), | |
119 #endif | |
120 #if SQLITE_ENABLE_MEMORY_MANAGEMENT | |
121 "ENABLE_MEMORY_MANAGEMENT", | |
122 #endif | |
123 #if SQLITE_ENABLE_MEMSYS3 | |
124 "ENABLE_MEMSYS3", | |
125 #endif | |
126 #if SQLITE_ENABLE_MEMSYS5 | |
127 "ENABLE_MEMSYS5", | |
128 #endif | |
129 #if SQLITE_ENABLE_OVERSIZE_CELL_CHECK | |
130 "ENABLE_OVERSIZE_CELL_CHECK", | |
131 #endif | |
132 #if SQLITE_ENABLE_RTREE | |
133 "ENABLE_RTREE", | |
134 #endif | |
135 #if defined(SQLITE_ENABLE_STAT4) | |
136 "ENABLE_STAT4", | |
137 #elif defined(SQLITE_ENABLE_STAT3) | |
138 "ENABLE_STAT3", | |
139 #endif | |
140 #if SQLITE_ENABLE_UNLOCK_NOTIFY | |
141 "ENABLE_UNLOCK_NOTIFY", | |
142 #endif | |
143 #if SQLITE_ENABLE_UPDATE_DELETE_LIMIT | |
144 "ENABLE_UPDATE_DELETE_LIMIT", | |
145 #endif | |
146 #if SQLITE_HAS_CODEC | |
147 "HAS_CODEC", | |
148 #endif | |
149 #if HAVE_ISNAN || SQLITE_HAVE_ISNAN | |
150 "HAVE_ISNAN", | |
151 #endif | |
152 #if SQLITE_HOMEGROWN_RECURSIVE_MUTEX | |
153 "HOMEGROWN_RECURSIVE_MUTEX", | |
154 #endif | |
155 #if SQLITE_IGNORE_AFP_LOCK_ERRORS | |
156 "IGNORE_AFP_LOCK_ERRORS", | |
157 #endif | |
158 #if SQLITE_IGNORE_FLOCK_LOCK_ERRORS | |
159 "IGNORE_FLOCK_LOCK_ERRORS", | |
160 #endif | |
161 #ifdef SQLITE_INT64_TYPE | |
162 "INT64_TYPE", | |
163 #endif | |
164 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS | |
165 "LIKE_DOESNT_MATCH_BLOBS", | |
166 #endif | |
167 #if SQLITE_LOCK_TRACE | |
168 "LOCK_TRACE", | |
169 #endif | |
170 #if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc) | |
171 "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE), | |
172 #endif | |
173 #ifdef SQLITE_MAX_SCHEMA_RETRY | |
174 "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), | |
175 #endif | |
176 #if SQLITE_MEMDEBUG | |
177 "MEMDEBUG", | |
178 #endif | |
179 #if SQLITE_MIXED_ENDIAN_64BIT_FLOAT | |
180 "MIXED_ENDIAN_64BIT_FLOAT", | |
181 #endif | |
182 #if SQLITE_NO_SYNC | |
183 "NO_SYNC", | |
184 #endif | |
185 #if SQLITE_OMIT_ALTERTABLE | |
186 "OMIT_ALTERTABLE", | |
187 #endif | |
188 #if SQLITE_OMIT_ANALYZE | |
189 "OMIT_ANALYZE", | |
190 #endif | |
191 #if SQLITE_OMIT_ATTACH | |
192 "OMIT_ATTACH", | |
193 #endif | |
194 #if SQLITE_OMIT_AUTHORIZATION | |
195 "OMIT_AUTHORIZATION", | |
196 #endif | |
197 #if SQLITE_OMIT_AUTOINCREMENT | |
198 "OMIT_AUTOINCREMENT", | |
199 #endif | |
200 #if SQLITE_OMIT_AUTOINIT | |
201 "OMIT_AUTOINIT", | |
202 #endif | |
203 #if SQLITE_OMIT_AUTOMATIC_INDEX | |
204 "OMIT_AUTOMATIC_INDEX", | |
205 #endif | |
206 #if SQLITE_OMIT_AUTORESET | |
207 "OMIT_AUTORESET", | |
208 #endif | |
209 #if SQLITE_OMIT_AUTOVACUUM | |
210 "OMIT_AUTOVACUUM", | |
211 #endif | |
212 #if SQLITE_OMIT_BETWEEN_OPTIMIZATION | |
213 "OMIT_BETWEEN_OPTIMIZATION", | |
214 #endif | |
215 #if SQLITE_OMIT_BLOB_LITERAL | |
216 "OMIT_BLOB_LITERAL", | |
217 #endif | |
218 #if SQLITE_OMIT_BTREECOUNT | |
219 "OMIT_BTREECOUNT", | |
220 #endif | |
221 #if SQLITE_OMIT_BUILTIN_TEST | |
222 "OMIT_BUILTIN_TEST", | |
223 #endif | |
224 #if SQLITE_OMIT_CAST | |
225 "OMIT_CAST", | |
226 #endif | |
227 #if SQLITE_OMIT_CHECK | |
228 "OMIT_CHECK", | |
229 #endif | |
230 #if SQLITE_OMIT_COMPLETE | |
231 "OMIT_COMPLETE", | |
232 #endif | |
233 #if SQLITE_OMIT_COMPOUND_SELECT | |
234 "OMIT_COMPOUND_SELECT", | |
235 #endif | |
236 #if SQLITE_OMIT_CTE | |
237 "OMIT_CTE", | |
238 #endif | |
239 #if SQLITE_OMIT_DATETIME_FUNCS | |
240 "OMIT_DATETIME_FUNCS", | |
241 #endif | |
242 #if SQLITE_OMIT_DECLTYPE | |
243 "OMIT_DECLTYPE", | |
244 #endif | |
245 #if SQLITE_OMIT_DEPRECATED | |
246 "OMIT_DEPRECATED", | |
247 #endif | |
248 #if SQLITE_OMIT_DISKIO | |
249 "OMIT_DISKIO", | |
250 #endif | |
251 #if SQLITE_OMIT_EXPLAIN | |
252 "OMIT_EXPLAIN", | |
253 #endif | |
254 #if SQLITE_OMIT_FLAG_PRAGMAS | |
255 "OMIT_FLAG_PRAGMAS", | |
256 #endif | |
257 #if SQLITE_OMIT_FLOATING_POINT | |
258 "OMIT_FLOATING_POINT", | |
259 #endif | |
260 #if SQLITE_OMIT_FOREIGN_KEY | |
261 "OMIT_FOREIGN_KEY", | |
262 #endif | |
263 #if SQLITE_OMIT_GET_TABLE | |
264 "OMIT_GET_TABLE", | |
265 #endif | |
266 #if SQLITE_OMIT_INCRBLOB | |
267 "OMIT_INCRBLOB", | |
268 #endif | |
269 #if SQLITE_OMIT_INTEGRITY_CHECK | |
270 "OMIT_INTEGRITY_CHECK", | |
271 #endif | |
272 #if SQLITE_OMIT_LIKE_OPTIMIZATION | |
273 "OMIT_LIKE_OPTIMIZATION", | |
274 #endif | |
275 #if SQLITE_OMIT_LOAD_EXTENSION | |
276 "OMIT_LOAD_EXTENSION", | |
277 #endif | |
278 #if SQLITE_OMIT_LOCALTIME | |
279 "OMIT_LOCALTIME", | |
280 #endif | |
281 #if SQLITE_OMIT_LOOKASIDE | |
282 "OMIT_LOOKASIDE", | |
283 #endif | |
284 #if SQLITE_OMIT_MEMORYDB | |
285 "OMIT_MEMORYDB", | |
286 #endif | |
287 #if SQLITE_OMIT_OR_OPTIMIZATION | |
288 "OMIT_OR_OPTIMIZATION", | |
289 #endif | |
290 #if SQLITE_OMIT_PAGER_PRAGMAS | |
291 "OMIT_PAGER_PRAGMAS", | |
292 #endif | |
293 #if SQLITE_OMIT_PRAGMA | |
294 "OMIT_PRAGMA", | |
295 #endif | |
296 #if SQLITE_OMIT_PROGRESS_CALLBACK | |
297 "OMIT_PROGRESS_CALLBACK", | |
298 #endif | |
299 #if SQLITE_OMIT_QUICKBALANCE | |
300 "OMIT_QUICKBALANCE", | |
301 #endif | |
302 #if SQLITE_OMIT_REINDEX | |
303 "OMIT_REINDEX", | |
304 #endif | |
305 #if SQLITE_OMIT_SCHEMA_PRAGMAS | |
306 "OMIT_SCHEMA_PRAGMAS", | |
307 #endif | |
308 #if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS | |
309 "OMIT_SCHEMA_VERSION_PRAGMAS", | |
310 #endif | |
311 #if SQLITE_OMIT_SHARED_CACHE | |
312 "OMIT_SHARED_CACHE", | |
313 #endif | |
314 #if SQLITE_OMIT_SUBQUERY | |
315 "OMIT_SUBQUERY", | |
316 #endif | |
317 #if SQLITE_OMIT_TCL_VARIABLE | |
318 "OMIT_TCL_VARIABLE", | |
319 #endif | |
320 #if SQLITE_OMIT_TEMPDB | |
321 "OMIT_TEMPDB", | |
322 #endif | |
323 #if SQLITE_OMIT_TRACE | |
324 "OMIT_TRACE", | |
325 #endif | |
326 #if SQLITE_OMIT_TRIGGER | |
327 "OMIT_TRIGGER", | |
328 #endif | |
329 #if SQLITE_OMIT_TRUNCATE_OPTIMIZATION | |
330 "OMIT_TRUNCATE_OPTIMIZATION", | |
331 #endif | |
332 #if SQLITE_OMIT_UTF16 | |
333 "OMIT_UTF16", | |
334 #endif | |
335 #if SQLITE_OMIT_VACUUM | |
336 "OMIT_VACUUM", | |
337 #endif | |
338 #if SQLITE_OMIT_VIEW | |
339 "OMIT_VIEW", | |
340 #endif | |
341 #if SQLITE_OMIT_VIRTUALTABLE | |
342 "OMIT_VIRTUALTABLE", | |
343 #endif | |
344 #if SQLITE_OMIT_WAL | |
345 "OMIT_WAL", | |
346 #endif | |
347 #if SQLITE_OMIT_WSD | |
348 "OMIT_WSD", | |
349 #endif | |
350 #if SQLITE_OMIT_XFER_OPT | |
351 "OMIT_XFER_OPT", | |
352 #endif | |
353 #if SQLITE_PERFORMANCE_TRACE | |
354 "PERFORMANCE_TRACE", | |
355 #endif | |
356 #if SQLITE_PROXY_DEBUG | |
357 "PROXY_DEBUG", | |
358 #endif | |
359 #if SQLITE_RTREE_INT_ONLY | |
360 "RTREE_INT_ONLY", | |
361 #endif | |
362 #if SQLITE_SECURE_DELETE | |
363 "SECURE_DELETE", | |
364 #endif | |
365 #if SQLITE_SMALL_STACK | |
366 "SMALL_STACK", | |
367 #endif | |
368 #if SQLITE_SOUNDEX | |
369 "SOUNDEX", | |
370 #endif | |
371 #if SQLITE_SYSTEM_MALLOC | |
372 "SYSTEM_MALLOC", | |
373 #endif | |
374 #if SQLITE_TCL | |
375 "TCL", | |
376 #endif | |
377 #if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc) | |
378 "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), | |
379 #endif | |
380 #if SQLITE_TEST | |
381 "TEST", | |
382 #endif | |
383 #if defined(SQLITE_THREADSAFE) | |
384 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), | |
385 #endif | |
386 #if SQLITE_USE_ALLOCA | |
387 "USE_ALLOCA", | |
388 #endif | |
389 #if SQLITE_USER_AUTHENTICATION | |
390 "USER_AUTHENTICATION", | |
391 #endif | |
392 #if SQLITE_WIN32_MALLOC | |
393 "WIN32_MALLOC", | |
394 #endif | |
395 #if SQLITE_ZERO_MALLOC | |
396 "ZERO_MALLOC" | |
397 #endif | |
398 }; | |
399 | |
400 /* | |
401 ** Given the name of a compile-time option, return true if that option | |
402 ** was used and false if not. | |
403 ** | |
404 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix | |
405 ** is not required for a match. | |
406 */ | |
407 int sqlite3_compileoption_used(const char *zOptName){ | |
408 int i, n; | |
409 | |
410 #if SQLITE_ENABLE_API_ARMOR | |
411 if( zOptName==0 ){ | |
412 (void)SQLITE_MISUSE_BKPT; | |
413 return 0; | |
414 } | |
415 #endif | |
416 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7; | |
417 n = sqlite3Strlen30(zOptName); | |
418 | |
419 /* Since ArraySize(azCompileOpt) is normally in single digits, a | |
420 ** linear search is adequate. No need for a binary search. */ | |
421 for(i=0; i<ArraySize(azCompileOpt); i++){ | |
422 if( sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0 | |
423 && sqlite3IsIdChar((unsigned char)azCompileOpt[i][n])==0 | |
424 ){ | |
425 return 1; | |
426 } | |
427 } | |
428 return 0; | |
429 } | |
430 | |
431 /* | |
432 ** Return the N-th compile-time option string. If N is out of range, | |
433 ** return a NULL pointer. | |
434 */ | |
435 const char *sqlite3_compileoption_get(int N){ | |
436 if( N>=0 && N<ArraySize(azCompileOpt) ){ | |
437 return azCompileOpt[N]; | |
438 } | |
439 return 0; | |
440 } | |
441 | |
442 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ | |
OLD | NEW |