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