xref: /sqlite-3.40.0/src/main.c (revision cd7274ce)
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.407 2007/10/12 19:35:49 drh Exp $
18 */
19 #include "sqliteInt.h"
20 #include <ctype.h>
21 
22 /*
23 ** The version of the library
24 */
25 const char sqlite3_version[] = SQLITE_VERSION;
26 const char *sqlite3_libversion(void){ return sqlite3_version; }
27 int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
28 int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
29 
30 /*
31 ** If the following function pointer is not NULL and if
32 ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
33 ** I/O active are written using this function.  These messages
34 ** are intended for debugging activity only.
35 */
36 void (*sqlite3_io_trace)(const char*, ...) = 0;
37 
38 /*
39 ** If the following global variable points to a string which is the
40 ** name of a directory, then that directory will be used to store
41 ** temporary files.
42 **
43 ** See also the "PRAGMA temp_store_directory" SQL command.
44 */
45 char *sqlite3_temp_directory = 0;
46 
47 
48 /*
49 ** This is the default collating function named "BINARY" which is always
50 ** available.
51 */
52 static int binCollFunc(
53   void *NotUsed,
54   int nKey1, const void *pKey1,
55   int nKey2, const void *pKey2
56 ){
57   int rc, n;
58   n = nKey1<nKey2 ? nKey1 : nKey2;
59   rc = memcmp(pKey1, pKey2, n);
60   if( rc==0 ){
61     rc = nKey1 - nKey2;
62   }
63   return rc;
64 }
65 
66 /*
67 ** Another built-in collating sequence: NOCASE.
68 **
69 ** This collating sequence is intended to be used for "case independant
70 ** comparison". SQLite's knowledge of upper and lower case equivalents
71 ** extends only to the 26 characters used in the English language.
72 **
73 ** At the moment there is only a UTF-8 implementation.
74 */
75 static int nocaseCollatingFunc(
76   void *NotUsed,
77   int nKey1, const void *pKey1,
78   int nKey2, const void *pKey2
79 ){
80   int r = sqlite3StrNICmp(
81       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
82   if( 0==r ){
83     r = nKey1-nKey2;
84   }
85   return r;
86 }
87 
88 /*
89 ** Return the ROWID of the most recent insert
90 */
91 sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
92   return db->lastRowid;
93 }
94 
95 /*
96 ** Return the number of changes in the most recent call to sqlite3_exec().
97 */
98 int sqlite3_changes(sqlite3 *db){
99   return db->nChange;
100 }
101 
102 /*
103 ** Return the number of changes since the database handle was opened.
104 */
105 int sqlite3_total_changes(sqlite3 *db){
106   return db->nTotalChange;
107 }
108 
109 /*
110 ** Close an existing SQLite database
111 */
112 int sqlite3_close(sqlite3 *db){
113   HashElem *i;
114   int j;
115 
116   if( !db ){
117     return SQLITE_OK;
118   }
119   if( sqlite3SafetyCheck(db) ){
120     return SQLITE_MISUSE;
121   }
122   sqlite3_mutex_enter(db->mutex);
123 
124 #ifdef SQLITE_SSE
125   {
126     extern void sqlite3SseCleanup(sqlite3*);
127     sqlite3SseCleanup(db);
128   }
129 #endif
130 
131   sqlite3ResetInternalSchema(db, 0);
132 
133   /* If a transaction is open, the ResetInternalSchema() call above
134   ** will not have called the xDisconnect() method on any virtual
135   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
136   ** call will do so. We need to do this before the check for active
137   ** SQL statements below, as the v-table implementation may be storing
138   ** some prepared statements internally.
139   */
140   sqlite3VtabRollback(db);
141 
142   /* If there are any outstanding VMs, return SQLITE_BUSY. */
143   if( db->pVdbe ){
144     sqlite3Error(db, SQLITE_BUSY,
145         "Unable to close due to unfinalised statements");
146     sqlite3_mutex_leave(db->mutex);
147     return SQLITE_BUSY;
148   }
149   assert( !sqlite3SafetyCheck(db) );
150 
151   /* FIX ME: db->magic may be set to SQLITE_MAGIC_CLOSED if the database
152   ** cannot be opened for some reason. So this routine needs to run in
153   ** that case. But maybe there should be an extra magic value for the
154   ** "failed to open" state.
155   **
156   ** TODO: Coverage tests do not test the case where this condition is
157   ** true. It's hard to see how to cause it without messing with threads.
158   */
159   if( db->magic!=SQLITE_MAGIC_CLOSED && sqlite3SafetyOn(db) ){
160     /* printf("DID NOT CLOSE\n"); fflush(stdout); */
161     sqlite3_mutex_leave(db->mutex);
162     return SQLITE_ERROR;
163   }
164 
165   for(j=0; j<db->nDb; j++){
166     struct Db *pDb = &db->aDb[j];
167     if( pDb->pBt ){
168       sqlite3BtreeClose(pDb->pBt);
169       pDb->pBt = 0;
170       if( j!=1 ){
171         pDb->pSchema = 0;
172       }
173     }
174   }
175   sqlite3ResetInternalSchema(db, 0);
176   assert( db->nDb<=2 );
177   assert( db->aDb==db->aDbStatic );
178   for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){
179     FuncDef *pFunc, *pNext;
180     for(pFunc = (FuncDef*)sqliteHashData(i); pFunc; pFunc=pNext){
181       pNext = pFunc->pNext;
182       sqlite3_free(pFunc);
183     }
184   }
185 
186   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
187     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
188     /* Invoke any destructors registered for collation sequence user data. */
189     for(j=0; j<3; j++){
190       if( pColl[j].xDel ){
191         pColl[j].xDel(pColl[j].pUser);
192       }
193     }
194     sqlite3_free(pColl);
195   }
196   sqlite3HashClear(&db->aCollSeq);
197 #ifndef SQLITE_OMIT_VIRTUALTABLE
198   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
199     Module *pMod = (Module *)sqliteHashData(i);
200     if( pMod->xDestroy ){
201       pMod->xDestroy(pMod->pAux);
202     }
203     sqlite3_free(pMod);
204   }
205   sqlite3HashClear(&db->aModule);
206 #endif
207 
208   sqlite3HashClear(&db->aFunc);
209   sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
210   if( db->pErr ){
211     sqlite3ValueFree(db->pErr);
212   }
213   sqlite3CloseExtensions(db);
214 
215   db->magic = SQLITE_MAGIC_ERROR;
216 
217   /* The temp-database schema is allocated differently from the other schema
218   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
219   ** So it needs to be freed here. Todo: Why not roll the temp schema into
220   ** the same sqliteMalloc() as the one that allocates the database
221   ** structure?
222   */
223   sqlite3_free(db->aDb[1].pSchema);
224   sqlite3_mutex_leave(db->mutex);
225   sqlite3_mutex_free(db->mutex);
226   sqlite3_free(db);
227   return SQLITE_OK;
228 }
229 
230 /*
231 ** Rollback all database files.
232 */
233 void sqlite3RollbackAll(sqlite3 *db){
234   int i;
235   int inTrans = 0;
236   assert( sqlite3_mutex_held(db->mutex) );
237   sqlite3MallocEnterBenignBlock(1);                 /* Enter benign region */
238   for(i=0; i<db->nDb; i++){
239     if( db->aDb[i].pBt ){
240       if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
241         inTrans = 1;
242       }
243       sqlite3BtreeRollback(db->aDb[i].pBt);
244       db->aDb[i].inTrans = 0;
245     }
246   }
247   sqlite3VtabRollback(db);
248   sqlite3MallocLeaveBenignBlock();                 /* Leave benign region */
249 
250   if( db->flags&SQLITE_InternChanges ){
251     sqlite3ExpirePreparedStatements(db);
252     sqlite3ResetInternalSchema(db, 0);
253   }
254 
255   /* If one has been configured, invoke the rollback-hook callback */
256   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
257     db->xRollbackCallback(db->pRollbackArg);
258   }
259 }
260 
261 /*
262 ** Return a static string that describes the kind of error specified in the
263 ** argument.
264 */
265 const char *sqlite3ErrStr(int rc){
266   const char *z;
267   switch( rc & 0xff ){
268     case SQLITE_ROW:
269     case SQLITE_DONE:
270     case SQLITE_OK:         z = "not an error";                          break;
271     case SQLITE_ERROR:      z = "SQL logic error or missing database";   break;
272     case SQLITE_PERM:       z = "access permission denied";              break;
273     case SQLITE_ABORT:      z = "callback requested query abort";        break;
274     case SQLITE_BUSY:       z = "database is locked";                    break;
275     case SQLITE_LOCKED:     z = "database table is locked";              break;
276     case SQLITE_NOMEM:      z = "out of memory";                         break;
277     case SQLITE_READONLY:   z = "attempt to write a readonly database";  break;
278     case SQLITE_INTERRUPT:  z = "interrupted";                           break;
279     case SQLITE_IOERR:      z = "disk I/O error";                        break;
280     case SQLITE_CORRUPT:    z = "database disk image is malformed";      break;
281     case SQLITE_FULL:       z = "database or disk is full";              break;
282     case SQLITE_CANTOPEN:   z = "unable to open database file";          break;
283     case SQLITE_EMPTY:      z = "table contains no data";                break;
284     case SQLITE_SCHEMA:     z = "database schema has changed";           break;
285     case SQLITE_TOOBIG:     z = "String or BLOB exceeded size limit";    break;
286     case SQLITE_CONSTRAINT: z = "constraint failed";                     break;
287     case SQLITE_MISMATCH:   z = "datatype mismatch";                     break;
288     case SQLITE_MISUSE:     z = "library routine called out of sequence";break;
289     case SQLITE_NOLFS:      z = "kernel lacks large file support";       break;
290     case SQLITE_AUTH:       z = "authorization denied";                  break;
291     case SQLITE_FORMAT:     z = "auxiliary database format error";       break;
292     case SQLITE_RANGE:      z = "bind or column index out of range";     break;
293     case SQLITE_NOTADB:     z = "file is encrypted or is not a database";break;
294     default:                z = "unknown error";                         break;
295   }
296   return z;
297 }
298 
299 /*
300 ** This routine implements a busy callback that sleeps and tries
301 ** again until a timeout value is reached.  The timeout value is
302 ** an integer number of milliseconds passed in as the first
303 ** argument.
304 */
305 static int sqliteDefaultBusyCallback(
306  void *ptr,               /* Database connection */
307  int count                /* Number of times table has been busy */
308 ){
309 #if OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
310   static const u8 delays[] =
311      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
312   static const u8 totals[] =
313      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
314 # define NDELAY (sizeof(delays)/sizeof(delays[0]))
315   sqlite3 *db = (sqlite3 *)ptr;
316   int timeout = db->busyTimeout;
317   int delay, prior;
318 
319   assert( count>=0 );
320   if( count < NDELAY ){
321     delay = delays[count];
322     prior = totals[count];
323   }else{
324     delay = delays[NDELAY-1];
325     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
326   }
327   if( prior + delay > timeout ){
328     delay = timeout - prior;
329     if( delay<=0 ) return 0;
330   }
331   sqlite3OsSleep(db->pVfs, delay*1000);
332   return 1;
333 #else
334   sqlite3 *db = (sqlite3 *)ptr;
335   int timeout = ((sqlite3 *)ptr)->busyTimeout;
336   if( (count+1)*1000 > timeout ){
337     return 0;
338   }
339   sqlite3OsSleep(db->pVfs, 1000000);
340   return 1;
341 #endif
342 }
343 
344 /*
345 ** Invoke the given busy handler.
346 **
347 ** This routine is called when an operation failed with a lock.
348 ** If this routine returns non-zero, the lock is retried.  If it
349 ** returns 0, the operation aborts with an SQLITE_BUSY error.
350 */
351 int sqlite3InvokeBusyHandler(BusyHandler *p){
352   int rc;
353   if( p==0 || p->xFunc==0 || p->nBusy<0 ) return 0;
354   rc = p->xFunc(p->pArg, p->nBusy);
355   if( rc==0 ){
356     p->nBusy = -1;
357   }else{
358     p->nBusy++;
359   }
360   return rc;
361 }
362 
363 /*
364 ** This routine sets the busy callback for an Sqlite database to the
365 ** given callback function with the given argument.
366 */
367 int sqlite3_busy_handler(
368   sqlite3 *db,
369   int (*xBusy)(void*,int),
370   void *pArg
371 ){
372   if( sqlite3SafetyCheck(db) ){
373     return SQLITE_MISUSE;
374   }
375   sqlite3_mutex_enter(db->mutex);
376   db->busyHandler.xFunc = xBusy;
377   db->busyHandler.pArg = pArg;
378   db->busyHandler.nBusy = 0;
379   sqlite3_mutex_leave(db->mutex);
380   return SQLITE_OK;
381 }
382 
383 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
384 /*
385 ** This routine sets the progress callback for an Sqlite database to the
386 ** given callback function with the given argument. The progress callback will
387 ** be invoked every nOps opcodes.
388 */
389 void sqlite3_progress_handler(
390   sqlite3 *db,
391   int nOps,
392   int (*xProgress)(void*),
393   void *pArg
394 ){
395   if( !sqlite3SafetyCheck(db) ){
396     sqlite3_mutex_enter(db->mutex);
397     if( nOps>0 ){
398       db->xProgress = xProgress;
399       db->nProgressOps = nOps;
400       db->pProgressArg = pArg;
401     }else{
402       db->xProgress = 0;
403       db->nProgressOps = 0;
404       db->pProgressArg = 0;
405     }
406     sqlite3_mutex_leave(db->mutex);
407   }
408 }
409 #endif
410 
411 
412 /*
413 ** This routine installs a default busy handler that waits for the
414 ** specified number of milliseconds before returning 0.
415 */
416 int sqlite3_busy_timeout(sqlite3 *db, int ms){
417   if( sqlite3SafetyCheck(db) ){
418     return SQLITE_MISUSE;
419   }
420   if( ms>0 ){
421     db->busyTimeout = ms;
422     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
423   }else{
424     sqlite3_busy_handler(db, 0, 0);
425   }
426   return SQLITE_OK;
427 }
428 
429 /*
430 ** Cause any pending operation to stop at its earliest opportunity.
431 */
432 void sqlite3_interrupt(sqlite3 *db){
433   if( db && (db->magic==SQLITE_MAGIC_OPEN || db->magic==SQLITE_MAGIC_BUSY) ){
434     db->u1.isInterrupted = 1;
435   }
436 }
437 
438 
439 /*
440 ** This function is exactly the same as sqlite3_create_function(), except
441 ** that it is designed to be called by internal code. The difference is
442 ** that if a malloc() fails in sqlite3_create_function(), an error code
443 ** is returned and the mallocFailed flag cleared.
444 */
445 int sqlite3CreateFunc(
446   sqlite3 *db,
447   const char *zFunctionName,
448   int nArg,
449   int enc,
450   void *pUserData,
451   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
452   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
453   void (*xFinal)(sqlite3_context*)
454 ){
455   FuncDef *p;
456   int nName;
457 
458   assert( sqlite3_mutex_held(db->mutex) );
459   if( sqlite3SafetyCheck(db) ){
460     return SQLITE_MISUSE;
461   }
462   if( zFunctionName==0 ||
463       (xFunc && (xFinal || xStep)) ||
464       (!xFunc && (xFinal && !xStep)) ||
465       (!xFunc && (!xFinal && xStep)) ||
466       (nArg<-1 || nArg>127) ||
467       (255<(nName = strlen(zFunctionName))) ){
468     sqlite3Error(db, SQLITE_ERROR, "bad parameters");
469     return SQLITE_ERROR;
470   }
471 
472 #ifndef SQLITE_OMIT_UTF16
473   /* If SQLITE_UTF16 is specified as the encoding type, transform this
474   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
475   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
476   **
477   ** If SQLITE_ANY is specified, add three versions of the function
478   ** to the hash table.
479   */
480   if( enc==SQLITE_UTF16 ){
481     enc = SQLITE_UTF16NATIVE;
482   }else if( enc==SQLITE_ANY ){
483     int rc;
484     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
485          pUserData, xFunc, xStep, xFinal);
486     if( rc==SQLITE_OK ){
487       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
488           pUserData, xFunc, xStep, xFinal);
489     }
490     if( rc!=SQLITE_OK ){
491       return rc;
492     }
493     enc = SQLITE_UTF16BE;
494   }
495 #else
496   enc = SQLITE_UTF8;
497 #endif
498 
499   /* Check if an existing function is being overridden or deleted. If so,
500   ** and there are active VMs, then return SQLITE_BUSY. If a function
501   ** is being overridden/deleted but there are no active VMs, allow the
502   ** operation to continue but invalidate all precompiled statements.
503   */
504   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 0);
505   if( p && p->iPrefEnc==enc && p->nArg==nArg ){
506     if( db->activeVdbeCnt ){
507       sqlite3Error(db, SQLITE_BUSY,
508         "Unable to delete/modify user-function due to active statements");
509       assert( !db->mallocFailed );
510       return SQLITE_BUSY;
511     }else{
512       sqlite3ExpirePreparedStatements(db);
513     }
514   }
515 
516   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 1);
517   assert(p || db->mallocFailed);
518   if( !p ){
519     return SQLITE_NOMEM;
520   }
521   p->flags = 0;
522   p->xFunc = xFunc;
523   p->xStep = xStep;
524   p->xFinalize = xFinal;
525   p->pUserData = pUserData;
526   p->nArg = nArg;
527   return SQLITE_OK;
528 }
529 
530 /*
531 ** Create new user functions.
532 */
533 int sqlite3_create_function(
534   sqlite3 *db,
535   const char *zFunctionName,
536   int nArg,
537   int enc,
538   void *p,
539   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
540   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
541   void (*xFinal)(sqlite3_context*)
542 ){
543   int rc;
544   sqlite3_mutex_enter(db->mutex);
545   assert( !db->mallocFailed );
546   rc = sqlite3CreateFunc(db, zFunctionName, nArg, enc, p, xFunc, xStep, xFinal);
547   rc = sqlite3ApiExit(db, rc);
548   sqlite3_mutex_leave(db->mutex);
549   return rc;
550 }
551 
552 #ifndef SQLITE_OMIT_UTF16
553 int sqlite3_create_function16(
554   sqlite3 *db,
555   const void *zFunctionName,
556   int nArg,
557   int eTextRep,
558   void *p,
559   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
560   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
561   void (*xFinal)(sqlite3_context*)
562 ){
563   int rc;
564   char *zFunc8;
565   sqlite3_mutex_enter(db->mutex);
566   assert( !db->mallocFailed );
567   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1);
568   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal);
569   sqlite3_free(zFunc8);
570   rc = sqlite3ApiExit(db, rc);
571   sqlite3_mutex_leave(db->mutex);
572   return rc;
573 }
574 #endif
575 
576 
577 /*
578 ** Declare that a function has been overloaded by a virtual table.
579 **
580 ** If the function already exists as a regular global function, then
581 ** this routine is a no-op.  If the function does not exist, then create
582 ** a new one that always throws a run-time error.
583 **
584 ** When virtual tables intend to provide an overloaded function, they
585 ** should call this routine to make sure the global function exists.
586 ** A global function must exist in order for name resolution to work
587 ** properly.
588 */
589 int sqlite3_overload_function(
590   sqlite3 *db,
591   const char *zName,
592   int nArg
593 ){
594   int nName = strlen(zName);
595   int rc;
596   sqlite3_mutex_enter(db->mutex);
597   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
598     sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
599                       0, sqlite3InvalidFunction, 0, 0);
600   }
601   rc = sqlite3ApiExit(db, SQLITE_OK);
602   sqlite3_mutex_leave(db->mutex);
603   return rc;
604 }
605 
606 #ifndef SQLITE_OMIT_TRACE
607 /*
608 ** Register a trace function.  The pArg from the previously registered trace
609 ** is returned.
610 **
611 ** A NULL trace function means that no tracing is executes.  A non-NULL
612 ** trace is a pointer to a function that is invoked at the start of each
613 ** SQL statement.
614 */
615 void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
616   void *pOld;
617   sqlite3_mutex_enter(db->mutex);
618   pOld = db->pTraceArg;
619   db->xTrace = xTrace;
620   db->pTraceArg = pArg;
621   sqlite3_mutex_leave(db->mutex);
622   return pOld;
623 }
624 /*
625 ** Register a profile function.  The pArg from the previously registered
626 ** profile function is returned.
627 **
628 ** A NULL profile function means that no profiling is executes.  A non-NULL
629 ** profile is a pointer to a function that is invoked at the conclusion of
630 ** each SQL statement that is run.
631 */
632 void *sqlite3_profile(
633   sqlite3 *db,
634   void (*xProfile)(void*,const char*,sqlite_uint64),
635   void *pArg
636 ){
637   void *pOld;
638   sqlite3_mutex_enter(db->mutex);
639   pOld = db->pProfileArg;
640   db->xProfile = xProfile;
641   db->pProfileArg = pArg;
642   sqlite3_mutex_leave(db->mutex);
643   return pOld;
644 }
645 #endif /* SQLITE_OMIT_TRACE */
646 
647 /*** EXPERIMENTAL ***
648 **
649 ** Register a function to be invoked when a transaction comments.
650 ** If the invoked function returns non-zero, then the commit becomes a
651 ** rollback.
652 */
653 void *sqlite3_commit_hook(
654   sqlite3 *db,              /* Attach the hook to this database */
655   int (*xCallback)(void*),  /* Function to invoke on each commit */
656   void *pArg                /* Argument to the function */
657 ){
658   void *pOld;
659   sqlite3_mutex_enter(db->mutex);
660   pOld = db->pCommitArg;
661   db->xCommitCallback = xCallback;
662   db->pCommitArg = pArg;
663   sqlite3_mutex_leave(db->mutex);
664   return pOld;
665 }
666 
667 /*
668 ** Register a callback to be invoked each time a row is updated,
669 ** inserted or deleted using this database connection.
670 */
671 void *sqlite3_update_hook(
672   sqlite3 *db,              /* Attach the hook to this database */
673   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
674   void *pArg                /* Argument to the function */
675 ){
676   void *pRet;
677   sqlite3_mutex_enter(db->mutex);
678   pRet = db->pUpdateArg;
679   db->xUpdateCallback = xCallback;
680   db->pUpdateArg = pArg;
681   sqlite3_mutex_leave(db->mutex);
682   return pRet;
683 }
684 
685 /*
686 ** Register a callback to be invoked each time a transaction is rolled
687 ** back by this database connection.
688 */
689 void *sqlite3_rollback_hook(
690   sqlite3 *db,              /* Attach the hook to this database */
691   void (*xCallback)(void*), /* Callback function */
692   void *pArg                /* Argument to the function */
693 ){
694   void *pRet;
695   sqlite3_mutex_enter(db->mutex);
696   pRet = db->pRollbackArg;
697   db->xRollbackCallback = xCallback;
698   db->pRollbackArg = pArg;
699   sqlite3_mutex_leave(db->mutex);
700   return pRet;
701 }
702 
703 /*
704 ** This routine is called to create a connection to a database BTree
705 ** driver.  If zFilename is the name of a file, then that file is
706 ** opened and used.  If zFilename is the magic name ":memory:" then
707 ** the database is stored in memory (and is thus forgotten as soon as
708 ** the connection is closed.)  If zFilename is NULL then the database
709 ** is a "virtual" database for transient use only and is deleted as
710 ** soon as the connection is closed.
711 **
712 ** A virtual database can be either a disk file (that is automatically
713 ** deleted when the file is closed) or it an be held entirely in memory,
714 ** depending on the values of the TEMP_STORE compile-time macro and the
715 ** db->temp_store variable, according to the following chart:
716 **
717 **       TEMP_STORE     db->temp_store     Location of temporary database
718 **       ----------     --------------     ------------------------------
719 **           0               any             file
720 **           1                1              file
721 **           1                2              memory
722 **           1                0              file
723 **           2                1              file
724 **           2                2              memory
725 **           2                0              memory
726 **           3               any             memory
727 */
728 int sqlite3BtreeFactory(
729   const sqlite3 *db,        /* Main database when opening aux otherwise 0 */
730   const char *zFilename,    /* Name of the file containing the BTree database */
731   int omitJournal,          /* if TRUE then do not journal this file */
732   int nCache,               /* How many pages in the page cache */
733   int vfsFlags,             /* Flags passed through to vfsOpen */
734   Btree **ppBtree           /* Pointer to new Btree object written here */
735 ){
736   int btFlags = 0;
737   int rc;
738 
739   assert( sqlite3_mutex_held(db->mutex) );
740   assert( ppBtree != 0);
741   if( omitJournal ){
742     btFlags |= BTREE_OMIT_JOURNAL;
743   }
744   if( db->flags & SQLITE_NoReadlock ){
745     btFlags |= BTREE_NO_READLOCK;
746   }
747   if( zFilename==0 ){
748 #if TEMP_STORE==0
749     /* Do nothing */
750 #endif
751 #ifndef SQLITE_OMIT_MEMORYDB
752 #if TEMP_STORE==1
753     if( db->temp_store==2 ) zFilename = ":memory:";
754 #endif
755 #if TEMP_STORE==2
756     if( db->temp_store!=1 ) zFilename = ":memory:";
757 #endif
758 #if TEMP_STORE==3
759     zFilename = ":memory:";
760 #endif
761 #endif /* SQLITE_OMIT_MEMORYDB */
762   }
763 
764   if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (zFilename==0 || *zFilename==0) ){
765     vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
766   }
767   rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btFlags, vfsFlags);
768   if( rc==SQLITE_OK ){
769     sqlite3BtreeSetBusyHandler(*ppBtree, (void*)&db->busyHandler);
770     sqlite3BtreeSetCacheSize(*ppBtree, nCache);
771   }
772   return rc;
773 }
774 
775 /*
776 ** Return UTF-8 encoded English language explanation of the most recent
777 ** error.
778 */
779 const char *sqlite3_errmsg(sqlite3 *db){
780   const char *z;
781   if( !db ){
782     return sqlite3ErrStr(SQLITE_NOMEM);
783   }
784   if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
785     return sqlite3ErrStr(SQLITE_MISUSE);
786   }
787   sqlite3_mutex_enter(db->mutex);
788   assert( !db->mallocFailed );
789   z = (char*)sqlite3_value_text(db->pErr);
790   if( z==0 ){
791     z = sqlite3ErrStr(db->errCode);
792   }
793   sqlite3_mutex_leave(db->mutex);
794   return z;
795 }
796 
797 #ifndef SQLITE_OMIT_UTF16
798 /*
799 ** Return UTF-16 encoded English language explanation of the most recent
800 ** error.
801 */
802 const void *sqlite3_errmsg16(sqlite3 *db){
803   /* Because all the characters in the string are in the unicode
804   ** range 0x00-0xFF, if we pad the big-endian string with a
805   ** zero byte, we can obtain the little-endian string with
806   ** &big_endian[1].
807   */
808   static const char outOfMemBe[] = {
809     0, 'o', 0, 'u', 0, 't', 0, ' ',
810     0, 'o', 0, 'f', 0, ' ',
811     0, 'm', 0, 'e', 0, 'm', 0, 'o', 0, 'r', 0, 'y', 0, 0, 0
812   };
813   static const char misuseBe [] = {
814     0, 'l', 0, 'i', 0, 'b', 0, 'r', 0, 'a', 0, 'r', 0, 'y', 0, ' ',
815     0, 'r', 0, 'o', 0, 'u', 0, 't', 0, 'i', 0, 'n', 0, 'e', 0, ' ',
816     0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ',
817     0, 'o', 0, 'u', 0, 't', 0, ' ',
818     0, 'o', 0, 'f', 0, ' ',
819     0, 's', 0, 'e', 0, 'q', 0, 'u', 0, 'e', 0, 'n', 0, 'c', 0, 'e', 0, 0, 0
820   };
821 
822   const void *z;
823   if( !db ){
824     return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
825   }
826   if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
827     return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
828   }
829   sqlite3_mutex_enter(db->mutex);
830   assert( !db->mallocFailed );
831   z = sqlite3_value_text16(db->pErr);
832   if( z==0 ){
833     sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
834          SQLITE_UTF8, SQLITE_STATIC);
835     z = sqlite3_value_text16(db->pErr);
836   }
837   sqlite3ApiExit(0, 0);
838   sqlite3_mutex_leave(db->mutex);
839   return z;
840 }
841 #endif /* SQLITE_OMIT_UTF16 */
842 
843 /*
844 ** Return the most recent error code generated by an SQLite routine. If NULL is
845 ** passed to this function, we assume a malloc() failed during sqlite3_open().
846 */
847 int sqlite3_errcode(sqlite3 *db){
848   if( !db || db->mallocFailed ){
849     return SQLITE_NOMEM;
850   }
851   if( sqlite3SafetyCheck(db) ){
852     return SQLITE_MISUSE;
853   }
854   return db->errCode & db->errMask;
855 }
856 
857 /*
858 ** Create a new collating function for database "db".  The name is zName
859 ** and the encoding is enc.
860 */
861 static int createCollation(
862   sqlite3* db,
863   const char *zName,
864   int enc,
865   void* pCtx,
866   int(*xCompare)(void*,int,const void*,int,const void*),
867   void(*xDel)(void*)
868 ){
869   CollSeq *pColl;
870   int enc2;
871 
872   if( sqlite3SafetyCheck(db) ){
873     return SQLITE_MISUSE;
874   }
875   assert( sqlite3_mutex_held(db->mutex) );
876 
877   /* If SQLITE_UTF16 is specified as the encoding type, transform this
878   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
879   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
880   */
881   enc2 = enc & ~SQLITE_UTF16_ALIGNED;
882   if( enc2==SQLITE_UTF16 ){
883     enc2 = SQLITE_UTF16NATIVE;
884   }
885 
886   if( (enc2&~3)!=0 ){
887     sqlite3Error(db, SQLITE_ERROR, "unknown encoding");
888     return SQLITE_ERROR;
889   }
890 
891   /* Check if this call is removing or replacing an existing collation
892   ** sequence. If so, and there are active VMs, return busy. If there
893   ** are no active VMs, invalidate any pre-compiled statements.
894   */
895   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, strlen(zName), 0);
896   if( pColl && pColl->xCmp ){
897     if( db->activeVdbeCnt ){
898       sqlite3Error(db, SQLITE_BUSY,
899         "Unable to delete/modify collation sequence due to active statements");
900       return SQLITE_BUSY;
901     }
902     sqlite3ExpirePreparedStatements(db);
903 
904     /* If collation sequence pColl was created directly by a call to
905     ** sqlite3_create_collation, and not generated by synthCollSeq(),
906     ** then any copies made by synthCollSeq() need to be invalidated.
907     ** Also, collation destructor - CollSeq.xDel() - function may need
908     ** to be called.
909     */
910     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
911       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, strlen(zName));
912       int j;
913       for(j=0; j<3; j++){
914         CollSeq *p = &aColl[j];
915         if( p->enc==pColl->enc ){
916           if( p->xDel ){
917             p->xDel(p->pUser);
918           }
919           p->xCmp = 0;
920         }
921       }
922     }
923   }
924 
925   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, strlen(zName), 1);
926   if( pColl ){
927     pColl->xCmp = xCompare;
928     pColl->pUser = pCtx;
929     pColl->xDel = xDel;
930     pColl->enc = enc2 | (enc & SQLITE_UTF16_ALIGNED);
931   }
932   sqlite3Error(db, SQLITE_OK, 0);
933   return SQLITE_OK;
934 }
935 
936 
937 /*
938 ** This routine does the work of opening a database on behalf of
939 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
940 ** is UTF-8 encoded.
941 */
942 static int openDatabase(
943   const char *zFilename, /* Database filename UTF-8 encoded */
944   sqlite3 **ppDb,        /* OUT: Returned database handle */
945   unsigned flags,        /* Operational flags */
946   const char *zVfs       /* Name of the VFS to use */
947 ){
948   sqlite3 *db;
949   int rc;
950   CollSeq *pColl;
951 
952   /* Allocate the sqlite data structure */
953   db = sqlite3MallocZero( sizeof(sqlite3) );
954   if( db==0 ) goto opendb_out;
955   db->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_RECURSIVE);
956   if( db->mutex==0 ){
957     sqlite3_free(db);
958     db = 0;
959     goto opendb_out;
960   }
961   sqlite3_mutex_enter(db->mutex);
962   db->errMask = 0xff;
963   db->priorNewRowid = 0;
964   db->nDb = 2;
965   db->magic = SQLITE_MAGIC_BUSY;
966   db->aDb = db->aDbStatic;
967   db->autoCommit = 1;
968   db->flags |= SQLITE_ShortColNames
969 #if SQLITE_DEFAULT_FILE_FORMAT<4
970                  | SQLITE_LegacyFileFmt
971 #endif
972 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
973                  | SQLITE_LoadExtension
974 #endif
975       ;
976   sqlite3HashInit(&db->aFunc, SQLITE_HASH_STRING, 0);
977   sqlite3HashInit(&db->aCollSeq, SQLITE_HASH_STRING, 0);
978 #ifndef SQLITE_OMIT_VIRTUALTABLE
979   sqlite3HashInit(&db->aModule, SQLITE_HASH_STRING, 0);
980 #endif
981 
982   db->pVfs = sqlite3_vfs_find(zVfs);
983   if( !db->pVfs ){
984     rc = SQLITE_ERROR;
985     db->magic = SQLITE_MAGIC_CLOSED;
986     sqlite3Error(db, rc, "no such vfs: %s", (zVfs?zVfs:"(null)"));
987     goto opendb_out;
988   }
989 
990   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
991   ** and UTF-16, so add a version for each to avoid any unnecessary
992   ** conversions. The only error that can occur here is a malloc() failure.
993   */
994   if( createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0) ||
995       createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0) ||
996       createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0) ||
997       (db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 6, 0))==0
998   ){
999     assert( db->mallocFailed );
1000     db->magic = SQLITE_MAGIC_CLOSED;
1001     goto opendb_out;
1002   }
1003 
1004   /* Also add a UTF-8 case-insensitive collation sequence. */
1005   createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
1006 
1007   /* Set flags on the built-in collating sequences */
1008   db->pDfltColl->type = SQLITE_COLL_BINARY;
1009   pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 6, 0);
1010   if( pColl ){
1011     pColl->type = SQLITE_COLL_NOCASE;
1012   }
1013 
1014   /* Open the backend database driver */
1015   db->openFlags = flags;
1016   rc = sqlite3BtreeFactory(db, zFilename, 0, SQLITE_DEFAULT_CACHE_SIZE,
1017                            flags | SQLITE_OPEN_MAIN_DB,
1018                            &db->aDb[0].pBt);
1019   if( rc!=SQLITE_OK ){
1020     sqlite3Error(db, rc, 0);
1021     db->magic = SQLITE_MAGIC_CLOSED;
1022     goto opendb_out;
1023   }
1024   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
1025   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
1026 
1027 
1028   /* The default safety_level for the main database is 'full'; for the temp
1029   ** database it is 'NONE'. This matches the pager layer defaults.
1030   */
1031   db->aDb[0].zName = "main";
1032   db->aDb[0].safety_level = 3;
1033 #ifndef SQLITE_OMIT_TEMPDB
1034   db->aDb[1].zName = "temp";
1035   db->aDb[1].safety_level = 1;
1036 #endif
1037 
1038   db->magic = SQLITE_MAGIC_OPEN;
1039   if( db->mallocFailed ){
1040     goto opendb_out;
1041   }
1042 
1043   /* Register all built-in functions, but do not attempt to read the
1044   ** database schema yet. This is delayed until the first time the database
1045   ** is accessed.
1046   */
1047   sqlite3Error(db, SQLITE_OK, 0);
1048   sqlite3RegisterBuiltinFunctions(db);
1049 
1050   /* Load automatic extensions - extensions that have been registered
1051   ** using the sqlite3_automatic_extension() API.
1052   */
1053   (void)sqlite3AutoLoadExtensions(db);
1054   if( sqlite3_errcode(db)!=SQLITE_OK ){
1055     goto opendb_out;
1056   }
1057 
1058 #ifdef SQLITE_ENABLE_FTS1
1059   if( !db->mallocFailed ){
1060     extern int sqlite3Fts1Init(sqlite3*);
1061     rc = sqlite3Fts1Init(db);
1062   }
1063 #endif
1064 
1065 #ifdef SQLITE_ENABLE_FTS2
1066   if( !db->mallocFailed && rc==SQLITE_OK ){
1067     extern int sqlite3Fts2Init(sqlite3*);
1068     rc = sqlite3Fts2Init(db);
1069   }
1070 #endif
1071 
1072 #ifdef SQLITE_ENABLE_FTS3
1073   if( !db->mallocFailed && rc==SQLITE_OK ){
1074     extern int sqlite3Fts3Init(sqlite3*);
1075     rc = sqlite3Fts3Init(db);
1076   }
1077 #endif
1078 
1079 #ifdef SQLITE_ENABLE_ICU
1080   if( !db->mallocFailed && rc==SQLITE_OK ){
1081     extern int sqlite3IcuInit(sqlite3*);
1082     rc = sqlite3IcuInit(db);
1083   }
1084 #endif
1085   sqlite3Error(db, rc, 0);
1086 
1087   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
1088   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
1089   ** mode.  Doing nothing at all also makes NORMAL the default.
1090   */
1091 #ifdef SQLITE_DEFAULT_LOCKING_MODE
1092   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
1093   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
1094                           SQLITE_DEFAULT_LOCKING_MODE);
1095 #endif
1096 
1097 opendb_out:
1098   if( db && db->mutex ){
1099     sqlite3_mutex_leave(db->mutex);
1100   }
1101   if( SQLITE_NOMEM==(rc = sqlite3_errcode(db)) ){
1102     sqlite3_close(db);
1103     db = 0;
1104   }
1105   *ppDb = db;
1106   return sqlite3ApiExit(0, rc);
1107 }
1108 
1109 /*
1110 ** Open a new database handle.
1111 */
1112 int sqlite3_open(
1113   const char *zFilename,
1114   sqlite3 **ppDb
1115 ){
1116   return openDatabase(zFilename, ppDb,
1117                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
1118 }
1119 int sqlite3_open_v2(
1120   const char *filename,   /* Database filename (UTF-8) */
1121   sqlite3 **ppDb,         /* OUT: SQLite db handle */
1122   int flags,              /* Flags */
1123   const char *zVfs        /* Name of VFS module to use */
1124 ){
1125   return openDatabase(filename, ppDb, flags, zVfs);
1126 }
1127 
1128 #ifndef SQLITE_OMIT_UTF16
1129 /*
1130 ** Open a new database handle.
1131 */
1132 int sqlite3_open16(
1133   const void *zFilename,
1134   sqlite3 **ppDb
1135 ){
1136   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
1137   sqlite3_value *pVal;
1138   int rc = SQLITE_NOMEM;
1139 
1140   assert( zFilename );
1141   assert( ppDb );
1142   *ppDb = 0;
1143   pVal = sqlite3ValueNew(0);
1144   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
1145   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
1146   if( zFilename8 ){
1147     rc = openDatabase(zFilename8, ppDb,
1148                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
1149     if( rc==SQLITE_OK && *ppDb ){
1150       rc = sqlite3_exec(*ppDb, "PRAGMA encoding = 'UTF-16'", 0, 0, 0);
1151       if( rc!=SQLITE_OK ){
1152         sqlite3_close(*ppDb);
1153         *ppDb = 0;
1154       }
1155     }
1156   }
1157   sqlite3ValueFree(pVal);
1158 
1159   return sqlite3ApiExit(0, rc);
1160 }
1161 #endif /* SQLITE_OMIT_UTF16 */
1162 
1163 /*
1164 ** Register a new collation sequence with the database handle db.
1165 */
1166 int sqlite3_create_collation(
1167   sqlite3* db,
1168   const char *zName,
1169   int enc,
1170   void* pCtx,
1171   int(*xCompare)(void*,int,const void*,int,const void*)
1172 ){
1173   int rc;
1174   sqlite3_mutex_enter(db->mutex);
1175   assert( !db->mallocFailed );
1176   rc = createCollation(db, zName, enc, pCtx, xCompare, 0);
1177   rc = sqlite3ApiExit(db, rc);
1178   sqlite3_mutex_leave(db->mutex);
1179   return rc;
1180 }
1181 
1182 /*
1183 ** Register a new collation sequence with the database handle db.
1184 */
1185 int sqlite3_create_collation_v2(
1186   sqlite3* db,
1187   const char *zName,
1188   int enc,
1189   void* pCtx,
1190   int(*xCompare)(void*,int,const void*,int,const void*),
1191   void(*xDel)(void*)
1192 ){
1193   int rc;
1194   sqlite3_mutex_enter(db->mutex);
1195   assert( !db->mallocFailed );
1196   rc = createCollation(db, zName, enc, pCtx, xCompare, xDel);
1197   rc = sqlite3ApiExit(db, rc);
1198   sqlite3_mutex_leave(db->mutex);
1199   return rc;
1200 }
1201 
1202 #ifndef SQLITE_OMIT_UTF16
1203 /*
1204 ** Register a new collation sequence with the database handle db.
1205 */
1206 int sqlite3_create_collation16(
1207   sqlite3* db,
1208   const char *zName,
1209   int enc,
1210   void* pCtx,
1211   int(*xCompare)(void*,int,const void*,int,const void*)
1212 ){
1213   int rc = SQLITE_OK;
1214   char *zName8;
1215   sqlite3_mutex_enter(db->mutex);
1216   assert( !db->mallocFailed );
1217   zName8 = sqlite3Utf16to8(db, zName, -1);
1218   if( zName8 ){
1219     rc = createCollation(db, zName8, enc, pCtx, xCompare, 0);
1220     sqlite3_free(zName8);
1221   }
1222   rc = sqlite3ApiExit(db, rc);
1223   sqlite3_mutex_leave(db->mutex);
1224   return rc;
1225 }
1226 #endif /* SQLITE_OMIT_UTF16 */
1227 
1228 /*
1229 ** Register a collation sequence factory callback with the database handle
1230 ** db. Replace any previously installed collation sequence factory.
1231 */
1232 int sqlite3_collation_needed(
1233   sqlite3 *db,
1234   void *pCollNeededArg,
1235   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
1236 ){
1237   if( sqlite3SafetyCheck(db) ){
1238     return SQLITE_MISUSE;
1239   }
1240   sqlite3_mutex_enter(db->mutex);
1241   db->xCollNeeded = xCollNeeded;
1242   db->xCollNeeded16 = 0;
1243   db->pCollNeededArg = pCollNeededArg;
1244   sqlite3_mutex_leave(db->mutex);
1245   return SQLITE_OK;
1246 }
1247 
1248 #ifndef SQLITE_OMIT_UTF16
1249 /*
1250 ** Register a collation sequence factory callback with the database handle
1251 ** db. Replace any previously installed collation sequence factory.
1252 */
1253 int sqlite3_collation_needed16(
1254   sqlite3 *db,
1255   void *pCollNeededArg,
1256   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
1257 ){
1258   if( sqlite3SafetyCheck(db) ){
1259     return SQLITE_MISUSE;
1260   }
1261   sqlite3_mutex_enter(db->mutex);
1262   db->xCollNeeded = 0;
1263   db->xCollNeeded16 = xCollNeeded16;
1264   db->pCollNeededArg = pCollNeededArg;
1265   sqlite3_mutex_leave(db->mutex);
1266   return SQLITE_OK;
1267 }
1268 #endif /* SQLITE_OMIT_UTF16 */
1269 
1270 #ifndef SQLITE_OMIT_GLOBALRECOVER
1271 /*
1272 ** This function is now an anachronism. It used to be used to recover from a
1273 ** malloc() failure, but SQLite now does this automatically.
1274 */
1275 int sqlite3_global_recover(void){
1276   return SQLITE_OK;
1277 }
1278 #endif
1279 
1280 /*
1281 ** Test to see whether or not the database connection is in autocommit
1282 ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
1283 ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
1284 ** by the next COMMIT or ROLLBACK.
1285 **
1286 ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
1287 */
1288 int sqlite3_get_autocommit(sqlite3 *db){
1289   return db->autoCommit;
1290 }
1291 
1292 #ifdef SQLITE_DEBUG
1293 /*
1294 ** The following routine is subtituted for constant SQLITE_CORRUPT in
1295 ** debugging builds.  This provides a way to set a breakpoint for when
1296 ** corruption is first detected.
1297 */
1298 int sqlite3Corrupt(void){
1299   return SQLITE_CORRUPT;
1300 }
1301 #endif
1302 
1303 /*
1304 ** This is a convenience routine that makes sure that all thread-specific
1305 ** data for this thread has been deallocated.
1306 **
1307 ** SQLite no longer uses thread-specific data so this routine is now a
1308 ** no-op.  It is retained for historical compatibility.
1309 */
1310 void sqlite3_thread_cleanup(void){
1311 }
1312 
1313 /*
1314 ** Return meta information about a specific column of a database table.
1315 ** See comment in sqlite3.h (sqlite.h.in) for details.
1316 */
1317 #ifdef SQLITE_ENABLE_COLUMN_METADATA
1318 int sqlite3_table_column_metadata(
1319   sqlite3 *db,                /* Connection handle */
1320   const char *zDbName,        /* Database name or NULL */
1321   const char *zTableName,     /* Table name */
1322   const char *zColumnName,    /* Column name */
1323   char const **pzDataType,    /* OUTPUT: Declared data type */
1324   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
1325   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
1326   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
1327   int *pAutoinc               /* OUTPUT: True if colums is auto-increment */
1328 ){
1329   int rc;
1330   char *zErrMsg = 0;
1331   Table *pTab = 0;
1332   Column *pCol = 0;
1333   int iCol;
1334 
1335   char const *zDataType = 0;
1336   char const *zCollSeq = 0;
1337   int notnull = 0;
1338   int primarykey = 0;
1339   int autoinc = 0;
1340 
1341   /* Ensure the database schema has been loaded */
1342   if( sqlite3SafetyOn(db) ){
1343     return SQLITE_MISUSE;
1344   }
1345   sqlite3_mutex_enter(db->mutex);
1346   rc = sqlite3Init(db, &zErrMsg);
1347   if( SQLITE_OK!=rc ){
1348     goto error_out;
1349   }
1350 
1351   /* Locate the table in question */
1352   pTab = sqlite3FindTable(db, zTableName, zDbName);
1353   if( !pTab || pTab->pSelect ){
1354     pTab = 0;
1355     goto error_out;
1356   }
1357 
1358   /* Find the column for which info is requested */
1359   if( sqlite3IsRowid(zColumnName) ){
1360     iCol = pTab->iPKey;
1361     if( iCol>=0 ){
1362       pCol = &pTab->aCol[iCol];
1363     }
1364   }else{
1365     for(iCol=0; iCol<pTab->nCol; iCol++){
1366       pCol = &pTab->aCol[iCol];
1367       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
1368         break;
1369       }
1370     }
1371     if( iCol==pTab->nCol ){
1372       pTab = 0;
1373       goto error_out;
1374     }
1375   }
1376 
1377   /* The following block stores the meta information that will be returned
1378   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
1379   ** and autoinc. At this point there are two possibilities:
1380   **
1381   **     1. The specified column name was rowid", "oid" or "_rowid_"
1382   **        and there is no explicitly declared IPK column.
1383   **
1384   **     2. The table is not a view and the column name identified an
1385   **        explicitly declared column. Copy meta information from *pCol.
1386   */
1387   if( pCol ){
1388     zDataType = pCol->zType;
1389     zCollSeq = pCol->zColl;
1390     notnull = (pCol->notNull?1:0);
1391     primarykey  = (pCol->isPrimKey?1:0);
1392     autoinc = ((pTab->iPKey==iCol && pTab->autoInc)?1:0);
1393   }else{
1394     zDataType = "INTEGER";
1395     primarykey = 1;
1396   }
1397   if( !zCollSeq ){
1398     zCollSeq = "BINARY";
1399   }
1400 
1401 error_out:
1402   if( sqlite3SafetyOff(db) ){
1403     rc = SQLITE_MISUSE;
1404   }
1405 
1406   /* Whether the function call succeeded or failed, set the output parameters
1407   ** to whatever their local counterparts contain. If an error did occur,
1408   ** this has the effect of zeroing all output parameters.
1409   */
1410   if( pzDataType ) *pzDataType = zDataType;
1411   if( pzCollSeq ) *pzCollSeq = zCollSeq;
1412   if( pNotNull ) *pNotNull = notnull;
1413   if( pPrimaryKey ) *pPrimaryKey = primarykey;
1414   if( pAutoinc ) *pAutoinc = autoinc;
1415 
1416   if( SQLITE_OK==rc && !pTab ){
1417     sqlite3SetString(&zErrMsg, "no such table column: ", zTableName, ".",
1418         zColumnName, 0);
1419     rc = SQLITE_ERROR;
1420   }
1421   sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
1422   sqlite3_free(zErrMsg);
1423   rc = sqlite3ApiExit(db, rc);
1424   sqlite3_mutex_leave(db->mutex);
1425   return rc;
1426 }
1427 #endif
1428 
1429 /*
1430 ** Sleep for a little while.  Return the amount of time slept.
1431 */
1432 int sqlite3_sleep(int ms){
1433   sqlite3_vfs *pVfs;
1434   int rc;
1435   pVfs = sqlite3_vfs_find(0);
1436 
1437   /* This function works in milliseconds, but the underlying OsSleep()
1438   ** API uses microseconds. Hence the 1000's.
1439   */
1440   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
1441   return rc;
1442 }
1443 
1444 /*
1445 ** Enable or disable the extended result codes.
1446 */
1447 int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
1448   sqlite3_mutex_enter(db->mutex);
1449   db->errMask = onoff ? 0xffffffff : 0xff;
1450   sqlite3_mutex_leave(db->mutex);
1451   return SQLITE_OK;
1452 }
1453 
1454 /*
1455 ** Invoke the xFileControl method on a particular database.
1456 */
1457 int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
1458   int rc = SQLITE_ERROR;
1459   int iDb;
1460   sqlite3_mutex_enter(db->mutex);
1461   if( zDbName==0 ){
1462     iDb = 0;
1463   }else{
1464     for(iDb=0; iDb<db->nDb; iDb++){
1465       if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
1466     }
1467   }
1468   if( iDb<db->nDb ){
1469     Btree *pBtree = db->aDb[iDb].pBt;
1470     if( pBtree ){
1471       Pager *pPager;
1472       sqlite3BtreeEnter(pBtree);
1473       pPager = sqlite3BtreePager(pBtree);
1474       if( pPager ){
1475         sqlite3_file *fd = sqlite3PagerFile(pPager);
1476         if( fd ){
1477           rc = sqlite3OsFileControl(fd, op, pArg);
1478         }
1479       }
1480       sqlite3BtreeLeave(pBtree);
1481     }
1482   }
1483   sqlite3_mutex_leave(db->mutex);
1484   return rc;
1485 }
1486