xref: /sqlite-3.40.0/src/ctime.c (revision b43be55e)
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_API_ARMOR
67   "ENABLE_API_ARMOR",
68 #endif
69 #if SQLITE_ENABLE_ATOMIC_WRITE
70   "ENABLE_ATOMIC_WRITE",
71 #endif
72 #if SQLITE_ENABLE_CEROD
73   "ENABLE_CEROD",
74 #endif
75 #if SQLITE_ENABLE_COLUMN_METADATA
76   "ENABLE_COLUMN_METADATA",
77 #endif
78 #if SQLITE_ENABLE_EXPENSIVE_ASSERT
79   "ENABLE_EXPENSIVE_ASSERT",
80 #endif
81 #if SQLITE_ENABLE_FTS1
82   "ENABLE_FTS1",
83 #endif
84 #if SQLITE_ENABLE_FTS2
85   "ENABLE_FTS2",
86 #endif
87 #if SQLITE_ENABLE_FTS3
88   "ENABLE_FTS3",
89 #endif
90 #if SQLITE_ENABLE_FTS3_PARENTHESIS
91   "ENABLE_FTS3_PARENTHESIS",
92 #endif
93 #if SQLITE_ENABLE_FTS4
94   "ENABLE_FTS4",
95 #endif
96 #if SQLITE_ENABLE_ICU
97   "ENABLE_ICU",
98 #endif
99 #if SQLITE_ENABLE_IOTRACE
100   "ENABLE_IOTRACE",
101 #endif
102 #if SQLITE_ENABLE_LOAD_EXTENSION
103   "ENABLE_LOAD_EXTENSION",
104 #endif
105 #if SQLITE_ENABLE_LOCKING_STYLE
106   "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
107 #endif
108 #if SQLITE_ENABLE_MEMORY_MANAGEMENT
109   "ENABLE_MEMORY_MANAGEMENT",
110 #endif
111 #if SQLITE_ENABLE_MEMSYS3
112   "ENABLE_MEMSYS3",
113 #endif
114 #if SQLITE_ENABLE_MEMSYS5
115   "ENABLE_MEMSYS5",
116 #endif
117 #if SQLITE_ENABLE_OVERSIZE_CELL_CHECK
118   "ENABLE_OVERSIZE_CELL_CHECK",
119 #endif
120 #if SQLITE_ENABLE_RTREE
121   "ENABLE_RTREE",
122 #endif
123 #if defined(SQLITE_ENABLE_STAT4)
124   "ENABLE_STAT4",
125 #elif defined(SQLITE_ENABLE_STAT3)
126   "ENABLE_STAT3",
127 #endif
128 #if SQLITE_ENABLE_UNLOCK_NOTIFY
129   "ENABLE_UNLOCK_NOTIFY",
130 #endif
131 #if SQLITE_ENABLE_UPDATE_DELETE_LIMIT
132   "ENABLE_UPDATE_DELETE_LIMIT",
133 #endif
134 #if SQLITE_HAS_CODEC
135   "HAS_CODEC",
136 #endif
137 #if HAVE_ISNAN || SQLITE_HAVE_ISNAN
138   "HAVE_ISNAN",
139 #endif
140 #if SQLITE_HOMEGROWN_RECURSIVE_MUTEX
141   "HOMEGROWN_RECURSIVE_MUTEX",
142 #endif
143 #if SQLITE_IGNORE_AFP_LOCK_ERRORS
144   "IGNORE_AFP_LOCK_ERRORS",
145 #endif
146 #if SQLITE_IGNORE_FLOCK_LOCK_ERRORS
147   "IGNORE_FLOCK_LOCK_ERRORS",
148 #endif
149 #ifdef SQLITE_INT64_TYPE
150   "INT64_TYPE",
151 #endif
152 #if SQLITE_LOCK_TRACE
153   "LOCK_TRACE",
154 #endif
155 #if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc)
156   "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE),
157 #endif
158 #ifdef SQLITE_MAX_SCHEMA_RETRY
159   "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY),
160 #endif
161 #if SQLITE_MEMDEBUG
162   "MEMDEBUG",
163 #endif
164 #if SQLITE_MIXED_ENDIAN_64BIT_FLOAT
165   "MIXED_ENDIAN_64BIT_FLOAT",
166 #endif
167 #if SQLITE_NO_SYNC
168   "NO_SYNC",
169 #endif
170 #if SQLITE_OMIT_ALTERTABLE
171   "OMIT_ALTERTABLE",
172 #endif
173 #if SQLITE_OMIT_ANALYZE
174   "OMIT_ANALYZE",
175 #endif
176 #if SQLITE_OMIT_ATTACH
177   "OMIT_ATTACH",
178 #endif
179 #if SQLITE_OMIT_AUTHORIZATION
180   "OMIT_AUTHORIZATION",
181 #endif
182 #if SQLITE_OMIT_AUTOINCREMENT
183   "OMIT_AUTOINCREMENT",
184 #endif
185 #if SQLITE_OMIT_AUTOINIT
186   "OMIT_AUTOINIT",
187 #endif
188 #if SQLITE_OMIT_AUTOMATIC_INDEX
189   "OMIT_AUTOMATIC_INDEX",
190 #endif
191 #if SQLITE_OMIT_AUTORESET
192   "OMIT_AUTORESET",
193 #endif
194 #if SQLITE_OMIT_AUTOVACUUM
195   "OMIT_AUTOVACUUM",
196 #endif
197 #if SQLITE_OMIT_BETWEEN_OPTIMIZATION
198   "OMIT_BETWEEN_OPTIMIZATION",
199 #endif
200 #if SQLITE_OMIT_BLOB_LITERAL
201   "OMIT_BLOB_LITERAL",
202 #endif
203 #if SQLITE_OMIT_BTREECOUNT
204   "OMIT_BTREECOUNT",
205 #endif
206 #if SQLITE_OMIT_BUILTIN_TEST
207   "OMIT_BUILTIN_TEST",
208 #endif
209 #if SQLITE_OMIT_CAST
210   "OMIT_CAST",
211 #endif
212 #if SQLITE_OMIT_CHECK
213   "OMIT_CHECK",
214 #endif
215 #if SQLITE_OMIT_COMPLETE
216   "OMIT_COMPLETE",
217 #endif
218 #if SQLITE_OMIT_COMPOUND_SELECT
219   "OMIT_COMPOUND_SELECT",
220 #endif
221 #if SQLITE_OMIT_CTE
222   "OMIT_CTE",
223 #endif
224 #if SQLITE_OMIT_DATETIME_FUNCS
225   "OMIT_DATETIME_FUNCS",
226 #endif
227 #if SQLITE_OMIT_DECLTYPE
228   "OMIT_DECLTYPE",
229 #endif
230 #if SQLITE_OMIT_DEPRECATED
231   "OMIT_DEPRECATED",
232 #endif
233 #if SQLITE_OMIT_DISKIO
234   "OMIT_DISKIO",
235 #endif
236 #if SQLITE_OMIT_EXPLAIN
237   "OMIT_EXPLAIN",
238 #endif
239 #if SQLITE_OMIT_FLAG_PRAGMAS
240   "OMIT_FLAG_PRAGMAS",
241 #endif
242 #if SQLITE_OMIT_FLOATING_POINT
243   "OMIT_FLOATING_POINT",
244 #endif
245 #if SQLITE_OMIT_FOREIGN_KEY
246   "OMIT_FOREIGN_KEY",
247 #endif
248 #if SQLITE_OMIT_GET_TABLE
249   "OMIT_GET_TABLE",
250 #endif
251 #if SQLITE_OMIT_INCRBLOB
252   "OMIT_INCRBLOB",
253 #endif
254 #if SQLITE_OMIT_INTEGRITY_CHECK
255   "OMIT_INTEGRITY_CHECK",
256 #endif
257 #if SQLITE_OMIT_LIKE_OPTIMIZATION
258   "OMIT_LIKE_OPTIMIZATION",
259 #endif
260 #if SQLITE_OMIT_LOAD_EXTENSION
261   "OMIT_LOAD_EXTENSION",
262 #endif
263 #if SQLITE_OMIT_LOCALTIME
264   "OMIT_LOCALTIME",
265 #endif
266 #if SQLITE_OMIT_LOOKASIDE
267   "OMIT_LOOKASIDE",
268 #endif
269 #if SQLITE_OMIT_MEMORYDB
270   "OMIT_MEMORYDB",
271 #endif
272 #if SQLITE_OMIT_OR_OPTIMIZATION
273   "OMIT_OR_OPTIMIZATION",
274 #endif
275 #if SQLITE_OMIT_PAGER_PRAGMAS
276   "OMIT_PAGER_PRAGMAS",
277 #endif
278 #if SQLITE_OMIT_PRAGMA
279   "OMIT_PRAGMA",
280 #endif
281 #if SQLITE_OMIT_PROGRESS_CALLBACK
282   "OMIT_PROGRESS_CALLBACK",
283 #endif
284 #if SQLITE_OMIT_QUICKBALANCE
285   "OMIT_QUICKBALANCE",
286 #endif
287 #if SQLITE_OMIT_REINDEX
288   "OMIT_REINDEX",
289 #endif
290 #if SQLITE_OMIT_SCHEMA_PRAGMAS
291   "OMIT_SCHEMA_PRAGMAS",
292 #endif
293 #if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
294   "OMIT_SCHEMA_VERSION_PRAGMAS",
295 #endif
296 #if SQLITE_OMIT_SHARED_CACHE
297   "OMIT_SHARED_CACHE",
298 #endif
299 #if SQLITE_OMIT_SUBQUERY
300   "OMIT_SUBQUERY",
301 #endif
302 #if SQLITE_OMIT_TCL_VARIABLE
303   "OMIT_TCL_VARIABLE",
304 #endif
305 #if SQLITE_OMIT_TEMPDB
306   "OMIT_TEMPDB",
307 #endif
308 #if SQLITE_OMIT_TRACE
309   "OMIT_TRACE",
310 #endif
311 #if SQLITE_OMIT_TRIGGER
312   "OMIT_TRIGGER",
313 #endif
314 #if SQLITE_OMIT_TRUNCATE_OPTIMIZATION
315   "OMIT_TRUNCATE_OPTIMIZATION",
316 #endif
317 #if SQLITE_OMIT_UTF16
318   "OMIT_UTF16",
319 #endif
320 #if SQLITE_OMIT_VACUUM
321   "OMIT_VACUUM",
322 #endif
323 #if SQLITE_OMIT_VIEW
324   "OMIT_VIEW",
325 #endif
326 #if SQLITE_OMIT_VIRTUALTABLE
327   "OMIT_VIRTUALTABLE",
328 #endif
329 #if SQLITE_OMIT_WAL
330   "OMIT_WAL",
331 #endif
332 #if SQLITE_OMIT_WSD
333   "OMIT_WSD",
334 #endif
335 #if SQLITE_OMIT_XFER_OPT
336   "OMIT_XFER_OPT",
337 #endif
338 #if SQLITE_PERFORMANCE_TRACE
339   "PERFORMANCE_TRACE",
340 #endif
341 #if SQLITE_PROXY_DEBUG
342   "PROXY_DEBUG",
343 #endif
344 #if SQLITE_RTREE_INT_ONLY
345   "RTREE_INT_ONLY",
346 #endif
347 #if SQLITE_SECURE_DELETE
348   "SECURE_DELETE",
349 #endif
350 #if SQLITE_SMALL_STACK
351   "SMALL_STACK",
352 #endif
353 #if SQLITE_SOUNDEX
354   "SOUNDEX",
355 #endif
356 #if SQLITE_SYSTEM_MALLOC
357   "SYSTEM_MALLOC",
358 #endif
359 #if SQLITE_TCL
360   "TCL",
361 #endif
362 #if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc)
363   "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
364 #endif
365 #if SQLITE_TEST
366   "TEST",
367 #endif
368 #if defined(SQLITE_THREADSAFE)
369   "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
370 #endif
371 #if SQLITE_USE_ALLOCA
372   "USE_ALLOCA",
373 #endif
374 #if SQLITE_USER_AUTHENTICATION
375   "USER_AUTHENTICATION",
376 #endif
377 #if SQLITE_WIN32_MALLOC
378   "WIN32_MALLOC",
379 #endif
380 #if SQLITE_ZERO_MALLOC
381   "ZERO_MALLOC"
382 #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 */
392 int sqlite3_compileoption_used(const char *zOptName){
393   int i, n;
394 
395 #if SQLITE_ENABLE_API_ARMOR
396   if( zOptName==0 ){
397     (void)SQLITE_MISUSE_BKPT;
398     return 0;
399   }
400 #endif
401   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++){
407     if( sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0
408      && sqlite3IsIdChar((unsigned char)azCompileOpt[i][n])==0
409     ){
410       return 1;
411     }
412   }
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 */
420 const char *sqlite3_compileoption_get(int N){
421   if( N>=0 && N<ArraySize(azCompileOpt) ){
422     return azCompileOpt[N];
423   }
424   return 0;
425 }
426 
427 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
428