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