xref: /sqlite-3.40.0/src/main.c (revision eb48b062)
1 /*
2 ** 2001 September 15
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 ** Main file for the SQLite library.  The routines in this file
13 ** implement the programmer interface to the library.  Routines in
14 ** other files are for internal use by SQLite and should not be
15 ** accessed by users of the library.
16 */
17 #include "sqliteInt.h"
18 
19 #ifdef SQLITE_ENABLE_FTS3
20 # include "fts3.h"
21 #endif
22 #ifdef SQLITE_ENABLE_RTREE
23 # include "rtree.h"
24 #endif
25 #ifdef SQLITE_ENABLE_ICU
26 # include "sqliteicu.h"
27 #endif
28 
29 #ifndef SQLITE_AMALGAMATION
30 /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
31 ** contains the text of SQLITE_VERSION macro.
32 */
33 const char sqlite3_version[] = SQLITE_VERSION;
34 #endif
35 
36 /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
37 ** a pointer to the to the sqlite3_version[] string constant.
38 */
39 const char *sqlite3_libversion(void){ return sqlite3_version; }
40 
41 /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
42 ** pointer to a string constant whose value is the same as the
43 ** SQLITE_SOURCE_ID C preprocessor macro.
44 */
45 const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
46 
47 /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
48 ** returns an integer equal to SQLITE_VERSION_NUMBER.
49 */
50 int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
51 
52 /* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns
53 ** zero if and only if SQLite was compiled with mutexing code omitted due to
54 ** the SQLITE_THREADSAFE compile-time option being set to 0.
55 */
56 int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
57 
58 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
59 /*
60 ** If the following function pointer is not NULL and if
61 ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
62 ** I/O active are written using this function.  These messages
63 ** are intended for debugging activity only.
64 */
65 SQLITE_API void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...) = 0;
66 #endif
67 
68 /*
69 ** If the following global variable points to a string which is the
70 ** name of a directory, then that directory will be used to store
71 ** temporary files.
72 **
73 ** See also the "PRAGMA temp_store_directory" SQL command.
74 */
75 char *sqlite3_temp_directory = 0;
76 
77 /*
78 ** If the following global variable points to a string which is the
79 ** name of a directory, then that directory will be used to store
80 ** all database files specified with a relative pathname.
81 **
82 ** See also the "PRAGMA data_store_directory" SQL command.
83 */
84 char *sqlite3_data_directory = 0;
85 
86 /*
87 ** Initialize SQLite.
88 **
89 ** This routine must be called to initialize the memory allocation,
90 ** VFS, and mutex subsystems prior to doing any serious work with
91 ** SQLite.  But as long as you do not compile with SQLITE_OMIT_AUTOINIT
92 ** this routine will be called automatically by key routines such as
93 ** sqlite3_open().
94 **
95 ** This routine is a no-op except on its very first call for the process,
96 ** or for the first call after a call to sqlite3_shutdown.
97 **
98 ** The first thread to call this routine runs the initialization to
99 ** completion.  If subsequent threads call this routine before the first
100 ** thread has finished the initialization process, then the subsequent
101 ** threads must block until the first thread finishes with the initialization.
102 **
103 ** The first thread might call this routine recursively.  Recursive
104 ** calls to this routine should not block, of course.  Otherwise the
105 ** initialization process would never complete.
106 **
107 ** Let X be the first thread to enter this routine.  Let Y be some other
108 ** thread.  Then while the initial invocation of this routine by X is
109 ** incomplete, it is required that:
110 **
111 **    *  Calls to this routine from Y must block until the outer-most
112 **       call by X completes.
113 **
114 **    *  Recursive calls to this routine from thread X return immediately
115 **       without blocking.
116 */
117 int sqlite3_initialize(void){
118   MUTEX_LOGIC( sqlite3_mutex *pMaster; )       /* The main static mutex */
119   int rc;                                      /* Result code */
120 #ifdef SQLITE_EXTRA_INIT
121   int bRunExtraInit = 0;                       /* Extra initialization needed */
122 #endif
123 
124 #ifdef SQLITE_OMIT_WSD
125   rc = sqlite3_wsd_init(4096, 24);
126   if( rc!=SQLITE_OK ){
127     return rc;
128   }
129 #endif
130 
131   /* If the following assert() fails on some obscure processor/compiler
132   ** combination, the work-around is to set the correct pointer
133   ** size at compile-time using -DSQLITE_PTRSIZE=n compile-time option */
134   assert( SQLITE_PTRSIZE==sizeof(char*) );
135 
136   /* If SQLite is already completely initialized, then this call
137   ** to sqlite3_initialize() should be a no-op.  But the initialization
138   ** must be complete.  So isInit must not be set until the very end
139   ** of this routine.
140   */
141   if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
142 
143   /* Make sure the mutex subsystem is initialized.  If unable to
144   ** initialize the mutex subsystem, return early with the error.
145   ** If the system is so sick that we are unable to allocate a mutex,
146   ** there is not much SQLite is going to be able to do.
147   **
148   ** The mutex subsystem must take care of serializing its own
149   ** initialization.
150   */
151   rc = sqlite3MutexInit();
152   if( rc ) return rc;
153 
154   /* Initialize the malloc() system and the recursive pInitMutex mutex.
155   ** This operation is protected by the STATIC_MASTER mutex.  Note that
156   ** MutexAlloc() is called for a static mutex prior to initializing the
157   ** malloc subsystem - this implies that the allocation of a static
158   ** mutex must not require support from the malloc subsystem.
159   */
160   MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
161   sqlite3_mutex_enter(pMaster);
162   sqlite3GlobalConfig.isMutexInit = 1;
163   if( !sqlite3GlobalConfig.isMallocInit ){
164     rc = sqlite3MallocInit();
165   }
166   if( rc==SQLITE_OK ){
167     sqlite3GlobalConfig.isMallocInit = 1;
168     if( !sqlite3GlobalConfig.pInitMutex ){
169       sqlite3GlobalConfig.pInitMutex =
170            sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
171       if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
172         rc = SQLITE_NOMEM;
173       }
174     }
175   }
176   if( rc==SQLITE_OK ){
177     sqlite3GlobalConfig.nRefInitMutex++;
178   }
179   sqlite3_mutex_leave(pMaster);
180 
181   /* If rc is not SQLITE_OK at this point, then either the malloc
182   ** subsystem could not be initialized or the system failed to allocate
183   ** the pInitMutex mutex. Return an error in either case.  */
184   if( rc!=SQLITE_OK ){
185     return rc;
186   }
187 
188   /* Do the rest of the initialization under the recursive mutex so
189   ** that we will be able to handle recursive calls into
190   ** sqlite3_initialize().  The recursive calls normally come through
191   ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
192   ** recursive calls might also be possible.
193   **
194   ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
195   ** to the xInit method, so the xInit method need not be threadsafe.
196   **
197   ** The following mutex is what serializes access to the appdef pcache xInit
198   ** methods.  The sqlite3_pcache_methods.xInit() all is embedded in the
199   ** call to sqlite3PcacheInitialize().
200   */
201   sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
202   if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
203     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
204     sqlite3GlobalConfig.inProgress = 1;
205     memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
206     sqlite3RegisterGlobalFunctions();
207     if( sqlite3GlobalConfig.isPCacheInit==0 ){
208       rc = sqlite3PcacheInitialize();
209     }
210     if( rc==SQLITE_OK ){
211       sqlite3GlobalConfig.isPCacheInit = 1;
212       rc = sqlite3OsInit();
213     }
214     if( rc==SQLITE_OK ){
215       sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage,
216           sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
217       sqlite3GlobalConfig.isInit = 1;
218 #ifdef SQLITE_EXTRA_INIT
219       bRunExtraInit = 1;
220 #endif
221     }
222     sqlite3GlobalConfig.inProgress = 0;
223   }
224   sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
225 
226   /* Go back under the static mutex and clean up the recursive
227   ** mutex to prevent a resource leak.
228   */
229   sqlite3_mutex_enter(pMaster);
230   sqlite3GlobalConfig.nRefInitMutex--;
231   if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
232     assert( sqlite3GlobalConfig.nRefInitMutex==0 );
233     sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
234     sqlite3GlobalConfig.pInitMutex = 0;
235   }
236   sqlite3_mutex_leave(pMaster);
237 
238   /* The following is just a sanity check to make sure SQLite has
239   ** been compiled correctly.  It is important to run this code, but
240   ** we don't want to run it too often and soak up CPU cycles for no
241   ** reason.  So we run it once during initialization.
242   */
243 #ifndef NDEBUG
244 #ifndef SQLITE_OMIT_FLOATING_POINT
245   /* This section of code's only "output" is via assert() statements. */
246   if ( rc==SQLITE_OK ){
247     u64 x = (((u64)1)<<63)-1;
248     double y;
249     assert(sizeof(x)==8);
250     assert(sizeof(x)==sizeof(y));
251     memcpy(&y, &x, 8);
252     assert( sqlite3IsNaN(y) );
253   }
254 #endif
255 #endif
256 
257   /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
258   ** compile-time option.
259   */
260 #ifdef SQLITE_EXTRA_INIT
261   if( bRunExtraInit ){
262     int SQLITE_EXTRA_INIT(const char*);
263     rc = SQLITE_EXTRA_INIT(0);
264   }
265 #endif
266 
267   return rc;
268 }
269 
270 /*
271 ** Undo the effects of sqlite3_initialize().  Must not be called while
272 ** there are outstanding database connections or memory allocations or
273 ** while any part of SQLite is otherwise in use in any thread.  This
274 ** routine is not threadsafe.  But it is safe to invoke this routine
275 ** on when SQLite is already shut down.  If SQLite is already shut down
276 ** when this routine is invoked, then this routine is a harmless no-op.
277 */
278 int sqlite3_shutdown(void){
279 #ifdef SQLITE_OMIT_WSD
280   int rc = sqlite3_wsd_init(4096, 24);
281   if( rc!=SQLITE_OK ){
282     return rc;
283   }
284 #endif
285 
286   if( sqlite3GlobalConfig.isInit ){
287 #ifdef SQLITE_EXTRA_SHUTDOWN
288     void SQLITE_EXTRA_SHUTDOWN(void);
289     SQLITE_EXTRA_SHUTDOWN();
290 #endif
291     sqlite3_os_end();
292     sqlite3_reset_auto_extension();
293     sqlite3GlobalConfig.isInit = 0;
294   }
295   if( sqlite3GlobalConfig.isPCacheInit ){
296     sqlite3PcacheShutdown();
297     sqlite3GlobalConfig.isPCacheInit = 0;
298   }
299   if( sqlite3GlobalConfig.isMallocInit ){
300     sqlite3MallocEnd();
301     sqlite3GlobalConfig.isMallocInit = 0;
302 
303 #ifndef SQLITE_OMIT_SHUTDOWN_DIRECTORIES
304     /* The heap subsystem has now been shutdown and these values are supposed
305     ** to be NULL or point to memory that was obtained from sqlite3_malloc(),
306     ** which would rely on that heap subsystem; therefore, make sure these
307     ** values cannot refer to heap memory that was just invalidated when the
308     ** heap subsystem was shutdown.  This is only done if the current call to
309     ** this function resulted in the heap subsystem actually being shutdown.
310     */
311     sqlite3_data_directory = 0;
312     sqlite3_temp_directory = 0;
313 #endif
314   }
315   if( sqlite3GlobalConfig.isMutexInit ){
316     sqlite3MutexEnd();
317     sqlite3GlobalConfig.isMutexInit = 0;
318   }
319 
320   return SQLITE_OK;
321 }
322 
323 /*
324 ** This API allows applications to modify the global configuration of
325 ** the SQLite library at run-time.
326 **
327 ** This routine should only be called when there are no outstanding
328 ** database connections or memory allocations.  This routine is not
329 ** threadsafe.  Failure to heed these warnings can lead to unpredictable
330 ** behavior.
331 */
332 int sqlite3_config(int op, ...){
333   va_list ap;
334   int rc = SQLITE_OK;
335 
336   /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
337   ** the SQLite library is in use. */
338   if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
339 
340   va_start(ap, op);
341   switch( op ){
342 
343     /* Mutex configuration options are only available in a threadsafe
344     ** compile.
345     */
346 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0  /* IMP: R-54466-46756 */
347     case SQLITE_CONFIG_SINGLETHREAD: {
348       /* EVIDENCE-OF: R-02748-19096 This option sets the threading mode to
349       ** Single-thread. */
350       sqlite3GlobalConfig.bCoreMutex = 0;  /* Disable mutex on core */
351       sqlite3GlobalConfig.bFullMutex = 0;  /* Disable mutex on connections */
352       break;
353     }
354 #endif
355 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */
356     case SQLITE_CONFIG_MULTITHREAD: {
357       /* EVIDENCE-OF: R-14374-42468 This option sets the threading mode to
358       ** Multi-thread. */
359       sqlite3GlobalConfig.bCoreMutex = 1;  /* Enable mutex on core */
360       sqlite3GlobalConfig.bFullMutex = 0;  /* Disable mutex on connections */
361       break;
362     }
363 #endif
364 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */
365     case SQLITE_CONFIG_SERIALIZED: {
366       /* EVIDENCE-OF: R-41220-51800 This option sets the threading mode to
367       ** Serialized. */
368       sqlite3GlobalConfig.bCoreMutex = 1;  /* Enable mutex on core */
369       sqlite3GlobalConfig.bFullMutex = 1;  /* Enable mutex on connections */
370       break;
371     }
372 #endif
373 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */
374     case SQLITE_CONFIG_MUTEX: {
375       /* Specify an alternative mutex implementation */
376       sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
377       break;
378     }
379 #endif
380 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-14450-37597 */
381     case SQLITE_CONFIG_GETMUTEX: {
382       /* Retrieve the current mutex implementation */
383       *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
384       break;
385     }
386 #endif
387 
388     case SQLITE_CONFIG_MALLOC: {
389       /* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a
390       ** single argument which is a pointer to an instance of the
391       ** sqlite3_mem_methods structure. The argument specifies alternative
392       ** low-level memory allocation routines to be used in place of the memory
393       ** allocation routines built into SQLite. */
394       sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
395       break;
396     }
397     case SQLITE_CONFIG_GETMALLOC: {
398       /* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a
399       ** single argument which is a pointer to an instance of the
400       ** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is
401       ** filled with the currently defined memory allocation routines. */
402       if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
403       *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
404       break;
405     }
406     case SQLITE_CONFIG_MEMSTATUS: {
407       /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes
408       ** single argument of type int, interpreted as a boolean, which enables
409       ** or disables the collection of memory allocation statistics. */
410       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
411       break;
412     }
413     case SQLITE_CONFIG_SCRATCH: {
414       /* EVIDENCE-OF: R-08404-60887 There are three arguments to
415       ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from
416       ** which the scratch allocations will be drawn, the size of each scratch
417       ** allocation (sz), and the maximum number of scratch allocations (N). */
418       sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
419       sqlite3GlobalConfig.szScratch = va_arg(ap, int);
420       sqlite3GlobalConfig.nScratch = va_arg(ap, int);
421       break;
422     }
423     case SQLITE_CONFIG_PAGECACHE: {
424       /* EVIDENCE-OF: R-31408-40510 There are three arguments to
425       ** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory, the size
426       ** of each page buffer (sz), and the number of pages (N). */
427       sqlite3GlobalConfig.pPage = va_arg(ap, void*);
428       sqlite3GlobalConfig.szPage = va_arg(ap, int);
429       sqlite3GlobalConfig.nPage = va_arg(ap, int);
430       break;
431     }
432     case SQLITE_CONFIG_PCACHE_HDRSZ: {
433       /* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes
434       ** a single parameter which is a pointer to an integer and writes into
435       ** that integer the number of extra bytes per page required for each page
436       ** in SQLITE_CONFIG_PAGECACHE. */
437       *va_arg(ap, int*) =
438           sqlite3HeaderSizeBtree() +
439           sqlite3HeaderSizePcache() +
440           sqlite3HeaderSizePcache1();
441       break;
442     }
443 
444     case SQLITE_CONFIG_PCACHE: {
445       /* no-op */
446       break;
447     }
448     case SQLITE_CONFIG_GETPCACHE: {
449       /* now an error */
450       rc = SQLITE_ERROR;
451       break;
452     }
453 
454     case SQLITE_CONFIG_PCACHE2: {
455       /* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a
456       ** single argument which is a pointer to an sqlite3_pcache_methods2
457       ** object. This object specifies the interface to a custom page cache
458       ** implementation. */
459       sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
460       break;
461     }
462     case SQLITE_CONFIG_GETPCACHE2: {
463       /* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a
464       ** single argument which is a pointer to an sqlite3_pcache_methods2
465       ** object. SQLite copies of the current page cache implementation into
466       ** that object. */
467       if( sqlite3GlobalConfig.pcache2.xInit==0 ){
468         sqlite3PCacheSetDefault();
469       }
470       *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
471       break;
472     }
473 
474 /* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only
475 ** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or
476 ** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */
477 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
478     case SQLITE_CONFIG_HEAP: {
479       /* EVIDENCE-OF: R-19854-42126 There are three arguments to
480       ** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the
481       ** number of bytes in the memory buffer, and the minimum allocation size.
482       */
483       sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
484       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
485       sqlite3GlobalConfig.mnReq = va_arg(ap, int);
486 
487       if( sqlite3GlobalConfig.mnReq<1 ){
488         sqlite3GlobalConfig.mnReq = 1;
489       }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
490         /* cap min request size at 2^12 */
491         sqlite3GlobalConfig.mnReq = (1<<12);
492       }
493 
494       if( sqlite3GlobalConfig.pHeap==0 ){
495         /* EVIDENCE-OF: R-49920-60189 If the first pointer (the memory pointer)
496         ** is NULL, then SQLite reverts to using its default memory allocator
497         ** (the system malloc() implementation), undoing any prior invocation of
498         ** SQLITE_CONFIG_MALLOC.
499         **
500         ** Setting sqlite3GlobalConfig.m to all zeros will cause malloc to
501         ** revert to its default implementation when sqlite3_initialize() is run
502         */
503         memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
504       }else{
505         /* EVIDENCE-OF: R-61006-08918 If the memory pointer is not NULL then the
506         ** alternative memory allocator is engaged to handle all of SQLites
507         ** memory allocation needs. */
508 #ifdef SQLITE_ENABLE_MEMSYS3
509         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
510 #endif
511 #ifdef SQLITE_ENABLE_MEMSYS5
512         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
513 #endif
514       }
515       break;
516     }
517 #endif
518 
519     case SQLITE_CONFIG_LOOKASIDE: {
520       sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
521       sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
522       break;
523     }
524 
525     /* Record a pointer to the logger function and its first argument.
526     ** The default is NULL.  Logging is disabled if the function pointer is
527     ** NULL.
528     */
529     case SQLITE_CONFIG_LOG: {
530       /* MSVC is picky about pulling func ptrs from va lists.
531       ** http://support.microsoft.com/kb/47961
532       ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
533       */
534       typedef void(*LOGFUNC_t)(void*,int,const char*);
535       sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
536       sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
537       break;
538     }
539 
540     /* EVIDENCE-OF: R-55548-33817 The compile-time setting for URI filenames
541     ** can be changed at start-time using the
542     ** sqlite3_config(SQLITE_CONFIG_URI,1) or
543     ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
544     */
545     case SQLITE_CONFIG_URI: {
546       /* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single
547       ** argument of type int. If non-zero, then URI handling is globally
548       ** enabled. If the parameter is zero, then URI handling is globally
549       ** disabled. */
550       sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
551       break;
552     }
553 
554     case SQLITE_CONFIG_COVERING_INDEX_SCAN: {
555       /* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN
556       ** option takes a single integer argument which is interpreted as a
557       ** boolean in order to enable or disable the use of covering indices for
558       ** full table scans in the query optimizer. */
559       sqlite3GlobalConfig.bUseCis = va_arg(ap, int);
560       break;
561     }
562 
563 #ifdef SQLITE_ENABLE_SQLLOG
564     case SQLITE_CONFIG_SQLLOG: {
565       typedef void(*SQLLOGFUNC_t)(void*, sqlite3*, const char*, int);
566       sqlite3GlobalConfig.xSqllog = va_arg(ap, SQLLOGFUNC_t);
567       sqlite3GlobalConfig.pSqllogArg = va_arg(ap, void *);
568       break;
569     }
570 #endif
571 
572     case SQLITE_CONFIG_MMAP_SIZE: {
573       /* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit
574       ** integer (sqlite3_int64) values that are the default mmap size limit
575       ** (the default setting for PRAGMA mmap_size) and the maximum allowed
576       ** mmap size limit. */
577       sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64);
578       sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64);
579       /* EVIDENCE-OF: R-53367-43190 If either argument to this option is
580       ** negative, then that argument is changed to its compile-time default.
581       **
582       ** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be
583       ** silently truncated if necessary so that it does not exceed the
584       ** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE
585       ** compile-time option.
586       */
587       if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){
588         mxMmap = SQLITE_MAX_MMAP_SIZE;
589       }
590       if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE;
591       if( szMmap>mxMmap) szMmap = mxMmap;
592       sqlite3GlobalConfig.mxMmap = mxMmap;
593       sqlite3GlobalConfig.szMmap = szMmap;
594       break;
595     }
596 
597 #if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) /* IMP: R-04780-55815 */
598     case SQLITE_CONFIG_WIN32_HEAPSIZE: {
599       /* EVIDENCE-OF: R-34926-03360 SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit
600       ** unsigned integer value that specifies the maximum size of the created
601       ** heap. */
602       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
603       break;
604     }
605 #endif
606 
607     case SQLITE_CONFIG_PMASZ: {
608       sqlite3GlobalConfig.szPma = va_arg(ap, unsigned int);
609       break;
610     }
611 
612     default: {
613       rc = SQLITE_ERROR;
614       break;
615     }
616   }
617   va_end(ap);
618   return rc;
619 }
620 
621 /*
622 ** Set up the lookaside buffers for a database connection.
623 ** Return SQLITE_OK on success.
624 ** If lookaside is already active, return SQLITE_BUSY.
625 **
626 ** The sz parameter is the number of bytes in each lookaside slot.
627 ** The cnt parameter is the number of slots.  If pStart is NULL the
628 ** space for the lookaside memory is obtained from sqlite3_malloc().
629 ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
630 ** the lookaside memory.
631 */
632 static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
633   void *pStart;
634   if( db->lookaside.nOut ){
635     return SQLITE_BUSY;
636   }
637   /* Free any existing lookaside buffer for this handle before
638   ** allocating a new one so we don't have to have space for
639   ** both at the same time.
640   */
641   if( db->lookaside.bMalloced ){
642     sqlite3_free(db->lookaside.pStart);
643   }
644   /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger
645   ** than a pointer to be useful.
646   */
647   sz = ROUNDDOWN8(sz);  /* IMP: R-33038-09382 */
648   if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
649   if( cnt<0 ) cnt = 0;
650   if( sz==0 || cnt==0 ){
651     sz = 0;
652     pStart = 0;
653   }else if( pBuf==0 ){
654     sqlite3BeginBenignMalloc();
655     pStart = sqlite3Malloc( sz*cnt );  /* IMP: R-61949-35727 */
656     sqlite3EndBenignMalloc();
657     if( pStart ) cnt = sqlite3MallocSize(pStart)/sz;
658   }else{
659     pStart = pBuf;
660   }
661   db->lookaside.pStart = pStart;
662   db->lookaside.pFree = 0;
663   db->lookaside.sz = (u16)sz;
664   if( pStart ){
665     int i;
666     LookasideSlot *p;
667     assert( sz > (int)sizeof(LookasideSlot*) );
668     p = (LookasideSlot*)pStart;
669     for(i=cnt-1; i>=0; i--){
670       p->pNext = db->lookaside.pFree;
671       db->lookaside.pFree = p;
672       p = (LookasideSlot*)&((u8*)p)[sz];
673     }
674     db->lookaside.pEnd = p;
675     db->lookaside.bEnabled = 1;
676     db->lookaside.bMalloced = pBuf==0 ?1:0;
677   }else{
678     db->lookaside.pStart = db;
679     db->lookaside.pEnd = db;
680     db->lookaside.bEnabled = 0;
681     db->lookaside.bMalloced = 0;
682   }
683   return SQLITE_OK;
684 }
685 
686 /*
687 ** Return the mutex associated with a database connection.
688 */
689 sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
690 #ifdef SQLITE_ENABLE_API_ARMOR
691   if( !sqlite3SafetyCheckOk(db) ){
692     (void)SQLITE_MISUSE_BKPT;
693     return 0;
694   }
695 #endif
696   return db->mutex;
697 }
698 
699 /*
700 ** Free up as much memory as we can from the given database
701 ** connection.
702 */
703 int sqlite3_db_release_memory(sqlite3 *db){
704   int i;
705 
706 #ifdef SQLITE_ENABLE_API_ARMOR
707   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
708 #endif
709   sqlite3_mutex_enter(db->mutex);
710   sqlite3BtreeEnterAll(db);
711   for(i=0; i<db->nDb; i++){
712     Btree *pBt = db->aDb[i].pBt;
713     if( pBt ){
714       Pager *pPager = sqlite3BtreePager(pBt);
715       sqlite3PagerShrink(pPager);
716     }
717   }
718   sqlite3BtreeLeaveAll(db);
719   sqlite3_mutex_leave(db->mutex);
720   return SQLITE_OK;
721 }
722 
723 /*
724 ** Configuration settings for an individual database connection
725 */
726 int sqlite3_db_config(sqlite3 *db, int op, ...){
727   va_list ap;
728   int rc;
729   va_start(ap, op);
730   switch( op ){
731     case SQLITE_DBCONFIG_LOOKASIDE: {
732       void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
733       int sz = va_arg(ap, int);       /* IMP: R-47871-25994 */
734       int cnt = va_arg(ap, int);      /* IMP: R-04460-53386 */
735       rc = setupLookaside(db, pBuf, sz, cnt);
736       break;
737     }
738     default: {
739       static const struct {
740         int op;      /* The opcode */
741         u32 mask;    /* Mask of the bit in sqlite3.flags to set/clear */
742       } aFlagOp[] = {
743         { SQLITE_DBCONFIG_ENABLE_FKEY,    SQLITE_ForeignKeys    },
744         { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger  },
745       };
746       unsigned int i;
747       rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
748       for(i=0; i<ArraySize(aFlagOp); i++){
749         if( aFlagOp[i].op==op ){
750           int onoff = va_arg(ap, int);
751           int *pRes = va_arg(ap, int*);
752           int oldFlags = db->flags;
753           if( onoff>0 ){
754             db->flags |= aFlagOp[i].mask;
755           }else if( onoff==0 ){
756             db->flags &= ~aFlagOp[i].mask;
757           }
758           if( oldFlags!=db->flags ){
759             sqlite3ExpirePreparedStatements(db);
760           }
761           if( pRes ){
762             *pRes = (db->flags & aFlagOp[i].mask)!=0;
763           }
764           rc = SQLITE_OK;
765           break;
766         }
767       }
768       break;
769     }
770   }
771   va_end(ap);
772   return rc;
773 }
774 
775 
776 /*
777 ** Return true if the buffer z[0..n-1] contains all spaces.
778 */
779 static int allSpaces(const char *z, int n){
780   while( n>0 && z[n-1]==' ' ){ n--; }
781   return n==0;
782 }
783 
784 /*
785 ** This is the default collating function named "BINARY" which is always
786 ** available.
787 **
788 ** If the padFlag argument is not NULL then space padding at the end
789 ** of strings is ignored.  This implements the RTRIM collation.
790 */
791 static int binCollFunc(
792   void *padFlag,
793   int nKey1, const void *pKey1,
794   int nKey2, const void *pKey2
795 ){
796   int rc, n;
797   n = nKey1<nKey2 ? nKey1 : nKey2;
798   /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
799   ** strings byte by byte using the memcmp() function from the standard C
800   ** library. */
801   rc = memcmp(pKey1, pKey2, n);
802   if( rc==0 ){
803     if( padFlag
804      && allSpaces(((char*)pKey1)+n, nKey1-n)
805      && allSpaces(((char*)pKey2)+n, nKey2-n)
806     ){
807       /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
808       ** spaces at the end of either string do not change the result. In other
809       ** words, strings will compare equal to one another as long as they
810       ** differ only in the number of spaces at the end.
811       */
812     }else{
813       rc = nKey1 - nKey2;
814     }
815   }
816   return rc;
817 }
818 
819 /*
820 ** Another built-in collating sequence: NOCASE.
821 **
822 ** This collating sequence is intended to be used for "case independent
823 ** comparison". SQLite's knowledge of upper and lower case equivalents
824 ** extends only to the 26 characters used in the English language.
825 **
826 ** At the moment there is only a UTF-8 implementation.
827 */
828 static int nocaseCollatingFunc(
829   void *NotUsed,
830   int nKey1, const void *pKey1,
831   int nKey2, const void *pKey2
832 ){
833   int r = sqlite3StrNICmp(
834       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
835   UNUSED_PARAMETER(NotUsed);
836   if( 0==r ){
837     r = nKey1-nKey2;
838   }
839   return r;
840 }
841 
842 /*
843 ** Return the ROWID of the most recent insert
844 */
845 sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
846 #ifdef SQLITE_ENABLE_API_ARMOR
847   if( !sqlite3SafetyCheckOk(db) ){
848     (void)SQLITE_MISUSE_BKPT;
849     return 0;
850   }
851 #endif
852   return db->lastRowid;
853 }
854 
855 /*
856 ** Return the number of changes in the most recent call to sqlite3_exec().
857 */
858 int sqlite3_changes(sqlite3 *db){
859 #ifdef SQLITE_ENABLE_API_ARMOR
860   if( !sqlite3SafetyCheckOk(db) ){
861     (void)SQLITE_MISUSE_BKPT;
862     return 0;
863   }
864 #endif
865   return db->nChange;
866 }
867 
868 /*
869 ** Return the number of changes since the database handle was opened.
870 */
871 int sqlite3_total_changes(sqlite3 *db){
872 #ifdef SQLITE_ENABLE_API_ARMOR
873   if( !sqlite3SafetyCheckOk(db) ){
874     (void)SQLITE_MISUSE_BKPT;
875     return 0;
876   }
877 #endif
878   return db->nTotalChange;
879 }
880 
881 /*
882 ** Close all open savepoints. This function only manipulates fields of the
883 ** database handle object, it does not close any savepoints that may be open
884 ** at the b-tree/pager level.
885 */
886 void sqlite3CloseSavepoints(sqlite3 *db){
887   while( db->pSavepoint ){
888     Savepoint *pTmp = db->pSavepoint;
889     db->pSavepoint = pTmp->pNext;
890     sqlite3DbFree(db, pTmp);
891   }
892   db->nSavepoint = 0;
893   db->nStatement = 0;
894   db->isTransactionSavepoint = 0;
895 }
896 
897 /*
898 ** Invoke the destructor function associated with FuncDef p, if any. Except,
899 ** if this is not the last copy of the function, do not invoke it. Multiple
900 ** copies of a single function are created when create_function() is called
901 ** with SQLITE_ANY as the encoding.
902 */
903 static void functionDestroy(sqlite3 *db, FuncDef *p){
904   FuncDestructor *pDestructor = p->pDestructor;
905   if( pDestructor ){
906     pDestructor->nRef--;
907     if( pDestructor->nRef==0 ){
908       pDestructor->xDestroy(pDestructor->pUserData);
909       sqlite3DbFree(db, pDestructor);
910     }
911   }
912 }
913 
914 /*
915 ** Disconnect all sqlite3_vtab objects that belong to database connection
916 ** db. This is called when db is being closed.
917 */
918 static void disconnectAllVtab(sqlite3 *db){
919 #ifndef SQLITE_OMIT_VIRTUALTABLE
920   int i;
921   sqlite3BtreeEnterAll(db);
922   for(i=0; i<db->nDb; i++){
923     Schema *pSchema = db->aDb[i].pSchema;
924     if( db->aDb[i].pSchema ){
925       HashElem *p;
926       for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){
927         Table *pTab = (Table *)sqliteHashData(p);
928         if( IsVirtual(pTab) ) sqlite3VtabDisconnect(db, pTab);
929       }
930     }
931   }
932   sqlite3VtabUnlockList(db);
933   sqlite3BtreeLeaveAll(db);
934 #else
935   UNUSED_PARAMETER(db);
936 #endif
937 }
938 
939 /*
940 ** Return TRUE if database connection db has unfinalized prepared
941 ** statements or unfinished sqlite3_backup objects.
942 */
943 static int connectionIsBusy(sqlite3 *db){
944   int j;
945   assert( sqlite3_mutex_held(db->mutex) );
946   if( db->pVdbe ) return 1;
947   for(j=0; j<db->nDb; j++){
948     Btree *pBt = db->aDb[j].pBt;
949     if( pBt && sqlite3BtreeIsInBackup(pBt) ) return 1;
950   }
951   return 0;
952 }
953 
954 /*
955 ** Close an existing SQLite database
956 */
957 static int sqlite3Close(sqlite3 *db, int forceZombie){
958   if( !db ){
959     /* EVIDENCE-OF: R-63257-11740 Calling sqlite3_close() or
960     ** sqlite3_close_v2() with a NULL pointer argument is a harmless no-op. */
961     return SQLITE_OK;
962   }
963   if( !sqlite3SafetyCheckSickOrOk(db) ){
964     return SQLITE_MISUSE_BKPT;
965   }
966   sqlite3_mutex_enter(db->mutex);
967 
968   /* Force xDisconnect calls on all virtual tables */
969   disconnectAllVtab(db);
970 
971   /* If a transaction is open, the disconnectAllVtab() call above
972   ** will not have called the xDisconnect() method on any virtual
973   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
974   ** call will do so. We need to do this before the check for active
975   ** SQL statements below, as the v-table implementation may be storing
976   ** some prepared statements internally.
977   */
978   sqlite3VtabRollback(db);
979 
980   /* Legacy behavior (sqlite3_close() behavior) is to return
981   ** SQLITE_BUSY if the connection can not be closed immediately.
982   */
983   if( !forceZombie && connectionIsBusy(db) ){
984     sqlite3ErrorWithMsg(db, SQLITE_BUSY, "unable to close due to unfinalized "
985        "statements or unfinished backups");
986     sqlite3_mutex_leave(db->mutex);
987     return SQLITE_BUSY;
988   }
989 
990 #ifdef SQLITE_ENABLE_SQLLOG
991   if( sqlite3GlobalConfig.xSqllog ){
992     /* Closing the handle. Fourth parameter is passed the value 2. */
993     sqlite3GlobalConfig.xSqllog(sqlite3GlobalConfig.pSqllogArg, db, 0, 2);
994   }
995 #endif
996 
997   /* Convert the connection into a zombie and then close it.
998   */
999   db->magic = SQLITE_MAGIC_ZOMBIE;
1000   sqlite3LeaveMutexAndCloseZombie(db);
1001   return SQLITE_OK;
1002 }
1003 
1004 /*
1005 ** Two variations on the public interface for closing a database
1006 ** connection. The sqlite3_close() version returns SQLITE_BUSY and
1007 ** leaves the connection option if there are unfinalized prepared
1008 ** statements or unfinished sqlite3_backups.  The sqlite3_close_v2()
1009 ** version forces the connection to become a zombie if there are
1010 ** unclosed resources, and arranges for deallocation when the last
1011 ** prepare statement or sqlite3_backup closes.
1012 */
1013 int sqlite3_close(sqlite3 *db){ return sqlite3Close(db,0); }
1014 int sqlite3_close_v2(sqlite3 *db){ return sqlite3Close(db,1); }
1015 
1016 
1017 /*
1018 ** Close the mutex on database connection db.
1019 **
1020 ** Furthermore, if database connection db is a zombie (meaning that there
1021 ** has been a prior call to sqlite3_close(db) or sqlite3_close_v2(db)) and
1022 ** every sqlite3_stmt has now been finalized and every sqlite3_backup has
1023 ** finished, then free all resources.
1024 */
1025 void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
1026   HashElem *i;                    /* Hash table iterator */
1027   int j;
1028 
1029   /* If there are outstanding sqlite3_stmt or sqlite3_backup objects
1030   ** or if the connection has not yet been closed by sqlite3_close_v2(),
1031   ** then just leave the mutex and return.
1032   */
1033   if( db->magic!=SQLITE_MAGIC_ZOMBIE || connectionIsBusy(db) ){
1034     sqlite3_mutex_leave(db->mutex);
1035     return;
1036   }
1037 
1038   /* If we reach this point, it means that the database connection has
1039   ** closed all sqlite3_stmt and sqlite3_backup objects and has been
1040   ** passed to sqlite3_close (meaning that it is a zombie).  Therefore,
1041   ** go ahead and free all resources.
1042   */
1043 
1044   /* If a transaction is open, roll it back. This also ensures that if
1045   ** any database schemas have been modified by an uncommitted transaction
1046   ** they are reset. And that the required b-tree mutex is held to make
1047   ** the pager rollback and schema reset an atomic operation. */
1048   sqlite3RollbackAll(db, SQLITE_OK);
1049 
1050   /* Free any outstanding Savepoint structures. */
1051   sqlite3CloseSavepoints(db);
1052 
1053   /* Close all database connections */
1054   for(j=0; j<db->nDb; j++){
1055     struct Db *pDb = &db->aDb[j];
1056     if( pDb->pBt ){
1057       sqlite3BtreeClose(pDb->pBt);
1058       pDb->pBt = 0;
1059       if( j!=1 ){
1060         pDb->pSchema = 0;
1061       }
1062     }
1063   }
1064   /* Clear the TEMP schema separately and last */
1065   if( db->aDb[1].pSchema ){
1066     sqlite3SchemaClear(db->aDb[1].pSchema);
1067   }
1068   sqlite3VtabUnlockList(db);
1069 
1070   /* Free up the array of auxiliary databases */
1071   sqlite3CollapseDatabaseArray(db);
1072   assert( db->nDb<=2 );
1073   assert( db->aDb==db->aDbStatic );
1074 
1075   /* Tell the code in notify.c that the connection no longer holds any
1076   ** locks and does not require any further unlock-notify callbacks.
1077   */
1078   sqlite3ConnectionClosed(db);
1079 
1080   for(j=0; j<ArraySize(db->aFunc.a); j++){
1081     FuncDef *pNext, *pHash, *p;
1082     for(p=db->aFunc.a[j]; p; p=pHash){
1083       pHash = p->pHash;
1084       while( p ){
1085         functionDestroy(db, p);
1086         pNext = p->pNext;
1087         sqlite3DbFree(db, p);
1088         p = pNext;
1089       }
1090     }
1091   }
1092   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
1093     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
1094     /* Invoke any destructors registered for collation sequence user data. */
1095     for(j=0; j<3; j++){
1096       if( pColl[j].xDel ){
1097         pColl[j].xDel(pColl[j].pUser);
1098       }
1099     }
1100     sqlite3DbFree(db, pColl);
1101   }
1102   sqlite3HashClear(&db->aCollSeq);
1103 #ifndef SQLITE_OMIT_VIRTUALTABLE
1104   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
1105     Module *pMod = (Module *)sqliteHashData(i);
1106     if( pMod->xDestroy ){
1107       pMod->xDestroy(pMod->pAux);
1108     }
1109     sqlite3DbFree(db, pMod);
1110   }
1111   sqlite3HashClear(&db->aModule);
1112 #endif
1113 
1114   sqlite3Error(db, SQLITE_OK); /* Deallocates any cached error strings. */
1115   sqlite3ValueFree(db->pErr);
1116   sqlite3CloseExtensions(db);
1117 #if SQLITE_USER_AUTHENTICATION
1118   sqlite3_free(db->auth.zAuthUser);
1119   sqlite3_free(db->auth.zAuthPW);
1120 #endif
1121 
1122   db->magic = SQLITE_MAGIC_ERROR;
1123 
1124   /* The temp-database schema is allocated differently from the other schema
1125   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
1126   ** So it needs to be freed here. Todo: Why not roll the temp schema into
1127   ** the same sqliteMalloc() as the one that allocates the database
1128   ** structure?
1129   */
1130   sqlite3DbFree(db, db->aDb[1].pSchema);
1131   sqlite3_mutex_leave(db->mutex);
1132   db->magic = SQLITE_MAGIC_CLOSED;
1133   sqlite3_mutex_free(db->mutex);
1134   assert( db->lookaside.nOut==0 );  /* Fails on a lookaside memory leak */
1135   if( db->lookaside.bMalloced ){
1136     sqlite3_free(db->lookaside.pStart);
1137   }
1138   sqlite3_free(db);
1139 }
1140 
1141 /*
1142 ** Rollback all database files.  If tripCode is not SQLITE_OK, then
1143 ** any write cursors are invalidated ("tripped" - as in "tripping a circuit
1144 ** breaker") and made to return tripCode if there are any further
1145 ** attempts to use that cursor.  Read cursors remain open and valid
1146 ** but are "saved" in case the table pages are moved around.
1147 */
1148 void sqlite3RollbackAll(sqlite3 *db, int tripCode){
1149   int i;
1150   int inTrans = 0;
1151   int schemaChange;
1152   assert( sqlite3_mutex_held(db->mutex) );
1153   sqlite3BeginBenignMalloc();
1154 
1155   /* Obtain all b-tree mutexes before making any calls to BtreeRollback().
1156   ** This is important in case the transaction being rolled back has
1157   ** modified the database schema. If the b-tree mutexes are not taken
1158   ** here, then another shared-cache connection might sneak in between
1159   ** the database rollback and schema reset, which can cause false
1160   ** corruption reports in some cases.  */
1161   sqlite3BtreeEnterAll(db);
1162   schemaChange = (db->flags & SQLITE_InternChanges)!=0 && db->init.busy==0;
1163 
1164   for(i=0; i<db->nDb; i++){
1165     Btree *p = db->aDb[i].pBt;
1166     if( p ){
1167       if( sqlite3BtreeIsInTrans(p) ){
1168         inTrans = 1;
1169       }
1170       sqlite3BtreeRollback(p, tripCode, !schemaChange);
1171     }
1172   }
1173   sqlite3VtabRollback(db);
1174   sqlite3EndBenignMalloc();
1175 
1176   if( (db->flags&SQLITE_InternChanges)!=0 && db->init.busy==0 ){
1177     sqlite3ExpirePreparedStatements(db);
1178     sqlite3ResetAllSchemasOfConnection(db);
1179   }
1180   sqlite3BtreeLeaveAll(db);
1181 
1182   /* Any deferred constraint violations have now been resolved. */
1183   db->nDeferredCons = 0;
1184   db->nDeferredImmCons = 0;
1185   db->flags &= ~SQLITE_DeferFKs;
1186 
1187   /* If one has been configured, invoke the rollback-hook callback */
1188   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
1189     db->xRollbackCallback(db->pRollbackArg);
1190   }
1191 }
1192 
1193 /*
1194 ** Return a static string containing the name corresponding to the error code
1195 ** specified in the argument.
1196 */
1197 #if defined(SQLITE_DEBUG) && \
1198     (defined(SQLITE_TEST) || defined(SQLITE_FORCE_OS_TRACE))
1199 const char *sqlite3ErrName(int rc){
1200   const char *zName = 0;
1201   int i, origRc = rc;
1202   for(i=0; i<2 && zName==0; i++, rc &= 0xff){
1203     switch( rc ){
1204       case SQLITE_OK:                 zName = "SQLITE_OK";                break;
1205       case SQLITE_ERROR:              zName = "SQLITE_ERROR";             break;
1206       case SQLITE_INTERNAL:           zName = "SQLITE_INTERNAL";          break;
1207       case SQLITE_PERM:               zName = "SQLITE_PERM";              break;
1208       case SQLITE_ABORT:              zName = "SQLITE_ABORT";             break;
1209       case SQLITE_ABORT_ROLLBACK:     zName = "SQLITE_ABORT_ROLLBACK";    break;
1210       case SQLITE_BUSY:               zName = "SQLITE_BUSY";              break;
1211       case SQLITE_BUSY_RECOVERY:      zName = "SQLITE_BUSY_RECOVERY";     break;
1212       case SQLITE_BUSY_SNAPSHOT:      zName = "SQLITE_BUSY_SNAPSHOT";     break;
1213       case SQLITE_LOCKED:             zName = "SQLITE_LOCKED";            break;
1214       case SQLITE_LOCKED_SHAREDCACHE: zName = "SQLITE_LOCKED_SHAREDCACHE";break;
1215       case SQLITE_NOMEM:              zName = "SQLITE_NOMEM";             break;
1216       case SQLITE_READONLY:           zName = "SQLITE_READONLY";          break;
1217       case SQLITE_READONLY_RECOVERY:  zName = "SQLITE_READONLY_RECOVERY"; break;
1218       case SQLITE_READONLY_CANTLOCK:  zName = "SQLITE_READONLY_CANTLOCK"; break;
1219       case SQLITE_READONLY_ROLLBACK:  zName = "SQLITE_READONLY_ROLLBACK"; break;
1220       case SQLITE_READONLY_DBMOVED:   zName = "SQLITE_READONLY_DBMOVED";  break;
1221       case SQLITE_INTERRUPT:          zName = "SQLITE_INTERRUPT";         break;
1222       case SQLITE_IOERR:              zName = "SQLITE_IOERR";             break;
1223       case SQLITE_IOERR_READ:         zName = "SQLITE_IOERR_READ";        break;
1224       case SQLITE_IOERR_SHORT_READ:   zName = "SQLITE_IOERR_SHORT_READ";  break;
1225       case SQLITE_IOERR_WRITE:        zName = "SQLITE_IOERR_WRITE";       break;
1226       case SQLITE_IOERR_FSYNC:        zName = "SQLITE_IOERR_FSYNC";       break;
1227       case SQLITE_IOERR_DIR_FSYNC:    zName = "SQLITE_IOERR_DIR_FSYNC";   break;
1228       case SQLITE_IOERR_TRUNCATE:     zName = "SQLITE_IOERR_TRUNCATE";    break;
1229       case SQLITE_IOERR_FSTAT:        zName = "SQLITE_IOERR_FSTAT";       break;
1230       case SQLITE_IOERR_UNLOCK:       zName = "SQLITE_IOERR_UNLOCK";      break;
1231       case SQLITE_IOERR_RDLOCK:       zName = "SQLITE_IOERR_RDLOCK";      break;
1232       case SQLITE_IOERR_DELETE:       zName = "SQLITE_IOERR_DELETE";      break;
1233       case SQLITE_IOERR_NOMEM:        zName = "SQLITE_IOERR_NOMEM";       break;
1234       case SQLITE_IOERR_ACCESS:       zName = "SQLITE_IOERR_ACCESS";      break;
1235       case SQLITE_IOERR_CHECKRESERVEDLOCK:
1236                                 zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break;
1237       case SQLITE_IOERR_LOCK:         zName = "SQLITE_IOERR_LOCK";        break;
1238       case SQLITE_IOERR_CLOSE:        zName = "SQLITE_IOERR_CLOSE";       break;
1239       case SQLITE_IOERR_DIR_CLOSE:    zName = "SQLITE_IOERR_DIR_CLOSE";   break;
1240       case SQLITE_IOERR_SHMOPEN:      zName = "SQLITE_IOERR_SHMOPEN";     break;
1241       case SQLITE_IOERR_SHMSIZE:      zName = "SQLITE_IOERR_SHMSIZE";     break;
1242       case SQLITE_IOERR_SHMLOCK:      zName = "SQLITE_IOERR_SHMLOCK";     break;
1243       case SQLITE_IOERR_SHMMAP:       zName = "SQLITE_IOERR_SHMMAP";      break;
1244       case SQLITE_IOERR_SEEK:         zName = "SQLITE_IOERR_SEEK";        break;
1245       case SQLITE_IOERR_DELETE_NOENT: zName = "SQLITE_IOERR_DELETE_NOENT";break;
1246       case SQLITE_IOERR_MMAP:         zName = "SQLITE_IOERR_MMAP";        break;
1247       case SQLITE_IOERR_GETTEMPPATH:  zName = "SQLITE_IOERR_GETTEMPPATH"; break;
1248       case SQLITE_IOERR_CONVPATH:     zName = "SQLITE_IOERR_CONVPATH";    break;
1249       case SQLITE_CORRUPT:            zName = "SQLITE_CORRUPT";           break;
1250       case SQLITE_CORRUPT_VTAB:       zName = "SQLITE_CORRUPT_VTAB";      break;
1251       case SQLITE_NOTFOUND:           zName = "SQLITE_NOTFOUND";          break;
1252       case SQLITE_FULL:               zName = "SQLITE_FULL";              break;
1253       case SQLITE_CANTOPEN:           zName = "SQLITE_CANTOPEN";          break;
1254       case SQLITE_CANTOPEN_NOTEMPDIR: zName = "SQLITE_CANTOPEN_NOTEMPDIR";break;
1255       case SQLITE_CANTOPEN_ISDIR:     zName = "SQLITE_CANTOPEN_ISDIR";    break;
1256       case SQLITE_CANTOPEN_FULLPATH:  zName = "SQLITE_CANTOPEN_FULLPATH"; break;
1257       case SQLITE_CANTOPEN_CONVPATH:  zName = "SQLITE_CANTOPEN_CONVPATH"; break;
1258       case SQLITE_PROTOCOL:           zName = "SQLITE_PROTOCOL";          break;
1259       case SQLITE_EMPTY:              zName = "SQLITE_EMPTY";             break;
1260       case SQLITE_SCHEMA:             zName = "SQLITE_SCHEMA";            break;
1261       case SQLITE_TOOBIG:             zName = "SQLITE_TOOBIG";            break;
1262       case SQLITE_CONSTRAINT:         zName = "SQLITE_CONSTRAINT";        break;
1263       case SQLITE_CONSTRAINT_UNIQUE:  zName = "SQLITE_CONSTRAINT_UNIQUE"; break;
1264       case SQLITE_CONSTRAINT_TRIGGER: zName = "SQLITE_CONSTRAINT_TRIGGER";break;
1265       case SQLITE_CONSTRAINT_FOREIGNKEY:
1266                                 zName = "SQLITE_CONSTRAINT_FOREIGNKEY";   break;
1267       case SQLITE_CONSTRAINT_CHECK:   zName = "SQLITE_CONSTRAINT_CHECK";  break;
1268       case SQLITE_CONSTRAINT_PRIMARYKEY:
1269                                 zName = "SQLITE_CONSTRAINT_PRIMARYKEY";   break;
1270       case SQLITE_CONSTRAINT_NOTNULL: zName = "SQLITE_CONSTRAINT_NOTNULL";break;
1271       case SQLITE_CONSTRAINT_COMMITHOOK:
1272                                 zName = "SQLITE_CONSTRAINT_COMMITHOOK";   break;
1273       case SQLITE_CONSTRAINT_VTAB:    zName = "SQLITE_CONSTRAINT_VTAB";   break;
1274       case SQLITE_CONSTRAINT_FUNCTION:
1275                                 zName = "SQLITE_CONSTRAINT_FUNCTION";     break;
1276       case SQLITE_CONSTRAINT_ROWID:   zName = "SQLITE_CONSTRAINT_ROWID";  break;
1277       case SQLITE_MISMATCH:           zName = "SQLITE_MISMATCH";          break;
1278       case SQLITE_MISUSE:             zName = "SQLITE_MISUSE";            break;
1279       case SQLITE_NOLFS:              zName = "SQLITE_NOLFS";             break;
1280       case SQLITE_AUTH:               zName = "SQLITE_AUTH";              break;
1281       case SQLITE_FORMAT:             zName = "SQLITE_FORMAT";            break;
1282       case SQLITE_RANGE:              zName = "SQLITE_RANGE";             break;
1283       case SQLITE_NOTADB:             zName = "SQLITE_NOTADB";            break;
1284       case SQLITE_ROW:                zName = "SQLITE_ROW";               break;
1285       case SQLITE_NOTICE:             zName = "SQLITE_NOTICE";            break;
1286       case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break;
1287       case SQLITE_NOTICE_RECOVER_ROLLBACK:
1288                                 zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break;
1289       case SQLITE_WARNING:            zName = "SQLITE_WARNING";           break;
1290       case SQLITE_WARNING_AUTOINDEX:  zName = "SQLITE_WARNING_AUTOINDEX"; break;
1291       case SQLITE_DONE:               zName = "SQLITE_DONE";              break;
1292     }
1293   }
1294   if( zName==0 ){
1295     static char zBuf[50];
1296     sqlite3_snprintf(sizeof(zBuf), zBuf, "SQLITE_UNKNOWN(%d)", origRc);
1297     zName = zBuf;
1298   }
1299   return zName;
1300 }
1301 #endif
1302 
1303 /*
1304 ** Return a static string that describes the kind of error specified in the
1305 ** argument.
1306 */
1307 const char *sqlite3ErrStr(int rc){
1308   static const char* const aMsg[] = {
1309     /* SQLITE_OK          */ "not an error",
1310     /* SQLITE_ERROR       */ "SQL logic error or missing database",
1311     /* SQLITE_INTERNAL    */ 0,
1312     /* SQLITE_PERM        */ "access permission denied",
1313     /* SQLITE_ABORT       */ "callback requested query abort",
1314     /* SQLITE_BUSY        */ "database is locked",
1315     /* SQLITE_LOCKED      */ "database table is locked",
1316     /* SQLITE_NOMEM       */ "out of memory",
1317     /* SQLITE_READONLY    */ "attempt to write a readonly database",
1318     /* SQLITE_INTERRUPT   */ "interrupted",
1319     /* SQLITE_IOERR       */ "disk I/O error",
1320     /* SQLITE_CORRUPT     */ "database disk image is malformed",
1321     /* SQLITE_NOTFOUND    */ "unknown operation",
1322     /* SQLITE_FULL        */ "database or disk is full",
1323     /* SQLITE_CANTOPEN    */ "unable to open database file",
1324     /* SQLITE_PROTOCOL    */ "locking protocol",
1325     /* SQLITE_EMPTY       */ "table contains no data",
1326     /* SQLITE_SCHEMA      */ "database schema has changed",
1327     /* SQLITE_TOOBIG      */ "string or blob too big",
1328     /* SQLITE_CONSTRAINT  */ "constraint failed",
1329     /* SQLITE_MISMATCH    */ "datatype mismatch",
1330     /* SQLITE_MISUSE      */ "library routine called out of sequence",
1331     /* SQLITE_NOLFS       */ "large file support is disabled",
1332     /* SQLITE_AUTH        */ "authorization denied",
1333     /* SQLITE_FORMAT      */ "auxiliary database format error",
1334     /* SQLITE_RANGE       */ "bind or column index out of range",
1335     /* SQLITE_NOTADB      */ "file is encrypted or is not a database",
1336   };
1337   const char *zErr = "unknown error";
1338   switch( rc ){
1339     case SQLITE_ABORT_ROLLBACK: {
1340       zErr = "abort due to ROLLBACK";
1341       break;
1342     }
1343     default: {
1344       rc &= 0xff;
1345       if( ALWAYS(rc>=0) && rc<ArraySize(aMsg) && aMsg[rc]!=0 ){
1346         zErr = aMsg[rc];
1347       }
1348       break;
1349     }
1350   }
1351   return zErr;
1352 }
1353 
1354 /*
1355 ** This routine implements a busy callback that sleeps and tries
1356 ** again until a timeout value is reached.  The timeout value is
1357 ** an integer number of milliseconds passed in as the first
1358 ** argument.
1359 */
1360 static int sqliteDefaultBusyCallback(
1361  void *ptr,               /* Database connection */
1362  int count                /* Number of times table has been busy */
1363 ){
1364 #if SQLITE_OS_WIN || HAVE_USLEEP
1365   static const u8 delays[] =
1366      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
1367   static const u8 totals[] =
1368      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
1369 # define NDELAY ArraySize(delays)
1370   sqlite3 *db = (sqlite3 *)ptr;
1371   int timeout = db->busyTimeout;
1372   int delay, prior;
1373 
1374   assert( count>=0 );
1375   if( count < NDELAY ){
1376     delay = delays[count];
1377     prior = totals[count];
1378   }else{
1379     delay = delays[NDELAY-1];
1380     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
1381   }
1382   if( prior + delay > timeout ){
1383     delay = timeout - prior;
1384     if( delay<=0 ) return 0;
1385   }
1386   sqlite3OsSleep(db->pVfs, delay*1000);
1387   return 1;
1388 #else
1389   sqlite3 *db = (sqlite3 *)ptr;
1390   int timeout = ((sqlite3 *)ptr)->busyTimeout;
1391   if( (count+1)*1000 > timeout ){
1392     return 0;
1393   }
1394   sqlite3OsSleep(db->pVfs, 1000000);
1395   return 1;
1396 #endif
1397 }
1398 
1399 /*
1400 ** Invoke the given busy handler.
1401 **
1402 ** This routine is called when an operation failed with a lock.
1403 ** If this routine returns non-zero, the lock is retried.  If it
1404 ** returns 0, the operation aborts with an SQLITE_BUSY error.
1405 */
1406 int sqlite3InvokeBusyHandler(BusyHandler *p){
1407   int rc;
1408   if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
1409   rc = p->xFunc(p->pArg, p->nBusy);
1410   if( rc==0 ){
1411     p->nBusy = -1;
1412   }else{
1413     p->nBusy++;
1414   }
1415   return rc;
1416 }
1417 
1418 /*
1419 ** This routine sets the busy callback for an Sqlite database to the
1420 ** given callback function with the given argument.
1421 */
1422 int sqlite3_busy_handler(
1423   sqlite3 *db,
1424   int (*xBusy)(void*,int),
1425   void *pArg
1426 ){
1427 #ifdef SQLITE_ENABLE_API_ARMOR
1428   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
1429 #endif
1430   sqlite3_mutex_enter(db->mutex);
1431   db->busyHandler.xFunc = xBusy;
1432   db->busyHandler.pArg = pArg;
1433   db->busyHandler.nBusy = 0;
1434   db->busyTimeout = 0;
1435   sqlite3_mutex_leave(db->mutex);
1436   return SQLITE_OK;
1437 }
1438 
1439 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
1440 /*
1441 ** This routine sets the progress callback for an Sqlite database to the
1442 ** given callback function with the given argument. The progress callback will
1443 ** be invoked every nOps opcodes.
1444 */
1445 void sqlite3_progress_handler(
1446   sqlite3 *db,
1447   int nOps,
1448   int (*xProgress)(void*),
1449   void *pArg
1450 ){
1451 #ifdef SQLITE_ENABLE_API_ARMOR
1452   if( !sqlite3SafetyCheckOk(db) ){
1453     (void)SQLITE_MISUSE_BKPT;
1454     return;
1455   }
1456 #endif
1457   sqlite3_mutex_enter(db->mutex);
1458   if( nOps>0 ){
1459     db->xProgress = xProgress;
1460     db->nProgressOps = (unsigned)nOps;
1461     db->pProgressArg = pArg;
1462   }else{
1463     db->xProgress = 0;
1464     db->nProgressOps = 0;
1465     db->pProgressArg = 0;
1466   }
1467   sqlite3_mutex_leave(db->mutex);
1468 }
1469 #endif
1470 
1471 
1472 /*
1473 ** This routine installs a default busy handler that waits for the
1474 ** specified number of milliseconds before returning 0.
1475 */
1476 int sqlite3_busy_timeout(sqlite3 *db, int ms){
1477 #ifdef SQLITE_ENABLE_API_ARMOR
1478   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
1479 #endif
1480   if( ms>0 ){
1481     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
1482     db->busyTimeout = ms;
1483   }else{
1484     sqlite3_busy_handler(db, 0, 0);
1485   }
1486   return SQLITE_OK;
1487 }
1488 
1489 /*
1490 ** Cause any pending operation to stop at its earliest opportunity.
1491 */
1492 void sqlite3_interrupt(sqlite3 *db){
1493 #ifdef SQLITE_ENABLE_API_ARMOR
1494   if( !sqlite3SafetyCheckOk(db) ){
1495     (void)SQLITE_MISUSE_BKPT;
1496     return;
1497   }
1498 #endif
1499   db->u1.isInterrupted = 1;
1500 }
1501 
1502 
1503 /*
1504 ** This function is exactly the same as sqlite3_create_function(), except
1505 ** that it is designed to be called by internal code. The difference is
1506 ** that if a malloc() fails in sqlite3_create_function(), an error code
1507 ** is returned and the mallocFailed flag cleared.
1508 */
1509 int sqlite3CreateFunc(
1510   sqlite3 *db,
1511   const char *zFunctionName,
1512   int nArg,
1513   int enc,
1514   void *pUserData,
1515   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1516   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1517   void (*xFinal)(sqlite3_context*),
1518   FuncDestructor *pDestructor
1519 ){
1520   FuncDef *p;
1521   int nName;
1522   int extraFlags;
1523 
1524   assert( sqlite3_mutex_held(db->mutex) );
1525   if( zFunctionName==0 ||
1526       (xFunc && (xFinal || xStep)) ||
1527       (!xFunc && (xFinal && !xStep)) ||
1528       (!xFunc && (!xFinal && xStep)) ||
1529       (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
1530       (255<(nName = sqlite3Strlen30( zFunctionName))) ){
1531     return SQLITE_MISUSE_BKPT;
1532   }
1533 
1534   assert( SQLITE_FUNC_CONSTANT==SQLITE_DETERMINISTIC );
1535   extraFlags = enc &  SQLITE_DETERMINISTIC;
1536   enc &= (SQLITE_FUNC_ENCMASK|SQLITE_ANY);
1537 
1538 #ifndef SQLITE_OMIT_UTF16
1539   /* If SQLITE_UTF16 is specified as the encoding type, transform this
1540   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
1541   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
1542   **
1543   ** If SQLITE_ANY is specified, add three versions of the function
1544   ** to the hash table.
1545   */
1546   if( enc==SQLITE_UTF16 ){
1547     enc = SQLITE_UTF16NATIVE;
1548   }else if( enc==SQLITE_ANY ){
1549     int rc;
1550     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8|extraFlags,
1551          pUserData, xFunc, xStep, xFinal, pDestructor);
1552     if( rc==SQLITE_OK ){
1553       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE|extraFlags,
1554           pUserData, xFunc, xStep, xFinal, pDestructor);
1555     }
1556     if( rc!=SQLITE_OK ){
1557       return rc;
1558     }
1559     enc = SQLITE_UTF16BE;
1560   }
1561 #else
1562   enc = SQLITE_UTF8;
1563 #endif
1564 
1565   /* Check if an existing function is being overridden or deleted. If so,
1566   ** and there are active VMs, then return SQLITE_BUSY. If a function
1567   ** is being overridden/deleted but there are no active VMs, allow the
1568   ** operation to continue but invalidate all precompiled statements.
1569   */
1570   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
1571   if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==enc && p->nArg==nArg ){
1572     if( db->nVdbeActive ){
1573       sqlite3ErrorWithMsg(db, SQLITE_BUSY,
1574         "unable to delete/modify user-function due to active statements");
1575       assert( !db->mallocFailed );
1576       return SQLITE_BUSY;
1577     }else{
1578       sqlite3ExpirePreparedStatements(db);
1579     }
1580   }
1581 
1582   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
1583   assert(p || db->mallocFailed);
1584   if( !p ){
1585     return SQLITE_NOMEM;
1586   }
1587 
1588   /* If an older version of the function with a configured destructor is
1589   ** being replaced invoke the destructor function here. */
1590   functionDestroy(db, p);
1591 
1592   if( pDestructor ){
1593     pDestructor->nRef++;
1594   }
1595   p->pDestructor = pDestructor;
1596   p->funcFlags = (p->funcFlags & SQLITE_FUNC_ENCMASK) | extraFlags;
1597   testcase( p->funcFlags & SQLITE_DETERMINISTIC );
1598   p->xFunc = xFunc;
1599   p->xStep = xStep;
1600   p->xFinalize = xFinal;
1601   p->pUserData = pUserData;
1602   p->nArg = (u16)nArg;
1603   return SQLITE_OK;
1604 }
1605 
1606 /*
1607 ** Create new user functions.
1608 */
1609 int sqlite3_create_function(
1610   sqlite3 *db,
1611   const char *zFunc,
1612   int nArg,
1613   int enc,
1614   void *p,
1615   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1616   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1617   void (*xFinal)(sqlite3_context*)
1618 ){
1619   return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
1620                                     xFinal, 0);
1621 }
1622 
1623 int sqlite3_create_function_v2(
1624   sqlite3 *db,
1625   const char *zFunc,
1626   int nArg,
1627   int enc,
1628   void *p,
1629   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1630   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1631   void (*xFinal)(sqlite3_context*),
1632   void (*xDestroy)(void *)
1633 ){
1634   int rc = SQLITE_ERROR;
1635   FuncDestructor *pArg = 0;
1636 
1637 #ifdef SQLITE_ENABLE_API_ARMOR
1638   if( !sqlite3SafetyCheckOk(db) ){
1639     return SQLITE_MISUSE_BKPT;
1640   }
1641 #endif
1642   sqlite3_mutex_enter(db->mutex);
1643   if( xDestroy ){
1644     pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
1645     if( !pArg ){
1646       xDestroy(p);
1647       goto out;
1648     }
1649     pArg->xDestroy = xDestroy;
1650     pArg->pUserData = p;
1651   }
1652   rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
1653   if( pArg && pArg->nRef==0 ){
1654     assert( rc!=SQLITE_OK );
1655     xDestroy(p);
1656     sqlite3DbFree(db, pArg);
1657   }
1658 
1659  out:
1660   rc = sqlite3ApiExit(db, rc);
1661   sqlite3_mutex_leave(db->mutex);
1662   return rc;
1663 }
1664 
1665 #ifndef SQLITE_OMIT_UTF16
1666 int sqlite3_create_function16(
1667   sqlite3 *db,
1668   const void *zFunctionName,
1669   int nArg,
1670   int eTextRep,
1671   void *p,
1672   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
1673   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
1674   void (*xFinal)(sqlite3_context*)
1675 ){
1676   int rc;
1677   char *zFunc8;
1678 
1679 #ifdef SQLITE_ENABLE_API_ARMOR
1680   if( !sqlite3SafetyCheckOk(db) || zFunctionName==0 ) return SQLITE_MISUSE_BKPT;
1681 #endif
1682   sqlite3_mutex_enter(db->mutex);
1683   assert( !db->mallocFailed );
1684   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
1685   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
1686   sqlite3DbFree(db, zFunc8);
1687   rc = sqlite3ApiExit(db, rc);
1688   sqlite3_mutex_leave(db->mutex);
1689   return rc;
1690 }
1691 #endif
1692 
1693 
1694 /*
1695 ** Declare that a function has been overloaded by a virtual table.
1696 **
1697 ** If the function already exists as a regular global function, then
1698 ** this routine is a no-op.  If the function does not exist, then create
1699 ** a new one that always throws a run-time error.
1700 **
1701 ** When virtual tables intend to provide an overloaded function, they
1702 ** should call this routine to make sure the global function exists.
1703 ** A global function must exist in order for name resolution to work
1704 ** properly.
1705 */
1706 int sqlite3_overload_function(
1707   sqlite3 *db,
1708   const char *zName,
1709   int nArg
1710 ){
1711   int nName = sqlite3Strlen30(zName);
1712   int rc = SQLITE_OK;
1713 
1714 #ifdef SQLITE_ENABLE_API_ARMOR
1715   if( !sqlite3SafetyCheckOk(db) || zName==0 || nArg<-2 ){
1716     return SQLITE_MISUSE_BKPT;
1717   }
1718 #endif
1719   sqlite3_mutex_enter(db->mutex);
1720   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
1721     rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
1722                            0, sqlite3InvalidFunction, 0, 0, 0);
1723   }
1724   rc = sqlite3ApiExit(db, rc);
1725   sqlite3_mutex_leave(db->mutex);
1726   return rc;
1727 }
1728 
1729 #ifndef SQLITE_OMIT_TRACE
1730 /*
1731 ** Register a trace function.  The pArg from the previously registered trace
1732 ** is returned.
1733 **
1734 ** A NULL trace function means that no tracing is executes.  A non-NULL
1735 ** trace is a pointer to a function that is invoked at the start of each
1736 ** SQL statement.
1737 */
1738 void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
1739   void *pOld;
1740 
1741 #ifdef SQLITE_ENABLE_API_ARMOR
1742   if( !sqlite3SafetyCheckOk(db) ){
1743     (void)SQLITE_MISUSE_BKPT;
1744     return 0;
1745   }
1746 #endif
1747   sqlite3_mutex_enter(db->mutex);
1748   pOld = db->pTraceArg;
1749   db->xTrace = xTrace;
1750   db->pTraceArg = pArg;
1751   sqlite3_mutex_leave(db->mutex);
1752   return pOld;
1753 }
1754 /*
1755 ** Register a profile function.  The pArg from the previously registered
1756 ** profile function is returned.
1757 **
1758 ** A NULL profile function means that no profiling is executes.  A non-NULL
1759 ** profile is a pointer to a function that is invoked at the conclusion of
1760 ** each SQL statement that is run.
1761 */
1762 void *sqlite3_profile(
1763   sqlite3 *db,
1764   void (*xProfile)(void*,const char*,sqlite_uint64),
1765   void *pArg
1766 ){
1767   void *pOld;
1768 
1769 #ifdef SQLITE_ENABLE_API_ARMOR
1770   if( !sqlite3SafetyCheckOk(db) ){
1771     (void)SQLITE_MISUSE_BKPT;
1772     return 0;
1773   }
1774 #endif
1775   sqlite3_mutex_enter(db->mutex);
1776   pOld = db->pProfileArg;
1777   db->xProfile = xProfile;
1778   db->pProfileArg = pArg;
1779   sqlite3_mutex_leave(db->mutex);
1780   return pOld;
1781 }
1782 #endif /* SQLITE_OMIT_TRACE */
1783 
1784 /*
1785 ** Register a function to be invoked when a transaction commits.
1786 ** If the invoked function returns non-zero, then the commit becomes a
1787 ** rollback.
1788 */
1789 void *sqlite3_commit_hook(
1790   sqlite3 *db,              /* Attach the hook to this database */
1791   int (*xCallback)(void*),  /* Function to invoke on each commit */
1792   void *pArg                /* Argument to the function */
1793 ){
1794   void *pOld;
1795 
1796 #ifdef SQLITE_ENABLE_API_ARMOR
1797   if( !sqlite3SafetyCheckOk(db) ){
1798     (void)SQLITE_MISUSE_BKPT;
1799     return 0;
1800   }
1801 #endif
1802   sqlite3_mutex_enter(db->mutex);
1803   pOld = db->pCommitArg;
1804   db->xCommitCallback = xCallback;
1805   db->pCommitArg = pArg;
1806   sqlite3_mutex_leave(db->mutex);
1807   return pOld;
1808 }
1809 
1810 /*
1811 ** Register a callback to be invoked each time a row is updated,
1812 ** inserted or deleted using this database connection.
1813 */
1814 void *sqlite3_update_hook(
1815   sqlite3 *db,              /* Attach the hook to this database */
1816   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
1817   void *pArg                /* Argument to the function */
1818 ){
1819   void *pRet;
1820 
1821 #ifdef SQLITE_ENABLE_API_ARMOR
1822   if( !sqlite3SafetyCheckOk(db) ){
1823     (void)SQLITE_MISUSE_BKPT;
1824     return 0;
1825   }
1826 #endif
1827   sqlite3_mutex_enter(db->mutex);
1828   pRet = db->pUpdateArg;
1829   db->xUpdateCallback = xCallback;
1830   db->pUpdateArg = pArg;
1831   sqlite3_mutex_leave(db->mutex);
1832   return pRet;
1833 }
1834 
1835 /*
1836 ** Register a callback to be invoked each time a transaction is rolled
1837 ** back by this database connection.
1838 */
1839 void *sqlite3_rollback_hook(
1840   sqlite3 *db,              /* Attach the hook to this database */
1841   void (*xCallback)(void*), /* Callback function */
1842   void *pArg                /* Argument to the function */
1843 ){
1844   void *pRet;
1845 
1846 #ifdef SQLITE_ENABLE_API_ARMOR
1847   if( !sqlite3SafetyCheckOk(db) ){
1848     (void)SQLITE_MISUSE_BKPT;
1849     return 0;
1850   }
1851 #endif
1852   sqlite3_mutex_enter(db->mutex);
1853   pRet = db->pRollbackArg;
1854   db->xRollbackCallback = xCallback;
1855   db->pRollbackArg = pArg;
1856   sqlite3_mutex_leave(db->mutex);
1857   return pRet;
1858 }
1859 
1860 #ifndef SQLITE_OMIT_WAL
1861 /*
1862 ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
1863 ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
1864 ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
1865 ** wal_autocheckpoint()).
1866 */
1867 int sqlite3WalDefaultHook(
1868   void *pClientData,     /* Argument */
1869   sqlite3 *db,           /* Connection */
1870   const char *zDb,       /* Database */
1871   int nFrame             /* Size of WAL */
1872 ){
1873   if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
1874     sqlite3BeginBenignMalloc();
1875     sqlite3_wal_checkpoint(db, zDb);
1876     sqlite3EndBenignMalloc();
1877   }
1878   return SQLITE_OK;
1879 }
1880 #endif /* SQLITE_OMIT_WAL */
1881 
1882 /*
1883 ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
1884 ** a database after committing a transaction if there are nFrame or
1885 ** more frames in the log file. Passing zero or a negative value as the
1886 ** nFrame parameter disables automatic checkpoints entirely.
1887 **
1888 ** The callback registered by this function replaces any existing callback
1889 ** registered using sqlite3_wal_hook(). Likewise, registering a callback
1890 ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
1891 ** configured by this function.
1892 */
1893 int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
1894 #ifdef SQLITE_OMIT_WAL
1895   UNUSED_PARAMETER(db);
1896   UNUSED_PARAMETER(nFrame);
1897 #else
1898 #ifdef SQLITE_ENABLE_API_ARMOR
1899   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
1900 #endif
1901   if( nFrame>0 ){
1902     sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
1903   }else{
1904     sqlite3_wal_hook(db, 0, 0);
1905   }
1906 #endif
1907   return SQLITE_OK;
1908 }
1909 
1910 /*
1911 ** Register a callback to be invoked each time a transaction is written
1912 ** into the write-ahead-log by this database connection.
1913 */
1914 void *sqlite3_wal_hook(
1915   sqlite3 *db,                    /* Attach the hook to this db handle */
1916   int(*xCallback)(void *, sqlite3*, const char*, int),
1917   void *pArg                      /* First argument passed to xCallback() */
1918 ){
1919 #ifndef SQLITE_OMIT_WAL
1920   void *pRet;
1921 #ifdef SQLITE_ENABLE_API_ARMOR
1922   if( !sqlite3SafetyCheckOk(db) ){
1923     (void)SQLITE_MISUSE_BKPT;
1924     return 0;
1925   }
1926 #endif
1927   sqlite3_mutex_enter(db->mutex);
1928   pRet = db->pWalArg;
1929   db->xWalCallback = xCallback;
1930   db->pWalArg = pArg;
1931   sqlite3_mutex_leave(db->mutex);
1932   return pRet;
1933 #else
1934   return 0;
1935 #endif
1936 }
1937 
1938 /*
1939 ** Checkpoint database zDb.
1940 */
1941 int sqlite3_wal_checkpoint_v2(
1942   sqlite3 *db,                    /* Database handle */
1943   const char *zDb,                /* Name of attached database (or NULL) */
1944   int eMode,                      /* SQLITE_CHECKPOINT_* value */
1945   int *pnLog,                     /* OUT: Size of WAL log in frames */
1946   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
1947 ){
1948 #ifdef SQLITE_OMIT_WAL
1949   return SQLITE_OK;
1950 #else
1951   int rc;                         /* Return code */
1952   int iDb = SQLITE_MAX_ATTACHED;  /* sqlite3.aDb[] index of db to checkpoint */
1953 
1954 #ifdef SQLITE_ENABLE_API_ARMOR
1955   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
1956 #endif
1957 
1958   /* Initialize the output variables to -1 in case an error occurs. */
1959   if( pnLog ) *pnLog = -1;
1960   if( pnCkpt ) *pnCkpt = -1;
1961 
1962   assert( SQLITE_CHECKPOINT_PASSIVE==0 );
1963   assert( SQLITE_CHECKPOINT_FULL==1 );
1964   assert( SQLITE_CHECKPOINT_RESTART==2 );
1965   assert( SQLITE_CHECKPOINT_TRUNCATE==3 );
1966   if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_TRUNCATE ){
1967     /* EVIDENCE-OF: R-03996-12088 The M parameter must be a valid checkpoint
1968     ** mode: */
1969     return SQLITE_MISUSE;
1970   }
1971 
1972   sqlite3_mutex_enter(db->mutex);
1973   if( zDb && zDb[0] ){
1974     iDb = sqlite3FindDbName(db, zDb);
1975   }
1976   if( iDb<0 ){
1977     rc = SQLITE_ERROR;
1978     sqlite3ErrorWithMsg(db, SQLITE_ERROR, "unknown database: %s", zDb);
1979   }else{
1980     db->busyHandler.nBusy = 0;
1981     rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
1982     sqlite3Error(db, rc);
1983   }
1984   rc = sqlite3ApiExit(db, rc);
1985   sqlite3_mutex_leave(db->mutex);
1986   return rc;
1987 #endif
1988 }
1989 
1990 
1991 /*
1992 ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
1993 ** to contains a zero-length string, all attached databases are
1994 ** checkpointed.
1995 */
1996 int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
1997   /* EVIDENCE-OF: R-41613-20553 The sqlite3_wal_checkpoint(D,X) is equivalent to
1998   ** sqlite3_wal_checkpoint_v2(D,X,SQLITE_CHECKPOINT_PASSIVE,0,0). */
1999   return sqlite3_wal_checkpoint_v2(db,zDb,SQLITE_CHECKPOINT_PASSIVE,0,0);
2000 }
2001 
2002 #ifndef SQLITE_OMIT_WAL
2003 /*
2004 ** Run a checkpoint on database iDb. This is a no-op if database iDb is
2005 ** not currently open in WAL mode.
2006 **
2007 ** If a transaction is open on the database being checkpointed, this
2008 ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If
2009 ** an error occurs while running the checkpoint, an SQLite error code is
2010 ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
2011 **
2012 ** The mutex on database handle db should be held by the caller. The mutex
2013 ** associated with the specific b-tree being checkpointed is taken by
2014 ** this function while the checkpoint is running.
2015 **
2016 ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
2017 ** checkpointed. If an error is encountered it is returned immediately -
2018 ** no attempt is made to checkpoint any remaining databases.
2019 **
2020 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
2021 */
2022 int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
2023   int rc = SQLITE_OK;             /* Return code */
2024   int i;                          /* Used to iterate through attached dbs */
2025   int bBusy = 0;                  /* True if SQLITE_BUSY has been encountered */
2026 
2027   assert( sqlite3_mutex_held(db->mutex) );
2028   assert( !pnLog || *pnLog==-1 );
2029   assert( !pnCkpt || *pnCkpt==-1 );
2030 
2031   for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
2032     if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
2033       rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
2034       pnLog = 0;
2035       pnCkpt = 0;
2036       if( rc==SQLITE_BUSY ){
2037         bBusy = 1;
2038         rc = SQLITE_OK;
2039       }
2040     }
2041   }
2042 
2043   return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
2044 }
2045 #endif /* SQLITE_OMIT_WAL */
2046 
2047 /*
2048 ** This function returns true if main-memory should be used instead of
2049 ** a temporary file for transient pager files and statement journals.
2050 ** The value returned depends on the value of db->temp_store (runtime
2051 ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
2052 ** following table describes the relationship between these two values
2053 ** and this functions return value.
2054 **
2055 **   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
2056 **   -----------------     --------------     ------------------------------
2057 **   0                     any                file      (return 0)
2058 **   1                     1                  file      (return 0)
2059 **   1                     2                  memory    (return 1)
2060 **   1                     0                  file      (return 0)
2061 **   2                     1                  file      (return 0)
2062 **   2                     2                  memory    (return 1)
2063 **   2                     0                  memory    (return 1)
2064 **   3                     any                memory    (return 1)
2065 */
2066 int sqlite3TempInMemory(const sqlite3 *db){
2067 #if SQLITE_TEMP_STORE==1
2068   return ( db->temp_store==2 );
2069 #endif
2070 #if SQLITE_TEMP_STORE==2
2071   return ( db->temp_store!=1 );
2072 #endif
2073 #if SQLITE_TEMP_STORE==3
2074   return 1;
2075 #endif
2076 #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
2077   return 0;
2078 #endif
2079 }
2080 
2081 /*
2082 ** Return UTF-8 encoded English language explanation of the most recent
2083 ** error.
2084 */
2085 const char *sqlite3_errmsg(sqlite3 *db){
2086   const char *z;
2087   if( !db ){
2088     return sqlite3ErrStr(SQLITE_NOMEM);
2089   }
2090   if( !sqlite3SafetyCheckSickOrOk(db) ){
2091     return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
2092   }
2093   sqlite3_mutex_enter(db->mutex);
2094   if( db->mallocFailed ){
2095     z = sqlite3ErrStr(SQLITE_NOMEM);
2096   }else{
2097     testcase( db->pErr==0 );
2098     z = (char*)sqlite3_value_text(db->pErr);
2099     assert( !db->mallocFailed );
2100     if( z==0 ){
2101       z = sqlite3ErrStr(db->errCode);
2102     }
2103   }
2104   sqlite3_mutex_leave(db->mutex);
2105   return z;
2106 }
2107 
2108 #ifndef SQLITE_OMIT_UTF16
2109 /*
2110 ** Return UTF-16 encoded English language explanation of the most recent
2111 ** error.
2112 */
2113 const void *sqlite3_errmsg16(sqlite3 *db){
2114   static const u16 outOfMem[] = {
2115     'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
2116   };
2117   static const u16 misuse[] = {
2118     'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ',
2119     'r', 'o', 'u', 't', 'i', 'n', 'e', ' ',
2120     'c', 'a', 'l', 'l', 'e', 'd', ' ',
2121     'o', 'u', 't', ' ',
2122     'o', 'f', ' ',
2123     's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
2124   };
2125 
2126   const void *z;
2127   if( !db ){
2128     return (void *)outOfMem;
2129   }
2130   if( !sqlite3SafetyCheckSickOrOk(db) ){
2131     return (void *)misuse;
2132   }
2133   sqlite3_mutex_enter(db->mutex);
2134   if( db->mallocFailed ){
2135     z = (void *)outOfMem;
2136   }else{
2137     z = sqlite3_value_text16(db->pErr);
2138     if( z==0 ){
2139       sqlite3ErrorWithMsg(db, db->errCode, sqlite3ErrStr(db->errCode));
2140       z = sqlite3_value_text16(db->pErr);
2141     }
2142     /* A malloc() may have failed within the call to sqlite3_value_text16()
2143     ** above. If this is the case, then the db->mallocFailed flag needs to
2144     ** be cleared before returning. Do this directly, instead of via
2145     ** sqlite3ApiExit(), to avoid setting the database handle error message.
2146     */
2147     db->mallocFailed = 0;
2148   }
2149   sqlite3_mutex_leave(db->mutex);
2150   return z;
2151 }
2152 #endif /* SQLITE_OMIT_UTF16 */
2153 
2154 /*
2155 ** Return the most recent error code generated by an SQLite routine. If NULL is
2156 ** passed to this function, we assume a malloc() failed during sqlite3_open().
2157 */
2158 int sqlite3_errcode(sqlite3 *db){
2159   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
2160     return SQLITE_MISUSE_BKPT;
2161   }
2162   if( !db || db->mallocFailed ){
2163     return SQLITE_NOMEM;
2164   }
2165   return db->errCode & db->errMask;
2166 }
2167 int sqlite3_extended_errcode(sqlite3 *db){
2168   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
2169     return SQLITE_MISUSE_BKPT;
2170   }
2171   if( !db || db->mallocFailed ){
2172     return SQLITE_NOMEM;
2173   }
2174   return db->errCode;
2175 }
2176 
2177 /*
2178 ** Return a string that describes the kind of error specified in the
2179 ** argument.  For now, this simply calls the internal sqlite3ErrStr()
2180 ** function.
2181 */
2182 const char *sqlite3_errstr(int rc){
2183   return sqlite3ErrStr(rc);
2184 }
2185 
2186 /*
2187 ** Create a new collating function for database "db".  The name is zName
2188 ** and the encoding is enc.
2189 */
2190 static int createCollation(
2191   sqlite3* db,
2192   const char *zName,
2193   u8 enc,
2194   void* pCtx,
2195   int(*xCompare)(void*,int,const void*,int,const void*),
2196   void(*xDel)(void*)
2197 ){
2198   CollSeq *pColl;
2199   int enc2;
2200 
2201   assert( sqlite3_mutex_held(db->mutex) );
2202 
2203   /* If SQLITE_UTF16 is specified as the encoding type, transform this
2204   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
2205   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
2206   */
2207   enc2 = enc;
2208   testcase( enc2==SQLITE_UTF16 );
2209   testcase( enc2==SQLITE_UTF16_ALIGNED );
2210   if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
2211     enc2 = SQLITE_UTF16NATIVE;
2212   }
2213   if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
2214     return SQLITE_MISUSE_BKPT;
2215   }
2216 
2217   /* Check if this call is removing or replacing an existing collation
2218   ** sequence. If so, and there are active VMs, return busy. If there
2219   ** are no active VMs, invalidate any pre-compiled statements.
2220   */
2221   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
2222   if( pColl && pColl->xCmp ){
2223     if( db->nVdbeActive ){
2224       sqlite3ErrorWithMsg(db, SQLITE_BUSY,
2225         "unable to delete/modify collation sequence due to active statements");
2226       return SQLITE_BUSY;
2227     }
2228     sqlite3ExpirePreparedStatements(db);
2229 
2230     /* If collation sequence pColl was created directly by a call to
2231     ** sqlite3_create_collation, and not generated by synthCollSeq(),
2232     ** then any copies made by synthCollSeq() need to be invalidated.
2233     ** Also, collation destructor - CollSeq.xDel() - function may need
2234     ** to be called.
2235     */
2236     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
2237       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName);
2238       int j;
2239       for(j=0; j<3; j++){
2240         CollSeq *p = &aColl[j];
2241         if( p->enc==pColl->enc ){
2242           if( p->xDel ){
2243             p->xDel(p->pUser);
2244           }
2245           p->xCmp = 0;
2246         }
2247       }
2248     }
2249   }
2250 
2251   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
2252   if( pColl==0 ) return SQLITE_NOMEM;
2253   pColl->xCmp = xCompare;
2254   pColl->pUser = pCtx;
2255   pColl->xDel = xDel;
2256   pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
2257   sqlite3Error(db, SQLITE_OK);
2258   return SQLITE_OK;
2259 }
2260 
2261 
2262 /*
2263 ** This array defines hard upper bounds on limit values.  The
2264 ** initializer must be kept in sync with the SQLITE_LIMIT_*
2265 ** #defines in sqlite3.h.
2266 */
2267 static const int aHardLimit[] = {
2268   SQLITE_MAX_LENGTH,
2269   SQLITE_MAX_SQL_LENGTH,
2270   SQLITE_MAX_COLUMN,
2271   SQLITE_MAX_EXPR_DEPTH,
2272   SQLITE_MAX_COMPOUND_SELECT,
2273   SQLITE_MAX_VDBE_OP,
2274   SQLITE_MAX_FUNCTION_ARG,
2275   SQLITE_MAX_ATTACHED,
2276   SQLITE_MAX_LIKE_PATTERN_LENGTH,
2277   SQLITE_MAX_VARIABLE_NUMBER,      /* IMP: R-38091-32352 */
2278   SQLITE_MAX_TRIGGER_DEPTH,
2279   SQLITE_MAX_WORKER_THREADS,
2280 };
2281 
2282 /*
2283 ** Make sure the hard limits are set to reasonable values
2284 */
2285 #if SQLITE_MAX_LENGTH<100
2286 # error SQLITE_MAX_LENGTH must be at least 100
2287 #endif
2288 #if SQLITE_MAX_SQL_LENGTH<100
2289 # error SQLITE_MAX_SQL_LENGTH must be at least 100
2290 #endif
2291 #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
2292 # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
2293 #endif
2294 #if SQLITE_MAX_COMPOUND_SELECT<2
2295 # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
2296 #endif
2297 #if SQLITE_MAX_VDBE_OP<40
2298 # error SQLITE_MAX_VDBE_OP must be at least 40
2299 #endif
2300 #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
2301 # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
2302 #endif
2303 #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>125
2304 # error SQLITE_MAX_ATTACHED must be between 0 and 125
2305 #endif
2306 #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
2307 # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
2308 #endif
2309 #if SQLITE_MAX_COLUMN>32767
2310 # error SQLITE_MAX_COLUMN must not exceed 32767
2311 #endif
2312 #if SQLITE_MAX_TRIGGER_DEPTH<1
2313 # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
2314 #endif
2315 #if SQLITE_MAX_WORKER_THREADS<0 || SQLITE_MAX_WORKER_THREADS>50
2316 # error SQLITE_MAX_WORKER_THREADS must be between 0 and 50
2317 #endif
2318 
2319 
2320 /*
2321 ** Change the value of a limit.  Report the old value.
2322 ** If an invalid limit index is supplied, report -1.
2323 ** Make no changes but still report the old value if the
2324 ** new limit is negative.
2325 **
2326 ** A new lower limit does not shrink existing constructs.
2327 ** It merely prevents new constructs that exceed the limit
2328 ** from forming.
2329 */
2330 int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
2331   int oldLimit;
2332 
2333 #ifdef SQLITE_ENABLE_API_ARMOR
2334   if( !sqlite3SafetyCheckOk(db) ){
2335     (void)SQLITE_MISUSE_BKPT;
2336     return -1;
2337   }
2338 #endif
2339 
2340   /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
2341   ** there is a hard upper bound set at compile-time by a C preprocessor
2342   ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
2343   ** "_MAX_".)
2344   */
2345   assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
2346   assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
2347   assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
2348   assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
2349   assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
2350   assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
2351   assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
2352   assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
2353   assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
2354                                                SQLITE_MAX_LIKE_PATTERN_LENGTH );
2355   assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
2356   assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
2357   assert( aHardLimit[SQLITE_LIMIT_WORKER_THREADS]==SQLITE_MAX_WORKER_THREADS );
2358   assert( SQLITE_LIMIT_WORKER_THREADS==(SQLITE_N_LIMIT-1) );
2359 
2360 
2361   if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
2362     return -1;
2363   }
2364   oldLimit = db->aLimit[limitId];
2365   if( newLimit>=0 ){                   /* IMP: R-52476-28732 */
2366     if( newLimit>aHardLimit[limitId] ){
2367       newLimit = aHardLimit[limitId];  /* IMP: R-51463-25634 */
2368     }
2369     db->aLimit[limitId] = newLimit;
2370   }
2371   return oldLimit;                     /* IMP: R-53341-35419 */
2372 }
2373 
2374 /*
2375 ** This function is used to parse both URIs and non-URI filenames passed by the
2376 ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
2377 ** URIs specified as part of ATTACH statements.
2378 **
2379 ** The first argument to this function is the name of the VFS to use (or
2380 ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
2381 ** query parameter. The second argument contains the URI (or non-URI filename)
2382 ** itself. When this function is called the *pFlags variable should contain
2383 ** the default flags to open the database handle with. The value stored in
2384 ** *pFlags may be updated before returning if the URI filename contains
2385 ** "cache=xxx" or "mode=xxx" query parameters.
2386 **
2387 ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
2388 ** the VFS that should be used to open the database file. *pzFile is set to
2389 ** point to a buffer containing the name of the file to open. It is the
2390 ** responsibility of the caller to eventually call sqlite3_free() to release
2391 ** this buffer.
2392 **
2393 ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
2394 ** may be set to point to a buffer containing an English language error
2395 ** message. It is the responsibility of the caller to eventually release
2396 ** this buffer by calling sqlite3_free().
2397 */
2398 int sqlite3ParseUri(
2399   const char *zDefaultVfs,        /* VFS to use if no "vfs=xxx" query option */
2400   const char *zUri,               /* Nul-terminated URI to parse */
2401   unsigned int *pFlags,           /* IN/OUT: SQLITE_OPEN_XXX flags */
2402   sqlite3_vfs **ppVfs,            /* OUT: VFS to use */
2403   char **pzFile,                  /* OUT: Filename component of URI */
2404   char **pzErrMsg                 /* OUT: Error message (if rc!=SQLITE_OK) */
2405 ){
2406   int rc = SQLITE_OK;
2407   unsigned int flags = *pFlags;
2408   const char *zVfs = zDefaultVfs;
2409   char *zFile;
2410   char c;
2411   int nUri = sqlite3Strlen30(zUri);
2412 
2413   assert( *pzErrMsg==0 );
2414 
2415   if( ((flags & SQLITE_OPEN_URI)             /* IMP: R-48725-32206 */
2416             || sqlite3GlobalConfig.bOpenUri) /* IMP: R-51689-46548 */
2417    && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */
2418   ){
2419     char *zOpt;
2420     int eState;                   /* Parser state when parsing URI */
2421     int iIn;                      /* Input character index */
2422     int iOut = 0;                 /* Output character index */
2423     int nByte = nUri+2;           /* Bytes of space to allocate */
2424 
2425     /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen
2426     ** method that there may be extra parameters following the file-name.  */
2427     flags |= SQLITE_OPEN_URI;
2428 
2429     for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
2430     zFile = sqlite3_malloc(nByte);
2431     if( !zFile ) return SQLITE_NOMEM;
2432 
2433     iIn = 5;
2434 #ifdef SQLITE_ALLOW_URI_AUTHORITY
2435     if( strncmp(zUri+5, "///", 3)==0 ){
2436       iIn = 7;
2437       /* The following condition causes URIs with five leading / characters
2438       ** like file://///host/path to be converted into UNCs like //host/path.
2439       ** The correct URI for that UNC has only two or four leading / characters
2440       ** file://host/path or file:////host/path.  But 5 leading slashes is a
2441       ** common error, we are told, so we handle it as a special case. */
2442       if( strncmp(zUri+7, "///", 3)==0 ){ iIn++; }
2443     }else if( strncmp(zUri+5, "//localhost/", 12)==0 ){
2444       iIn = 16;
2445     }
2446 #else
2447     /* Discard the scheme and authority segments of the URI. */
2448     if( zUri[5]=='/' && zUri[6]=='/' ){
2449       iIn = 7;
2450       while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
2451       if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
2452         *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s",
2453             iIn-7, &zUri[7]);
2454         rc = SQLITE_ERROR;
2455         goto parse_uri_out;
2456       }
2457     }
2458 #endif
2459 
2460     /* Copy the filename and any query parameters into the zFile buffer.
2461     ** Decode %HH escape codes along the way.
2462     **
2463     ** Within this loop, variable eState may be set to 0, 1 or 2, depending
2464     ** on the parsing context. As follows:
2465     **
2466     **   0: Parsing file-name.
2467     **   1: Parsing name section of a name=value query parameter.
2468     **   2: Parsing value section of a name=value query parameter.
2469     */
2470     eState = 0;
2471     while( (c = zUri[iIn])!=0 && c!='#' ){
2472       iIn++;
2473       if( c=='%'
2474        && sqlite3Isxdigit(zUri[iIn])
2475        && sqlite3Isxdigit(zUri[iIn+1])
2476       ){
2477         int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
2478         octet += sqlite3HexToInt(zUri[iIn++]);
2479 
2480         assert( octet>=0 && octet<256 );
2481         if( octet==0 ){
2482           /* This branch is taken when "%00" appears within the URI. In this
2483           ** case we ignore all text in the remainder of the path, name or
2484           ** value currently being parsed. So ignore the current character
2485           ** and skip to the next "?", "=" or "&", as appropriate. */
2486           while( (c = zUri[iIn])!=0 && c!='#'
2487               && (eState!=0 || c!='?')
2488               && (eState!=1 || (c!='=' && c!='&'))
2489               && (eState!=2 || c!='&')
2490           ){
2491             iIn++;
2492           }
2493           continue;
2494         }
2495         c = octet;
2496       }else if( eState==1 && (c=='&' || c=='=') ){
2497         if( zFile[iOut-1]==0 ){
2498           /* An empty option name. Ignore this option altogether. */
2499           while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
2500           continue;
2501         }
2502         if( c=='&' ){
2503           zFile[iOut++] = '\0';
2504         }else{
2505           eState = 2;
2506         }
2507         c = 0;
2508       }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
2509         c = 0;
2510         eState = 1;
2511       }
2512       zFile[iOut++] = c;
2513     }
2514     if( eState==1 ) zFile[iOut++] = '\0';
2515     zFile[iOut++] = '\0';
2516     zFile[iOut++] = '\0';
2517 
2518     /* Check if there were any options specified that should be interpreted
2519     ** here. Options that are interpreted here include "vfs" and those that
2520     ** correspond to flags that may be passed to the sqlite3_open_v2()
2521     ** method. */
2522     zOpt = &zFile[sqlite3Strlen30(zFile)+1];
2523     while( zOpt[0] ){
2524       int nOpt = sqlite3Strlen30(zOpt);
2525       char *zVal = &zOpt[nOpt+1];
2526       int nVal = sqlite3Strlen30(zVal);
2527 
2528       if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
2529         zVfs = zVal;
2530       }else{
2531         struct OpenMode {
2532           const char *z;
2533           int mode;
2534         } *aMode = 0;
2535         char *zModeType = 0;
2536         int mask = 0;
2537         int limit = 0;
2538 
2539         if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
2540           static struct OpenMode aCacheMode[] = {
2541             { "shared",  SQLITE_OPEN_SHAREDCACHE },
2542             { "private", SQLITE_OPEN_PRIVATECACHE },
2543             { 0, 0 }
2544           };
2545 
2546           mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
2547           aMode = aCacheMode;
2548           limit = mask;
2549           zModeType = "cache";
2550         }
2551         if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
2552           static struct OpenMode aOpenMode[] = {
2553             { "ro",  SQLITE_OPEN_READONLY },
2554             { "rw",  SQLITE_OPEN_READWRITE },
2555             { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
2556             { "memory", SQLITE_OPEN_MEMORY },
2557             { 0, 0 }
2558           };
2559 
2560           mask = SQLITE_OPEN_READONLY | SQLITE_OPEN_READWRITE
2561                    | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY;
2562           aMode = aOpenMode;
2563           limit = mask & flags;
2564           zModeType = "access";
2565         }
2566 
2567         if( aMode ){
2568           int i;
2569           int mode = 0;
2570           for(i=0; aMode[i].z; i++){
2571             const char *z = aMode[i].z;
2572             if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
2573               mode = aMode[i].mode;
2574               break;
2575             }
2576           }
2577           if( mode==0 ){
2578             *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
2579             rc = SQLITE_ERROR;
2580             goto parse_uri_out;
2581           }
2582           if( (mode & ~SQLITE_OPEN_MEMORY)>limit ){
2583             *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
2584                                         zModeType, zVal);
2585             rc = SQLITE_PERM;
2586             goto parse_uri_out;
2587           }
2588           flags = (flags & ~mask) | mode;
2589         }
2590       }
2591 
2592       zOpt = &zVal[nVal+1];
2593     }
2594 
2595   }else{
2596     zFile = sqlite3_malloc(nUri+2);
2597     if( !zFile ) return SQLITE_NOMEM;
2598     memcpy(zFile, zUri, nUri);
2599     zFile[nUri] = '\0';
2600     zFile[nUri+1] = '\0';
2601     flags &= ~SQLITE_OPEN_URI;
2602   }
2603 
2604   *ppVfs = sqlite3_vfs_find(zVfs);
2605   if( *ppVfs==0 ){
2606     *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
2607     rc = SQLITE_ERROR;
2608   }
2609  parse_uri_out:
2610   if( rc!=SQLITE_OK ){
2611     sqlite3_free(zFile);
2612     zFile = 0;
2613   }
2614   *pFlags = flags;
2615   *pzFile = zFile;
2616   return rc;
2617 }
2618 
2619 
2620 /*
2621 ** This routine does the work of opening a database on behalf of
2622 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
2623 ** is UTF-8 encoded.
2624 */
2625 static int openDatabase(
2626   const char *zFilename, /* Database filename UTF-8 encoded */
2627   sqlite3 **ppDb,        /* OUT: Returned database handle */
2628   unsigned int flags,    /* Operational flags */
2629   const char *zVfs       /* Name of the VFS to use */
2630 ){
2631   sqlite3 *db;                    /* Store allocated handle here */
2632   int rc;                         /* Return code */
2633   int isThreadsafe;               /* True for threadsafe connections */
2634   char *zOpen = 0;                /* Filename argument to pass to BtreeOpen() */
2635   char *zErrMsg = 0;              /* Error message from sqlite3ParseUri() */
2636 
2637 #ifdef SQLITE_ENABLE_API_ARMOR
2638   if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
2639 #endif
2640   *ppDb = 0;
2641 #ifndef SQLITE_OMIT_AUTOINIT
2642   rc = sqlite3_initialize();
2643   if( rc ) return rc;
2644 #endif
2645 
2646   /* Only allow sensible combinations of bits in the flags argument.
2647   ** Throw an error if any non-sense combination is used.  If we
2648   ** do not block illegal combinations here, it could trigger
2649   ** assert() statements in deeper layers.  Sensible combinations
2650   ** are:
2651   **
2652   **  1:  SQLITE_OPEN_READONLY
2653   **  2:  SQLITE_OPEN_READWRITE
2654   **  6:  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
2655   */
2656   assert( SQLITE_OPEN_READONLY  == 0x01 );
2657   assert( SQLITE_OPEN_READWRITE == 0x02 );
2658   assert( SQLITE_OPEN_CREATE    == 0x04 );
2659   testcase( (1<<(flags&7))==0x02 ); /* READONLY */
2660   testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
2661   testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
2662   if( ((1<<(flags&7)) & 0x46)==0 ){
2663     return SQLITE_MISUSE_BKPT;  /* IMP: R-65497-44594 */
2664   }
2665 
2666   if( sqlite3GlobalConfig.bCoreMutex==0 ){
2667     isThreadsafe = 0;
2668   }else if( flags & SQLITE_OPEN_NOMUTEX ){
2669     isThreadsafe = 0;
2670   }else if( flags & SQLITE_OPEN_FULLMUTEX ){
2671     isThreadsafe = 1;
2672   }else{
2673     isThreadsafe = sqlite3GlobalConfig.bFullMutex;
2674   }
2675   if( flags & SQLITE_OPEN_PRIVATECACHE ){
2676     flags &= ~SQLITE_OPEN_SHAREDCACHE;
2677   }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
2678     flags |= SQLITE_OPEN_SHAREDCACHE;
2679   }
2680 
2681   /* Remove harmful bits from the flags parameter
2682   **
2683   ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
2684   ** dealt with in the previous code block.  Besides these, the only
2685   ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
2686   ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
2687   ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits.  Silently mask
2688   ** off all other flags.
2689   */
2690   flags &=  ~( SQLITE_OPEN_DELETEONCLOSE |
2691                SQLITE_OPEN_EXCLUSIVE |
2692                SQLITE_OPEN_MAIN_DB |
2693                SQLITE_OPEN_TEMP_DB |
2694                SQLITE_OPEN_TRANSIENT_DB |
2695                SQLITE_OPEN_MAIN_JOURNAL |
2696                SQLITE_OPEN_TEMP_JOURNAL |
2697                SQLITE_OPEN_SUBJOURNAL |
2698                SQLITE_OPEN_MASTER_JOURNAL |
2699                SQLITE_OPEN_NOMUTEX |
2700                SQLITE_OPEN_FULLMUTEX |
2701                SQLITE_OPEN_WAL
2702              );
2703 
2704   /* Allocate the sqlite data structure */
2705   db = sqlite3MallocZero( sizeof(sqlite3) );
2706   if( db==0 ) goto opendb_out;
2707   if( isThreadsafe ){
2708     db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
2709     if( db->mutex==0 ){
2710       sqlite3_free(db);
2711       db = 0;
2712       goto opendb_out;
2713     }
2714   }
2715   sqlite3_mutex_enter(db->mutex);
2716   db->errMask = 0xff;
2717   db->nDb = 2;
2718   db->magic = SQLITE_MAGIC_BUSY;
2719   db->aDb = db->aDbStatic;
2720 
2721   assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
2722   memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
2723   db->aLimit[SQLITE_LIMIT_WORKER_THREADS] = SQLITE_DEFAULT_WORKER_THREADS;
2724   db->autoCommit = 1;
2725   db->nextAutovac = -1;
2726   db->szMmap = sqlite3GlobalConfig.szMmap;
2727   db->nextPagesize = 0;
2728   db->nMaxSorterMmap = 0x7FFFFFFF;
2729   db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
2730 #if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
2731                  | SQLITE_AutoIndex
2732 #endif
2733 #if SQLITE_DEFAULT_CKPTFULLFSYNC
2734                  | SQLITE_CkptFullFSync
2735 #endif
2736 #if SQLITE_DEFAULT_FILE_FORMAT<4
2737                  | SQLITE_LegacyFileFmt
2738 #endif
2739 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
2740                  | SQLITE_LoadExtension
2741 #endif
2742 #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
2743                  | SQLITE_RecTriggers
2744 #endif
2745 #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
2746                  | SQLITE_ForeignKeys
2747 #endif
2748 #if defined(SQLITE_REVERSE_UNORDERED_SELECTS)
2749                  | SQLITE_ReverseOrder
2750 #endif
2751       ;
2752   sqlite3HashInit(&db->aCollSeq);
2753 #ifndef SQLITE_OMIT_VIRTUALTABLE
2754   sqlite3HashInit(&db->aModule);
2755 #endif
2756 
2757   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
2758   ** and UTF-16, so add a version for each to avoid any unnecessary
2759   ** conversions. The only error that can occur here is a malloc() failure.
2760   **
2761   ** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating
2762   ** functions:
2763   */
2764   createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
2765   createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
2766   createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
2767   createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
2768   createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
2769   if( db->mallocFailed ){
2770     goto opendb_out;
2771   }
2772   /* EVIDENCE-OF: R-08308-17224 The default collating function for all
2773   ** strings is BINARY.
2774   */
2775   db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
2776   assert( db->pDfltColl!=0 );
2777 
2778   /* Parse the filename/URI argument. */
2779   db->openFlags = flags;
2780   rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
2781   if( rc!=SQLITE_OK ){
2782     if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
2783     sqlite3ErrorWithMsg(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
2784     sqlite3_free(zErrMsg);
2785     goto opendb_out;
2786   }
2787 
2788   /* Open the backend database driver */
2789   rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
2790                         flags | SQLITE_OPEN_MAIN_DB);
2791   if( rc!=SQLITE_OK ){
2792     if( rc==SQLITE_IOERR_NOMEM ){
2793       rc = SQLITE_NOMEM;
2794     }
2795     sqlite3Error(db, rc);
2796     goto opendb_out;
2797   }
2798   sqlite3BtreeEnter(db->aDb[0].pBt);
2799   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
2800   if( !db->mallocFailed ) ENC(db) = SCHEMA_ENC(db);
2801   sqlite3BtreeLeave(db->aDb[0].pBt);
2802   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
2803 
2804   /* The default safety_level for the main database is 'full'; for the temp
2805   ** database it is 'NONE'. This matches the pager layer defaults.
2806   */
2807   db->aDb[0].zName = "main";
2808   db->aDb[0].safety_level = 3;
2809   db->aDb[1].zName = "temp";
2810   db->aDb[1].safety_level = 1;
2811 
2812   db->magic = SQLITE_MAGIC_OPEN;
2813   if( db->mallocFailed ){
2814     goto opendb_out;
2815   }
2816 
2817   /* Register all built-in functions, but do not attempt to read the
2818   ** database schema yet. This is delayed until the first time the database
2819   ** is accessed.
2820   */
2821   sqlite3Error(db, SQLITE_OK);
2822   sqlite3RegisterBuiltinFunctions(db);
2823 
2824   /* Load automatic extensions - extensions that have been registered
2825   ** using the sqlite3_automatic_extension() API.
2826   */
2827   rc = sqlite3_errcode(db);
2828   if( rc==SQLITE_OK ){
2829     sqlite3AutoLoadExtensions(db);
2830     rc = sqlite3_errcode(db);
2831     if( rc!=SQLITE_OK ){
2832       goto opendb_out;
2833     }
2834   }
2835 
2836 #ifdef SQLITE_ENABLE_FTS1
2837   if( !db->mallocFailed ){
2838     extern int sqlite3Fts1Init(sqlite3*);
2839     rc = sqlite3Fts1Init(db);
2840   }
2841 #endif
2842 
2843 #ifdef SQLITE_ENABLE_FTS2
2844   if( !db->mallocFailed && rc==SQLITE_OK ){
2845     extern int sqlite3Fts2Init(sqlite3*);
2846     rc = sqlite3Fts2Init(db);
2847   }
2848 #endif
2849 
2850 #ifdef SQLITE_ENABLE_FTS3
2851   if( !db->mallocFailed && rc==SQLITE_OK ){
2852     rc = sqlite3Fts3Init(db);
2853   }
2854 #endif
2855 
2856 #ifdef SQLITE_ENABLE_ICU
2857   if( !db->mallocFailed && rc==SQLITE_OK ){
2858     rc = sqlite3IcuInit(db);
2859   }
2860 #endif
2861 
2862 #ifdef SQLITE_ENABLE_RTREE
2863   if( !db->mallocFailed && rc==SQLITE_OK){
2864     rc = sqlite3RtreeInit(db);
2865   }
2866 #endif
2867 
2868   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
2869   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
2870   ** mode.  Doing nothing at all also makes NORMAL the default.
2871   */
2872 #ifdef SQLITE_DEFAULT_LOCKING_MODE
2873   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
2874   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
2875                           SQLITE_DEFAULT_LOCKING_MODE);
2876 #endif
2877 
2878   if( rc ) sqlite3Error(db, rc);
2879 
2880   /* Enable the lookaside-malloc subsystem */
2881   setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
2882                         sqlite3GlobalConfig.nLookaside);
2883 
2884   sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
2885 
2886 opendb_out:
2887   sqlite3_free(zOpen);
2888   if( db ){
2889     assert( db->mutex!=0 || isThreadsafe==0
2890            || sqlite3GlobalConfig.bFullMutex==0 );
2891     sqlite3_mutex_leave(db->mutex);
2892   }
2893   rc = sqlite3_errcode(db);
2894   assert( db!=0 || rc==SQLITE_NOMEM );
2895   if( rc==SQLITE_NOMEM ){
2896     sqlite3_close(db);
2897     db = 0;
2898   }else if( rc!=SQLITE_OK ){
2899     db->magic = SQLITE_MAGIC_SICK;
2900   }
2901   *ppDb = db;
2902 #ifdef SQLITE_ENABLE_SQLLOG
2903   if( sqlite3GlobalConfig.xSqllog ){
2904     /* Opening a db handle. Fourth parameter is passed 0. */
2905     void *pArg = sqlite3GlobalConfig.pSqllogArg;
2906     sqlite3GlobalConfig.xSqllog(pArg, db, zFilename, 0);
2907   }
2908 #endif
2909   return sqlite3ApiExit(0, rc);
2910 }
2911 
2912 /*
2913 ** Open a new database handle.
2914 */
2915 int sqlite3_open(
2916   const char *zFilename,
2917   sqlite3 **ppDb
2918 ){
2919   return openDatabase(zFilename, ppDb,
2920                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
2921 }
2922 int sqlite3_open_v2(
2923   const char *filename,   /* Database filename (UTF-8) */
2924   sqlite3 **ppDb,         /* OUT: SQLite db handle */
2925   int flags,              /* Flags */
2926   const char *zVfs        /* Name of VFS module to use */
2927 ){
2928   return openDatabase(filename, ppDb, (unsigned int)flags, zVfs);
2929 }
2930 
2931 #ifndef SQLITE_OMIT_UTF16
2932 /*
2933 ** Open a new database handle.
2934 */
2935 int sqlite3_open16(
2936   const void *zFilename,
2937   sqlite3 **ppDb
2938 ){
2939   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
2940   sqlite3_value *pVal;
2941   int rc;
2942 
2943 #ifdef SQLITE_ENABLE_API_ARMOR
2944   if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
2945 #endif
2946   *ppDb = 0;
2947 #ifndef SQLITE_OMIT_AUTOINIT
2948   rc = sqlite3_initialize();
2949   if( rc ) return rc;
2950 #endif
2951   if( zFilename==0 ) zFilename = "\000\000";
2952   pVal = sqlite3ValueNew(0);
2953   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
2954   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
2955   if( zFilename8 ){
2956     rc = openDatabase(zFilename8, ppDb,
2957                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
2958     assert( *ppDb || rc==SQLITE_NOMEM );
2959     if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
2960       SCHEMA_ENC(*ppDb) = ENC(*ppDb) = SQLITE_UTF16NATIVE;
2961     }
2962   }else{
2963     rc = SQLITE_NOMEM;
2964   }
2965   sqlite3ValueFree(pVal);
2966 
2967   return sqlite3ApiExit(0, rc);
2968 }
2969 #endif /* SQLITE_OMIT_UTF16 */
2970 
2971 /*
2972 ** Register a new collation sequence with the database handle db.
2973 */
2974 int sqlite3_create_collation(
2975   sqlite3* db,
2976   const char *zName,
2977   int enc,
2978   void* pCtx,
2979   int(*xCompare)(void*,int,const void*,int,const void*)
2980 ){
2981   return sqlite3_create_collation_v2(db, zName, enc, pCtx, xCompare, 0);
2982 }
2983 
2984 /*
2985 ** Register a new collation sequence with the database handle db.
2986 */
2987 int sqlite3_create_collation_v2(
2988   sqlite3* db,
2989   const char *zName,
2990   int enc,
2991   void* pCtx,
2992   int(*xCompare)(void*,int,const void*,int,const void*),
2993   void(*xDel)(void*)
2994 ){
2995   int rc;
2996 
2997 #ifdef SQLITE_ENABLE_API_ARMOR
2998   if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
2999 #endif
3000   sqlite3_mutex_enter(db->mutex);
3001   assert( !db->mallocFailed );
3002   rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
3003   rc = sqlite3ApiExit(db, rc);
3004   sqlite3_mutex_leave(db->mutex);
3005   return rc;
3006 }
3007 
3008 #ifndef SQLITE_OMIT_UTF16
3009 /*
3010 ** Register a new collation sequence with the database handle db.
3011 */
3012 int sqlite3_create_collation16(
3013   sqlite3* db,
3014   const void *zName,
3015   int enc,
3016   void* pCtx,
3017   int(*xCompare)(void*,int,const void*,int,const void*)
3018 ){
3019   int rc = SQLITE_OK;
3020   char *zName8;
3021 
3022 #ifdef SQLITE_ENABLE_API_ARMOR
3023   if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
3024 #endif
3025   sqlite3_mutex_enter(db->mutex);
3026   assert( !db->mallocFailed );
3027   zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
3028   if( zName8 ){
3029     rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
3030     sqlite3DbFree(db, zName8);
3031   }
3032   rc = sqlite3ApiExit(db, rc);
3033   sqlite3_mutex_leave(db->mutex);
3034   return rc;
3035 }
3036 #endif /* SQLITE_OMIT_UTF16 */
3037 
3038 /*
3039 ** Register a collation sequence factory callback with the database handle
3040 ** db. Replace any previously installed collation sequence factory.
3041 */
3042 int sqlite3_collation_needed(
3043   sqlite3 *db,
3044   void *pCollNeededArg,
3045   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
3046 ){
3047 #ifdef SQLITE_ENABLE_API_ARMOR
3048   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
3049 #endif
3050   sqlite3_mutex_enter(db->mutex);
3051   db->xCollNeeded = xCollNeeded;
3052   db->xCollNeeded16 = 0;
3053   db->pCollNeededArg = pCollNeededArg;
3054   sqlite3_mutex_leave(db->mutex);
3055   return SQLITE_OK;
3056 }
3057 
3058 #ifndef SQLITE_OMIT_UTF16
3059 /*
3060 ** Register a collation sequence factory callback with the database handle
3061 ** db. Replace any previously installed collation sequence factory.
3062 */
3063 int sqlite3_collation_needed16(
3064   sqlite3 *db,
3065   void *pCollNeededArg,
3066   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
3067 ){
3068 #ifdef SQLITE_ENABLE_API_ARMOR
3069   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
3070 #endif
3071   sqlite3_mutex_enter(db->mutex);
3072   db->xCollNeeded = 0;
3073   db->xCollNeeded16 = xCollNeeded16;
3074   db->pCollNeededArg = pCollNeededArg;
3075   sqlite3_mutex_leave(db->mutex);
3076   return SQLITE_OK;
3077 }
3078 #endif /* SQLITE_OMIT_UTF16 */
3079 
3080 #ifndef SQLITE_OMIT_DEPRECATED
3081 /*
3082 ** This function is now an anachronism. It used to be used to recover from a
3083 ** malloc() failure, but SQLite now does this automatically.
3084 */
3085 int sqlite3_global_recover(void){
3086   return SQLITE_OK;
3087 }
3088 #endif
3089 
3090 /*
3091 ** Test to see whether or not the database connection is in autocommit
3092 ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
3093 ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
3094 ** by the next COMMIT or ROLLBACK.
3095 */
3096 int sqlite3_get_autocommit(sqlite3 *db){
3097 #ifdef SQLITE_ENABLE_API_ARMOR
3098   if( !sqlite3SafetyCheckOk(db) ){
3099     (void)SQLITE_MISUSE_BKPT;
3100     return 0;
3101   }
3102 #endif
3103   return db->autoCommit;
3104 }
3105 
3106 /*
3107 ** The following routines are substitutes for constants SQLITE_CORRUPT,
3108 ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
3109 ** constants.  They serve two purposes:
3110 **
3111 **   1.  Serve as a convenient place to set a breakpoint in a debugger
3112 **       to detect when version error conditions occurs.
3113 **
3114 **   2.  Invoke sqlite3_log() to provide the source code location where
3115 **       a low-level error is first detected.
3116 */
3117 int sqlite3CorruptError(int lineno){
3118   testcase( sqlite3GlobalConfig.xLog!=0 );
3119   sqlite3_log(SQLITE_CORRUPT,
3120               "database corruption at line %d of [%.10s]",
3121               lineno, 20+sqlite3_sourceid());
3122   return SQLITE_CORRUPT;
3123 }
3124 int sqlite3MisuseError(int lineno){
3125   testcase( sqlite3GlobalConfig.xLog!=0 );
3126   sqlite3_log(SQLITE_MISUSE,
3127               "misuse at line %d of [%.10s]",
3128               lineno, 20+sqlite3_sourceid());
3129   return SQLITE_MISUSE;
3130 }
3131 int sqlite3CantopenError(int lineno){
3132   testcase( sqlite3GlobalConfig.xLog!=0 );
3133   sqlite3_log(SQLITE_CANTOPEN,
3134               "cannot open file at line %d of [%.10s]",
3135               lineno, 20+sqlite3_sourceid());
3136   return SQLITE_CANTOPEN;
3137 }
3138 
3139 
3140 #ifndef SQLITE_OMIT_DEPRECATED
3141 /*
3142 ** This is a convenience routine that makes sure that all thread-specific
3143 ** data for this thread has been deallocated.
3144 **
3145 ** SQLite no longer uses thread-specific data so this routine is now a
3146 ** no-op.  It is retained for historical compatibility.
3147 */
3148 void sqlite3_thread_cleanup(void){
3149 }
3150 #endif
3151 
3152 /*
3153 ** Return meta information about a specific column of a database table.
3154 ** See comment in sqlite3.h (sqlite.h.in) for details.
3155 */
3156 int sqlite3_table_column_metadata(
3157   sqlite3 *db,                /* Connection handle */
3158   const char *zDbName,        /* Database name or NULL */
3159   const char *zTableName,     /* Table name */
3160   const char *zColumnName,    /* Column name */
3161   char const **pzDataType,    /* OUTPUT: Declared data type */
3162   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
3163   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
3164   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
3165   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
3166 ){
3167   int rc;
3168   char *zErrMsg = 0;
3169   Table *pTab = 0;
3170   Column *pCol = 0;
3171   int iCol = 0;
3172   char const *zDataType = 0;
3173   char const *zCollSeq = 0;
3174   int notnull = 0;
3175   int primarykey = 0;
3176   int autoinc = 0;
3177 
3178 
3179 #ifdef SQLITE_ENABLE_API_ARMOR
3180   if( !sqlite3SafetyCheckOk(db) || zTableName==0 ){
3181     return SQLITE_MISUSE_BKPT;
3182   }
3183 #endif
3184 
3185   /* Ensure the database schema has been loaded */
3186   sqlite3_mutex_enter(db->mutex);
3187   sqlite3BtreeEnterAll(db);
3188   rc = sqlite3Init(db, &zErrMsg);
3189   if( SQLITE_OK!=rc ){
3190     goto error_out;
3191   }
3192 
3193   /* Locate the table in question */
3194   pTab = sqlite3FindTable(db, zTableName, zDbName);
3195   if( !pTab || pTab->pSelect ){
3196     pTab = 0;
3197     goto error_out;
3198   }
3199 
3200   /* Find the column for which info is requested */
3201   if( zColumnName==0 ){
3202     /* Query for existance of table only */
3203   }else{
3204     for(iCol=0; iCol<pTab->nCol; iCol++){
3205       pCol = &pTab->aCol[iCol];
3206       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
3207         break;
3208       }
3209     }
3210     if( iCol==pTab->nCol ){
3211       if( HasRowid(pTab) && sqlite3IsRowid(zColumnName) ){
3212         iCol = pTab->iPKey;
3213         pCol = iCol>=0 ? &pTab->aCol[iCol] : 0;
3214       }else{
3215         pTab = 0;
3216         goto error_out;
3217       }
3218     }
3219   }
3220 
3221   /* The following block stores the meta information that will be returned
3222   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
3223   ** and autoinc. At this point there are two possibilities:
3224   **
3225   **     1. The specified column name was rowid", "oid" or "_rowid_"
3226   **        and there is no explicitly declared IPK column.
3227   **
3228   **     2. The table is not a view and the column name identified an
3229   **        explicitly declared column. Copy meta information from *pCol.
3230   */
3231   if( pCol ){
3232     zDataType = pCol->zType;
3233     zCollSeq = pCol->zColl;
3234     notnull = pCol->notNull!=0;
3235     primarykey  = (pCol->colFlags & COLFLAG_PRIMKEY)!=0;
3236     autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
3237   }else{
3238     zDataType = "INTEGER";
3239     primarykey = 1;
3240   }
3241   if( !zCollSeq ){
3242     zCollSeq = "BINARY";
3243   }
3244 
3245 error_out:
3246   sqlite3BtreeLeaveAll(db);
3247 
3248   /* Whether the function call succeeded or failed, set the output parameters
3249   ** to whatever their local counterparts contain. If an error did occur,
3250   ** this has the effect of zeroing all output parameters.
3251   */
3252   if( pzDataType ) *pzDataType = zDataType;
3253   if( pzCollSeq ) *pzCollSeq = zCollSeq;
3254   if( pNotNull ) *pNotNull = notnull;
3255   if( pPrimaryKey ) *pPrimaryKey = primarykey;
3256   if( pAutoinc ) *pAutoinc = autoinc;
3257 
3258   if( SQLITE_OK==rc && !pTab ){
3259     sqlite3DbFree(db, zErrMsg);
3260     zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
3261         zColumnName);
3262     rc = SQLITE_ERROR;
3263   }
3264   sqlite3ErrorWithMsg(db, rc, (zErrMsg?"%s":0), zErrMsg);
3265   sqlite3DbFree(db, zErrMsg);
3266   rc = sqlite3ApiExit(db, rc);
3267   sqlite3_mutex_leave(db->mutex);
3268   return rc;
3269 }
3270 
3271 /*
3272 ** Sleep for a little while.  Return the amount of time slept.
3273 */
3274 int sqlite3_sleep(int ms){
3275   sqlite3_vfs *pVfs;
3276   int rc;
3277   pVfs = sqlite3_vfs_find(0);
3278   if( pVfs==0 ) return 0;
3279 
3280   /* This function works in milliseconds, but the underlying OsSleep()
3281   ** API uses microseconds. Hence the 1000's.
3282   */
3283   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
3284   return rc;
3285 }
3286 
3287 /*
3288 ** Enable or disable the extended result codes.
3289 */
3290 int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
3291 #ifdef SQLITE_ENABLE_API_ARMOR
3292   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
3293 #endif
3294   sqlite3_mutex_enter(db->mutex);
3295   db->errMask = onoff ? 0xffffffff : 0xff;
3296   sqlite3_mutex_leave(db->mutex);
3297   return SQLITE_OK;
3298 }
3299 
3300 /*
3301 ** Invoke the xFileControl method on a particular database.
3302 */
3303 int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
3304   int rc = SQLITE_ERROR;
3305   Btree *pBtree;
3306 
3307 #ifdef SQLITE_ENABLE_API_ARMOR
3308   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
3309 #endif
3310   sqlite3_mutex_enter(db->mutex);
3311   pBtree = sqlite3DbNameToBtree(db, zDbName);
3312   if( pBtree ){
3313     Pager *pPager;
3314     sqlite3_file *fd;
3315     sqlite3BtreeEnter(pBtree);
3316     pPager = sqlite3BtreePager(pBtree);
3317     assert( pPager!=0 );
3318     fd = sqlite3PagerFile(pPager);
3319     assert( fd!=0 );
3320     if( op==SQLITE_FCNTL_FILE_POINTER ){
3321       *(sqlite3_file**)pArg = fd;
3322       rc = SQLITE_OK;
3323     }else if( fd->pMethods ){
3324       rc = sqlite3OsFileControl(fd, op, pArg);
3325     }else{
3326       rc = SQLITE_NOTFOUND;
3327     }
3328     sqlite3BtreeLeave(pBtree);
3329   }
3330   sqlite3_mutex_leave(db->mutex);
3331   return rc;
3332 }
3333 
3334 /*
3335 ** Interface to the testing logic.
3336 */
3337 int sqlite3_test_control(int op, ...){
3338   int rc = 0;
3339 #ifndef SQLITE_OMIT_BUILTIN_TEST
3340   va_list ap;
3341   va_start(ap, op);
3342   switch( op ){
3343 
3344     /*
3345     ** Save the current state of the PRNG.
3346     */
3347     case SQLITE_TESTCTRL_PRNG_SAVE: {
3348       sqlite3PrngSaveState();
3349       break;
3350     }
3351 
3352     /*
3353     ** Restore the state of the PRNG to the last state saved using
3354     ** PRNG_SAVE.  If PRNG_SAVE has never before been called, then
3355     ** this verb acts like PRNG_RESET.
3356     */
3357     case SQLITE_TESTCTRL_PRNG_RESTORE: {
3358       sqlite3PrngRestoreState();
3359       break;
3360     }
3361 
3362     /*
3363     ** Reset the PRNG back to its uninitialized state.  The next call
3364     ** to sqlite3_randomness() will reseed the PRNG using a single call
3365     ** to the xRandomness method of the default VFS.
3366     */
3367     case SQLITE_TESTCTRL_PRNG_RESET: {
3368       sqlite3_randomness(0,0);
3369       break;
3370     }
3371 
3372     /*
3373     **  sqlite3_test_control(BITVEC_TEST, size, program)
3374     **
3375     ** Run a test against a Bitvec object of size.  The program argument
3376     ** is an array of integers that defines the test.  Return -1 on a
3377     ** memory allocation error, 0 on success, or non-zero for an error.
3378     ** See the sqlite3BitvecBuiltinTest() for additional information.
3379     */
3380     case SQLITE_TESTCTRL_BITVEC_TEST: {
3381       int sz = va_arg(ap, int);
3382       int *aProg = va_arg(ap, int*);
3383       rc = sqlite3BitvecBuiltinTest(sz, aProg);
3384       break;
3385     }
3386 
3387     /*
3388     **  sqlite3_test_control(FAULT_INSTALL, xCallback)
3389     **
3390     ** Arrange to invoke xCallback() whenever sqlite3FaultSim() is called,
3391     ** if xCallback is not NULL.
3392     **
3393     ** As a test of the fault simulator mechanism itself, sqlite3FaultSim(0)
3394     ** is called immediately after installing the new callback and the return
3395     ** value from sqlite3FaultSim(0) becomes the return from
3396     ** sqlite3_test_control().
3397     */
3398     case SQLITE_TESTCTRL_FAULT_INSTALL: {
3399       /* MSVC is picky about pulling func ptrs from va lists.
3400       ** http://support.microsoft.com/kb/47961
3401       ** sqlite3GlobalConfig.xTestCallback = va_arg(ap, int(*)(int));
3402       */
3403       typedef int(*TESTCALLBACKFUNC_t)(int);
3404       sqlite3GlobalConfig.xTestCallback = va_arg(ap, TESTCALLBACKFUNC_t);
3405       rc = sqlite3FaultSim(0);
3406       break;
3407     }
3408 
3409     /*
3410     **  sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
3411     **
3412     ** Register hooks to call to indicate which malloc() failures
3413     ** are benign.
3414     */
3415     case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
3416       typedef void (*void_function)(void);
3417       void_function xBenignBegin;
3418       void_function xBenignEnd;
3419       xBenignBegin = va_arg(ap, void_function);
3420       xBenignEnd = va_arg(ap, void_function);
3421       sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
3422       break;
3423     }
3424 
3425     /*
3426     **  sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
3427     **
3428     ** Set the PENDING byte to the value in the argument, if X>0.
3429     ** Make no changes if X==0.  Return the value of the pending byte
3430     ** as it existing before this routine was called.
3431     **
3432     ** IMPORTANT:  Changing the PENDING byte from 0x40000000 results in
3433     ** an incompatible database file format.  Changing the PENDING byte
3434     ** while any database connection is open results in undefined and
3435     ** deleterious behavior.
3436     */
3437     case SQLITE_TESTCTRL_PENDING_BYTE: {
3438       rc = PENDING_BYTE;
3439 #ifndef SQLITE_OMIT_WSD
3440       {
3441         unsigned int newVal = va_arg(ap, unsigned int);
3442         if( newVal ) sqlite3PendingByte = newVal;
3443       }
3444 #endif
3445       break;
3446     }
3447 
3448     /*
3449     **  sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
3450     **
3451     ** This action provides a run-time test to see whether or not
3452     ** assert() was enabled at compile-time.  If X is true and assert()
3453     ** is enabled, then the return value is true.  If X is true and
3454     ** assert() is disabled, then the return value is zero.  If X is
3455     ** false and assert() is enabled, then the assertion fires and the
3456     ** process aborts.  If X is false and assert() is disabled, then the
3457     ** return value is zero.
3458     */
3459     case SQLITE_TESTCTRL_ASSERT: {
3460       volatile int x = 0;
3461       assert( (x = va_arg(ap,int))!=0 );
3462       rc = x;
3463       break;
3464     }
3465 
3466 
3467     /*
3468     **  sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
3469     **
3470     ** This action provides a run-time test to see how the ALWAYS and
3471     ** NEVER macros were defined at compile-time.
3472     **
3473     ** The return value is ALWAYS(X).
3474     **
3475     ** The recommended test is X==2.  If the return value is 2, that means
3476     ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
3477     ** default setting.  If the return value is 1, then ALWAYS() is either
3478     ** hard-coded to true or else it asserts if its argument is false.
3479     ** The first behavior (hard-coded to true) is the case if
3480     ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
3481     ** behavior (assert if the argument to ALWAYS() is false) is the case if
3482     ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
3483     **
3484     ** The run-time test procedure might look something like this:
3485     **
3486     **    if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
3487     **      // ALWAYS() and NEVER() are no-op pass-through macros
3488     **    }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
3489     **      // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
3490     **    }else{
3491     **      // ALWAYS(x) is a constant 1.  NEVER(x) is a constant 0.
3492     **    }
3493     */
3494     case SQLITE_TESTCTRL_ALWAYS: {
3495       int x = va_arg(ap,int);
3496       rc = ALWAYS(x);
3497       break;
3498     }
3499 
3500     /*
3501     **   sqlite3_test_control(SQLITE_TESTCTRL_BYTEORDER);
3502     **
3503     ** The integer returned reveals the byte-order of the computer on which
3504     ** SQLite is running:
3505     **
3506     **       1     big-endian,    determined at run-time
3507     **      10     little-endian, determined at run-time
3508     **  432101     big-endian,    determined at compile-time
3509     **  123410     little-endian, determined at compile-time
3510     */
3511     case SQLITE_TESTCTRL_BYTEORDER: {
3512       rc = SQLITE_BYTEORDER*100 + SQLITE_LITTLEENDIAN*10 + SQLITE_BIGENDIAN;
3513       break;
3514     }
3515 
3516     /*   sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
3517     **
3518     ** Set the nReserve size to N for the main database on the database
3519     ** connection db.
3520     */
3521     case SQLITE_TESTCTRL_RESERVE: {
3522       sqlite3 *db = va_arg(ap, sqlite3*);
3523       int x = va_arg(ap,int);
3524       sqlite3_mutex_enter(db->mutex);
3525       sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
3526       sqlite3_mutex_leave(db->mutex);
3527       break;
3528     }
3529 
3530     /*  sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
3531     **
3532     ** Enable or disable various optimizations for testing purposes.  The
3533     ** argument N is a bitmask of optimizations to be disabled.  For normal
3534     ** operation N should be 0.  The idea is that a test program (like the
3535     ** SQL Logic Test or SLT test module) can run the same SQL multiple times
3536     ** with various optimizations disabled to verify that the same answer
3537     ** is obtained in every case.
3538     */
3539     case SQLITE_TESTCTRL_OPTIMIZATIONS: {
3540       sqlite3 *db = va_arg(ap, sqlite3*);
3541       db->dbOptFlags = (u16)(va_arg(ap, int) & 0xffff);
3542       break;
3543     }
3544 
3545 #ifdef SQLITE_N_KEYWORD
3546     /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
3547     **
3548     ** If zWord is a keyword recognized by the parser, then return the
3549     ** number of keywords.  Or if zWord is not a keyword, return 0.
3550     **
3551     ** This test feature is only available in the amalgamation since
3552     ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
3553     ** is built using separate source files.
3554     */
3555     case SQLITE_TESTCTRL_ISKEYWORD: {
3556       const char *zWord = va_arg(ap, const char*);
3557       int n = sqlite3Strlen30(zWord);
3558       rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
3559       break;
3560     }
3561 #endif
3562 
3563     /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
3564     **
3565     ** Pass pFree into sqlite3ScratchFree().
3566     ** If sz>0 then allocate a scratch buffer into pNew.
3567     */
3568     case SQLITE_TESTCTRL_SCRATCHMALLOC: {
3569       void *pFree, **ppNew;
3570       int sz;
3571       sz = va_arg(ap, int);
3572       ppNew = va_arg(ap, void**);
3573       pFree = va_arg(ap, void*);
3574       if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
3575       sqlite3ScratchFree(pFree);
3576       break;
3577     }
3578 
3579     /*   sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
3580     **
3581     ** If parameter onoff is non-zero, configure the wrappers so that all
3582     ** subsequent calls to localtime() and variants fail. If onoff is zero,
3583     ** undo this setting.
3584     */
3585     case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
3586       sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
3587       break;
3588     }
3589 
3590     /*   sqlite3_test_control(SQLITE_TESTCTRL_NEVER_CORRUPT, int);
3591     **
3592     ** Set or clear a flag that indicates that the database file is always well-
3593     ** formed and never corrupt.  This flag is clear by default, indicating that
3594     ** database files might have arbitrary corruption.  Setting the flag during
3595     ** testing causes certain assert() statements in the code to be activated
3596     ** that demonstrat invariants on well-formed database files.
3597     */
3598     case SQLITE_TESTCTRL_NEVER_CORRUPT: {
3599       sqlite3GlobalConfig.neverCorrupt = va_arg(ap, int);
3600       break;
3601     }
3602 
3603 
3604     /*   sqlite3_test_control(SQLITE_TESTCTRL_VDBE_COVERAGE, xCallback, ptr);
3605     **
3606     ** Set the VDBE coverage callback function to xCallback with context
3607     ** pointer ptr.
3608     */
3609     case SQLITE_TESTCTRL_VDBE_COVERAGE: {
3610 #ifdef SQLITE_VDBE_COVERAGE
3611       typedef void (*branch_callback)(void*,int,u8,u8);
3612       sqlite3GlobalConfig.xVdbeBranch = va_arg(ap,branch_callback);
3613       sqlite3GlobalConfig.pVdbeBranchArg = va_arg(ap,void*);
3614 #endif
3615       break;
3616     }
3617 
3618     /*   sqlite3_test_control(SQLITE_TESTCTRL_SORTER_MMAP, db, nMax); */
3619     case SQLITE_TESTCTRL_SORTER_MMAP: {
3620       sqlite3 *db = va_arg(ap, sqlite3*);
3621       db->nMaxSorterMmap = va_arg(ap, int);
3622       break;
3623     }
3624 
3625     /*   sqlite3_test_control(SQLITE_TESTCTRL_ISINIT);
3626     **
3627     ** Return SQLITE_OK if SQLite has been initialized and SQLITE_ERROR if
3628     ** not.
3629     */
3630     case SQLITE_TESTCTRL_ISINIT: {
3631       if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR;
3632       break;
3633     }
3634 
3635     /*  sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, onOff, tnum);
3636     **
3637     ** This test control is used to create imposter tables.  "db" is a pointer
3638     ** to the database connection.  dbName is the database name (ex: "main" or
3639     ** "temp") which will receive the imposter.  "onOff" turns imposter mode on
3640     ** or off.  "tnum" is the root page of the b-tree to which the imposter
3641     ** table should connect.
3642     **
3643     ** Enable imposter mode only when the schema has already been parsed.  Then
3644     ** run a single CREATE TABLE statement to construct the imposter table in
3645     ** the parsed schema.  Then turn imposter mode back off again.
3646     **
3647     ** If onOff==0 and tnum>0 then reset the schema for all databases, causing
3648     ** the schema to be reparsed the next time it is needed.  This has the
3649     ** effect of erasing all imposter tables.
3650     */
3651     case SQLITE_TESTCTRL_IMPOSTER: {
3652       sqlite3 *db = va_arg(ap, sqlite3*);
3653       sqlite3_mutex_enter(db->mutex);
3654       db->init.iDb = sqlite3FindDbName(db, va_arg(ap,const char*));
3655       db->init.busy = db->init.imposterTable = va_arg(ap,int);
3656       db->init.newTnum = va_arg(ap,int);
3657       if( db->init.busy==0 && db->init.newTnum>0 ){
3658         sqlite3ResetAllSchemasOfConnection(db);
3659       }
3660       sqlite3_mutex_leave(db->mutex);
3661       break;
3662     }
3663   }
3664   va_end(ap);
3665 #endif /* SQLITE_OMIT_BUILTIN_TEST */
3666   return rc;
3667 }
3668 
3669 /*
3670 ** This is a utility routine, useful to VFS implementations, that checks
3671 ** to see if a database file was a URI that contained a specific query
3672 ** parameter, and if so obtains the value of the query parameter.
3673 **
3674 ** The zFilename argument is the filename pointer passed into the xOpen()
3675 ** method of a VFS implementation.  The zParam argument is the name of the
3676 ** query parameter we seek.  This routine returns the value of the zParam
3677 ** parameter if it exists.  If the parameter does not exist, this routine
3678 ** returns a NULL pointer.
3679 */
3680 const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
3681   if( zFilename==0 || zParam==0 ) return 0;
3682   zFilename += sqlite3Strlen30(zFilename) + 1;
3683   while( zFilename[0] ){
3684     int x = strcmp(zFilename, zParam);
3685     zFilename += sqlite3Strlen30(zFilename) + 1;
3686     if( x==0 ) return zFilename;
3687     zFilename += sqlite3Strlen30(zFilename) + 1;
3688   }
3689   return 0;
3690 }
3691 
3692 /*
3693 ** Return a boolean value for a query parameter.
3694 */
3695 int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){
3696   const char *z = sqlite3_uri_parameter(zFilename, zParam);
3697   bDflt = bDflt!=0;
3698   return z ? sqlite3GetBoolean(z, bDflt) : bDflt;
3699 }
3700 
3701 /*
3702 ** Return a 64-bit integer value for a query parameter.
3703 */
3704 sqlite3_int64 sqlite3_uri_int64(
3705   const char *zFilename,    /* Filename as passed to xOpen */
3706   const char *zParam,       /* URI parameter sought */
3707   sqlite3_int64 bDflt       /* return if parameter is missing */
3708 ){
3709   const char *z = sqlite3_uri_parameter(zFilename, zParam);
3710   sqlite3_int64 v;
3711   if( z && sqlite3DecOrHexToI64(z, &v)==SQLITE_OK ){
3712     bDflt = v;
3713   }
3714   return bDflt;
3715 }
3716 
3717 /*
3718 ** Return the Btree pointer identified by zDbName.  Return NULL if not found.
3719 */
3720 Btree *sqlite3DbNameToBtree(sqlite3 *db, const char *zDbName){
3721   int i;
3722   for(i=0; i<db->nDb; i++){
3723     if( db->aDb[i].pBt
3724      && (zDbName==0 || sqlite3StrICmp(zDbName, db->aDb[i].zName)==0)
3725     ){
3726       return db->aDb[i].pBt;
3727     }
3728   }
3729   return 0;
3730 }
3731 
3732 /*
3733 ** Return the filename of the database associated with a database
3734 ** connection.
3735 */
3736 const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
3737   Btree *pBt;
3738 #ifdef SQLITE_ENABLE_API_ARMOR
3739   if( !sqlite3SafetyCheckOk(db) ){
3740     (void)SQLITE_MISUSE_BKPT;
3741     return 0;
3742   }
3743 #endif
3744   pBt = sqlite3DbNameToBtree(db, zDbName);
3745   return pBt ? sqlite3BtreeGetFilename(pBt) : 0;
3746 }
3747 
3748 /*
3749 ** Return 1 if database is read-only or 0 if read/write.  Return -1 if
3750 ** no such database exists.
3751 */
3752 int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){
3753   Btree *pBt;
3754 #ifdef SQLITE_ENABLE_API_ARMOR
3755   if( !sqlite3SafetyCheckOk(db) ){
3756     (void)SQLITE_MISUSE_BKPT;
3757     return -1;
3758   }
3759 #endif
3760   pBt = sqlite3DbNameToBtree(db, zDbName);
3761   return pBt ? sqlite3BtreeIsReadonly(pBt) : -1;
3762 }
3763