xref: /sqlite-3.40.0/src/main.c (revision 1c826650)
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 ** $Id: main.c,v 1.500 2008/09/08 08:08:09 danielk1977 Exp $
18 */
19 #include "sqliteInt.h"
20 #include <ctype.h>
21 
22 #ifdef SQLITE_ENABLE_FTS3
23 # include "fts3.h"
24 #endif
25 #ifdef SQLITE_ENABLE_RTREE
26 # include "rtree.h"
27 #endif
28 #ifdef SQLITE_ENABLE_ICU
29 # include "sqliteicu.h"
30 #endif
31 
32 /*
33 ** The version of the library
34 */
35 const char sqlite3_version[] = SQLITE_VERSION;
36 const char *sqlite3_libversion(void){ return sqlite3_version; }
37 int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
38 int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
39 
40 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
41 /*
42 ** If the following function pointer is not NULL and if
43 ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
44 ** I/O active are written using this function.  These messages
45 ** are intended for debugging activity only.
46 */
47 void (*sqlite3IoTrace)(const char*, ...) = 0;
48 #endif
49 
50 /*
51 ** If the following global variable points to a string which is the
52 ** name of a directory, then that directory will be used to store
53 ** temporary files.
54 **
55 ** See also the "PRAGMA temp_store_directory" SQL command.
56 */
57 char *sqlite3_temp_directory = 0;
58 
59 /*
60 ** Initialize SQLite.
61 **
62 ** This routine must be called to initialize the memory allocation,
63 ** VFS, and mutex subsystems prior to doing any serious work with
64 ** SQLite.  But as long as you do not compile with SQLITE_OMIT_AUTOINIT
65 ** this routine will be called automatically by key routines such as
66 ** sqlite3_open().
67 **
68 ** This routine is a no-op except on its very first call for the process,
69 ** or for the first call after a call to sqlite3_shutdown.
70 **
71 ** The first thread to call this routine runs the initialization to
72 ** completion.  If subsequent threads call this routine before the first
73 ** thread has finished the initialization process, then the subsequent
74 ** threads must block until the first thread finishes with the initialization.
75 **
76 ** The first thread might call this routine recursively.  Recursive
77 ** calls to this routine should not block, of course.  Otherwise the
78 ** initialization process would never complete.
79 **
80 ** Let X be the first thread to enter this routine.  Let Y be some other
81 ** thread.  Then while the initial invocation of this routine by X is
82 ** incomplete, it is required that:
83 **
84 **    *  Calls to this routine from Y must block until the outer-most
85 **       call by X completes.
86 **
87 **    *  Recursive calls to this routine from thread X return immediately
88 **       without blocking.
89 */
90 int sqlite3_initialize(void){
91   sqlite3_mutex *pMaster;                      /* The main static mutex */
92   int rc;                                      /* Result code */
93 
94 #ifdef SQLITE_OMIT_WSD
95   rc = sqlite3_wsd_init(4096, 24);
96   if( rc!=SQLITE_OK ){
97     return rc;
98   }
99 #endif
100 
101   /* If SQLite is already completely initialized, then this call
102   ** to sqlite3_initialize() should be a no-op.  But the initialization
103   ** must be complete.  So isInit must not be set until the very end
104   ** of this routine.
105   */
106   if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
107 
108   /* Make sure the mutex subsystem is initialized.  If unable to
109   ** initialize the mutex subsystem, return early with the error.
110   ** If the system is so sick that we are unable to allocate a mutex,
111   ** there is not much SQLite is going to be able to do.
112   **
113   ** The mutex subsystem must take care of serializing its own
114   ** initialization.
115   */
116   rc = sqlite3MutexInit();
117   if( rc ) return rc;
118 
119   /* Initialize the malloc() system and the recursive pInitMutex mutex.
120   ** This operation is protected by the STATIC_MASTER mutex.  Note that
121   ** MutexAlloc() is called for a static mutex prior to initializing the
122   ** malloc subsystem - this implies that the allocation of a static
123   ** mutex must not require support from the malloc subsystem.
124   */
125   pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
126   sqlite3_mutex_enter(pMaster);
127   if( !sqlite3GlobalConfig.isMallocInit ){
128     rc = sqlite3MallocInit();
129   }
130   if( rc==SQLITE_OK ){
131     sqlite3GlobalConfig.isMallocInit = 1;
132     if( !sqlite3GlobalConfig.pInitMutex ){
133       sqlite3GlobalConfig.pInitMutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
134       if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
135         rc = SQLITE_NOMEM;
136       }
137     }
138     sqlite3GlobalConfig.nRefInitMutex++;
139   }
140   sqlite3_mutex_leave(pMaster);
141 
142   /* If unable to initialize the malloc subsystem, then return early.
143   ** There is little hope of getting SQLite to run if the malloc
144   ** subsystem cannot be initialized.
145   */
146   if( rc!=SQLITE_OK ){
147     return rc;
148   }
149 
150   /* Do the rest of the initialization under the recursive mutex so
151   ** that we will be able to handle recursive calls into
152   ** sqlite3_initialize().  The recursive calls normally come through
153   ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
154   ** recursive calls might also be possible.
155   */
156   sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
157   if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
158     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
159     sqlite3GlobalConfig.inProgress = 1;
160     memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
161     sqlite3RegisterGlobalFunctions();
162     rc = sqlite3_os_init();
163     if( rc==SQLITE_OK ){
164       rc = sqlite3PcacheInitialize();
165       sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage,
166           sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
167     }
168     sqlite3GlobalConfig.inProgress = 0;
169     sqlite3GlobalConfig.isInit = (rc==SQLITE_OK ? 1 : 0);
170   }
171   sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
172 
173   /* Go back under the static mutex and clean up the recursive
174   ** mutex to prevent a resource leak.
175   */
176   sqlite3_mutex_enter(pMaster);
177   sqlite3GlobalConfig.nRefInitMutex--;
178   if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
179     assert( sqlite3GlobalConfig.nRefInitMutex==0 );
180     sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
181     sqlite3GlobalConfig.pInitMutex = 0;
182   }
183   sqlite3_mutex_leave(pMaster);
184 
185   /* The following is just a sanity check to make sure SQLite has
186   ** been compiled correctly.  It is important to run this code, but
187   ** we don't want to run it too often and soak up CPU cycles for no
188   ** reason.  So we run it once during initialization.
189   */
190 #ifndef NDEBUG
191   /* This section of code's only "output" is via assert() statements. */
192   if ( rc==SQLITE_OK ){
193     u64 x = (((u64)1)<<63)-1;
194     double y;
195     assert(sizeof(x)==8);
196     assert(sizeof(x)==sizeof(y));
197     memcpy(&y, &x, 8);
198     assert( sqlite3IsNaN(y) );
199   }
200 #endif
201 
202   return rc;
203 }
204 
205 /*
206 ** Undo the effects of sqlite3_initialize().  Must not be called while
207 ** there are outstanding database connections or memory allocations or
208 ** while any part of SQLite is otherwise in use in any thread.  This
209 ** routine is not threadsafe.  Not by a long shot.
210 */
211 int sqlite3_shutdown(void){
212   sqlite3GlobalConfig.isMallocInit = 0;
213   sqlite3PcacheShutdown();
214   if( sqlite3GlobalConfig.isInit ){
215     sqlite3_os_end();
216   }
217   if( sqlite3GlobalConfig.m.xShutdown ){
218     sqlite3MallocEnd();
219   }
220   if( sqlite3GlobalConfig.mutex.xMutexEnd ){
221     sqlite3MutexEnd();
222   }
223   sqlite3GlobalConfig.isInit = 0;
224   return SQLITE_OK;
225 }
226 
227 /*
228 ** This API allows applications to modify the global configuration of
229 ** the SQLite library at run-time.
230 **
231 ** This routine should only be called when there are no outstanding
232 ** database connections or memory allocations.  This routine is not
233 ** threadsafe.  Failure to heed these warnings can lead to unpredictable
234 ** behavior.
235 */
236 int sqlite3_config(int op, ...){
237   va_list ap;
238   int rc = SQLITE_OK;
239 
240   /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
241   ** the SQLite library is in use. */
242   if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE;
243 
244   va_start(ap, op);
245   switch( op ){
246     case SQLITE_CONFIG_SINGLETHREAD: {
247       /* Disable all mutexing */
248       sqlite3GlobalConfig.bCoreMutex = 0;
249       sqlite3GlobalConfig.bFullMutex = 0;
250       break;
251     }
252     case SQLITE_CONFIG_MULTITHREAD: {
253       /* Disable mutexing of database connections */
254       /* Enable mutexing of core data structures */
255       sqlite3GlobalConfig.bCoreMutex = 1;
256       sqlite3GlobalConfig.bFullMutex = 0;
257       break;
258     }
259     case SQLITE_CONFIG_SERIALIZED: {
260       /* Enable all mutexing */
261       sqlite3GlobalConfig.bCoreMutex = 1;
262       sqlite3GlobalConfig.bFullMutex = 1;
263       break;
264     }
265     case SQLITE_CONFIG_MALLOC: {
266       /* Specify an alternative malloc implementation */
267       sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
268       break;
269     }
270     case SQLITE_CONFIG_GETMALLOC: {
271       /* Retrieve the current malloc() implementation */
272       if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
273       *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
274       break;
275     }
276     case SQLITE_CONFIG_MUTEX: {
277       /* Specify an alternative mutex implementation */
278       sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
279       break;
280     }
281     case SQLITE_CONFIG_GETMUTEX: {
282       /* Retrieve the current mutex implementation */
283       *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
284       break;
285     }
286     case SQLITE_CONFIG_MEMSTATUS: {
287       /* Enable or disable the malloc status collection */
288       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
289       break;
290     }
291     case SQLITE_CONFIG_SCRATCH: {
292       /* Designate a buffer for scratch memory space */
293       sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
294       sqlite3GlobalConfig.szScratch = va_arg(ap, int);
295       sqlite3GlobalConfig.nScratch = va_arg(ap, int);
296       break;
297     }
298     case SQLITE_CONFIG_PAGECACHE: {
299       /* Designate a buffer for scratch memory space */
300       sqlite3GlobalConfig.pPage = va_arg(ap, void*);
301       sqlite3GlobalConfig.szPage = va_arg(ap, int);
302       sqlite3GlobalConfig.nPage = va_arg(ap, int);
303       break;
304     }
305 
306 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
307     case SQLITE_CONFIG_HEAP: {
308       /* Designate a buffer for heap memory space */
309       sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
310       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
311       sqlite3GlobalConfig.mnReq = va_arg(ap, int);
312 
313       if( sqlite3GlobalConfig.pHeap==0 ){
314         /* If the heap pointer is NULL, then restore the malloc implementation
315         ** back to NULL pointers too.  This will cause the malloc to go
316         ** back to its default implementation when sqlite3_initialize() is
317         ** run.
318         */
319         memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
320       }else{
321         /* The heap pointer is not NULL, then install one of the
322         ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
323         ** ENABLE_MEMSYS5 is defined, return an error.
324         ** the default case and return an error.
325         */
326 #ifdef SQLITE_ENABLE_MEMSYS3
327         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
328 #endif
329 #ifdef SQLITE_ENABLE_MEMSYS5
330         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
331 #endif
332       }
333       break;
334     }
335 #endif
336 
337 #if defined(SQLITE_ENABLE_MEMSYS6)
338     case SQLITE_CONFIG_CHUNKALLOC: {
339       sqlite3GlobalConfig.nSmall = va_arg(ap, int);
340       sqlite3GlobalConfig.m = *sqlite3MemGetMemsys6();
341       break;
342     }
343 #endif
344 
345     case SQLITE_CONFIG_LOOKASIDE: {
346       sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
347       sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
348       break;
349     }
350 
351     default: {
352       rc = SQLITE_ERROR;
353       break;
354     }
355   }
356   va_end(ap);
357   return rc;
358 }
359 
360 /*
361 ** Set up the lookaside buffers for a database connection.
362 ** Return SQLITE_OK on success.
363 ** If lookaside is already active, return SQLITE_BUSY.
364 **
365 ** The sz parameter is the number of bytes in each lookaside slot.
366 ** The cnt parameter is the number of slots.  If pStart is NULL the
367 ** space for the lookaside memory is obtained from sqlite3_malloc().
368 ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
369 ** the lookaside memory.
370 */
371 static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
372   void *pStart;
373   if( db->lookaside.nOut ){
374     return SQLITE_BUSY;
375   }
376   if( sz<0 ) sz = 0;
377   if( cnt<0 ) cnt = 0;
378   if( pBuf==0 ){
379     sz = (sz + 7)&~7;
380     sqlite3BeginBenignMalloc();
381     pStart = sqlite3Malloc( sz*cnt );
382     sqlite3EndBenignMalloc();
383   }else{
384     sz = sz&~7;
385     pStart = pBuf;
386   }
387   if( db->lookaside.bMalloced ){
388     sqlite3_free(db->lookaside.pStart);
389   }
390   db->lookaside.pStart = pStart;
391   db->lookaside.pFree = 0;
392   db->lookaside.sz = sz;
393   db->lookaside.bMalloced = pBuf==0;
394   if( pStart ){
395     int i;
396     LookasideSlot *p;
397     p = (LookasideSlot*)pStart;
398     for(i=cnt-1; i>=0; i--){
399       p->pNext = db->lookaside.pFree;
400       db->lookaside.pFree = p;
401       p = (LookasideSlot*)&((u8*)p)[sz];
402     }
403     db->lookaside.pEnd = p;
404     db->lookaside.bEnabled = 1;
405   }else{
406     db->lookaside.pEnd = 0;
407     db->lookaside.bEnabled = 0;
408   }
409   return SQLITE_OK;
410 }
411 
412 /*
413 ** Configuration settings for an individual database connection
414 */
415 int sqlite3_db_config(sqlite3 *db, int op, ...){
416   va_list ap;
417   int rc;
418   va_start(ap, op);
419   switch( op ){
420     case SQLITE_DBCONFIG_LOOKASIDE: {
421       void *pBuf = va_arg(ap, void*);
422       int sz = va_arg(ap, int);
423       int cnt = va_arg(ap, int);
424       rc = setupLookaside(db, pBuf, sz, cnt);
425       break;
426     }
427     default: {
428       rc = SQLITE_ERROR;
429       break;
430     }
431   }
432   va_end(ap);
433   return rc;
434 }
435 
436 /*
437 ** Routine needed to support the testcase() macro.
438 */
439 #ifdef SQLITE_COVERAGE_TEST
440 void sqlite3Coverage(int x){
441   static int dummy = 0;
442   dummy += x;
443 }
444 #endif
445 
446 
447 /*
448 ** Return true if the buffer z[0..n-1] contains all spaces.
449 */
450 static int allSpaces(const char *z, int n){
451   while( n>0 && z[n-1]==' ' ){ n--; }
452   return n==0;
453 }
454 
455 /*
456 ** This is the default collating function named "BINARY" which is always
457 ** available.
458 **
459 ** If the padFlag argument is not NULL then space padding at the end
460 ** of strings is ignored.  This implements the RTRIM collation.
461 */
462 static int binCollFunc(
463   void *padFlag,
464   int nKey1, const void *pKey1,
465   int nKey2, const void *pKey2
466 ){
467   int rc, n;
468   n = nKey1<nKey2 ? nKey1 : nKey2;
469   rc = memcmp(pKey1, pKey2, n);
470   if( rc==0 ){
471     if( padFlag
472      && allSpaces(((char*)pKey1)+n, nKey1-n)
473      && allSpaces(((char*)pKey2)+n, nKey2-n)
474     ){
475       /* Leave rc unchanged at 0 */
476     }else{
477       rc = nKey1 - nKey2;
478     }
479   }
480   return rc;
481 }
482 
483 /*
484 ** Another built-in collating sequence: NOCASE.
485 **
486 ** This collating sequence is intended to be used for "case independant
487 ** comparison". SQLite's knowledge of upper and lower case equivalents
488 ** extends only to the 26 characters used in the English language.
489 **
490 ** At the moment there is only a UTF-8 implementation.
491 */
492 static int nocaseCollatingFunc(
493   void *NotUsed,
494   int nKey1, const void *pKey1,
495   int nKey2, const void *pKey2
496 ){
497   int r = sqlite3StrNICmp(
498       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
499   if( 0==r ){
500     r = nKey1-nKey2;
501   }
502   return r;
503 }
504 
505 /*
506 ** Return the ROWID of the most recent insert
507 */
508 sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
509   return db->lastRowid;
510 }
511 
512 /*
513 ** Return the number of changes in the most recent call to sqlite3_exec().
514 */
515 int sqlite3_changes(sqlite3 *db){
516   return db->nChange;
517 }
518 
519 /*
520 ** Return the number of changes since the database handle was opened.
521 */
522 int sqlite3_total_changes(sqlite3 *db){
523   return db->nTotalChange;
524 }
525 
526 /*
527 ** Close an existing SQLite database
528 */
529 int sqlite3_close(sqlite3 *db){
530   HashElem *i;
531   int j;
532 
533   if( !db ){
534     return SQLITE_OK;
535   }
536   if( !sqlite3SafetyCheckSickOrOk(db) ){
537     return SQLITE_MISUSE;
538   }
539   sqlite3_mutex_enter(db->mutex);
540 
541 #ifdef SQLITE_SSE
542   {
543     extern void sqlite3SseCleanup(sqlite3*);
544     sqlite3SseCleanup(db);
545   }
546 #endif
547 
548   sqlite3ResetInternalSchema(db, 0);
549 
550   /* If a transaction is open, the ResetInternalSchema() call above
551   ** will not have called the xDisconnect() method on any virtual
552   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
553   ** call will do so. We need to do this before the check for active
554   ** SQL statements below, as the v-table implementation may be storing
555   ** some prepared statements internally.
556   */
557   sqlite3VtabRollback(db);
558 
559   /* If there are any outstanding VMs, return SQLITE_BUSY. */
560   if( db->pVdbe ){
561     sqlite3Error(db, SQLITE_BUSY,
562         "Unable to close due to unfinalised statements");
563     sqlite3_mutex_leave(db->mutex);
564     return SQLITE_BUSY;
565   }
566   assert( sqlite3SafetyCheckSickOrOk(db) );
567 
568   for(j=0; j<db->nDb; j++){
569     struct Db *pDb = &db->aDb[j];
570     if( pDb->pBt ){
571       sqlite3BtreeClose(pDb->pBt);
572       pDb->pBt = 0;
573       if( j!=1 ){
574         pDb->pSchema = 0;
575       }
576     }
577   }
578   sqlite3ResetInternalSchema(db, 0);
579   assert( db->nDb<=2 );
580   assert( db->aDb==db->aDbStatic );
581   for(j=0; j<ArraySize(db->aFunc.a); j++){
582     FuncDef *pNext, *pHash, *p;
583     for(p=db->aFunc.a[j]; p; p=pHash){
584       pHash = p->pHash;
585       while( p ){
586         pNext = p->pNext;
587         sqlite3DbFree(db, p);
588         p = pNext;
589       }
590     }
591   }
592   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
593     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
594     /* Invoke any destructors registered for collation sequence user data. */
595     for(j=0; j<3; j++){
596       if( pColl[j].xDel ){
597         pColl[j].xDel(pColl[j].pUser);
598       }
599     }
600     sqlite3DbFree(db, pColl);
601   }
602   sqlite3HashClear(&db->aCollSeq);
603 #ifndef SQLITE_OMIT_VIRTUALTABLE
604   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
605     Module *pMod = (Module *)sqliteHashData(i);
606     if( pMod->xDestroy ){
607       pMod->xDestroy(pMod->pAux);
608     }
609     sqlite3DbFree(db, pMod);
610   }
611   sqlite3HashClear(&db->aModule);
612 #endif
613 
614   sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
615   if( db->pErr ){
616     sqlite3ValueFree(db->pErr);
617   }
618   sqlite3CloseExtensions(db);
619 
620   db->magic = SQLITE_MAGIC_ERROR;
621 
622   /* The temp-database schema is allocated differently from the other schema
623   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
624   ** So it needs to be freed here. Todo: Why not roll the temp schema into
625   ** the same sqliteMalloc() as the one that allocates the database
626   ** structure?
627   */
628   sqlite3DbFree(db, db->aDb[1].pSchema);
629   sqlite3_mutex_leave(db->mutex);
630   db->magic = SQLITE_MAGIC_CLOSED;
631   sqlite3_mutex_free(db->mutex);
632   if( db->lookaside.bMalloced ){
633     sqlite3_free(db->lookaside.pStart);
634   }
635   sqlite3_free(db);
636   return SQLITE_OK;
637 }
638 
639 /*
640 ** Rollback all database files.
641 */
642 void sqlite3RollbackAll(sqlite3 *db){
643   int i;
644   int inTrans = 0;
645   assert( sqlite3_mutex_held(db->mutex) );
646   sqlite3BeginBenignMalloc();
647   for(i=0; i<db->nDb; i++){
648     if( db->aDb[i].pBt ){
649       if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
650         inTrans = 1;
651       }
652       sqlite3BtreeRollback(db->aDb[i].pBt);
653       db->aDb[i].inTrans = 0;
654     }
655   }
656   sqlite3VtabRollback(db);
657   sqlite3EndBenignMalloc();
658 
659   if( db->flags&SQLITE_InternChanges ){
660     sqlite3ExpirePreparedStatements(db);
661     sqlite3ResetInternalSchema(db, 0);
662   }
663 
664   /* If one has been configured, invoke the rollback-hook callback */
665   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
666     db->xRollbackCallback(db->pRollbackArg);
667   }
668 }
669 
670 /*
671 ** Return a static string that describes the kind of error specified in the
672 ** argument.
673 */
674 const char *sqlite3ErrStr(int rc){
675   const char *z;
676   switch( rc & 0xff ){
677     case SQLITE_ROW:
678     case SQLITE_DONE:
679     case SQLITE_OK:         z = "not an error";                          break;
680     case SQLITE_ERROR:      z = "SQL logic error or missing database";   break;
681     case SQLITE_PERM:       z = "access permission denied";              break;
682     case SQLITE_ABORT:      z = "callback requested query abort";        break;
683     case SQLITE_BUSY:       z = "database is locked";                    break;
684     case SQLITE_LOCKED:     z = "database table is locked";              break;
685     case SQLITE_NOMEM:      z = "out of memory";                         break;
686     case SQLITE_READONLY:   z = "attempt to write a readonly database";  break;
687     case SQLITE_INTERRUPT:  z = "interrupted";                           break;
688     case SQLITE_IOERR:      z = "disk I/O error";                        break;
689     case SQLITE_CORRUPT:    z = "database disk image is malformed";      break;
690     case SQLITE_FULL:       z = "database or disk is full";              break;
691     case SQLITE_CANTOPEN:   z = "unable to open database file";          break;
692     case SQLITE_EMPTY:      z = "table contains no data";                break;
693     case SQLITE_SCHEMA:     z = "database schema has changed";           break;
694     case SQLITE_TOOBIG:     z = "String or BLOB exceeded size limit";    break;
695     case SQLITE_CONSTRAINT: z = "constraint failed";                     break;
696     case SQLITE_MISMATCH:   z = "datatype mismatch";                     break;
697     case SQLITE_MISUSE:     z = "library routine called out of sequence";break;
698     case SQLITE_NOLFS:      z = "large file support is disabled";        break;
699     case SQLITE_AUTH:       z = "authorization denied";                  break;
700     case SQLITE_FORMAT:     z = "auxiliary database format error";       break;
701     case SQLITE_RANGE:      z = "bind or column index out of range";     break;
702     case SQLITE_NOTADB:     z = "file is encrypted or is not a database";break;
703     default:                z = "unknown error";                         break;
704   }
705   return z;
706 }
707 
708 /*
709 ** This routine implements a busy callback that sleeps and tries
710 ** again until a timeout value is reached.  The timeout value is
711 ** an integer number of milliseconds passed in as the first
712 ** argument.
713 */
714 static int sqliteDefaultBusyCallback(
715  void *ptr,               /* Database connection */
716  int count                /* Number of times table has been busy */
717 ){
718 #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
719   static const u8 delays[] =
720      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
721   static const u8 totals[] =
722      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
723 # define NDELAY (sizeof(delays)/sizeof(delays[0]))
724   sqlite3 *db = (sqlite3 *)ptr;
725   int timeout = db->busyTimeout;
726   int delay, prior;
727 
728   assert( count>=0 );
729   if( count < NDELAY ){
730     delay = delays[count];
731     prior = totals[count];
732   }else{
733     delay = delays[NDELAY-1];
734     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
735   }
736   if( prior + delay > timeout ){
737     delay = timeout - prior;
738     if( delay<=0 ) return 0;
739   }
740   sqlite3OsSleep(db->pVfs, delay*1000);
741   return 1;
742 #else
743   sqlite3 *db = (sqlite3 *)ptr;
744   int timeout = ((sqlite3 *)ptr)->busyTimeout;
745   if( (count+1)*1000 > timeout ){
746     return 0;
747   }
748   sqlite3OsSleep(db->pVfs, 1000000);
749   return 1;
750 #endif
751 }
752 
753 /*
754 ** Invoke the given busy handler.
755 **
756 ** This routine is called when an operation failed with a lock.
757 ** If this routine returns non-zero, the lock is retried.  If it
758 ** returns 0, the operation aborts with an SQLITE_BUSY error.
759 */
760 int sqlite3InvokeBusyHandler(BusyHandler *p){
761   int rc;
762   if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
763   rc = p->xFunc(p->pArg, p->nBusy);
764   if( rc==0 ){
765     p->nBusy = -1;
766   }else{
767     p->nBusy++;
768   }
769   return rc;
770 }
771 
772 /*
773 ** This routine sets the busy callback for an Sqlite database to the
774 ** given callback function with the given argument.
775 */
776 int sqlite3_busy_handler(
777   sqlite3 *db,
778   int (*xBusy)(void*,int),
779   void *pArg
780 ){
781   sqlite3_mutex_enter(db->mutex);
782   db->busyHandler.xFunc = xBusy;
783   db->busyHandler.pArg = pArg;
784   db->busyHandler.nBusy = 0;
785   sqlite3_mutex_leave(db->mutex);
786   return SQLITE_OK;
787 }
788 
789 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
790 /*
791 ** This routine sets the progress callback for an Sqlite database to the
792 ** given callback function with the given argument. The progress callback will
793 ** be invoked every nOps opcodes.
794 */
795 void sqlite3_progress_handler(
796   sqlite3 *db,
797   int nOps,
798   int (*xProgress)(void*),
799   void *pArg
800 ){
801   sqlite3_mutex_enter(db->mutex);
802   if( nOps>0 ){
803     db->xProgress = xProgress;
804     db->nProgressOps = nOps;
805     db->pProgressArg = pArg;
806   }else{
807     db->xProgress = 0;
808     db->nProgressOps = 0;
809     db->pProgressArg = 0;
810   }
811   sqlite3_mutex_leave(db->mutex);
812 }
813 #endif
814 
815 
816 /*
817 ** This routine installs a default busy handler that waits for the
818 ** specified number of milliseconds before returning 0.
819 */
820 int sqlite3_busy_timeout(sqlite3 *db, int ms){
821   if( ms>0 ){
822     db->busyTimeout = ms;
823     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
824   }else{
825     sqlite3_busy_handler(db, 0, 0);
826   }
827   return SQLITE_OK;
828 }
829 
830 /*
831 ** Cause any pending operation to stop at its earliest opportunity.
832 */
833 void sqlite3_interrupt(sqlite3 *db){
834   db->u1.isInterrupted = 1;
835 }
836 
837 
838 /*
839 ** This function is exactly the same as sqlite3_create_function(), except
840 ** that it is designed to be called by internal code. The difference is
841 ** that if a malloc() fails in sqlite3_create_function(), an error code
842 ** is returned and the mallocFailed flag cleared.
843 */
844 int sqlite3CreateFunc(
845   sqlite3 *db,
846   const char *zFunctionName,
847   int nArg,
848   int enc,
849   void *pUserData,
850   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
851   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
852   void (*xFinal)(sqlite3_context*)
853 ){
854   FuncDef *p;
855   int nName;
856 
857   assert( sqlite3_mutex_held(db->mutex) );
858   if( zFunctionName==0 ||
859       (xFunc && (xFinal || xStep)) ||
860       (!xFunc && (xFinal && !xStep)) ||
861       (!xFunc && (!xFinal && xStep)) ||
862       (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
863       (255<(nName = sqlite3Strlen(db, zFunctionName))) ){
864     sqlite3Error(db, SQLITE_ERROR, "bad parameters");
865     return SQLITE_ERROR;
866   }
867 
868 #ifndef SQLITE_OMIT_UTF16
869   /* If SQLITE_UTF16 is specified as the encoding type, transform this
870   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
871   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
872   **
873   ** If SQLITE_ANY is specified, add three versions of the function
874   ** to the hash table.
875   */
876   if( enc==SQLITE_UTF16 ){
877     enc = SQLITE_UTF16NATIVE;
878   }else if( enc==SQLITE_ANY ){
879     int rc;
880     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
881          pUserData, xFunc, xStep, xFinal);
882     if( rc==SQLITE_OK ){
883       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
884           pUserData, xFunc, xStep, xFinal);
885     }
886     if( rc!=SQLITE_OK ){
887       return rc;
888     }
889     enc = SQLITE_UTF16BE;
890   }
891 #else
892   enc = SQLITE_UTF8;
893 #endif
894 
895   /* Check if an existing function is being overridden or deleted. If so,
896   ** and there are active VMs, then return SQLITE_BUSY. If a function
897   ** is being overridden/deleted but there are no active VMs, allow the
898   ** operation to continue but invalidate all precompiled statements.
899   */
900   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 0);
901   if( p && p->iPrefEnc==enc && p->nArg==nArg ){
902     if( db->activeVdbeCnt ){
903       sqlite3Error(db, SQLITE_BUSY,
904         "Unable to delete/modify user-function due to active statements");
905       assert( !db->mallocFailed );
906       return SQLITE_BUSY;
907     }else{
908       sqlite3ExpirePreparedStatements(db);
909     }
910   }
911 
912   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 1);
913   assert(p || db->mallocFailed);
914   if( !p ){
915     return SQLITE_NOMEM;
916   }
917   p->flags = 0;
918   p->xFunc = xFunc;
919   p->xStep = xStep;
920   p->xFinalize = xFinal;
921   p->pUserData = pUserData;
922   p->nArg = nArg;
923   return SQLITE_OK;
924 }
925 
926 /*
927 ** Create new user functions.
928 */
929 int sqlite3_create_function(
930   sqlite3 *db,
931   const char *zFunctionName,
932   int nArg,
933   int enc,
934   void *p,
935   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
936   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
937   void (*xFinal)(sqlite3_context*)
938 ){
939   int rc;
940   sqlite3_mutex_enter(db->mutex);
941   rc = sqlite3CreateFunc(db, zFunctionName, nArg, enc, p, xFunc, xStep, xFinal);
942   rc = sqlite3ApiExit(db, rc);
943   sqlite3_mutex_leave(db->mutex);
944   return rc;
945 }
946 
947 #ifndef SQLITE_OMIT_UTF16
948 int sqlite3_create_function16(
949   sqlite3 *db,
950   const void *zFunctionName,
951   int nArg,
952   int eTextRep,
953   void *p,
954   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
955   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
956   void (*xFinal)(sqlite3_context*)
957 ){
958   int rc;
959   char *zFunc8;
960   sqlite3_mutex_enter(db->mutex);
961   assert( !db->mallocFailed );
962   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1);
963   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal);
964   sqlite3DbFree(db, zFunc8);
965   rc = sqlite3ApiExit(db, rc);
966   sqlite3_mutex_leave(db->mutex);
967   return rc;
968 }
969 #endif
970 
971 
972 /*
973 ** Declare that a function has been overloaded by a virtual table.
974 **
975 ** If the function already exists as a regular global function, then
976 ** this routine is a no-op.  If the function does not exist, then create
977 ** a new one that always throws a run-time error.
978 **
979 ** When virtual tables intend to provide an overloaded function, they
980 ** should call this routine to make sure the global function exists.
981 ** A global function must exist in order for name resolution to work
982 ** properly.
983 */
984 int sqlite3_overload_function(
985   sqlite3 *db,
986   const char *zName,
987   int nArg
988 ){
989   int nName = sqlite3Strlen(db, zName);
990   int rc;
991   sqlite3_mutex_enter(db->mutex);
992   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
993     sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
994                       0, sqlite3InvalidFunction, 0, 0);
995   }
996   rc = sqlite3ApiExit(db, SQLITE_OK);
997   sqlite3_mutex_leave(db->mutex);
998   return rc;
999 }
1000 
1001 #ifndef SQLITE_OMIT_TRACE
1002 /*
1003 ** Register a trace function.  The pArg from the previously registered trace
1004 ** is returned.
1005 **
1006 ** A NULL trace function means that no tracing is executes.  A non-NULL
1007 ** trace is a pointer to a function that is invoked at the start of each
1008 ** SQL statement.
1009 */
1010 void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
1011   void *pOld;
1012   sqlite3_mutex_enter(db->mutex);
1013   pOld = db->pTraceArg;
1014   db->xTrace = xTrace;
1015   db->pTraceArg = pArg;
1016   sqlite3_mutex_leave(db->mutex);
1017   return pOld;
1018 }
1019 /*
1020 ** Register a profile function.  The pArg from the previously registered
1021 ** profile function is returned.
1022 **
1023 ** A NULL profile function means that no profiling is executes.  A non-NULL
1024 ** profile is a pointer to a function that is invoked at the conclusion of
1025 ** each SQL statement that is run.
1026 */
1027 void *sqlite3_profile(
1028   sqlite3 *db,
1029   void (*xProfile)(void*,const char*,sqlite_uint64),
1030   void *pArg
1031 ){
1032   void *pOld;
1033   sqlite3_mutex_enter(db->mutex);
1034   pOld = db->pProfileArg;
1035   db->xProfile = xProfile;
1036   db->pProfileArg = pArg;
1037   sqlite3_mutex_leave(db->mutex);
1038   return pOld;
1039 }
1040 #endif /* SQLITE_OMIT_TRACE */
1041 
1042 /*** EXPERIMENTAL ***
1043 **
1044 ** Register a function to be invoked when a transaction comments.
1045 ** If the invoked function returns non-zero, then the commit becomes a
1046 ** rollback.
1047 */
1048 void *sqlite3_commit_hook(
1049   sqlite3 *db,              /* Attach the hook to this database */
1050   int (*xCallback)(void*),  /* Function to invoke on each commit */
1051   void *pArg                /* Argument to the function */
1052 ){
1053   void *pOld;
1054   sqlite3_mutex_enter(db->mutex);
1055   pOld = db->pCommitArg;
1056   db->xCommitCallback = xCallback;
1057   db->pCommitArg = pArg;
1058   sqlite3_mutex_leave(db->mutex);
1059   return pOld;
1060 }
1061 
1062 /*
1063 ** Register a callback to be invoked each time a row is updated,
1064 ** inserted or deleted using this database connection.
1065 */
1066 void *sqlite3_update_hook(
1067   sqlite3 *db,              /* Attach the hook to this database */
1068   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
1069   void *pArg                /* Argument to the function */
1070 ){
1071   void *pRet;
1072   sqlite3_mutex_enter(db->mutex);
1073   pRet = db->pUpdateArg;
1074   db->xUpdateCallback = xCallback;
1075   db->pUpdateArg = pArg;
1076   sqlite3_mutex_leave(db->mutex);
1077   return pRet;
1078 }
1079 
1080 /*
1081 ** Register a callback to be invoked each time a transaction is rolled
1082 ** back by this database connection.
1083 */
1084 void *sqlite3_rollback_hook(
1085   sqlite3 *db,              /* Attach the hook to this database */
1086   void (*xCallback)(void*), /* Callback function */
1087   void *pArg                /* Argument to the function */
1088 ){
1089   void *pRet;
1090   sqlite3_mutex_enter(db->mutex);
1091   pRet = db->pRollbackArg;
1092   db->xRollbackCallback = xCallback;
1093   db->pRollbackArg = pArg;
1094   sqlite3_mutex_leave(db->mutex);
1095   return pRet;
1096 }
1097 
1098 /*
1099 ** This routine is called to create a connection to a database BTree
1100 ** driver.  If zFilename is the name of a file, then that file is
1101 ** opened and used.  If zFilename is the magic name ":memory:" then
1102 ** the database is stored in memory (and is thus forgotten as soon as
1103 ** the connection is closed.)  If zFilename is NULL then the database
1104 ** is a "virtual" database for transient use only and is deleted as
1105 ** soon as the connection is closed.
1106 **
1107 ** A virtual database can be either a disk file (that is automatically
1108 ** deleted when the file is closed) or it an be held entirely in memory,
1109 ** depending on the values of the SQLITE_TEMP_STORE compile-time macro and the
1110 ** db->temp_store variable, according to the following chart:
1111 **
1112 **   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
1113 **   -----------------     --------------     ------------------------------
1114 **   0                     any                file
1115 **   1                     1                  file
1116 **   1                     2                  memory
1117 **   1                     0                  file
1118 **   2                     1                  file
1119 **   2                     2                  memory
1120 **   2                     0                  memory
1121 **   3                     any                memory
1122 */
1123 int sqlite3BtreeFactory(
1124   const sqlite3 *db,        /* Main database when opening aux otherwise 0 */
1125   const char *zFilename,    /* Name of the file containing the BTree database */
1126   int omitJournal,          /* if TRUE then do not journal this file */
1127   int nCache,               /* How many pages in the page cache */
1128   int vfsFlags,             /* Flags passed through to vfsOpen */
1129   Btree **ppBtree           /* Pointer to new Btree object written here */
1130 ){
1131   int btFlags = 0;
1132   int rc;
1133 
1134   assert( sqlite3_mutex_held(db->mutex) );
1135   assert( ppBtree != 0);
1136   if( omitJournal ){
1137     btFlags |= BTREE_OMIT_JOURNAL;
1138   }
1139   if( db->flags & SQLITE_NoReadlock ){
1140     btFlags |= BTREE_NO_READLOCK;
1141   }
1142   if( zFilename==0 ){
1143 #if SQLITE_TEMP_STORE==0
1144     /* Do nothing */
1145 #endif
1146 #ifndef SQLITE_OMIT_MEMORYDB
1147 #if SQLITE_TEMP_STORE==1
1148     if( db->temp_store==2 ) zFilename = ":memory:";
1149 #endif
1150 #if SQLITE_TEMP_STORE==2
1151     if( db->temp_store!=1 ) zFilename = ":memory:";
1152 #endif
1153 #if SQLITE_TEMP_STORE==3
1154     zFilename = ":memory:";
1155 #endif
1156 #endif /* SQLITE_OMIT_MEMORYDB */
1157   }
1158 
1159   if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (zFilename==0 || *zFilename==0) ){
1160     vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
1161   }
1162   rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btFlags, vfsFlags);
1163 
1164   /* If the B-Tree was successfully opened, set the pager-cache size to the
1165   ** default value. Except, if the call to BtreeOpen() returned a handle
1166   ** open on an existing shared pager-cache, do not change the pager-cache
1167   ** size.
1168   */
1169   if( rc==SQLITE_OK && 0==sqlite3BtreeSchema(*ppBtree, 0, 0) ){
1170     sqlite3BtreeSetCacheSize(*ppBtree, nCache);
1171   }
1172   return rc;
1173 }
1174 
1175 /*
1176 ** Return UTF-8 encoded English language explanation of the most recent
1177 ** error.
1178 */
1179 const char *sqlite3_errmsg(sqlite3 *db){
1180   const char *z;
1181   if( !db ){
1182     return sqlite3ErrStr(SQLITE_NOMEM);
1183   }
1184   if( !sqlite3SafetyCheckSickOrOk(db) ){
1185     return sqlite3ErrStr(SQLITE_MISUSE);
1186   }
1187   sqlite3_mutex_enter(db->mutex);
1188   assert( !db->mallocFailed );
1189   z = (char*)sqlite3_value_text(db->pErr);
1190   assert( !db->mallocFailed );
1191   if( z==0 ){
1192     z = sqlite3ErrStr(db->errCode);
1193   }
1194   sqlite3_mutex_leave(db->mutex);
1195   return z;
1196 }
1197 
1198 #ifndef SQLITE_OMIT_UTF16
1199 /*
1200 ** Return UTF-16 encoded English language explanation of the most recent
1201 ** error.
1202 */
1203 const void *sqlite3_errmsg16(sqlite3 *db){
1204   /* Because all the characters in the string are in the unicode
1205   ** range 0x00-0xFF, if we pad the big-endian string with a
1206   ** zero byte, we can obtain the little-endian string with
1207   ** &big_endian[1].
1208   */
1209   static const char outOfMemBe[] = {
1210     0, 'o', 0, 'u', 0, 't', 0, ' ',
1211     0, 'o', 0, 'f', 0, ' ',
1212     0, 'm', 0, 'e', 0, 'm', 0, 'o', 0, 'r', 0, 'y', 0, 0, 0
1213   };
1214   static const char misuseBe [] = {
1215     0, 'l', 0, 'i', 0, 'b', 0, 'r', 0, 'a', 0, 'r', 0, 'y', 0, ' ',
1216     0, 'r', 0, 'o', 0, 'u', 0, 't', 0, 'i', 0, 'n', 0, 'e', 0, ' ',
1217     0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ',
1218     0, 'o', 0, 'u', 0, 't', 0, ' ',
1219     0, 'o', 0, 'f', 0, ' ',
1220     0, 's', 0, 'e', 0, 'q', 0, 'u', 0, 'e', 0, 'n', 0, 'c', 0, 'e', 0, 0, 0
1221   };
1222 
1223   const void *z;
1224   if( !db ){
1225     return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
1226   }
1227   if( !sqlite3SafetyCheckSickOrOk(db) ){
1228     return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
1229   }
1230   sqlite3_mutex_enter(db->mutex);
1231   assert( !db->mallocFailed );
1232   z = sqlite3_value_text16(db->pErr);
1233   if( z==0 ){
1234     sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
1235          SQLITE_UTF8, SQLITE_STATIC);
1236     z = sqlite3_value_text16(db->pErr);
1237   }
1238   /* A malloc() may have failed within the call to sqlite3_value_text16()
1239   ** above. If this is the case, then the db->mallocFailed flag needs to
1240   ** be cleared before returning. Do this directly, instead of via
1241   ** sqlite3ApiExit(), to avoid setting the database handle error message.
1242   */
1243   db->mallocFailed = 0;
1244   sqlite3_mutex_leave(db->mutex);
1245   return z;
1246 }
1247 #endif /* SQLITE_OMIT_UTF16 */
1248 
1249 /*
1250 ** Return the most recent error code generated by an SQLite routine. If NULL is
1251 ** passed to this function, we assume a malloc() failed during sqlite3_open().
1252 */
1253 int sqlite3_errcode(sqlite3 *db){
1254   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
1255     return SQLITE_MISUSE;
1256   }
1257   if( !db || db->mallocFailed ){
1258     return SQLITE_NOMEM;
1259   }
1260   return db->errCode & db->errMask;
1261 }
1262 
1263 /*
1264 ** Create a new collating function for database "db".  The name is zName
1265 ** and the encoding is enc.
1266 */
1267 static int createCollation(
1268   sqlite3* db,
1269   const char *zName,
1270   int enc,
1271   void* pCtx,
1272   int(*xCompare)(void*,int,const void*,int,const void*),
1273   void(*xDel)(void*)
1274 ){
1275   CollSeq *pColl;
1276   int enc2;
1277   int nName;
1278 
1279   assert( sqlite3_mutex_held(db->mutex) );
1280 
1281   /* If SQLITE_UTF16 is specified as the encoding type, transform this
1282   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
1283   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
1284   */
1285   enc2 = enc & ~SQLITE_UTF16_ALIGNED;
1286   if( enc2==SQLITE_UTF16 ){
1287     enc2 = SQLITE_UTF16NATIVE;
1288   }
1289   if( (enc2&~3)!=0 ){
1290     return SQLITE_MISUSE;
1291   }
1292 
1293   /* Check if this call is removing or replacing an existing collation
1294   ** sequence. If so, and there are active VMs, return busy. If there
1295   ** are no active VMs, invalidate any pre-compiled statements.
1296   */
1297   nName = sqlite3Strlen(db, zName);
1298   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, nName, 0);
1299   if( pColl && pColl->xCmp ){
1300     if( db->activeVdbeCnt ){
1301       sqlite3Error(db, SQLITE_BUSY,
1302         "Unable to delete/modify collation sequence due to active statements");
1303       return SQLITE_BUSY;
1304     }
1305     sqlite3ExpirePreparedStatements(db);
1306 
1307     /* If collation sequence pColl was created directly by a call to
1308     ** sqlite3_create_collation, and not generated by synthCollSeq(),
1309     ** then any copies made by synthCollSeq() need to be invalidated.
1310     ** Also, collation destructor - CollSeq.xDel() - function may need
1311     ** to be called.
1312     */
1313     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
1314       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
1315       int j;
1316       for(j=0; j<3; j++){
1317         CollSeq *p = &aColl[j];
1318         if( p->enc==pColl->enc ){
1319           if( p->xDel ){
1320             p->xDel(p->pUser);
1321           }
1322           p->xCmp = 0;
1323         }
1324       }
1325     }
1326   }
1327 
1328   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, nName, 1);
1329   if( pColl ){
1330     pColl->xCmp = xCompare;
1331     pColl->pUser = pCtx;
1332     pColl->xDel = xDel;
1333     pColl->enc = enc2 | (enc & SQLITE_UTF16_ALIGNED);
1334   }
1335   sqlite3Error(db, SQLITE_OK, 0);
1336   return SQLITE_OK;
1337 }
1338 
1339 
1340 /*
1341 ** This array defines hard upper bounds on limit values.  The
1342 ** initializer must be kept in sync with the SQLITE_LIMIT_*
1343 ** #defines in sqlite3.h.
1344 */
1345 static const int aHardLimit[] = {
1346   SQLITE_MAX_LENGTH,
1347   SQLITE_MAX_SQL_LENGTH,
1348   SQLITE_MAX_COLUMN,
1349   SQLITE_MAX_EXPR_DEPTH,
1350   SQLITE_MAX_COMPOUND_SELECT,
1351   SQLITE_MAX_VDBE_OP,
1352   SQLITE_MAX_FUNCTION_ARG,
1353   SQLITE_MAX_ATTACHED,
1354   SQLITE_MAX_LIKE_PATTERN_LENGTH,
1355   SQLITE_MAX_VARIABLE_NUMBER,
1356 };
1357 
1358 /*
1359 ** Make sure the hard limits are set to reasonable values
1360 */
1361 #if SQLITE_MAX_LENGTH<100
1362 # error SQLITE_MAX_LENGTH must be at least 100
1363 #endif
1364 #if SQLITE_MAX_SQL_LENGTH<100
1365 # error SQLITE_MAX_SQL_LENGTH must be at least 100
1366 #endif
1367 #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
1368 # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
1369 #endif
1370 #if SQLITE_MAX_COMPOUND_SELECT<2
1371 # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
1372 #endif
1373 #if SQLITE_MAX_VDBE_OP<40
1374 # error SQLITE_MAX_VDBE_OP must be at least 40
1375 #endif
1376 #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>127
1377 # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 127
1378 #endif
1379 #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>30
1380 # error SQLITE_MAX_ATTACHED must be between 0 and 30
1381 #endif
1382 #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
1383 # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
1384 #endif
1385 #if SQLITE_MAX_VARIABLE_NUMBER<1
1386 # error SQLITE_MAX_VARIABLE_NUMBER must be at least 1
1387 #endif
1388 #if SQLITE_MAX_COLUMN>32767
1389 # error SQLITE_MAX_COLUMN must not exceed 32767
1390 #endif
1391 
1392 
1393 /*
1394 ** Change the value of a limit.  Report the old value.
1395 ** If an invalid limit index is supplied, report -1.
1396 ** Make no changes but still report the old value if the
1397 ** new limit is negative.
1398 **
1399 ** A new lower limit does not shrink existing constructs.
1400 ** It merely prevents new constructs that exceed the limit
1401 ** from forming.
1402 */
1403 int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
1404   int oldLimit;
1405   if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
1406     return -1;
1407   }
1408   oldLimit = db->aLimit[limitId];
1409   if( newLimit>=0 ){
1410     if( newLimit>aHardLimit[limitId] ){
1411       newLimit = aHardLimit[limitId];
1412     }
1413     db->aLimit[limitId] = newLimit;
1414   }
1415   return oldLimit;
1416 }
1417 
1418 /*
1419 ** This routine does the work of opening a database on behalf of
1420 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
1421 ** is UTF-8 encoded.
1422 */
1423 static int openDatabase(
1424   const char *zFilename, /* Database filename UTF-8 encoded */
1425   sqlite3 **ppDb,        /* OUT: Returned database handle */
1426   unsigned flags,        /* Operational flags */
1427   const char *zVfs       /* Name of the VFS to use */
1428 ){
1429   sqlite3 *db;
1430   int rc;
1431   CollSeq *pColl;
1432   int isThreadsafe;
1433 
1434 #ifndef SQLITE_OMIT_AUTOINIT
1435   rc = sqlite3_initialize();
1436   if( rc ) return rc;
1437 #endif
1438 
1439   if( sqlite3GlobalConfig.bCoreMutex==0 ){
1440     isThreadsafe = 0;
1441   }else if( flags & SQLITE_OPEN_NOMUTEX ){
1442     isThreadsafe = 0;
1443   }else if( flags & SQLITE_OPEN_FULLMUTEX ){
1444     isThreadsafe = 1;
1445   }else{
1446     isThreadsafe = sqlite3GlobalConfig.bFullMutex;
1447   }
1448 
1449   /* Remove harmful bits from the flags parameter */
1450   flags &=  ~( SQLITE_OPEN_DELETEONCLOSE |
1451                SQLITE_OPEN_MAIN_DB |
1452                SQLITE_OPEN_TEMP_DB |
1453                SQLITE_OPEN_TRANSIENT_DB |
1454                SQLITE_OPEN_MAIN_JOURNAL |
1455                SQLITE_OPEN_TEMP_JOURNAL |
1456                SQLITE_OPEN_SUBJOURNAL |
1457                SQLITE_OPEN_MASTER_JOURNAL |
1458                SQLITE_OPEN_NOMUTEX |
1459                SQLITE_OPEN_FULLMUTEX
1460              );
1461 
1462   /* Allocate the sqlite data structure */
1463   db = sqlite3MallocZero( sizeof(sqlite3) );
1464   if( db==0 ) goto opendb_out;
1465   if( isThreadsafe ){
1466     db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
1467     if( db->mutex==0 ){
1468       sqlite3_free(db);
1469       db = 0;
1470       goto opendb_out;
1471     }
1472   }
1473   sqlite3_mutex_enter(db->mutex);
1474   db->errMask = 0xff;
1475   db->priorNewRowid = 0;
1476   db->nDb = 2;
1477   db->magic = SQLITE_MAGIC_BUSY;
1478   db->aDb = db->aDbStatic;
1479 
1480   assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
1481   memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
1482   db->autoCommit = 1;
1483   db->nextAutovac = -1;
1484   db->nextPagesize = 0;
1485   db->flags |= SQLITE_ShortColNames
1486 #if SQLITE_DEFAULT_FILE_FORMAT<4
1487                  | SQLITE_LegacyFileFmt
1488 #endif
1489 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
1490                  | SQLITE_LoadExtension
1491 #endif
1492       ;
1493   sqlite3HashInit(&db->aCollSeq, SQLITE_HASH_STRING, 0);
1494 #ifndef SQLITE_OMIT_VIRTUALTABLE
1495   sqlite3HashInit(&db->aModule, SQLITE_HASH_STRING, 0);
1496 #endif
1497 
1498   db->pVfs = sqlite3_vfs_find(zVfs);
1499   if( !db->pVfs ){
1500     rc = SQLITE_ERROR;
1501     sqlite3Error(db, rc, "no such vfs: %s", zVfs);
1502     goto opendb_out;
1503   }
1504 
1505   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
1506   ** and UTF-16, so add a version for each to avoid any unnecessary
1507   ** conversions. The only error that can occur here is a malloc() failure.
1508   */
1509   createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
1510   createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
1511   createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
1512   createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
1513   if( db->mallocFailed ){
1514     goto opendb_out;
1515   }
1516   db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 6, 0);
1517   assert( db->pDfltColl!=0 );
1518 
1519   /* Also add a UTF-8 case-insensitive collation sequence. */
1520   createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
1521 
1522   /* Set flags on the built-in collating sequences */
1523   db->pDfltColl->type = SQLITE_COLL_BINARY;
1524   pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 6, 0);
1525   if( pColl ){
1526     pColl->type = SQLITE_COLL_NOCASE;
1527   }
1528 
1529   /* Open the backend database driver */
1530   db->openFlags = flags;
1531   rc = sqlite3BtreeFactory(db, zFilename, 0, SQLITE_DEFAULT_CACHE_SIZE,
1532                            flags | SQLITE_OPEN_MAIN_DB,
1533                            &db->aDb[0].pBt);
1534   if( rc!=SQLITE_OK ){
1535     sqlite3Error(db, rc, 0);
1536     goto opendb_out;
1537   }
1538   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
1539   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
1540 
1541 
1542   /* The default safety_level for the main database is 'full'; for the temp
1543   ** database it is 'NONE'. This matches the pager layer defaults.
1544   */
1545   db->aDb[0].zName = "main";
1546   db->aDb[0].safety_level = 3;
1547 #ifndef SQLITE_OMIT_TEMPDB
1548   db->aDb[1].zName = "temp";
1549   db->aDb[1].safety_level = 1;
1550 #endif
1551 
1552   db->magic = SQLITE_MAGIC_OPEN;
1553   if( db->mallocFailed ){
1554     goto opendb_out;
1555   }
1556 
1557   /* Register all built-in functions, but do not attempt to read the
1558   ** database schema yet. This is delayed until the first time the database
1559   ** is accessed.
1560   */
1561   sqlite3Error(db, SQLITE_OK, 0);
1562   sqlite3RegisterBuiltinFunctions(db);
1563 
1564   /* Load automatic extensions - extensions that have been registered
1565   ** using the sqlite3_automatic_extension() API.
1566   */
1567   (void)sqlite3AutoLoadExtensions(db);
1568   if( sqlite3_errcode(db)!=SQLITE_OK ){
1569     goto opendb_out;
1570   }
1571 
1572 #ifdef SQLITE_ENABLE_FTS1
1573   if( !db->mallocFailed ){
1574     extern int sqlite3Fts1Init(sqlite3*);
1575     rc = sqlite3Fts1Init(db);
1576   }
1577 #endif
1578 
1579 #ifdef SQLITE_ENABLE_FTS2
1580   if( !db->mallocFailed && rc==SQLITE_OK ){
1581     extern int sqlite3Fts2Init(sqlite3*);
1582     rc = sqlite3Fts2Init(db);
1583   }
1584 #endif
1585 
1586 #ifdef SQLITE_ENABLE_FTS3
1587   if( !db->mallocFailed && rc==SQLITE_OK ){
1588     rc = sqlite3Fts3Init(db);
1589   }
1590 #endif
1591 
1592 #ifdef SQLITE_ENABLE_ICU
1593   if( !db->mallocFailed && rc==SQLITE_OK ){
1594     rc = sqlite3IcuInit(db);
1595   }
1596 #endif
1597 
1598 #ifdef SQLITE_ENABLE_RTREE
1599   if( !db->mallocFailed && rc==SQLITE_OK){
1600     rc = sqlite3RtreeInit(db);
1601   }
1602 #endif
1603 
1604   sqlite3Error(db, rc, 0);
1605 
1606   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
1607   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
1608   ** mode.  Doing nothing at all also makes NORMAL the default.
1609   */
1610 #ifdef SQLITE_DEFAULT_LOCKING_MODE
1611   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
1612   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
1613                           SQLITE_DEFAULT_LOCKING_MODE);
1614 #endif
1615 
1616   /* Enable the lookaside-malloc subsystem */
1617   setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside, sqlite3GlobalConfig.nLookaside);
1618 
1619 opendb_out:
1620   if( db ){
1621     assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
1622     sqlite3_mutex_leave(db->mutex);
1623   }
1624   rc = sqlite3_errcode(db);
1625   if( rc==SQLITE_NOMEM ){
1626     sqlite3_close(db);
1627     db = 0;
1628   }else if( rc!=SQLITE_OK ){
1629     db->magic = SQLITE_MAGIC_SICK;
1630   }
1631   *ppDb = db;
1632   return sqlite3ApiExit(0, rc);
1633 }
1634 
1635 /*
1636 ** Open a new database handle.
1637 */
1638 int sqlite3_open(
1639   const char *zFilename,
1640   sqlite3 **ppDb
1641 ){
1642   return openDatabase(zFilename, ppDb,
1643                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
1644 }
1645 int sqlite3_open_v2(
1646   const char *filename,   /* Database filename (UTF-8) */
1647   sqlite3 **ppDb,         /* OUT: SQLite db handle */
1648   int flags,              /* Flags */
1649   const char *zVfs        /* Name of VFS module to use */
1650 ){
1651   return openDatabase(filename, ppDb, flags, zVfs);
1652 }
1653 
1654 #ifndef SQLITE_OMIT_UTF16
1655 /*
1656 ** Open a new database handle.
1657 */
1658 int sqlite3_open16(
1659   const void *zFilename,
1660   sqlite3 **ppDb
1661 ){
1662   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
1663   sqlite3_value *pVal;
1664   int rc;
1665 
1666   assert( zFilename );
1667   assert( ppDb );
1668   *ppDb = 0;
1669 #ifndef SQLITE_OMIT_AUTOINIT
1670   rc = sqlite3_initialize();
1671   if( rc ) return rc;
1672 #endif
1673   pVal = sqlite3ValueNew(0);
1674   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
1675   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
1676   if( zFilename8 ){
1677     rc = openDatabase(zFilename8, ppDb,
1678                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
1679     assert( *ppDb || rc==SQLITE_NOMEM );
1680     if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
1681       ENC(*ppDb) = SQLITE_UTF16NATIVE;
1682     }
1683   }else{
1684     rc = SQLITE_NOMEM;
1685   }
1686   sqlite3ValueFree(pVal);
1687 
1688   return sqlite3ApiExit(0, rc);
1689 }
1690 #endif /* SQLITE_OMIT_UTF16 */
1691 
1692 /*
1693 ** Register a new collation sequence with the database handle db.
1694 */
1695 int sqlite3_create_collation(
1696   sqlite3* db,
1697   const char *zName,
1698   int enc,
1699   void* pCtx,
1700   int(*xCompare)(void*,int,const void*,int,const void*)
1701 ){
1702   int rc;
1703   sqlite3_mutex_enter(db->mutex);
1704   assert( !db->mallocFailed );
1705   rc = createCollation(db, zName, enc, pCtx, xCompare, 0);
1706   rc = sqlite3ApiExit(db, rc);
1707   sqlite3_mutex_leave(db->mutex);
1708   return rc;
1709 }
1710 
1711 /*
1712 ** Register a new collation sequence with the database handle db.
1713 */
1714 int sqlite3_create_collation_v2(
1715   sqlite3* db,
1716   const char *zName,
1717   int enc,
1718   void* pCtx,
1719   int(*xCompare)(void*,int,const void*,int,const void*),
1720   void(*xDel)(void*)
1721 ){
1722   int rc;
1723   sqlite3_mutex_enter(db->mutex);
1724   assert( !db->mallocFailed );
1725   rc = createCollation(db, zName, enc, pCtx, xCompare, xDel);
1726   rc = sqlite3ApiExit(db, rc);
1727   sqlite3_mutex_leave(db->mutex);
1728   return rc;
1729 }
1730 
1731 #ifndef SQLITE_OMIT_UTF16
1732 /*
1733 ** Register a new collation sequence with the database handle db.
1734 */
1735 int sqlite3_create_collation16(
1736   sqlite3* db,
1737   const void *zName,
1738   int enc,
1739   void* pCtx,
1740   int(*xCompare)(void*,int,const void*,int,const void*)
1741 ){
1742   int rc = SQLITE_OK;
1743   char *zName8;
1744   sqlite3_mutex_enter(db->mutex);
1745   assert( !db->mallocFailed );
1746   zName8 = sqlite3Utf16to8(db, zName, -1);
1747   if( zName8 ){
1748     rc = createCollation(db, zName8, enc, pCtx, xCompare, 0);
1749     sqlite3DbFree(db, zName8);
1750   }
1751   rc = sqlite3ApiExit(db, rc);
1752   sqlite3_mutex_leave(db->mutex);
1753   return rc;
1754 }
1755 #endif /* SQLITE_OMIT_UTF16 */
1756 
1757 /*
1758 ** Register a collation sequence factory callback with the database handle
1759 ** db. Replace any previously installed collation sequence factory.
1760 */
1761 int sqlite3_collation_needed(
1762   sqlite3 *db,
1763   void *pCollNeededArg,
1764   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
1765 ){
1766   sqlite3_mutex_enter(db->mutex);
1767   db->xCollNeeded = xCollNeeded;
1768   db->xCollNeeded16 = 0;
1769   db->pCollNeededArg = pCollNeededArg;
1770   sqlite3_mutex_leave(db->mutex);
1771   return SQLITE_OK;
1772 }
1773 
1774 #ifndef SQLITE_OMIT_UTF16
1775 /*
1776 ** Register a collation sequence factory callback with the database handle
1777 ** db. Replace any previously installed collation sequence factory.
1778 */
1779 int sqlite3_collation_needed16(
1780   sqlite3 *db,
1781   void *pCollNeededArg,
1782   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
1783 ){
1784   sqlite3_mutex_enter(db->mutex);
1785   db->xCollNeeded = 0;
1786   db->xCollNeeded16 = xCollNeeded16;
1787   db->pCollNeededArg = pCollNeededArg;
1788   sqlite3_mutex_leave(db->mutex);
1789   return SQLITE_OK;
1790 }
1791 #endif /* SQLITE_OMIT_UTF16 */
1792 
1793 #ifndef SQLITE_OMIT_GLOBALRECOVER
1794 /*
1795 ** This function is now an anachronism. It used to be used to recover from a
1796 ** malloc() failure, but SQLite now does this automatically.
1797 */
1798 int sqlite3_global_recover(void){
1799   return SQLITE_OK;
1800 }
1801 #endif
1802 
1803 /*
1804 ** Test to see whether or not the database connection is in autocommit
1805 ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
1806 ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
1807 ** by the next COMMIT or ROLLBACK.
1808 **
1809 ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
1810 */
1811 int sqlite3_get_autocommit(sqlite3 *db){
1812   return db->autoCommit;
1813 }
1814 
1815 #ifdef SQLITE_DEBUG
1816 /*
1817 ** The following routine is subtituted for constant SQLITE_CORRUPT in
1818 ** debugging builds.  This provides a way to set a breakpoint for when
1819 ** corruption is first detected.
1820 */
1821 int sqlite3Corrupt(void){
1822   return SQLITE_CORRUPT;
1823 }
1824 #endif
1825 
1826 /*
1827 ** This is a convenience routine that makes sure that all thread-specific
1828 ** data for this thread has been deallocated.
1829 **
1830 ** SQLite no longer uses thread-specific data so this routine is now a
1831 ** no-op.  It is retained for historical compatibility.
1832 */
1833 void sqlite3_thread_cleanup(void){
1834 }
1835 
1836 /*
1837 ** Return meta information about a specific column of a database table.
1838 ** See comment in sqlite3.h (sqlite.h.in) for details.
1839 */
1840 #ifdef SQLITE_ENABLE_COLUMN_METADATA
1841 int sqlite3_table_column_metadata(
1842   sqlite3 *db,                /* Connection handle */
1843   const char *zDbName,        /* Database name or NULL */
1844   const char *zTableName,     /* Table name */
1845   const char *zColumnName,    /* Column name */
1846   char const **pzDataType,    /* OUTPUT: Declared data type */
1847   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
1848   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
1849   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
1850   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
1851 ){
1852   int rc;
1853   char *zErrMsg = 0;
1854   Table *pTab = 0;
1855   Column *pCol = 0;
1856   int iCol;
1857 
1858   char const *zDataType = 0;
1859   char const *zCollSeq = 0;
1860   int notnull = 0;
1861   int primarykey = 0;
1862   int autoinc = 0;
1863 
1864   /* Ensure the database schema has been loaded */
1865   sqlite3_mutex_enter(db->mutex);
1866   (void)sqlite3SafetyOn(db);
1867   sqlite3BtreeEnterAll(db);
1868   rc = sqlite3Init(db, &zErrMsg);
1869   sqlite3BtreeLeaveAll(db);
1870   if( SQLITE_OK!=rc ){
1871     goto error_out;
1872   }
1873 
1874   /* Locate the table in question */
1875   pTab = sqlite3FindTable(db, zTableName, zDbName);
1876   if( !pTab || pTab->pSelect ){
1877     pTab = 0;
1878     goto error_out;
1879   }
1880 
1881   /* Find the column for which info is requested */
1882   if( sqlite3IsRowid(zColumnName) ){
1883     iCol = pTab->iPKey;
1884     if( iCol>=0 ){
1885       pCol = &pTab->aCol[iCol];
1886     }
1887   }else{
1888     for(iCol=0; iCol<pTab->nCol; iCol++){
1889       pCol = &pTab->aCol[iCol];
1890       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
1891         break;
1892       }
1893     }
1894     if( iCol==pTab->nCol ){
1895       pTab = 0;
1896       goto error_out;
1897     }
1898   }
1899 
1900   /* The following block stores the meta information that will be returned
1901   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
1902   ** and autoinc. At this point there are two possibilities:
1903   **
1904   **     1. The specified column name was rowid", "oid" or "_rowid_"
1905   **        and there is no explicitly declared IPK column.
1906   **
1907   **     2. The table is not a view and the column name identified an
1908   **        explicitly declared column. Copy meta information from *pCol.
1909   */
1910   if( pCol ){
1911     zDataType = pCol->zType;
1912     zCollSeq = pCol->zColl;
1913     notnull = pCol->notNull!=0;
1914     primarykey  = pCol->isPrimKey!=0;
1915     autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
1916   }else{
1917     zDataType = "INTEGER";
1918     primarykey = 1;
1919   }
1920   if( !zCollSeq ){
1921     zCollSeq = "BINARY";
1922   }
1923 
1924 error_out:
1925   (void)sqlite3SafetyOff(db);
1926 
1927   /* Whether the function call succeeded or failed, set the output parameters
1928   ** to whatever their local counterparts contain. If an error did occur,
1929   ** this has the effect of zeroing all output parameters.
1930   */
1931   if( pzDataType ) *pzDataType = zDataType;
1932   if( pzCollSeq ) *pzCollSeq = zCollSeq;
1933   if( pNotNull ) *pNotNull = notnull;
1934   if( pPrimaryKey ) *pPrimaryKey = primarykey;
1935   if( pAutoinc ) *pAutoinc = autoinc;
1936 
1937   if( SQLITE_OK==rc && !pTab ){
1938     sqlite3DbFree(db, zErrMsg);
1939     zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
1940         zColumnName);
1941     rc = SQLITE_ERROR;
1942   }
1943   sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
1944   sqlite3DbFree(db, zErrMsg);
1945   rc = sqlite3ApiExit(db, rc);
1946   sqlite3_mutex_leave(db->mutex);
1947   return rc;
1948 }
1949 #endif
1950 
1951 /*
1952 ** Sleep for a little while.  Return the amount of time slept.
1953 */
1954 int sqlite3_sleep(int ms){
1955   sqlite3_vfs *pVfs;
1956   int rc;
1957   pVfs = sqlite3_vfs_find(0);
1958   if( pVfs==0 ) return 0;
1959 
1960   /* This function works in milliseconds, but the underlying OsSleep()
1961   ** API uses microseconds. Hence the 1000's.
1962   */
1963   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
1964   return rc;
1965 }
1966 
1967 /*
1968 ** Enable or disable the extended result codes.
1969 */
1970 int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
1971   sqlite3_mutex_enter(db->mutex);
1972   db->errMask = onoff ? 0xffffffff : 0xff;
1973   sqlite3_mutex_leave(db->mutex);
1974   return SQLITE_OK;
1975 }
1976 
1977 /*
1978 ** Invoke the xFileControl method on a particular database.
1979 */
1980 int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
1981   int rc = SQLITE_ERROR;
1982   int iDb;
1983   sqlite3_mutex_enter(db->mutex);
1984   if( zDbName==0 ){
1985     iDb = 0;
1986   }else{
1987     for(iDb=0; iDb<db->nDb; iDb++){
1988       if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
1989     }
1990   }
1991   if( iDb<db->nDb ){
1992     Btree *pBtree = db->aDb[iDb].pBt;
1993     if( pBtree ){
1994       Pager *pPager;
1995       sqlite3_file *fd;
1996       sqlite3BtreeEnter(pBtree);
1997       pPager = sqlite3BtreePager(pBtree);
1998       assert( pPager!=0 );
1999       fd = sqlite3PagerFile(pPager);
2000       assert( fd!=0 );
2001       if( fd->pMethods ){
2002         rc = sqlite3OsFileControl(fd, op, pArg);
2003       }
2004       sqlite3BtreeLeave(pBtree);
2005     }
2006   }
2007   sqlite3_mutex_leave(db->mutex);
2008   return rc;
2009 }
2010 
2011 /*
2012 ** Interface to the testing logic.
2013 */
2014 int sqlite3_test_control(int op, ...){
2015   int rc = 0;
2016 #ifndef SQLITE_OMIT_BUILTIN_TEST
2017   va_list ap;
2018   va_start(ap, op);
2019   switch( op ){
2020 
2021     /*
2022     ** Save the current state of the PRNG.
2023     */
2024     case SQLITE_TESTCTRL_PRNG_SAVE: {
2025       sqlite3PrngSaveState();
2026       break;
2027     }
2028 
2029     /*
2030     ** Restore the state of the PRNG to the last state saved using
2031     ** PRNG_SAVE.  If PRNG_SAVE has never before been called, then
2032     ** this verb acts like PRNG_RESET.
2033     */
2034     case SQLITE_TESTCTRL_PRNG_RESTORE: {
2035       sqlite3PrngRestoreState();
2036       break;
2037     }
2038 
2039     /*
2040     ** Reset the PRNG back to its uninitialized state.  The next call
2041     ** to sqlite3_randomness() will reseed the PRNG using a single call
2042     ** to the xRandomness method of the default VFS.
2043     */
2044     case SQLITE_TESTCTRL_PRNG_RESET: {
2045       sqlite3PrngResetState();
2046       break;
2047     }
2048 
2049     /*
2050     **  sqlite3_test_control(BITVEC_TEST, size, program)
2051     **
2052     ** Run a test against a Bitvec object of size.  The program argument
2053     ** is an array of integers that defines the test.  Return -1 on a
2054     ** memory allocation error, 0 on success, or non-zero for an error.
2055     ** See the sqlite3BitvecBuiltinTest() for additional information.
2056     */
2057     case SQLITE_TESTCTRL_BITVEC_TEST: {
2058       int sz = va_arg(ap, int);
2059       int *aProg = va_arg(ap, int*);
2060       rc = sqlite3BitvecBuiltinTest(sz, aProg);
2061       break;
2062     }
2063 
2064     /*
2065     **  sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
2066     **
2067     ** Register hooks to call to indicate which malloc() failures
2068     ** are benign.
2069     */
2070     case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
2071       typedef void (*void_function)(void);
2072       void_function xBenignBegin;
2073       void_function xBenignEnd;
2074       xBenignBegin = va_arg(ap, void_function);
2075       xBenignEnd = va_arg(ap, void_function);
2076       sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
2077       break;
2078     }
2079   }
2080   va_end(ap);
2081 #endif /* SQLITE_OMIT_BUILTIN_TEST */
2082   return rc;
2083 }
2084