1: /*
2: ** 2001 September 15
3: **
4: ** The author disclaims copyright to this source code. In place of
5: ** a legal notice, here is a blessing:
6: **
7: ** May you do good and not evil.
8: ** May you find forgiveness for yourself and forgive others.
9: ** May you share freely, never taking more than you give.
10: **
11: *************************************************************************
12: ** Main file for the SQLite library. The routines in this file
13: ** implement the programmer interface to the library. Routines in
14: ** other files are for internal use by SQLite and should not be
15: ** accessed by users of the library.
16: */
17: #include "sqliteInt.h"
18:
19: #ifdef SQLITE_ENABLE_FTS3
20: # include "fts3.h"
21: #endif
22: #ifdef SQLITE_ENABLE_RTREE
23: # include "rtree.h"
24: #endif
25: #ifdef SQLITE_ENABLE_ICU
26: # include "sqliteicu.h"
27: #endif
28:
29: #ifndef SQLITE_AMALGAMATION
30: /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
31: ** contains the text of SQLITE_VERSION macro.
32: */
33: const char sqlite3_version[] = SQLITE_VERSION;
34: #endif
35:
36: /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
37: ** a pointer to the to the sqlite3_version[] string constant.
38: */
39: const char *sqlite3_libversion(void){ return sqlite3_version; }
40:
41: /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
42: ** pointer to a string constant whose value is the same as the
43: ** SQLITE_SOURCE_ID C preprocessor macro.
44: */
45: const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
46:
47: /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
48: ** returns an integer equal to SQLITE_VERSION_NUMBER.
49: */
50: int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
51:
52: /* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns
53: ** zero if and only if SQLite was compiled with mutexing code omitted due to
54: ** the SQLITE_THREADSAFE compile-time option being set to 0.
55: */
56: int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
57:
58: #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
59: /*
60: ** If the following function pointer is not NULL and if
61: ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
62: ** I/O active are written using this function. These messages
63: ** are intended for debugging activity only.
64: */
65: void (*sqlite3IoTrace)(const char*, ...) = 0;
66: #endif
67:
68: /*
69: ** If the following global variable points to a string which is the
70: ** name of a directory, then that directory will be used to store
71: ** temporary files.
72: **
73: ** See also the "PRAGMA temp_store_directory" SQL command.
74: */
75: char *sqlite3_temp_directory = 0;
76:
77: /*
78: ** Initialize SQLite.
79: **
80: ** This routine must be called to initialize the memory allocation,
81: ** VFS, and mutex subsystems prior to doing any serious work with
82: ** SQLite. But as long as you do not compile with SQLITE_OMIT_AUTOINIT
83: ** this routine will be called automatically by key routines such as
84: ** sqlite3_open().
85: **
86: ** This routine is a no-op except on its very first call for the process,
87: ** or for the first call after a call to sqlite3_shutdown.
88: **
89: ** The first thread to call this routine runs the initialization to
90: ** completion. If subsequent threads call this routine before the first
91: ** thread has finished the initialization process, then the subsequent
92: ** threads must block until the first thread finishes with the initialization.
93: **
94: ** The first thread might call this routine recursively. Recursive
95: ** calls to this routine should not block, of course. Otherwise the
96: ** initialization process would never complete.
97: **
98: ** Let X be the first thread to enter this routine. Let Y be some other
99: ** thread. Then while the initial invocation of this routine by X is
100: ** incomplete, it is required that:
101: **
102: ** * Calls to this routine from Y must block until the outer-most
103: ** call by X completes.
104: **
105: ** * Recursive calls to this routine from thread X return immediately
106: ** without blocking.
107: */
108: int sqlite3_initialize(void){
109: MUTEX_LOGIC( sqlite3_mutex *pMaster; ) /* The main static mutex */
110: int rc; /* Result code */
111:
112: #ifdef SQLITE_OMIT_WSD
113: rc = sqlite3_wsd_init(4096, 24);
114: if( rc!=SQLITE_OK ){
115: return rc;
116: }
117: #endif
118:
119: /* If SQLite is already completely initialized, then this call
120: ** to sqlite3_initialize() should be a no-op. But the initialization
121: ** must be complete. So isInit must not be set until the very end
122: ** of this routine.
123: */
124: if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
125:
126: /* Make sure the mutex subsystem is initialized. If unable to
127: ** initialize the mutex subsystem, return early with the error.
128: ** If the system is so sick that we are unable to allocate a mutex,
129: ** there is not much SQLite is going to be able to do.
130: **
131: ** The mutex subsystem must take care of serializing its own
132: ** initialization.
133: */
134: rc = sqlite3MutexInit();
135: if( rc ) return rc;
136:
137: /* Initialize the malloc() system and the recursive pInitMutex mutex.
138: ** This operation is protected by the STATIC_MASTER mutex. Note that
139: ** MutexAlloc() is called for a static mutex prior to initializing the
140: ** malloc subsystem - this implies that the allocation of a static
141: ** mutex must not require support from the malloc subsystem.
142: */
143: MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
144: sqlite3_mutex_enter(pMaster);
145: sqlite3GlobalConfig.isMutexInit = 1;
146: if( !sqlite3GlobalConfig.isMallocInit ){
147: rc = sqlite3MallocInit();
148: }
149: if( rc==SQLITE_OK ){
150: sqlite3GlobalConfig.isMallocInit = 1;
151: if( !sqlite3GlobalConfig.pInitMutex ){
152: sqlite3GlobalConfig.pInitMutex =
153: sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
154: if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
155: rc = SQLITE_NOMEM;
156: }
157: }
158: }
159: if( rc==SQLITE_OK ){
160: sqlite3GlobalConfig.nRefInitMutex++;
161: }
162: sqlite3_mutex_leave(pMaster);
163:
164: /* If rc is not SQLITE_OK at this point, then either the malloc
165: ** subsystem could not be initialized or the system failed to allocate
166: ** the pInitMutex mutex. Return an error in either case. */
167: if( rc!=SQLITE_OK ){
168: return rc;
169: }
170:
171: /* Do the rest of the initialization under the recursive mutex so
172: ** that we will be able to handle recursive calls into
173: ** sqlite3_initialize(). The recursive calls normally come through
174: ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
175: ** recursive calls might also be possible.
176: **
177: ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
178: ** to the xInit method, so the xInit method need not be threadsafe.
179: **
180: ** The following mutex is what serializes access to the appdef pcache xInit
181: ** methods. The sqlite3_pcache_methods.xInit() all is embedded in the
182: ** call to sqlite3PcacheInitialize().
183: */
184: sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
185: if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
186: FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
187: sqlite3GlobalConfig.inProgress = 1;
188: memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
189: sqlite3RegisterGlobalFunctions();
190: if( sqlite3GlobalConfig.isPCacheInit==0 ){
191: rc = sqlite3PcacheInitialize();
192: }
193: if( rc==SQLITE_OK ){
194: sqlite3GlobalConfig.isPCacheInit = 1;
195: rc = sqlite3OsInit();
196: }
197: if( rc==SQLITE_OK ){
198: sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage,
199: sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
200: sqlite3GlobalConfig.isInit = 1;
201: }
202: sqlite3GlobalConfig.inProgress = 0;
203: }
204: sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
205:
206: /* Go back under the static mutex and clean up the recursive
207: ** mutex to prevent a resource leak.
208: */
209: sqlite3_mutex_enter(pMaster);
210: sqlite3GlobalConfig.nRefInitMutex--;
211: if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
212: assert( sqlite3GlobalConfig.nRefInitMutex==0 );
213: sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
214: sqlite3GlobalConfig.pInitMutex = 0;
215: }
216: sqlite3_mutex_leave(pMaster);
217:
218: /* The following is just a sanity check to make sure SQLite has
219: ** been compiled correctly. It is important to run this code, but
220: ** we don't want to run it too often and soak up CPU cycles for no
221: ** reason. So we run it once during initialization.
222: */
223: #ifndef NDEBUG
224: #ifndef SQLITE_OMIT_FLOATING_POINT
225: /* This section of code's only "output" is via assert() statements. */
226: if ( rc==SQLITE_OK ){
227: u64 x = (((u64)1)<<63)-1;
228: double y;
229: assert(sizeof(x)==8);
230: assert(sizeof(x)==sizeof(y));
231: memcpy(&y, &x, 8);
232: assert( sqlite3IsNaN(y) );
233: }
234: #endif
235: #endif
236:
237: /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
238: ** compile-time option.
239: */
240: #ifdef SQLITE_EXTRA_INIT
241: if( rc==SQLITE_OK && sqlite3GlobalConfig.isInit ){
242: int SQLITE_EXTRA_INIT(const char*);
243: rc = SQLITE_EXTRA_INIT(0);
244: }
245: #endif
246:
247: return rc;
248: }
249:
250: /*
251: ** Undo the effects of sqlite3_initialize(). Must not be called while
252: ** there are outstanding database connections or memory allocations or
253: ** while any part of SQLite is otherwise in use in any thread. This
254: ** routine is not threadsafe. But it is safe to invoke this routine
255: ** on when SQLite is already shut down. If SQLite is already shut down
256: ** when this routine is invoked, then this routine is a harmless no-op.
257: */
258: int sqlite3_shutdown(void){
259: if( sqlite3GlobalConfig.isInit ){
260: #ifdef SQLITE_EXTRA_SHUTDOWN
261: void SQLITE_EXTRA_SHUTDOWN(void);
262: SQLITE_EXTRA_SHUTDOWN();
263: #endif
264: sqlite3_os_end();
265: sqlite3_reset_auto_extension();
266: sqlite3GlobalConfig.isInit = 0;
267: }
268: if( sqlite3GlobalConfig.isPCacheInit ){
269: sqlite3PcacheShutdown();
270: sqlite3GlobalConfig.isPCacheInit = 0;
271: }
272: if( sqlite3GlobalConfig.isMallocInit ){
273: sqlite3MallocEnd();
274: sqlite3GlobalConfig.isMallocInit = 0;
275: }
276: if( sqlite3GlobalConfig.isMutexInit ){
277: sqlite3MutexEnd();
278: sqlite3GlobalConfig.isMutexInit = 0;
279: }
280:
281: return SQLITE_OK;
282: }
283:
284: /*
285: ** This API allows applications to modify the global configuration of
286: ** the SQLite library at run-time.
287: **
288: ** This routine should only be called when there are no outstanding
289: ** database connections or memory allocations. This routine is not
290: ** threadsafe. Failure to heed these warnings can lead to unpredictable
291: ** behavior.
292: */
293: int sqlite3_config(int op, ...){
294: va_list ap;
295: int rc = SQLITE_OK;
296:
297: /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
298: ** the SQLite library is in use. */
299: if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
300:
301: va_start(ap, op);
302: switch( op ){
303:
304: /* Mutex configuration options are only available in a threadsafe
305: ** compile.
306: */
307: #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
308: case SQLITE_CONFIG_SINGLETHREAD: {
309: /* Disable all mutexing */
310: sqlite3GlobalConfig.bCoreMutex = 0;
311: sqlite3GlobalConfig.bFullMutex = 0;
312: break;
313: }
314: case SQLITE_CONFIG_MULTITHREAD: {
315: /* Disable mutexing of database connections */
316: /* Enable mutexing of core data structures */
317: sqlite3GlobalConfig.bCoreMutex = 1;
318: sqlite3GlobalConfig.bFullMutex = 0;
319: break;
320: }
321: case SQLITE_CONFIG_SERIALIZED: {
322: /* Enable all mutexing */
323: sqlite3GlobalConfig.bCoreMutex = 1;
324: sqlite3GlobalConfig.bFullMutex = 1;
325: break;
326: }
327: case SQLITE_CONFIG_MUTEX: {
328: /* Specify an alternative mutex implementation */
329: sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
330: break;
331: }
332: case SQLITE_CONFIG_GETMUTEX: {
333: /* Retrieve the current mutex implementation */
334: *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
335: break;
336: }
337: #endif
338:
339:
340: case SQLITE_CONFIG_MALLOC: {
341: /* Specify an alternative malloc implementation */
342: sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
343: break;
344: }
345: case SQLITE_CONFIG_GETMALLOC: {
346: /* Retrieve the current malloc() implementation */
347: if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
348: *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
349: break;
350: }
351: case SQLITE_CONFIG_MEMSTATUS: {
352: /* Enable or disable the malloc status collection */
353: sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
354: break;
355: }
356: case SQLITE_CONFIG_SCRATCH: {
357: /* Designate a buffer for scratch memory space */
358: sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
359: sqlite3GlobalConfig.szScratch = va_arg(ap, int);
360: sqlite3GlobalConfig.nScratch = va_arg(ap, int);
361: break;
362: }
363: case SQLITE_CONFIG_PAGECACHE: {
364: /* Designate a buffer for page cache memory space */
365: sqlite3GlobalConfig.pPage = va_arg(ap, void*);
366: sqlite3GlobalConfig.szPage = va_arg(ap, int);
367: sqlite3GlobalConfig.nPage = va_arg(ap, int);
368: break;
369: }
370:
371: case SQLITE_CONFIG_PCACHE: {
372: /* no-op */
373: break;
374: }
375: case SQLITE_CONFIG_GETPCACHE: {
376: /* now an error */
377: rc = SQLITE_ERROR;
378: break;
379: }
380:
381: case SQLITE_CONFIG_PCACHE2: {
382: /* Specify an alternative page cache implementation */
383: sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
384: break;
385: }
386: case SQLITE_CONFIG_GETPCACHE2: {
387: if( sqlite3GlobalConfig.pcache2.xInit==0 ){
388: sqlite3PCacheSetDefault();
389: }
390: *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
391: break;
392: }
393:
394: #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
395: case SQLITE_CONFIG_HEAP: {
396: /* Designate a buffer for heap memory space */
397: sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
398: sqlite3GlobalConfig.nHeap = va_arg(ap, int);
399: sqlite3GlobalConfig.mnReq = va_arg(ap, int);
400:
401: if( sqlite3GlobalConfig.mnReq<1 ){
402: sqlite3GlobalConfig.mnReq = 1;
403: }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
404: /* cap min request size at 2^12 */
405: sqlite3GlobalConfig.mnReq = (1<<12);
406: }
407:
408: if( sqlite3GlobalConfig.pHeap==0 ){
409: /* If the heap pointer is NULL, then restore the malloc implementation
410: ** back to NULL pointers too. This will cause the malloc to go
411: ** back to its default implementation when sqlite3_initialize() is
412: ** run.
413: */
414: memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
415: }else{
416: /* The heap pointer is not NULL, then install one of the
417: ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
418: ** ENABLE_MEMSYS5 is defined, return an error.
419: */
420: #ifdef SQLITE_ENABLE_MEMSYS3
421: sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
422: #endif
423: #ifdef SQLITE_ENABLE_MEMSYS5
424: sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
425: #endif
426: }
427: break;
428: }
429: #endif
430:
431: case SQLITE_CONFIG_LOOKASIDE: {
432: sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
433: sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
434: break;
435: }
436:
437: /* Record a pointer to the logger funcction and its first argument.
438: ** The default is NULL. Logging is disabled if the function pointer is
439: ** NULL.
440: */
441: case SQLITE_CONFIG_LOG: {
442: /* MSVC is picky about pulling func ptrs from va lists.
443: ** http://support.microsoft.com/kb/47961
444: ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
445: */
446: typedef void(*LOGFUNC_t)(void*,int,const char*);
447: sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
448: sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
449: break;
450: }
451:
452: case SQLITE_CONFIG_URI: {
453: sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
454: break;
455: }
456:
457: default: {
458: rc = SQLITE_ERROR;
459: break;
460: }
461: }
462: va_end(ap);
463: return rc;
464: }
465:
466: /*
467: ** Set up the lookaside buffers for a database connection.
468: ** Return SQLITE_OK on success.
469: ** If lookaside is already active, return SQLITE_BUSY.
470: **
471: ** The sz parameter is the number of bytes in each lookaside slot.
472: ** The cnt parameter is the number of slots. If pStart is NULL the
473: ** space for the lookaside memory is obtained from sqlite3_malloc().
474: ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
475: ** the lookaside memory.
476: */
477: static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
478: void *pStart;
479: if( db->lookaside.nOut ){
480: return SQLITE_BUSY;
481: }
482: /* Free any existing lookaside buffer for this handle before
483: ** allocating a new one so we don't have to have space for
484: ** both at the same time.
485: */
486: if( db->lookaside.bMalloced ){
487: sqlite3_free(db->lookaside.pStart);
488: }
489: /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger
490: ** than a pointer to be useful.
491: */
492: sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
493: if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
494: if( cnt<0 ) cnt = 0;
495: if( sz==0 || cnt==0 ){
496: sz = 0;
497: pStart = 0;
498: }else if( pBuf==0 ){
499: sqlite3BeginBenignMalloc();
500: pStart = sqlite3Malloc( sz*cnt ); /* IMP: R-61949-35727 */
501: sqlite3EndBenignMalloc();
502: if( pStart ) cnt = sqlite3MallocSize(pStart)/sz;
503: }else{
504: pStart = pBuf;
505: }
506: db->lookaside.pStart = pStart;
507: db->lookaside.pFree = 0;
508: db->lookaside.sz = (u16)sz;
509: if( pStart ){
510: int i;
511: LookasideSlot *p;
512: assert( sz > (int)sizeof(LookasideSlot*) );
513: p = (LookasideSlot*)pStart;
514: for(i=cnt-1; i>=0; i--){
515: p->pNext = db->lookaside.pFree;
516: db->lookaside.pFree = p;
517: p = (LookasideSlot*)&((u8*)p)[sz];
518: }
519: db->lookaside.pEnd = p;
520: db->lookaside.bEnabled = 1;
521: db->lookaside.bMalloced = pBuf==0 ?1:0;
522: }else{
523: db->lookaside.pEnd = 0;
524: db->lookaside.bEnabled = 0;
525: db->lookaside.bMalloced = 0;
526: }
527: return SQLITE_OK;
528: }
529:
530: /*
531: ** Return the mutex associated with a database connection.
532: */
533: sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
534: return db->mutex;
535: }
536:
537: /*
538: ** Free up as much memory as we can from the given database
539: ** connection.
540: */
541: int sqlite3_db_release_memory(sqlite3 *db){
542: int i;
543: sqlite3_mutex_enter(db->mutex);
544: sqlite3BtreeEnterAll(db);
545: for(i=0; i<db->nDb; i++){
546: Btree *pBt = db->aDb[i].pBt;
547: if( pBt ){
548: Pager *pPager = sqlite3BtreePager(pBt);
549: sqlite3PagerShrink(pPager);
550: }
551: }
552: sqlite3BtreeLeaveAll(db);
553: sqlite3_mutex_leave(db->mutex);
554: return SQLITE_OK;
555: }
556:
557: /*
558: ** Configuration settings for an individual database connection
559: */
560: int sqlite3_db_config(sqlite3 *db, int op, ...){
561: va_list ap;
562: int rc;
563: va_start(ap, op);
564: switch( op ){
565: case SQLITE_DBCONFIG_LOOKASIDE: {
566: void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
567: int sz = va_arg(ap, int); /* IMP: R-47871-25994 */
568: int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */
569: rc = setupLookaside(db, pBuf, sz, cnt);
570: break;
571: }
572: default: {
573: static const struct {
574: int op; /* The opcode */
575: u32 mask; /* Mask of the bit in sqlite3.flags to set/clear */
576: } aFlagOp[] = {
577: { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys },
578: { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger },
579: };
580: unsigned int i;
581: rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
582: for(i=0; i<ArraySize(aFlagOp); i++){
583: if( aFlagOp[i].op==op ){
584: int onoff = va_arg(ap, int);
585: int *pRes = va_arg(ap, int*);
586: int oldFlags = db->flags;
587: if( onoff>0 ){
588: db->flags |= aFlagOp[i].mask;
589: }else if( onoff==0 ){
590: db->flags &= ~aFlagOp[i].mask;
591: }
592: if( oldFlags!=db->flags ){
593: sqlite3ExpirePreparedStatements(db);
594: }
595: if( pRes ){
596: *pRes = (db->flags & aFlagOp[i].mask)!=0;
597: }
598: rc = SQLITE_OK;
599: break;
600: }
601: }
602: break;
603: }
604: }
605: va_end(ap);
606: return rc;
607: }
608:
609:
610: /*
611: ** Return true if the buffer z[0..n-1] contains all spaces.
612: */
613: static int allSpaces(const char *z, int n){
614: while( n>0 && z[n-1]==' ' ){ n--; }
615: return n==0;
616: }
617:
618: /*
619: ** This is the default collating function named "BINARY" which is always
620: ** available.
621: **
622: ** If the padFlag argument is not NULL then space padding at the end
623: ** of strings is ignored. This implements the RTRIM collation.
624: */
625: static int binCollFunc(
626: void *padFlag,
627: int nKey1, const void *pKey1,
628: int nKey2, const void *pKey2
629: ){
630: int rc, n;
631: n = nKey1<nKey2 ? nKey1 : nKey2;
632: rc = memcmp(pKey1, pKey2, n);
633: if( rc==0 ){
634: if( padFlag
635: && allSpaces(((char*)pKey1)+n, nKey1-n)
636: && allSpaces(((char*)pKey2)+n, nKey2-n)
637: ){
638: /* Leave rc unchanged at 0 */
639: }else{
640: rc = nKey1 - nKey2;
641: }
642: }
643: return rc;
644: }
645:
646: /*
647: ** Another built-in collating sequence: NOCASE.
648: **
649: ** This collating sequence is intended to be used for "case independant
650: ** comparison". SQLite's knowledge of upper and lower case equivalents
651: ** extends only to the 26 characters used in the English language.
652: **
653: ** At the moment there is only a UTF-8 implementation.
654: */
655: static int nocaseCollatingFunc(
656: void *NotUsed,
657: int nKey1, const void *pKey1,
658: int nKey2, const void *pKey2
659: ){
660: int r = sqlite3StrNICmp(
661: (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
662: UNUSED_PARAMETER(NotUsed);
663: if( 0==r ){
664: r = nKey1-nKey2;
665: }
666: return r;
667: }
668:
669: /*
670: ** Return the ROWID of the most recent insert
671: */
672: sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
673: return db->lastRowid;
674: }
675:
676: /*
677: ** Return the number of changes in the most recent call to sqlite3_exec().
678: */
679: int sqlite3_changes(sqlite3 *db){
680: return db->nChange;
681: }
682:
683: /*
684: ** Return the number of changes since the database handle was opened.
685: */
686: int sqlite3_total_changes(sqlite3 *db){
687: return db->nTotalChange;
688: }
689:
690: /*
691: ** Close all open savepoints. This function only manipulates fields of the
692: ** database handle object, it does not close any savepoints that may be open
693: ** at the b-tree/pager level.
694: */
695: void sqlite3CloseSavepoints(sqlite3 *db){
696: while( db->pSavepoint ){
697: Savepoint *pTmp = db->pSavepoint;
698: db->pSavepoint = pTmp->pNext;
699: sqlite3DbFree(db, pTmp);
700: }
701: db->nSavepoint = 0;
702: db->nStatement = 0;
703: db->isTransactionSavepoint = 0;
704: }
705:
706: /*
707: ** Invoke the destructor function associated with FuncDef p, if any. Except,
708: ** if this is not the last copy of the function, do not invoke it. Multiple
709: ** copies of a single function are created when create_function() is called
710: ** with SQLITE_ANY as the encoding.
711: */
712: static void functionDestroy(sqlite3 *db, FuncDef *p){
713: FuncDestructor *pDestructor = p->pDestructor;
714: if( pDestructor ){
715: pDestructor->nRef--;
716: if( pDestructor->nRef==0 ){
717: pDestructor->xDestroy(pDestructor->pUserData);
718: sqlite3DbFree(db, pDestructor);
719: }
720: }
721: }
722:
723: /*
724: ** Close an existing SQLite database
725: */
726: int sqlite3_close(sqlite3 *db){
727: HashElem *i; /* Hash table iterator */
728: int j;
729:
730: if( !db ){
731: return SQLITE_OK;
732: }
733: if( !sqlite3SafetyCheckSickOrOk(db) ){
734: return SQLITE_MISUSE_BKPT;
735: }
736: sqlite3_mutex_enter(db->mutex);
737:
738: /* Force xDestroy calls on all virtual tables */
739: sqlite3ResetInternalSchema(db, -1);
740:
741: /* If a transaction is open, the ResetInternalSchema() call above
742: ** will not have called the xDisconnect() method on any virtual
743: ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
744: ** call will do so. We need to do this before the check for active
745: ** SQL statements below, as the v-table implementation may be storing
746: ** some prepared statements internally.
747: */
748: sqlite3VtabRollback(db);
749:
750: /* If there are any outstanding VMs, return SQLITE_BUSY. */
751: if( db->pVdbe ){
752: sqlite3Error(db, SQLITE_BUSY,
753: "unable to close due to unfinalised statements");
754: sqlite3_mutex_leave(db->mutex);
755: return SQLITE_BUSY;
756: }
757: assert( sqlite3SafetyCheckSickOrOk(db) );
758:
759: for(j=0; j<db->nDb; j++){
760: Btree *pBt = db->aDb[j].pBt;
761: if( pBt && sqlite3BtreeIsInBackup(pBt) ){
762: sqlite3Error(db, SQLITE_BUSY,
763: "unable to close due to unfinished backup operation");
764: sqlite3_mutex_leave(db->mutex);
765: return SQLITE_BUSY;
766: }
767: }
768:
769: /* Free any outstanding Savepoint structures. */
770: sqlite3CloseSavepoints(db);
771:
772: for(j=0; j<db->nDb; j++){
773: struct Db *pDb = &db->aDb[j];
774: if( pDb->pBt ){
775: sqlite3BtreeClose(pDb->pBt);
776: pDb->pBt = 0;
777: if( j!=1 ){
778: pDb->pSchema = 0;
779: }
780: }
781: }
782: sqlite3ResetInternalSchema(db, -1);
783:
784: /* Tell the code in notify.c that the connection no longer holds any
785: ** locks and does not require any further unlock-notify callbacks.
786: */
787: sqlite3ConnectionClosed(db);
788:
789: assert( db->nDb<=2 );
790: assert( db->aDb==db->aDbStatic );
791: for(j=0; j<ArraySize(db->aFunc.a); j++){
792: FuncDef *pNext, *pHash, *p;
793: for(p=db->aFunc.a[j]; p; p=pHash){
794: pHash = p->pHash;
795: while( p ){
796: functionDestroy(db, p);
797: pNext = p->pNext;
798: sqlite3DbFree(db, p);
799: p = pNext;
800: }
801: }
802: }
803: for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
804: CollSeq *pColl = (CollSeq *)sqliteHashData(i);
805: /* Invoke any destructors registered for collation sequence user data. */
806: for(j=0; j<3; j++){
807: if( pColl[j].xDel ){
808: pColl[j].xDel(pColl[j].pUser);
809: }
810: }
811: sqlite3DbFree(db, pColl);
812: }
813: sqlite3HashClear(&db->aCollSeq);
814: #ifndef SQLITE_OMIT_VIRTUALTABLE
815: for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
816: Module *pMod = (Module *)sqliteHashData(i);
817: if( pMod->xDestroy ){
818: pMod->xDestroy(pMod->pAux);
819: }
820: sqlite3DbFree(db, pMod);
821: }
822: sqlite3HashClear(&db->aModule);
823: #endif
824:
825: sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
826: if( db->pErr ){
827: sqlite3ValueFree(db->pErr);
828: }
829: sqlite3CloseExtensions(db);
830:
831: db->magic = SQLITE_MAGIC_ERROR;
832:
833: /* The temp-database schema is allocated differently from the other schema
834: ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
835: ** So it needs to be freed here. Todo: Why not roll the temp schema into
836: ** the same sqliteMalloc() as the one that allocates the database
837: ** structure?
838: */
839: sqlite3DbFree(db, db->aDb[1].pSchema);
840: sqlite3_mutex_leave(db->mutex);
841: db->magic = SQLITE_MAGIC_CLOSED;
842: sqlite3_mutex_free(db->mutex);
843: assert( db->lookaside.nOut==0 ); /* Fails on a lookaside memory leak */
844: if( db->lookaside.bMalloced ){
845: sqlite3_free(db->lookaside.pStart);
846: }
847: sqlite3_free(db);
848: return SQLITE_OK;
849: }
850:
851: /*
852: ** Rollback all database files.
853: */
854: void sqlite3RollbackAll(sqlite3 *db){
855: int i;
856: int inTrans = 0;
857: assert( sqlite3_mutex_held(db->mutex) );
858: sqlite3BeginBenignMalloc();
859: for(i=0; i<db->nDb; i++){
860: if( db->aDb[i].pBt ){
861: if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
862: inTrans = 1;
863: }
864: sqlite3BtreeRollback(db->aDb[i].pBt);
865: db->aDb[i].inTrans = 0;
866: }
867: }
868: sqlite3VtabRollback(db);
869: sqlite3EndBenignMalloc();
870:
871: if( db->flags&SQLITE_InternChanges ){
872: sqlite3ExpirePreparedStatements(db);
873: sqlite3ResetInternalSchema(db, -1);
874: }
875:
876: /* Any deferred constraint violations have now been resolved. */
877: db->nDeferredCons = 0;
878:
879: /* If one has been configured, invoke the rollback-hook callback */
880: if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
881: db->xRollbackCallback(db->pRollbackArg);
882: }
883: }
884:
885: /*
886: ** Return a static string that describes the kind of error specified in the
887: ** argument.
888: */
889: const char *sqlite3ErrStr(int rc){
890: static const char* const aMsg[] = {
891: /* SQLITE_OK */ "not an error",
892: /* SQLITE_ERROR */ "SQL logic error or missing database",
893: /* SQLITE_INTERNAL */ 0,
894: /* SQLITE_PERM */ "access permission denied",
895: /* SQLITE_ABORT */ "callback requested query abort",
896: /* SQLITE_BUSY */ "database is locked",
897: /* SQLITE_LOCKED */ "database table is locked",
898: /* SQLITE_NOMEM */ "out of memory",
899: /* SQLITE_READONLY */ "attempt to write a readonly database",
900: /* SQLITE_INTERRUPT */ "interrupted",
901: /* SQLITE_IOERR */ "disk I/O error",
902: /* SQLITE_CORRUPT */ "database disk image is malformed",
903: /* SQLITE_NOTFOUND */ "unknown operation",
904: /* SQLITE_FULL */ "database or disk is full",
905: /* SQLITE_CANTOPEN */ "unable to open database file",
906: /* SQLITE_PROTOCOL */ "locking protocol",
907: /* SQLITE_EMPTY */ "table contains no data",
908: /* SQLITE_SCHEMA */ "database schema has changed",
909: /* SQLITE_TOOBIG */ "string or blob too big",
910: /* SQLITE_CONSTRAINT */ "constraint failed",
911: /* SQLITE_MISMATCH */ "datatype mismatch",
912: /* SQLITE_MISUSE */ "library routine called out of sequence",
913: /* SQLITE_NOLFS */ "large file support is disabled",
914: /* SQLITE_AUTH */ "authorization denied",
915: /* SQLITE_FORMAT */ "auxiliary database format error",
916: /* SQLITE_RANGE */ "bind or column index out of range",
917: /* SQLITE_NOTADB */ "file is encrypted or is not a database",
918: };
919: rc &= 0xff;
920: if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){
921: return aMsg[rc];
922: }else{
923: return "unknown error";
924: }
925: }
926:
927: /*
928: ** This routine implements a busy callback that sleeps and tries
929: ** again until a timeout value is reached. The timeout value is
930: ** an integer number of milliseconds passed in as the first
931: ** argument.
932: */
933: static int sqliteDefaultBusyCallback(
934: void *ptr, /* Database connection */
935: int count /* Number of times table has been busy */
936: ){
937: #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
938: static const u8 delays[] =
939: { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 };
940: static const u8 totals[] =
941: { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228 };
942: # define NDELAY ArraySize(delays)
943: sqlite3 *db = (sqlite3 *)ptr;
944: int timeout = db->busyTimeout;
945: int delay, prior;
946:
947: assert( count>=0 );
948: if( count < NDELAY ){
949: delay = delays[count];
950: prior = totals[count];
951: }else{
952: delay = delays[NDELAY-1];
953: prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
954: }
955: if( prior + delay > timeout ){
956: delay = timeout - prior;
957: if( delay<=0 ) return 0;
958: }
959: sqlite3OsSleep(db->pVfs, delay*1000);
960: return 1;
961: #else
962: sqlite3 *db = (sqlite3 *)ptr;
963: int timeout = ((sqlite3 *)ptr)->busyTimeout;
964: if( (count+1)*1000 > timeout ){
965: return 0;
966: }
967: sqlite3OsSleep(db->pVfs, 1000000);
968: return 1;
969: #endif
970: }
971:
972: /*
973: ** Invoke the given busy handler.
974: **
975: ** This routine is called when an operation failed with a lock.
976: ** If this routine returns non-zero, the lock is retried. If it
977: ** returns 0, the operation aborts with an SQLITE_BUSY error.
978: */
979: int sqlite3InvokeBusyHandler(BusyHandler *p){
980: int rc;
981: if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
982: rc = p->xFunc(p->pArg, p->nBusy);
983: if( rc==0 ){
984: p->nBusy = -1;
985: }else{
986: p->nBusy++;
987: }
988: return rc;
989: }
990:
991: /*
992: ** This routine sets the busy callback for an Sqlite database to the
993: ** given callback function with the given argument.
994: */
995: int sqlite3_busy_handler(
996: sqlite3 *db,
997: int (*xBusy)(void*,int),
998: void *pArg
999: ){
1000: sqlite3_mutex_enter(db->mutex);
1001: db->busyHandler.xFunc = xBusy;
1002: db->busyHandler.pArg = pArg;
1003: db->busyHandler.nBusy = 0;
1004: sqlite3_mutex_leave(db->mutex);
1005: return SQLITE_OK;
1006: }
1007:
1008: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
1009: /*
1010: ** This routine sets the progress callback for an Sqlite database to the
1011: ** given callback function with the given argument. The progress callback will
1012: ** be invoked every nOps opcodes.
1013: */
1014: void sqlite3_progress_handler(
1015: sqlite3 *db,
1016: int nOps,
1017: int (*xProgress)(void*),
1018: void *pArg
1019: ){
1020: sqlite3_mutex_enter(db->mutex);
1021: if( nOps>0 ){
1022: db->xProgress = xProgress;
1023: db->nProgressOps = nOps;
1024: db->pProgressArg = pArg;
1025: }else{
1026: db->xProgress = 0;
1027: db->nProgressOps = 0;
1028: db->pProgressArg = 0;
1029: }
1030: sqlite3_mutex_leave(db->mutex);
1031: }
1032: #endif
1033:
1034:
1035: /*
1036: ** This routine installs a default busy handler that waits for the
1037: ** specified number of milliseconds before returning 0.
1038: */
1039: int sqlite3_busy_timeout(sqlite3 *db, int ms){
1040: if( ms>0 ){
1041: db->busyTimeout = ms;
1042: sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
1043: }else{
1044: sqlite3_busy_handler(db, 0, 0);
1045: }
1046: return SQLITE_OK;
1047: }
1048:
1049: /*
1050: ** Cause any pending operation to stop at its earliest opportunity.
1051: */
1052: void sqlite3_interrupt(sqlite3 *db){
1053: db->u1.isInterrupted = 1;
1054: }
1055:
1056:
1057: /*
1058: ** This function is exactly the same as sqlite3_create_function(), except
1059: ** that it is designed to be called by internal code. The difference is
1060: ** that if a malloc() fails in sqlite3_create_function(), an error code
1061: ** is returned and the mallocFailed flag cleared.
1062: */
1063: int sqlite3CreateFunc(
1064: sqlite3 *db,
1065: const char *zFunctionName,
1066: int nArg,
1067: int enc,
1068: void *pUserData,
1069: void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1070: void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1071: void (*xFinal)(sqlite3_context*),
1072: FuncDestructor *pDestructor
1073: ){
1074: FuncDef *p;
1075: int nName;
1076:
1077: assert( sqlite3_mutex_held(db->mutex) );
1078: if( zFunctionName==0 ||
1079: (xFunc && (xFinal || xStep)) ||
1080: (!xFunc && (xFinal && !xStep)) ||
1081: (!xFunc && (!xFinal && xStep)) ||
1082: (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
1083: (255<(nName = sqlite3Strlen30( zFunctionName))) ){
1084: return SQLITE_MISUSE_BKPT;
1085: }
1086:
1087: #ifndef SQLITE_OMIT_UTF16
1088: /* If SQLITE_UTF16 is specified as the encoding type, transform this
1089: ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
1090: ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
1091: **
1092: ** If SQLITE_ANY is specified, add three versions of the function
1093: ** to the hash table.
1094: */
1095: if( enc==SQLITE_UTF16 ){
1096: enc = SQLITE_UTF16NATIVE;
1097: }else if( enc==SQLITE_ANY ){
1098: int rc;
1099: rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
1100: pUserData, xFunc, xStep, xFinal, pDestructor);
1101: if( rc==SQLITE_OK ){
1102: rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
1103: pUserData, xFunc, xStep, xFinal, pDestructor);
1104: }
1105: if( rc!=SQLITE_OK ){
1106: return rc;
1107: }
1108: enc = SQLITE_UTF16BE;
1109: }
1110: #else
1111: enc = SQLITE_UTF8;
1112: #endif
1113:
1114: /* Check if an existing function is being overridden or deleted. If so,
1115: ** and there are active VMs, then return SQLITE_BUSY. If a function
1116: ** is being overridden/deleted but there are no active VMs, allow the
1117: ** operation to continue but invalidate all precompiled statements.
1118: */
1119: p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
1120: if( p && p->iPrefEnc==enc && p->nArg==nArg ){
1121: if( db->activeVdbeCnt ){
1122: sqlite3Error(db, SQLITE_BUSY,
1123: "unable to delete/modify user-function due to active statements");
1124: assert( !db->mallocFailed );
1125: return SQLITE_BUSY;
1126: }else{
1127: sqlite3ExpirePreparedStatements(db);
1128: }
1129: }
1130:
1131: p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
1132: assert(p || db->mallocFailed);
1133: if( !p ){
1134: return SQLITE_NOMEM;
1135: }
1136:
1137: /* If an older version of the function with a configured destructor is
1138: ** being replaced invoke the destructor function here. */
1139: functionDestroy(db, p);
1140:
1141: if( pDestructor ){
1142: pDestructor->nRef++;
1143: }
1144: p->pDestructor = pDestructor;
1145: p->flags = 0;
1146: p->xFunc = xFunc;
1147: p->xStep = xStep;
1148: p->xFinalize = xFinal;
1149: p->pUserData = pUserData;
1150: p->nArg = (u16)nArg;
1151: return SQLITE_OK;
1152: }
1153:
1154: /*
1155: ** Create new user functions.
1156: */
1157: int sqlite3_create_function(
1158: sqlite3 *db,
1159: const char *zFunc,
1160: int nArg,
1161: int enc,
1162: void *p,
1163: void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1164: void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1165: void (*xFinal)(sqlite3_context*)
1166: ){
1167: return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
1168: xFinal, 0);
1169: }
1170:
1171: int sqlite3_create_function_v2(
1172: sqlite3 *db,
1173: const char *zFunc,
1174: int nArg,
1175: int enc,
1176: void *p,
1177: void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
1178: void (*xStep)(sqlite3_context*,int,sqlite3_value **),
1179: void (*xFinal)(sqlite3_context*),
1180: void (*xDestroy)(void *)
1181: ){
1182: int rc = SQLITE_ERROR;
1183: FuncDestructor *pArg = 0;
1184: sqlite3_mutex_enter(db->mutex);
1185: if( xDestroy ){
1186: pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
1187: if( !pArg ){
1188: xDestroy(p);
1189: goto out;
1190: }
1191: pArg->xDestroy = xDestroy;
1192: pArg->pUserData = p;
1193: }
1194: rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
1195: if( pArg && pArg->nRef==0 ){
1196: assert( rc!=SQLITE_OK );
1197: xDestroy(p);
1198: sqlite3DbFree(db, pArg);
1199: }
1200:
1201: out:
1202: rc = sqlite3ApiExit(db, rc);
1203: sqlite3_mutex_leave(db->mutex);
1204: return rc;
1205: }
1206:
1207: #ifndef SQLITE_OMIT_UTF16
1208: int sqlite3_create_function16(
1209: sqlite3 *db,
1210: const void *zFunctionName,
1211: int nArg,
1212: int eTextRep,
1213: void *p,
1214: void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
1215: void (*xStep)(sqlite3_context*,int,sqlite3_value**),
1216: void (*xFinal)(sqlite3_context*)
1217: ){
1218: int rc;
1219: char *zFunc8;
1220: sqlite3_mutex_enter(db->mutex);
1221: assert( !db->mallocFailed );
1222: zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
1223: rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
1224: sqlite3DbFree(db, zFunc8);
1225: rc = sqlite3ApiExit(db, rc);
1226: sqlite3_mutex_leave(db->mutex);
1227: return rc;
1228: }
1229: #endif
1230:
1231:
1232: /*
1233: ** Declare that a function has been overloaded by a virtual table.
1234: **
1235: ** If the function already exists as a regular global function, then
1236: ** this routine is a no-op. If the function does not exist, then create
1237: ** a new one that always throws a run-time error.
1238: **
1239: ** When virtual tables intend to provide an overloaded function, they
1240: ** should call this routine to make sure the global function exists.
1241: ** A global function must exist in order for name resolution to work
1242: ** properly.
1243: */
1244: int sqlite3_overload_function(
1245: sqlite3 *db,
1246: const char *zName,
1247: int nArg
1248: ){
1249: int nName = sqlite3Strlen30(zName);
1250: int rc = SQLITE_OK;
1251: sqlite3_mutex_enter(db->mutex);
1252: if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
1253: rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
1254: 0, sqlite3InvalidFunction, 0, 0, 0);
1255: }
1256: rc = sqlite3ApiExit(db, rc);
1257: sqlite3_mutex_leave(db->mutex);
1258: return rc;
1259: }
1260:
1261: #ifndef SQLITE_OMIT_TRACE
1262: /*
1263: ** Register a trace function. The pArg from the previously registered trace
1264: ** is returned.
1265: **
1266: ** A NULL trace function means that no tracing is executes. A non-NULL
1267: ** trace is a pointer to a function that is invoked at the start of each
1268: ** SQL statement.
1269: */
1270: void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
1271: void *pOld;
1272: sqlite3_mutex_enter(db->mutex);
1273: pOld = db->pTraceArg;
1274: db->xTrace = xTrace;
1275: db->pTraceArg = pArg;
1276: sqlite3_mutex_leave(db->mutex);
1277: return pOld;
1278: }
1279: /*
1280: ** Register a profile function. The pArg from the previously registered
1281: ** profile function is returned.
1282: **
1283: ** A NULL profile function means that no profiling is executes. A non-NULL
1284: ** profile is a pointer to a function that is invoked at the conclusion of
1285: ** each SQL statement that is run.
1286: */
1287: void *sqlite3_profile(
1288: sqlite3 *db,
1289: void (*xProfile)(void*,const char*,sqlite_uint64),
1290: void *pArg
1291: ){
1292: void *pOld;
1293: sqlite3_mutex_enter(db->mutex);
1294: pOld = db->pProfileArg;
1295: db->xProfile = xProfile;
1296: db->pProfileArg = pArg;
1297: sqlite3_mutex_leave(db->mutex);
1298: return pOld;
1299: }
1300: #endif /* SQLITE_OMIT_TRACE */
1301:
1302: /*** EXPERIMENTAL ***
1303: **
1304: ** Register a function to be invoked when a transaction comments.
1305: ** If the invoked function returns non-zero, then the commit becomes a
1306: ** rollback.
1307: */
1308: void *sqlite3_commit_hook(
1309: sqlite3 *db, /* Attach the hook to this database */
1310: int (*xCallback)(void*), /* Function to invoke on each commit */
1311: void *pArg /* Argument to the function */
1312: ){
1313: void *pOld;
1314: sqlite3_mutex_enter(db->mutex);
1315: pOld = db->pCommitArg;
1316: db->xCommitCallback = xCallback;
1317: db->pCommitArg = pArg;
1318: sqlite3_mutex_leave(db->mutex);
1319: return pOld;
1320: }
1321:
1322: /*
1323: ** Register a callback to be invoked each time a row is updated,
1324: ** inserted or deleted using this database connection.
1325: */
1326: void *sqlite3_update_hook(
1327: sqlite3 *db, /* Attach the hook to this database */
1328: void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
1329: void *pArg /* Argument to the function */
1330: ){
1331: void *pRet;
1332: sqlite3_mutex_enter(db->mutex);
1333: pRet = db->pUpdateArg;
1334: db->xUpdateCallback = xCallback;
1335: db->pUpdateArg = pArg;
1336: sqlite3_mutex_leave(db->mutex);
1337: return pRet;
1338: }
1339:
1340: /*
1341: ** Register a callback to be invoked each time a transaction is rolled
1342: ** back by this database connection.
1343: */
1344: void *sqlite3_rollback_hook(
1345: sqlite3 *db, /* Attach the hook to this database */
1346: void (*xCallback)(void*), /* Callback function */
1347: void *pArg /* Argument to the function */
1348: ){
1349: void *pRet;
1350: sqlite3_mutex_enter(db->mutex);
1351: pRet = db->pRollbackArg;
1352: db->xRollbackCallback = xCallback;
1353: db->pRollbackArg = pArg;
1354: sqlite3_mutex_leave(db->mutex);
1355: return pRet;
1356: }
1357:
1358: #ifndef SQLITE_OMIT_WAL
1359: /*
1360: ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
1361: ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
1362: ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
1363: ** wal_autocheckpoint()).
1364: */
1365: int sqlite3WalDefaultHook(
1366: void *pClientData, /* Argument */
1367: sqlite3 *db, /* Connection */
1368: const char *zDb, /* Database */
1369: int nFrame /* Size of WAL */
1370: ){
1371: if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
1372: sqlite3BeginBenignMalloc();
1373: sqlite3_wal_checkpoint(db, zDb);
1374: sqlite3EndBenignMalloc();
1375: }
1376: return SQLITE_OK;
1377: }
1378: #endif /* SQLITE_OMIT_WAL */
1379:
1380: /*
1381: ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
1382: ** a database after committing a transaction if there are nFrame or
1383: ** more frames in the log file. Passing zero or a negative value as the
1384: ** nFrame parameter disables automatic checkpoints entirely.
1385: **
1386: ** The callback registered by this function replaces any existing callback
1387: ** registered using sqlite3_wal_hook(). Likewise, registering a callback
1388: ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
1389: ** configured by this function.
1390: */
1391: int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
1392: #ifdef SQLITE_OMIT_WAL
1393: UNUSED_PARAMETER(db);
1394: UNUSED_PARAMETER(nFrame);
1395: #else
1396: if( nFrame>0 ){
1397: sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
1398: }else{
1399: sqlite3_wal_hook(db, 0, 0);
1400: }
1401: #endif
1402: return SQLITE_OK;
1403: }
1404:
1405: /*
1406: ** Register a callback to be invoked each time a transaction is written
1407: ** into the write-ahead-log by this database connection.
1408: */
1409: void *sqlite3_wal_hook(
1410: sqlite3 *db, /* Attach the hook to this db handle */
1411: int(*xCallback)(void *, sqlite3*, const char*, int),
1412: void *pArg /* First argument passed to xCallback() */
1413: ){
1414: #ifndef SQLITE_OMIT_WAL
1415: void *pRet;
1416: sqlite3_mutex_enter(db->mutex);
1417: pRet = db->pWalArg;
1418: db->xWalCallback = xCallback;
1419: db->pWalArg = pArg;
1420: sqlite3_mutex_leave(db->mutex);
1421: return pRet;
1422: #else
1423: return 0;
1424: #endif
1425: }
1426:
1427: /*
1428: ** Checkpoint database zDb.
1429: */
1430: int sqlite3_wal_checkpoint_v2(
1431: sqlite3 *db, /* Database handle */
1432: const char *zDb, /* Name of attached database (or NULL) */
1433: int eMode, /* SQLITE_CHECKPOINT_* value */
1434: int *pnLog, /* OUT: Size of WAL log in frames */
1435: int *pnCkpt /* OUT: Total number of frames checkpointed */
1436: ){
1437: #ifdef SQLITE_OMIT_WAL
1438: return SQLITE_OK;
1439: #else
1440: int rc; /* Return code */
1441: int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
1442:
1443: /* Initialize the output variables to -1 in case an error occurs. */
1444: if( pnLog ) *pnLog = -1;
1445: if( pnCkpt ) *pnCkpt = -1;
1446:
1447: assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE );
1448: assert( SQLITE_CHECKPOINT_FULL<SQLITE_CHECKPOINT_RESTART );
1449: assert( SQLITE_CHECKPOINT_PASSIVE+2==SQLITE_CHECKPOINT_RESTART );
1450: if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_RESTART ){
1451: return SQLITE_MISUSE;
1452: }
1453:
1454: sqlite3_mutex_enter(db->mutex);
1455: if( zDb && zDb[0] ){
1456: iDb = sqlite3FindDbName(db, zDb);
1457: }
1458: if( iDb<0 ){
1459: rc = SQLITE_ERROR;
1460: sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
1461: }else{
1462: rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
1463: sqlite3Error(db, rc, 0);
1464: }
1465: rc = sqlite3ApiExit(db, rc);
1466: sqlite3_mutex_leave(db->mutex);
1467: return rc;
1468: #endif
1469: }
1470:
1471:
1472: /*
1473: ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
1474: ** to contains a zero-length string, all attached databases are
1475: ** checkpointed.
1476: */
1477: int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
1478: return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0);
1479: }
1480:
1481: #ifndef SQLITE_OMIT_WAL
1482: /*
1483: ** Run a checkpoint on database iDb. This is a no-op if database iDb is
1484: ** not currently open in WAL mode.
1485: **
1486: ** If a transaction is open on the database being checkpointed, this
1487: ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If
1488: ** an error occurs while running the checkpoint, an SQLite error code is
1489: ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
1490: **
1491: ** The mutex on database handle db should be held by the caller. The mutex
1492: ** associated with the specific b-tree being checkpointed is taken by
1493: ** this function while the checkpoint is running.
1494: **
1495: ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
1496: ** checkpointed. If an error is encountered it is returned immediately -
1497: ** no attempt is made to checkpoint any remaining databases.
1498: **
1499: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
1500: */
1501: int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
1502: int rc = SQLITE_OK; /* Return code */
1503: int i; /* Used to iterate through attached dbs */
1504: int bBusy = 0; /* True if SQLITE_BUSY has been encountered */
1505:
1506: assert( sqlite3_mutex_held(db->mutex) );
1507: assert( !pnLog || *pnLog==-1 );
1508: assert( !pnCkpt || *pnCkpt==-1 );
1509:
1510: for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
1511: if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
1512: rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
1513: pnLog = 0;
1514: pnCkpt = 0;
1515: if( rc==SQLITE_BUSY ){
1516: bBusy = 1;
1517: rc = SQLITE_OK;
1518: }
1519: }
1520: }
1521:
1522: return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
1523: }
1524: #endif /* SQLITE_OMIT_WAL */
1525:
1526: /*
1527: ** This function returns true if main-memory should be used instead of
1528: ** a temporary file for transient pager files and statement journals.
1529: ** The value returned depends on the value of db->temp_store (runtime
1530: ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
1531: ** following table describes the relationship between these two values
1532: ** and this functions return value.
1533: **
1534: ** SQLITE_TEMP_STORE db->temp_store Location of temporary database
1535: ** ----------------- -------------- ------------------------------
1536: ** 0 any file (return 0)
1537: ** 1 1 file (return 0)
1538: ** 1 2 memory (return 1)
1539: ** 1 0 file (return 0)
1540: ** 2 1 file (return 0)
1541: ** 2 2 memory (return 1)
1542: ** 2 0 memory (return 1)
1543: ** 3 any memory (return 1)
1544: */
1545: int sqlite3TempInMemory(const sqlite3 *db){
1546: #if SQLITE_TEMP_STORE==1
1547: return ( db->temp_store==2 );
1548: #endif
1549: #if SQLITE_TEMP_STORE==2
1550: return ( db->temp_store!=1 );
1551: #endif
1552: #if SQLITE_TEMP_STORE==3
1553: return 1;
1554: #endif
1555: #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
1556: return 0;
1557: #endif
1558: }
1559:
1560: /*
1561: ** Return UTF-8 encoded English language explanation of the most recent
1562: ** error.
1563: */
1564: const char *sqlite3_errmsg(sqlite3 *db){
1565: const char *z;
1566: if( !db ){
1567: return sqlite3ErrStr(SQLITE_NOMEM);
1568: }
1569: if( !sqlite3SafetyCheckSickOrOk(db) ){
1570: return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
1571: }
1572: sqlite3_mutex_enter(db->mutex);
1573: if( db->mallocFailed ){
1574: z = sqlite3ErrStr(SQLITE_NOMEM);
1575: }else{
1576: z = (char*)sqlite3_value_text(db->pErr);
1577: assert( !db->mallocFailed );
1578: if( z==0 ){
1579: z = sqlite3ErrStr(db->errCode);
1580: }
1581: }
1582: sqlite3_mutex_leave(db->mutex);
1583: return z;
1584: }
1585:
1586: #ifndef SQLITE_OMIT_UTF16
1587: /*
1588: ** Return UTF-16 encoded English language explanation of the most recent
1589: ** error.
1590: */
1591: const void *sqlite3_errmsg16(sqlite3 *db){
1592: static const u16 outOfMem[] = {
1593: 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
1594: };
1595: static const u16 misuse[] = {
1596: 'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ',
1597: 'r', 'o', 'u', 't', 'i', 'n', 'e', ' ',
1598: 'c', 'a', 'l', 'l', 'e', 'd', ' ',
1599: 'o', 'u', 't', ' ',
1600: 'o', 'f', ' ',
1601: 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
1602: };
1603:
1604: const void *z;
1605: if( !db ){
1606: return (void *)outOfMem;
1607: }
1608: if( !sqlite3SafetyCheckSickOrOk(db) ){
1609: return (void *)misuse;
1610: }
1611: sqlite3_mutex_enter(db->mutex);
1612: if( db->mallocFailed ){
1613: z = (void *)outOfMem;
1614: }else{
1615: z = sqlite3_value_text16(db->pErr);
1616: if( z==0 ){
1617: sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
1618: SQLITE_UTF8, SQLITE_STATIC);
1619: z = sqlite3_value_text16(db->pErr);
1620: }
1621: /* A malloc() may have failed within the call to sqlite3_value_text16()
1622: ** above. If this is the case, then the db->mallocFailed flag needs to
1623: ** be cleared before returning. Do this directly, instead of via
1624: ** sqlite3ApiExit(), to avoid setting the database handle error message.
1625: */
1626: db->mallocFailed = 0;
1627: }
1628: sqlite3_mutex_leave(db->mutex);
1629: return z;
1630: }
1631: #endif /* SQLITE_OMIT_UTF16 */
1632:
1633: /*
1634: ** Return the most recent error code generated by an SQLite routine. If NULL is
1635: ** passed to this function, we assume a malloc() failed during sqlite3_open().
1636: */
1637: int sqlite3_errcode(sqlite3 *db){
1638: if( db && !sqlite3SafetyCheckSickOrOk(db) ){
1639: return SQLITE_MISUSE_BKPT;
1640: }
1641: if( !db || db->mallocFailed ){
1642: return SQLITE_NOMEM;
1643: }
1644: return db->errCode & db->errMask;
1645: }
1646: int sqlite3_extended_errcode(sqlite3 *db){
1647: if( db && !sqlite3SafetyCheckSickOrOk(db) ){
1648: return SQLITE_MISUSE_BKPT;
1649: }
1650: if( !db || db->mallocFailed ){
1651: return SQLITE_NOMEM;
1652: }
1653: return db->errCode;
1654: }
1655:
1656: /*
1657: ** Create a new collating function for database "db". The name is zName
1658: ** and the encoding is enc.
1659: */
1660: static int createCollation(
1661: sqlite3* db,
1662: const char *zName,
1663: u8 enc,
1664: void* pCtx,
1665: int(*xCompare)(void*,int,const void*,int,const void*),
1666: void(*xDel)(void*)
1667: ){
1668: CollSeq *pColl;
1669: int enc2;
1670: int nName = sqlite3Strlen30(zName);
1671:
1672: assert( sqlite3_mutex_held(db->mutex) );
1673:
1674: /* If SQLITE_UTF16 is specified as the encoding type, transform this
1675: ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
1676: ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
1677: */
1678: enc2 = enc;
1679: testcase( enc2==SQLITE_UTF16 );
1680: testcase( enc2==SQLITE_UTF16_ALIGNED );
1681: if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
1682: enc2 = SQLITE_UTF16NATIVE;
1683: }
1684: if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
1685: return SQLITE_MISUSE_BKPT;
1686: }
1687:
1688: /* Check if this call is removing or replacing an existing collation
1689: ** sequence. If so, and there are active VMs, return busy. If there
1690: ** are no active VMs, invalidate any pre-compiled statements.
1691: */
1692: pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
1693: if( pColl && pColl->xCmp ){
1694: if( db->activeVdbeCnt ){
1695: sqlite3Error(db, SQLITE_BUSY,
1696: "unable to delete/modify collation sequence due to active statements");
1697: return SQLITE_BUSY;
1698: }
1699: sqlite3ExpirePreparedStatements(db);
1700:
1701: /* If collation sequence pColl was created directly by a call to
1702: ** sqlite3_create_collation, and not generated by synthCollSeq(),
1703: ** then any copies made by synthCollSeq() need to be invalidated.
1704: ** Also, collation destructor - CollSeq.xDel() - function may need
1705: ** to be called.
1706: */
1707: if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
1708: CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
1709: int j;
1710: for(j=0; j<3; j++){
1711: CollSeq *p = &aColl[j];
1712: if( p->enc==pColl->enc ){
1713: if( p->xDel ){
1714: p->xDel(p->pUser);
1715: }
1716: p->xCmp = 0;
1717: }
1718: }
1719: }
1720: }
1721:
1722: pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
1723: if( pColl==0 ) return SQLITE_NOMEM;
1724: pColl->xCmp = xCompare;
1725: pColl->pUser = pCtx;
1726: pColl->xDel = xDel;
1727: pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
1728: sqlite3Error(db, SQLITE_OK, 0);
1729: return SQLITE_OK;
1730: }
1731:
1732:
1733: /*
1734: ** This array defines hard upper bounds on limit values. The
1735: ** initializer must be kept in sync with the SQLITE_LIMIT_*
1736: ** #defines in sqlite3.h.
1737: */
1738: static const int aHardLimit[] = {
1739: SQLITE_MAX_LENGTH,
1740: SQLITE_MAX_SQL_LENGTH,
1741: SQLITE_MAX_COLUMN,
1742: SQLITE_MAX_EXPR_DEPTH,
1743: SQLITE_MAX_COMPOUND_SELECT,
1744: SQLITE_MAX_VDBE_OP,
1745: SQLITE_MAX_FUNCTION_ARG,
1746: SQLITE_MAX_ATTACHED,
1747: SQLITE_MAX_LIKE_PATTERN_LENGTH,
1748: SQLITE_MAX_VARIABLE_NUMBER,
1749: SQLITE_MAX_TRIGGER_DEPTH,
1750: };
1751:
1752: /*
1753: ** Make sure the hard limits are set to reasonable values
1754: */
1755: #if SQLITE_MAX_LENGTH<100
1756: # error SQLITE_MAX_LENGTH must be at least 100
1757: #endif
1758: #if SQLITE_MAX_SQL_LENGTH<100
1759: # error SQLITE_MAX_SQL_LENGTH must be at least 100
1760: #endif
1761: #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
1762: # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
1763: #endif
1764: #if SQLITE_MAX_COMPOUND_SELECT<2
1765: # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
1766: #endif
1767: #if SQLITE_MAX_VDBE_OP<40
1768: # error SQLITE_MAX_VDBE_OP must be at least 40
1769: #endif
1770: #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
1771: # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
1772: #endif
1773: #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
1774: # error SQLITE_MAX_ATTACHED must be between 0 and 62
1775: #endif
1776: #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
1777: # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
1778: #endif
1779: #if SQLITE_MAX_COLUMN>32767
1780: # error SQLITE_MAX_COLUMN must not exceed 32767
1781: #endif
1782: #if SQLITE_MAX_TRIGGER_DEPTH<1
1783: # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
1784: #endif
1785:
1786:
1787: /*
1788: ** Change the value of a limit. Report the old value.
1789: ** If an invalid limit index is supplied, report -1.
1790: ** Make no changes but still report the old value if the
1791: ** new limit is negative.
1792: **
1793: ** A new lower limit does not shrink existing constructs.
1794: ** It merely prevents new constructs that exceed the limit
1795: ** from forming.
1796: */
1797: int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
1798: int oldLimit;
1799:
1800:
1801: /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
1802: ** there is a hard upper bound set at compile-time by a C preprocessor
1803: ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
1804: ** "_MAX_".)
1805: */
1806: assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
1807: assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
1808: assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
1809: assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
1810: assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
1811: assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
1812: assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
1813: assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
1814: assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
1815: SQLITE_MAX_LIKE_PATTERN_LENGTH );
1816: assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
1817: assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
1818: assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
1819:
1820:
1821: if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
1822: return -1;
1823: }
1824: oldLimit = db->aLimit[limitId];
1825: if( newLimit>=0 ){ /* IMP: R-52476-28732 */
1826: if( newLimit>aHardLimit[limitId] ){
1827: newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */
1828: }
1829: db->aLimit[limitId] = newLimit;
1830: }
1831: return oldLimit; /* IMP: R-53341-35419 */
1832: }
1833:
1834: /*
1835: ** This function is used to parse both URIs and non-URI filenames passed by the
1836: ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
1837: ** URIs specified as part of ATTACH statements.
1838: **
1839: ** The first argument to this function is the name of the VFS to use (or
1840: ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
1841: ** query parameter. The second argument contains the URI (or non-URI filename)
1842: ** itself. When this function is called the *pFlags variable should contain
1843: ** the default flags to open the database handle with. The value stored in
1844: ** *pFlags may be updated before returning if the URI filename contains
1845: ** "cache=xxx" or "mode=xxx" query parameters.
1846: **
1847: ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
1848: ** the VFS that should be used to open the database file. *pzFile is set to
1849: ** point to a buffer containing the name of the file to open. It is the
1850: ** responsibility of the caller to eventually call sqlite3_free() to release
1851: ** this buffer.
1852: **
1853: ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
1854: ** may be set to point to a buffer containing an English language error
1855: ** message. It is the responsibility of the caller to eventually release
1856: ** this buffer by calling sqlite3_free().
1857: */
1858: int sqlite3ParseUri(
1859: const char *zDefaultVfs, /* VFS to use if no "vfs=xxx" query option */
1860: const char *zUri, /* Nul-terminated URI to parse */
1861: unsigned int *pFlags, /* IN/OUT: SQLITE_OPEN_XXX flags */
1862: sqlite3_vfs **ppVfs, /* OUT: VFS to use */
1863: char **pzFile, /* OUT: Filename component of URI */
1864: char **pzErrMsg /* OUT: Error message (if rc!=SQLITE_OK) */
1865: ){
1866: int rc = SQLITE_OK;
1867: unsigned int flags = *pFlags;
1868: const char *zVfs = zDefaultVfs;
1869: char *zFile;
1870: char c;
1871: int nUri = sqlite3Strlen30(zUri);
1872:
1873: assert( *pzErrMsg==0 );
1874:
1875: if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri)
1876: && nUri>=5 && memcmp(zUri, "file:", 5)==0
1877: ){
1878: char *zOpt;
1879: int eState; /* Parser state when parsing URI */
1880: int iIn; /* Input character index */
1881: int iOut = 0; /* Output character index */
1882: int nByte = nUri+2; /* Bytes of space to allocate */
1883:
1884: /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen
1885: ** method that there may be extra parameters following the file-name. */
1886: flags |= SQLITE_OPEN_URI;
1887:
1888: for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
1889: zFile = sqlite3_malloc(nByte);
1890: if( !zFile ) return SQLITE_NOMEM;
1891:
1892: /* Discard the scheme and authority segments of the URI. */
1893: if( zUri[5]=='/' && zUri[6]=='/' ){
1894: iIn = 7;
1895: while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
1896:
1897: if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
1898: *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s",
1899: iIn-7, &zUri[7]);
1900: rc = SQLITE_ERROR;
1901: goto parse_uri_out;
1902: }
1903: }else{
1904: iIn = 5;
1905: }
1906:
1907: /* Copy the filename and any query parameters into the zFile buffer.
1908: ** Decode %HH escape codes along the way.
1909: **
1910: ** Within this loop, variable eState may be set to 0, 1 or 2, depending
1911: ** on the parsing context. As follows:
1912: **
1913: ** 0: Parsing file-name.
1914: ** 1: Parsing name section of a name=value query parameter.
1915: ** 2: Parsing value section of a name=value query parameter.
1916: */
1917: eState = 0;
1918: while( (c = zUri[iIn])!=0 && c!='#' ){
1919: iIn++;
1920: if( c=='%'
1921: && sqlite3Isxdigit(zUri[iIn])
1922: && sqlite3Isxdigit(zUri[iIn+1])
1923: ){
1924: int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
1925: octet += sqlite3HexToInt(zUri[iIn++]);
1926:
1927: assert( octet>=0 && octet<256 );
1928: if( octet==0 ){
1929: /* This branch is taken when "%00" appears within the URI. In this
1930: ** case we ignore all text in the remainder of the path, name or
1931: ** value currently being parsed. So ignore the current character
1932: ** and skip to the next "?", "=" or "&", as appropriate. */
1933: while( (c = zUri[iIn])!=0 && c!='#'
1934: && (eState!=0 || c!='?')
1935: && (eState!=1 || (c!='=' && c!='&'))
1936: && (eState!=2 || c!='&')
1937: ){
1938: iIn++;
1939: }
1940: continue;
1941: }
1942: c = octet;
1943: }else if( eState==1 && (c=='&' || c=='=') ){
1944: if( zFile[iOut-1]==0 ){
1945: /* An empty option name. Ignore this option altogether. */
1946: while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
1947: continue;
1948: }
1949: if( c=='&' ){
1950: zFile[iOut++] = '\0';
1951: }else{
1952: eState = 2;
1953: }
1954: c = 0;
1955: }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
1956: c = 0;
1957: eState = 1;
1958: }
1959: zFile[iOut++] = c;
1960: }
1961: if( eState==1 ) zFile[iOut++] = '\0';
1962: zFile[iOut++] = '\0';
1963: zFile[iOut++] = '\0';
1964:
1965: /* Check if there were any options specified that should be interpreted
1966: ** here. Options that are interpreted here include "vfs" and those that
1967: ** correspond to flags that may be passed to the sqlite3_open_v2()
1968: ** method. */
1969: zOpt = &zFile[sqlite3Strlen30(zFile)+1];
1970: while( zOpt[0] ){
1971: int nOpt = sqlite3Strlen30(zOpt);
1972: char *zVal = &zOpt[nOpt+1];
1973: int nVal = sqlite3Strlen30(zVal);
1974:
1975: if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
1976: zVfs = zVal;
1977: }else{
1978: struct OpenMode {
1979: const char *z;
1980: int mode;
1981: } *aMode = 0;
1982: char *zModeType = 0;
1983: int mask = 0;
1984: int limit = 0;
1985:
1986: if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
1987: static struct OpenMode aCacheMode[] = {
1988: { "shared", SQLITE_OPEN_SHAREDCACHE },
1989: { "private", SQLITE_OPEN_PRIVATECACHE },
1990: { 0, 0 }
1991: };
1992:
1993: mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
1994: aMode = aCacheMode;
1995: limit = mask;
1996: zModeType = "cache";
1997: }
1998: if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
1999: static struct OpenMode aOpenMode[] = {
2000: { "ro", SQLITE_OPEN_READONLY },
2001: { "rw", SQLITE_OPEN_READWRITE },
2002: { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
2003: { 0, 0 }
2004: };
2005:
2006: mask = SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
2007: aMode = aOpenMode;
2008: limit = mask & flags;
2009: zModeType = "access";
2010: }
2011:
2012: if( aMode ){
2013: int i;
2014: int mode = 0;
2015: for(i=0; aMode[i].z; i++){
2016: const char *z = aMode[i].z;
2017: if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
2018: mode = aMode[i].mode;
2019: break;
2020: }
2021: }
2022: if( mode==0 ){
2023: *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
2024: rc = SQLITE_ERROR;
2025: goto parse_uri_out;
2026: }
2027: if( mode>limit ){
2028: *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
2029: zModeType, zVal);
2030: rc = SQLITE_PERM;
2031: goto parse_uri_out;
2032: }
2033: flags = (flags & ~mask) | mode;
2034: }
2035: }
2036:
2037: zOpt = &zVal[nVal+1];
2038: }
2039:
2040: }else{
2041: zFile = sqlite3_malloc(nUri+2);
2042: if( !zFile ) return SQLITE_NOMEM;
2043: memcpy(zFile, zUri, nUri);
2044: zFile[nUri] = '\0';
2045: zFile[nUri+1] = '\0';
2046: }
2047:
2048: *ppVfs = sqlite3_vfs_find(zVfs);
2049: if( *ppVfs==0 ){
2050: *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
2051: rc = SQLITE_ERROR;
2052: }
2053: parse_uri_out:
2054: if( rc!=SQLITE_OK ){
2055: sqlite3_free(zFile);
2056: zFile = 0;
2057: }
2058: *pFlags = flags;
2059: *pzFile = zFile;
2060: return rc;
2061: }
2062:
2063:
2064: /*
2065: ** This routine does the work of opening a database on behalf of
2066: ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
2067: ** is UTF-8 encoded.
2068: */
2069: static int openDatabase(
2070: const char *zFilename, /* Database filename UTF-8 encoded */
2071: sqlite3 **ppDb, /* OUT: Returned database handle */
2072: unsigned int flags, /* Operational flags */
2073: const char *zVfs /* Name of the VFS to use */
2074: ){
2075: sqlite3 *db; /* Store allocated handle here */
2076: int rc; /* Return code */
2077: int isThreadsafe; /* True for threadsafe connections */
2078: char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */
2079: char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */
2080:
2081: *ppDb = 0;
2082: #ifndef SQLITE_OMIT_AUTOINIT
2083: rc = sqlite3_initialize();
2084: if( rc ) return rc;
2085: #endif
2086:
2087: /* Only allow sensible combinations of bits in the flags argument.
2088: ** Throw an error if any non-sense combination is used. If we
2089: ** do not block illegal combinations here, it could trigger
2090: ** assert() statements in deeper layers. Sensible combinations
2091: ** are:
2092: **
2093: ** 1: SQLITE_OPEN_READONLY
2094: ** 2: SQLITE_OPEN_READWRITE
2095: ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
2096: */
2097: assert( SQLITE_OPEN_READONLY == 0x01 );
2098: assert( SQLITE_OPEN_READWRITE == 0x02 );
2099: assert( SQLITE_OPEN_CREATE == 0x04 );
2100: testcase( (1<<(flags&7))==0x02 ); /* READONLY */
2101: testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
2102: testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
2103: if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT;
2104:
2105: if( sqlite3GlobalConfig.bCoreMutex==0 ){
2106: isThreadsafe = 0;
2107: }else if( flags & SQLITE_OPEN_NOMUTEX ){
2108: isThreadsafe = 0;
2109: }else if( flags & SQLITE_OPEN_FULLMUTEX ){
2110: isThreadsafe = 1;
2111: }else{
2112: isThreadsafe = sqlite3GlobalConfig.bFullMutex;
2113: }
2114: if( flags & SQLITE_OPEN_PRIVATECACHE ){
2115: flags &= ~SQLITE_OPEN_SHAREDCACHE;
2116: }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
2117: flags |= SQLITE_OPEN_SHAREDCACHE;
2118: }
2119:
2120: /* Remove harmful bits from the flags parameter
2121: **
2122: ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
2123: ** dealt with in the previous code block. Besides these, the only
2124: ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
2125: ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
2126: ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits. Silently mask
2127: ** off all other flags.
2128: */
2129: flags &= ~( SQLITE_OPEN_DELETEONCLOSE |
2130: SQLITE_OPEN_EXCLUSIVE |
2131: SQLITE_OPEN_MAIN_DB |
2132: SQLITE_OPEN_TEMP_DB |
2133: SQLITE_OPEN_TRANSIENT_DB |
2134: SQLITE_OPEN_MAIN_JOURNAL |
2135: SQLITE_OPEN_TEMP_JOURNAL |
2136: SQLITE_OPEN_SUBJOURNAL |
2137: SQLITE_OPEN_MASTER_JOURNAL |
2138: SQLITE_OPEN_NOMUTEX |
2139: SQLITE_OPEN_FULLMUTEX |
2140: SQLITE_OPEN_WAL
2141: );
2142:
2143: /* Allocate the sqlite data structure */
2144: db = sqlite3MallocZero( sizeof(sqlite3) );
2145: if( db==0 ) goto opendb_out;
2146: if( isThreadsafe ){
2147: db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
2148: if( db->mutex==0 ){
2149: sqlite3_free(db);
2150: db = 0;
2151: goto opendb_out;
2152: }
2153: }
2154: sqlite3_mutex_enter(db->mutex);
2155: db->errMask = 0xff;
2156: db->nDb = 2;
2157: db->magic = SQLITE_MAGIC_BUSY;
2158: db->aDb = db->aDbStatic;
2159:
2160: assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
2161: memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
2162: db->autoCommit = 1;
2163: db->nextAutovac = -1;
2164: db->nextPagesize = 0;
2165: db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
2166: #if SQLITE_DEFAULT_FILE_FORMAT<4
2167: | SQLITE_LegacyFileFmt
2168: #endif
2169: #ifdef SQLITE_ENABLE_LOAD_EXTENSION
2170: | SQLITE_LoadExtension
2171: #endif
2172: #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
2173: | SQLITE_RecTriggers
2174: #endif
2175: #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
2176: | SQLITE_ForeignKeys
2177: #endif
2178: ;
2179: sqlite3HashInit(&db->aCollSeq);
2180: #ifndef SQLITE_OMIT_VIRTUALTABLE
2181: sqlite3HashInit(&db->aModule);
2182: #endif
2183:
2184: /* Add the default collation sequence BINARY. BINARY works for both UTF-8
2185: ** and UTF-16, so add a version for each to avoid any unnecessary
2186: ** conversions. The only error that can occur here is a malloc() failure.
2187: */
2188: createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
2189: createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
2190: createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
2191: createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
2192: if( db->mallocFailed ){
2193: goto opendb_out;
2194: }
2195: db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
2196: assert( db->pDfltColl!=0 );
2197:
2198: /* Also add a UTF-8 case-insensitive collation sequence. */
2199: createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
2200:
2201: /* Parse the filename/URI argument. */
2202: db->openFlags = flags;
2203: rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
2204: if( rc!=SQLITE_OK ){
2205: if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
2206: sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
2207: sqlite3_free(zErrMsg);
2208: goto opendb_out;
2209: }
2210:
2211: /* Open the backend database driver */
2212: rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
2213: flags | SQLITE_OPEN_MAIN_DB);
2214: if( rc!=SQLITE_OK ){
2215: if( rc==SQLITE_IOERR_NOMEM ){
2216: rc = SQLITE_NOMEM;
2217: }
2218: sqlite3Error(db, rc, 0);
2219: goto opendb_out;
2220: }
2221: db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
2222: db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
2223:
2224:
2225: /* The default safety_level for the main database is 'full'; for the temp
2226: ** database it is 'NONE'. This matches the pager layer defaults.
2227: */
2228: db->aDb[0].zName = "main";
2229: db->aDb[0].safety_level = 3;
2230: db->aDb[1].zName = "temp";
2231: db->aDb[1].safety_level = 1;
2232:
2233: db->magic = SQLITE_MAGIC_OPEN;
2234: if( db->mallocFailed ){
2235: goto opendb_out;
2236: }
2237:
2238: /* Register all built-in functions, but do not attempt to read the
2239: ** database schema yet. This is delayed until the first time the database
2240: ** is accessed.
2241: */
2242: sqlite3Error(db, SQLITE_OK, 0);
2243: sqlite3RegisterBuiltinFunctions(db);
2244:
2245: /* Load automatic extensions - extensions that have been registered
2246: ** using the sqlite3_automatic_extension() API.
2247: */
2248: rc = sqlite3_errcode(db);
2249: if( rc==SQLITE_OK ){
2250: sqlite3AutoLoadExtensions(db);
2251: rc = sqlite3_errcode(db);
2252: if( rc!=SQLITE_OK ){
2253: goto opendb_out;
2254: }
2255: }
2256:
2257: #ifdef SQLITE_ENABLE_FTS1
2258: if( !db->mallocFailed ){
2259: extern int sqlite3Fts1Init(sqlite3*);
2260: rc = sqlite3Fts1Init(db);
2261: }
2262: #endif
2263:
2264: #ifdef SQLITE_ENABLE_FTS2
2265: if( !db->mallocFailed && rc==SQLITE_OK ){
2266: extern int sqlite3Fts2Init(sqlite3*);
2267: rc = sqlite3Fts2Init(db);
2268: }
2269: #endif
2270:
2271: #ifdef SQLITE_ENABLE_FTS3
2272: if( !db->mallocFailed && rc==SQLITE_OK ){
2273: rc = sqlite3Fts3Init(db);
2274: }
2275: #endif
2276:
2277: #ifdef SQLITE_ENABLE_ICU
2278: if( !db->mallocFailed && rc==SQLITE_OK ){
2279: rc = sqlite3IcuInit(db);
2280: }
2281: #endif
2282:
2283: #ifdef SQLITE_ENABLE_RTREE
2284: if( !db->mallocFailed && rc==SQLITE_OK){
2285: rc = sqlite3RtreeInit(db);
2286: }
2287: #endif
2288:
2289: sqlite3Error(db, rc, 0);
2290:
2291: /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
2292: ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
2293: ** mode. Doing nothing at all also makes NORMAL the default.
2294: */
2295: #ifdef SQLITE_DEFAULT_LOCKING_MODE
2296: db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
2297: sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
2298: SQLITE_DEFAULT_LOCKING_MODE);
2299: #endif
2300:
2301: /* Enable the lookaside-malloc subsystem */
2302: setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
2303: sqlite3GlobalConfig.nLookaside);
2304:
2305: sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
2306:
2307: opendb_out:
2308: sqlite3_free(zOpen);
2309: if( db ){
2310: assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
2311: sqlite3_mutex_leave(db->mutex);
2312: }
2313: rc = sqlite3_errcode(db);
2314: assert( db!=0 || rc==SQLITE_NOMEM );
2315: if( rc==SQLITE_NOMEM ){
2316: sqlite3_close(db);
2317: db = 0;
2318: }else if( rc!=SQLITE_OK ){
2319: db->magic = SQLITE_MAGIC_SICK;
2320: }
2321: *ppDb = db;
2322: return sqlite3ApiExit(0, rc);
2323: }
2324:
2325: /*
2326: ** Open a new database handle.
2327: */
2328: int sqlite3_open(
2329: const char *zFilename,
2330: sqlite3 **ppDb
2331: ){
2332: return openDatabase(zFilename, ppDb,
2333: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
2334: }
2335: int sqlite3_open_v2(
2336: const char *filename, /* Database filename (UTF-8) */
2337: sqlite3 **ppDb, /* OUT: SQLite db handle */
2338: int flags, /* Flags */
2339: const char *zVfs /* Name of VFS module to use */
2340: ){
2341: return openDatabase(filename, ppDb, (unsigned int)flags, zVfs);
2342: }
2343:
2344: #ifndef SQLITE_OMIT_UTF16
2345: /*
2346: ** Open a new database handle.
2347: */
2348: int sqlite3_open16(
2349: const void *zFilename,
2350: sqlite3 **ppDb
2351: ){
2352: char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
2353: sqlite3_value *pVal;
2354: int rc;
2355:
2356: assert( zFilename );
2357: assert( ppDb );
2358: *ppDb = 0;
2359: #ifndef SQLITE_OMIT_AUTOINIT
2360: rc = sqlite3_initialize();
2361: if( rc ) return rc;
2362: #endif
2363: pVal = sqlite3ValueNew(0);
2364: sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
2365: zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
2366: if( zFilename8 ){
2367: rc = openDatabase(zFilename8, ppDb,
2368: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
2369: assert( *ppDb || rc==SQLITE_NOMEM );
2370: if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
2371: ENC(*ppDb) = SQLITE_UTF16NATIVE;
2372: }
2373: }else{
2374: rc = SQLITE_NOMEM;
2375: }
2376: sqlite3ValueFree(pVal);
2377:
2378: return sqlite3ApiExit(0, rc);
2379: }
2380: #endif /* SQLITE_OMIT_UTF16 */
2381:
2382: /*
2383: ** Register a new collation sequence with the database handle db.
2384: */
2385: int sqlite3_create_collation(
2386: sqlite3* db,
2387: const char *zName,
2388: int enc,
2389: void* pCtx,
2390: int(*xCompare)(void*,int,const void*,int,const void*)
2391: ){
2392: int rc;
2393: sqlite3_mutex_enter(db->mutex);
2394: assert( !db->mallocFailed );
2395: rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0);
2396: rc = sqlite3ApiExit(db, rc);
2397: sqlite3_mutex_leave(db->mutex);
2398: return rc;
2399: }
2400:
2401: /*
2402: ** Register a new collation sequence with the database handle db.
2403: */
2404: int sqlite3_create_collation_v2(
2405: sqlite3* db,
2406: const char *zName,
2407: int enc,
2408: void* pCtx,
2409: int(*xCompare)(void*,int,const void*,int,const void*),
2410: void(*xDel)(void*)
2411: ){
2412: int rc;
2413: sqlite3_mutex_enter(db->mutex);
2414: assert( !db->mallocFailed );
2415: rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
2416: rc = sqlite3ApiExit(db, rc);
2417: sqlite3_mutex_leave(db->mutex);
2418: return rc;
2419: }
2420:
2421: #ifndef SQLITE_OMIT_UTF16
2422: /*
2423: ** Register a new collation sequence with the database handle db.
2424: */
2425: int sqlite3_create_collation16(
2426: sqlite3* db,
2427: const void *zName,
2428: int enc,
2429: void* pCtx,
2430: int(*xCompare)(void*,int,const void*,int,const void*)
2431: ){
2432: int rc = SQLITE_OK;
2433: char *zName8;
2434: sqlite3_mutex_enter(db->mutex);
2435: assert( !db->mallocFailed );
2436: zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
2437: if( zName8 ){
2438: rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
2439: sqlite3DbFree(db, zName8);
2440: }
2441: rc = sqlite3ApiExit(db, rc);
2442: sqlite3_mutex_leave(db->mutex);
2443: return rc;
2444: }
2445: #endif /* SQLITE_OMIT_UTF16 */
2446:
2447: /*
2448: ** Register a collation sequence factory callback with the database handle
2449: ** db. Replace any previously installed collation sequence factory.
2450: */
2451: int sqlite3_collation_needed(
2452: sqlite3 *db,
2453: void *pCollNeededArg,
2454: void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
2455: ){
2456: sqlite3_mutex_enter(db->mutex);
2457: db->xCollNeeded = xCollNeeded;
2458: db->xCollNeeded16 = 0;
2459: db->pCollNeededArg = pCollNeededArg;
2460: sqlite3_mutex_leave(db->mutex);
2461: return SQLITE_OK;
2462: }
2463:
2464: #ifndef SQLITE_OMIT_UTF16
2465: /*
2466: ** Register a collation sequence factory callback with the database handle
2467: ** db. Replace any previously installed collation sequence factory.
2468: */
2469: int sqlite3_collation_needed16(
2470: sqlite3 *db,
2471: void *pCollNeededArg,
2472: void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
2473: ){
2474: sqlite3_mutex_enter(db->mutex);
2475: db->xCollNeeded = 0;
2476: db->xCollNeeded16 = xCollNeeded16;
2477: db->pCollNeededArg = pCollNeededArg;
2478: sqlite3_mutex_leave(db->mutex);
2479: return SQLITE_OK;
2480: }
2481: #endif /* SQLITE_OMIT_UTF16 */
2482:
2483: #ifndef SQLITE_OMIT_DEPRECATED
2484: /*
2485: ** This function is now an anachronism. It used to be used to recover from a
2486: ** malloc() failure, but SQLite now does this automatically.
2487: */
2488: int sqlite3_global_recover(void){
2489: return SQLITE_OK;
2490: }
2491: #endif
2492:
2493: /*
2494: ** Test to see whether or not the database connection is in autocommit
2495: ** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
2496: ** by default. Autocommit is disabled by a BEGIN statement and reenabled
2497: ** by the next COMMIT or ROLLBACK.
2498: **
2499: ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
2500: */
2501: int sqlite3_get_autocommit(sqlite3 *db){
2502: return db->autoCommit;
2503: }
2504:
2505: /*
2506: ** The following routines are subtitutes for constants SQLITE_CORRUPT,
2507: ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
2508: ** constants. They server two purposes:
2509: **
2510: ** 1. Serve as a convenient place to set a breakpoint in a debugger
2511: ** to detect when version error conditions occurs.
2512: **
2513: ** 2. Invoke sqlite3_log() to provide the source code location where
2514: ** a low-level error is first detected.
2515: */
2516: int sqlite3CorruptError(int lineno){
2517: testcase( sqlite3GlobalConfig.xLog!=0 );
2518: sqlite3_log(SQLITE_CORRUPT,
2519: "database corruption at line %d of [%.10s]",
2520: lineno, 20+sqlite3_sourceid());
2521: return SQLITE_CORRUPT;
2522: }
2523: int sqlite3MisuseError(int lineno){
2524: testcase( sqlite3GlobalConfig.xLog!=0 );
2525: sqlite3_log(SQLITE_MISUSE,
2526: "misuse at line %d of [%.10s]",
2527: lineno, 20+sqlite3_sourceid());
2528: return SQLITE_MISUSE;
2529: }
2530: int sqlite3CantopenError(int lineno){
2531: testcase( sqlite3GlobalConfig.xLog!=0 );
2532: sqlite3_log(SQLITE_CANTOPEN,
2533: "cannot open file at line %d of [%.10s]",
2534: lineno, 20+sqlite3_sourceid());
2535: return SQLITE_CANTOPEN;
2536: }
2537:
2538:
2539: #ifndef SQLITE_OMIT_DEPRECATED
2540: /*
2541: ** This is a convenience routine that makes sure that all thread-specific
2542: ** data for this thread has been deallocated.
2543: **
2544: ** SQLite no longer uses thread-specific data so this routine is now a
2545: ** no-op. It is retained for historical compatibility.
2546: */
2547: void sqlite3_thread_cleanup(void){
2548: }
2549: #endif
2550:
2551: /*
2552: ** Return meta information about a specific column of a database table.
2553: ** See comment in sqlite3.h (sqlite.h.in) for details.
2554: */
2555: #ifdef SQLITE_ENABLE_COLUMN_METADATA
2556: int sqlite3_table_column_metadata(
2557: sqlite3 *db, /* Connection handle */
2558: const char *zDbName, /* Database name or NULL */
2559: const char *zTableName, /* Table name */
2560: const char *zColumnName, /* Column name */
2561: char const **pzDataType, /* OUTPUT: Declared data type */
2562: char const **pzCollSeq, /* OUTPUT: Collation sequence name */
2563: int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
2564: int *pPrimaryKey, /* OUTPUT: True if column part of PK */
2565: int *pAutoinc /* OUTPUT: True if column is auto-increment */
2566: ){
2567: int rc;
2568: char *zErrMsg = 0;
2569: Table *pTab = 0;
2570: Column *pCol = 0;
2571: int iCol;
2572:
2573: char const *zDataType = 0;
2574: char const *zCollSeq = 0;
2575: int notnull = 0;
2576: int primarykey = 0;
2577: int autoinc = 0;
2578:
2579: /* Ensure the database schema has been loaded */
2580: sqlite3_mutex_enter(db->mutex);
2581: sqlite3BtreeEnterAll(db);
2582: rc = sqlite3Init(db, &zErrMsg);
2583: if( SQLITE_OK!=rc ){
2584: goto error_out;
2585: }
2586:
2587: /* Locate the table in question */
2588: pTab = sqlite3FindTable(db, zTableName, zDbName);
2589: if( !pTab || pTab->pSelect ){
2590: pTab = 0;
2591: goto error_out;
2592: }
2593:
2594: /* Find the column for which info is requested */
2595: if( sqlite3IsRowid(zColumnName) ){
2596: iCol = pTab->iPKey;
2597: if( iCol>=0 ){
2598: pCol = &pTab->aCol[iCol];
2599: }
2600: }else{
2601: for(iCol=0; iCol<pTab->nCol; iCol++){
2602: pCol = &pTab->aCol[iCol];
2603: if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
2604: break;
2605: }
2606: }
2607: if( iCol==pTab->nCol ){
2608: pTab = 0;
2609: goto error_out;
2610: }
2611: }
2612:
2613: /* The following block stores the meta information that will be returned
2614: ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
2615: ** and autoinc. At this point there are two possibilities:
2616: **
2617: ** 1. The specified column name was rowid", "oid" or "_rowid_"
2618: ** and there is no explicitly declared IPK column.
2619: **
2620: ** 2. The table is not a view and the column name identified an
2621: ** explicitly declared column. Copy meta information from *pCol.
2622: */
2623: if( pCol ){
2624: zDataType = pCol->zType;
2625: zCollSeq = pCol->zColl;
2626: notnull = pCol->notNull!=0;
2627: primarykey = pCol->isPrimKey!=0;
2628: autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
2629: }else{
2630: zDataType = "INTEGER";
2631: primarykey = 1;
2632: }
2633: if( !zCollSeq ){
2634: zCollSeq = "BINARY";
2635: }
2636:
2637: error_out:
2638: sqlite3BtreeLeaveAll(db);
2639:
2640: /* Whether the function call succeeded or failed, set the output parameters
2641: ** to whatever their local counterparts contain. If an error did occur,
2642: ** this has the effect of zeroing all output parameters.
2643: */
2644: if( pzDataType ) *pzDataType = zDataType;
2645: if( pzCollSeq ) *pzCollSeq = zCollSeq;
2646: if( pNotNull ) *pNotNull = notnull;
2647: if( pPrimaryKey ) *pPrimaryKey = primarykey;
2648: if( pAutoinc ) *pAutoinc = autoinc;
2649:
2650: if( SQLITE_OK==rc && !pTab ){
2651: sqlite3DbFree(db, zErrMsg);
2652: zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
2653: zColumnName);
2654: rc = SQLITE_ERROR;
2655: }
2656: sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
2657: sqlite3DbFree(db, zErrMsg);
2658: rc = sqlite3ApiExit(db, rc);
2659: sqlite3_mutex_leave(db->mutex);
2660: return rc;
2661: }
2662: #endif
2663:
2664: /*
2665: ** Sleep for a little while. Return the amount of time slept.
2666: */
2667: int sqlite3_sleep(int ms){
2668: sqlite3_vfs *pVfs;
2669: int rc;
2670: pVfs = sqlite3_vfs_find(0);
2671: if( pVfs==0 ) return 0;
2672:
2673: /* This function works in milliseconds, but the underlying OsSleep()
2674: ** API uses microseconds. Hence the 1000's.
2675: */
2676: rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
2677: return rc;
2678: }
2679:
2680: /*
2681: ** Enable or disable the extended result codes.
2682: */
2683: int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
2684: sqlite3_mutex_enter(db->mutex);
2685: db->errMask = onoff ? 0xffffffff : 0xff;
2686: sqlite3_mutex_leave(db->mutex);
2687: return SQLITE_OK;
2688: }
2689:
2690: /*
2691: ** Invoke the xFileControl method on a particular database.
2692: */
2693: int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
2694: int rc = SQLITE_ERROR;
2695: int iDb;
2696: sqlite3_mutex_enter(db->mutex);
2697: if( zDbName==0 ){
2698: iDb = 0;
2699: }else{
2700: for(iDb=0; iDb<db->nDb; iDb++){
2701: if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
2702: }
2703: }
2704: if( iDb<db->nDb ){
2705: Btree *pBtree = db->aDb[iDb].pBt;
2706: if( pBtree ){
2707: Pager *pPager;
2708: sqlite3_file *fd;
2709: sqlite3BtreeEnter(pBtree);
2710: pPager = sqlite3BtreePager(pBtree);
2711: assert( pPager!=0 );
2712: fd = sqlite3PagerFile(pPager);
2713: assert( fd!=0 );
2714: if( op==SQLITE_FCNTL_FILE_POINTER ){
2715: *(sqlite3_file**)pArg = fd;
2716: rc = SQLITE_OK;
2717: }else if( fd->pMethods ){
2718: rc = sqlite3OsFileControl(fd, op, pArg);
2719: }else{
2720: rc = SQLITE_NOTFOUND;
2721: }
2722: sqlite3BtreeLeave(pBtree);
2723: }
2724: }
2725: sqlite3_mutex_leave(db->mutex);
2726: return rc;
2727: }
2728:
2729: /*
2730: ** Interface to the testing logic.
2731: */
2732: int sqlite3_test_control(int op, ...){
2733: int rc = 0;
2734: #ifndef SQLITE_OMIT_BUILTIN_TEST
2735: va_list ap;
2736: va_start(ap, op);
2737: switch( op ){
2738:
2739: /*
2740: ** Save the current state of the PRNG.
2741: */
2742: case SQLITE_TESTCTRL_PRNG_SAVE: {
2743: sqlite3PrngSaveState();
2744: break;
2745: }
2746:
2747: /*
2748: ** Restore the state of the PRNG to the last state saved using
2749: ** PRNG_SAVE. If PRNG_SAVE has never before been called, then
2750: ** this verb acts like PRNG_RESET.
2751: */
2752: case SQLITE_TESTCTRL_PRNG_RESTORE: {
2753: sqlite3PrngRestoreState();
2754: break;
2755: }
2756:
2757: /*
2758: ** Reset the PRNG back to its uninitialized state. The next call
2759: ** to sqlite3_randomness() will reseed the PRNG using a single call
2760: ** to the xRandomness method of the default VFS.
2761: */
2762: case SQLITE_TESTCTRL_PRNG_RESET: {
2763: sqlite3PrngResetState();
2764: break;
2765: }
2766:
2767: /*
2768: ** sqlite3_test_control(BITVEC_TEST, size, program)
2769: **
2770: ** Run a test against a Bitvec object of size. The program argument
2771: ** is an array of integers that defines the test. Return -1 on a
2772: ** memory allocation error, 0 on success, or non-zero for an error.
2773: ** See the sqlite3BitvecBuiltinTest() for additional information.
2774: */
2775: case SQLITE_TESTCTRL_BITVEC_TEST: {
2776: int sz = va_arg(ap, int);
2777: int *aProg = va_arg(ap, int*);
2778: rc = sqlite3BitvecBuiltinTest(sz, aProg);
2779: break;
2780: }
2781:
2782: /*
2783: ** sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
2784: **
2785: ** Register hooks to call to indicate which malloc() failures
2786: ** are benign.
2787: */
2788: case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
2789: typedef void (*void_function)(void);
2790: void_function xBenignBegin;
2791: void_function xBenignEnd;
2792: xBenignBegin = va_arg(ap, void_function);
2793: xBenignEnd = va_arg(ap, void_function);
2794: sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
2795: break;
2796: }
2797:
2798: /*
2799: ** sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
2800: **
2801: ** Set the PENDING byte to the value in the argument, if X>0.
2802: ** Make no changes if X==0. Return the value of the pending byte
2803: ** as it existing before this routine was called.
2804: **
2805: ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in
2806: ** an incompatible database file format. Changing the PENDING byte
2807: ** while any database connection is open results in undefined and
2808: ** dileterious behavior.
2809: */
2810: case SQLITE_TESTCTRL_PENDING_BYTE: {
2811: rc = PENDING_BYTE;
2812: #ifndef SQLITE_OMIT_WSD
2813: {
2814: unsigned int newVal = va_arg(ap, unsigned int);
2815: if( newVal ) sqlite3PendingByte = newVal;
2816: }
2817: #endif
2818: break;
2819: }
2820:
2821: /*
2822: ** sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
2823: **
2824: ** This action provides a run-time test to see whether or not
2825: ** assert() was enabled at compile-time. If X is true and assert()
2826: ** is enabled, then the return value is true. If X is true and
2827: ** assert() is disabled, then the return value is zero. If X is
2828: ** false and assert() is enabled, then the assertion fires and the
2829: ** process aborts. If X is false and assert() is disabled, then the
2830: ** return value is zero.
2831: */
2832: case SQLITE_TESTCTRL_ASSERT: {
2833: volatile int x = 0;
2834: assert( (x = va_arg(ap,int))!=0 );
2835: rc = x;
2836: break;
2837: }
2838:
2839:
2840: /*
2841: ** sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
2842: **
2843: ** This action provides a run-time test to see how the ALWAYS and
2844: ** NEVER macros were defined at compile-time.
2845: **
2846: ** The return value is ALWAYS(X).
2847: **
2848: ** The recommended test is X==2. If the return value is 2, that means
2849: ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
2850: ** default setting. If the return value is 1, then ALWAYS() is either
2851: ** hard-coded to true or else it asserts if its argument is false.
2852: ** The first behavior (hard-coded to true) is the case if
2853: ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
2854: ** behavior (assert if the argument to ALWAYS() is false) is the case if
2855: ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
2856: **
2857: ** The run-time test procedure might look something like this:
2858: **
2859: ** if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
2860: ** // ALWAYS() and NEVER() are no-op pass-through macros
2861: ** }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
2862: ** // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
2863: ** }else{
2864: ** // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0.
2865: ** }
2866: */
2867: case SQLITE_TESTCTRL_ALWAYS: {
2868: int x = va_arg(ap,int);
2869: rc = ALWAYS(x);
2870: break;
2871: }
2872:
2873: /* sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
2874: **
2875: ** Set the nReserve size to N for the main database on the database
2876: ** connection db.
2877: */
2878: case SQLITE_TESTCTRL_RESERVE: {
2879: sqlite3 *db = va_arg(ap, sqlite3*);
2880: int x = va_arg(ap,int);
2881: sqlite3_mutex_enter(db->mutex);
2882: sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
2883: sqlite3_mutex_leave(db->mutex);
2884: break;
2885: }
2886:
2887: /* sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
2888: **
2889: ** Enable or disable various optimizations for testing purposes. The
2890: ** argument N is a bitmask of optimizations to be disabled. For normal
2891: ** operation N should be 0. The idea is that a test program (like the
2892: ** SQL Logic Test or SLT test module) can run the same SQL multiple times
2893: ** with various optimizations disabled to verify that the same answer
2894: ** is obtained in every case.
2895: */
2896: case SQLITE_TESTCTRL_OPTIMIZATIONS: {
2897: sqlite3 *db = va_arg(ap, sqlite3*);
2898: int x = va_arg(ap,int);
2899: db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask);
2900: break;
2901: }
2902:
2903: #ifdef SQLITE_N_KEYWORD
2904: /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
2905: **
2906: ** If zWord is a keyword recognized by the parser, then return the
2907: ** number of keywords. Or if zWord is not a keyword, return 0.
2908: **
2909: ** This test feature is only available in the amalgamation since
2910: ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
2911: ** is built using separate source files.
2912: */
2913: case SQLITE_TESTCTRL_ISKEYWORD: {
2914: const char *zWord = va_arg(ap, const char*);
2915: int n = sqlite3Strlen30(zWord);
2916: rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
2917: break;
2918: }
2919: #endif
2920:
2921: /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
2922: **
2923: ** Pass pFree into sqlite3ScratchFree().
2924: ** If sz>0 then allocate a scratch buffer into pNew.
2925: */
2926: case SQLITE_TESTCTRL_SCRATCHMALLOC: {
2927: void *pFree, **ppNew;
2928: int sz;
2929: sz = va_arg(ap, int);
2930: ppNew = va_arg(ap, void**);
2931: pFree = va_arg(ap, void*);
2932: if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
2933: sqlite3ScratchFree(pFree);
2934: break;
2935: }
2936:
2937: /* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
2938: **
2939: ** If parameter onoff is non-zero, configure the wrappers so that all
2940: ** subsequent calls to localtime() and variants fail. If onoff is zero,
2941: ** undo this setting.
2942: */
2943: case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
2944: sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
2945: break;
2946: }
2947:
2948: #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
2949: /* sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT,
2950: ** sqlite3_stmt*,const char**);
2951: **
2952: ** If compiled with SQLITE_ENABLE_TREE_EXPLAIN, each sqlite3_stmt holds
2953: ** a string that describes the optimized parse tree. This test-control
2954: ** returns a pointer to that string.
2955: */
2956: case SQLITE_TESTCTRL_EXPLAIN_STMT: {
2957: sqlite3_stmt *pStmt = va_arg(ap, sqlite3_stmt*);
2958: const char **pzRet = va_arg(ap, const char**);
2959: *pzRet = sqlite3VdbeExplanation((Vdbe*)pStmt);
2960: break;
2961: }
2962: #endif
2963:
2964: }
2965: va_end(ap);
2966: #endif /* SQLITE_OMIT_BUILTIN_TEST */
2967: return rc;
2968: }
2969:
2970: /*
2971: ** This is a utility routine, useful to VFS implementations, that checks
2972: ** to see if a database file was a URI that contained a specific query
2973: ** parameter, and if so obtains the value of the query parameter.
2974: **
2975: ** The zFilename argument is the filename pointer passed into the xOpen()
2976: ** method of a VFS implementation. The zParam argument is the name of the
2977: ** query parameter we seek. This routine returns the value of the zParam
2978: ** parameter if it exists. If the parameter does not exist, this routine
2979: ** returns a NULL pointer.
2980: */
2981: const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
2982: if( zFilename==0 ) return 0;
2983: zFilename += sqlite3Strlen30(zFilename) + 1;
2984: while( zFilename[0] ){
2985: int x = strcmp(zFilename, zParam);
2986: zFilename += sqlite3Strlen30(zFilename) + 1;
2987: if( x==0 ) return zFilename;
2988: zFilename += sqlite3Strlen30(zFilename) + 1;
2989: }
2990: return 0;
2991: }
2992:
2993: /*
2994: ** Return a boolean value for a query parameter.
2995: */
2996: int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){
2997: const char *z = sqlite3_uri_parameter(zFilename, zParam);
2998: return z ? sqlite3GetBoolean(z) : (bDflt!=0);
2999: }
3000:
3001: /*
3002: ** Return a 64-bit integer value for a query parameter.
3003: */
3004: sqlite3_int64 sqlite3_uri_int64(
3005: const char *zFilename, /* Filename as passed to xOpen */
3006: const char *zParam, /* URI parameter sought */
3007: sqlite3_int64 bDflt /* return if parameter is missing */
3008: ){
3009: const char *z = sqlite3_uri_parameter(zFilename, zParam);
3010: sqlite3_int64 v;
3011: if( z && sqlite3Atoi64(z, &v, sqlite3Strlen30(z), SQLITE_UTF8)==SQLITE_OK ){
3012: bDflt = v;
3013: }
3014: return bDflt;
3015: }
3016:
3017: /*
3018: ** Return the filename of the database associated with a database
3019: ** connection.
3020: */
3021: const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
3022: int i;
3023: for(i=0; i<db->nDb; i++){
3024: if( db->aDb[i].pBt && sqlite3StrICmp(zDbName, db->aDb[i].zName)==0 ){
3025: return sqlite3BtreeGetFilename(db->aDb[i].pBt);
3026: }
3027: }
3028: return 0;
3029: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>