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