comparison sqlite/main.c @ 1434:b6b61becdf4e trunk

[svn] - add sqlite/ directory
author nenolod
date Thu, 27 Jul 2006 22:41:31 -0700
parents
children
comparison
equal deleted inserted replaced
1433:3cbe3d14ea68 1434:b6b61becdf4e
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** Main file for the SQLite library. The routines in this file
13 ** implement the programmer interface to the library. Routines in
14 ** other files are for internal use by SQLite and should not be
15 ** accessed by users of the library.
16 **
17 ** $Id: main.c,v 1.340 2006/05/24 12:43:27 drh Exp $
18 */
19 #include "sqliteInt.h"
20 #include "os.h"
21 #include <ctype.h>
22
23 /*
24 ** The following constant value is used by the SQLITE_BIGENDIAN and
25 ** SQLITE_LITTLEENDIAN macros.
26 */
27 const int sqlite3one = 1;
28
29 /*
30 ** The version of the library
31 */
32 const char sqlite3_version[] = SQLITE_VERSION;
33 const char *sqlite3_libversion(void){ return sqlite3_version; }
34 int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
35
36 /*
37 ** This is the default collating function named "BINARY" which is always
38 ** available.
39 */
40 static int binCollFunc(
41 void *NotUsed,
42 int nKey1, const void *pKey1,
43 int nKey2, const void *pKey2
44 ){
45 int rc, n;
46 n = nKey1<nKey2 ? nKey1 : nKey2;
47 rc = memcmp(pKey1, pKey2, n);
48 if( rc==0 ){
49 rc = nKey1 - nKey2;
50 }
51 return rc;
52 }
53
54 /*
55 ** Another built-in collating sequence: NOCASE.
56 **
57 ** This collating sequence is intended to be used for "case independant
58 ** comparison". SQLite's knowledge of upper and lower case equivalents
59 ** extends only to the 26 characters used in the English language.
60 **
61 ** At the moment there is only a UTF-8 implementation.
62 */
63 static int nocaseCollatingFunc(
64 void *NotUsed,
65 int nKey1, const void *pKey1,
66 int nKey2, const void *pKey2
67 ){
68 int r = sqlite3StrNICmp(
69 (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
70 if( 0==r ){
71 r = nKey1-nKey2;
72 }
73 return r;
74 }
75
76 /*
77 ** Return the ROWID of the most recent insert
78 */
79 sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
80 return db->lastRowid;
81 }
82
83 /*
84 ** Return the number of changes in the most recent call to sqlite3_exec().
85 */
86 int sqlite3_changes(sqlite3 *db){
87 return db->nChange;
88 }
89
90 /*
91 ** Return the number of changes since the database handle was opened.
92 */
93 int sqlite3_total_changes(sqlite3 *db){
94 return db->nTotalChange;
95 }
96
97 /*
98 ** Close an existing SQLite database
99 */
100 int sqlite3_close(sqlite3 *db){
101 HashElem *i;
102 int j;
103
104 if( !db ){
105 return SQLITE_OK;
106 }
107 if( sqlite3SafetyCheck(db) ){
108 return SQLITE_MISUSE;
109 }
110
111 #ifdef SQLITE_SSE
112 {
113 extern void sqlite3SseCleanup(sqlite3*);
114 sqlite3SseCleanup(db);
115 }
116 #endif
117
118 /* If there are any outstanding VMs, return SQLITE_BUSY. */
119 if( db->pVdbe ){
120 sqlite3Error(db, SQLITE_BUSY,
121 "Unable to close due to unfinalised statements");
122 return SQLITE_BUSY;
123 }
124 assert( !sqlite3SafetyCheck(db) );
125
126 /* FIX ME: db->magic may be set to SQLITE_MAGIC_CLOSED if the database
127 ** cannot be opened for some reason. So this routine needs to run in
128 ** that case. But maybe there should be an extra magic value for the
129 ** "failed to open" state.
130 */
131 if( db->magic!=SQLITE_MAGIC_CLOSED && sqlite3SafetyOn(db) ){
132 /* printf("DID NOT CLOSE\n"); fflush(stdout); */
133 return SQLITE_ERROR;
134 }
135
136 for(j=0; j<db->nDb; j++){
137 struct Db *pDb = &db->aDb[j];
138 if( pDb->pBt ){
139 sqlite3BtreeClose(pDb->pBt);
140 pDb->pBt = 0;
141 if( j!=1 ){
142 pDb->pSchema = 0;
143 }
144 }
145 }
146 sqlite3ResetInternalSchema(db, 0);
147 assert( db->nDb<=2 );
148 assert( db->aDb==db->aDbStatic );
149 for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){
150 FuncDef *pFunc, *pNext;
151 for(pFunc = (FuncDef*)sqliteHashData(i); pFunc; pFunc=pNext){
152 pNext = pFunc->pNext;
153 sqliteFree(pFunc);
154 }
155 }
156
157 for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
158 CollSeq *pColl = (CollSeq *)sqliteHashData(i);
159 sqliteFree(pColl);
160 }
161 sqlite3HashClear(&db->aCollSeq);
162
163 sqlite3HashClear(&db->aFunc);
164 sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
165 if( db->pErr ){
166 sqlite3ValueFree(db->pErr);
167 }
168
169 db->magic = SQLITE_MAGIC_ERROR;
170
171 /* The temp-database schema is allocated differently from the other schema
172 ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
173 ** So it needs to be freed here. Todo: Why not roll the temp schema into
174 ** the same sqliteMalloc() as the one that allocates the database
175 ** structure?
176 */
177 sqliteFree(db->aDb[1].pSchema);
178 sqliteFree(db);
179 sqlite3ReleaseThreadData();
180 return SQLITE_OK;
181 }
182
183 /*
184 ** Rollback all database files.
185 */
186 void sqlite3RollbackAll(sqlite3 *db){
187 int i;
188 int inTrans = 0;
189 for(i=0; i<db->nDb; i++){
190 if( db->aDb[i].pBt ){
191 if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
192 inTrans = 1;
193 }
194 sqlite3BtreeRollback(db->aDb[i].pBt);
195 db->aDb[i].inTrans = 0;
196 }
197 }
198 if( db->flags&SQLITE_InternChanges ){
199 sqlite3ResetInternalSchema(db, 0);
200 }
201
202 /* If one has been configured, invoke the rollback-hook callback */
203 if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
204 db->xRollbackCallback(db->pRollbackArg);
205 }
206 }
207
208 /*
209 ** Return a static string that describes the kind of error specified in the
210 ** argument.
211 */
212 const char *sqlite3ErrStr(int rc){
213 const char *z;
214 switch( rc ){
215 case SQLITE_ROW:
216 case SQLITE_DONE:
217 case SQLITE_OK: z = "not an error"; break;
218 case SQLITE_ERROR: z = "SQL logic error or missing database"; break;
219 case SQLITE_PERM: z = "access permission denied"; break;
220 case SQLITE_ABORT: z = "callback requested query abort"; break;
221 case SQLITE_BUSY: z = "database is locked"; break;
222 case SQLITE_LOCKED: z = "database table is locked"; break;
223 case SQLITE_NOMEM: z = "out of memory"; break;
224 case SQLITE_READONLY: z = "attempt to write a readonly database"; break;
225 case SQLITE_INTERRUPT: z = "interrupted"; break;
226 case SQLITE_IOERR: z = "disk I/O error"; break;
227 case SQLITE_CORRUPT: z = "database disk image is malformed"; break;
228 case SQLITE_FULL: z = "database or disk is full"; break;
229 case SQLITE_CANTOPEN: z = "unable to open database file"; break;
230 case SQLITE_PROTOCOL: z = "database locking protocol failure"; break;
231 case SQLITE_EMPTY: z = "table contains no data"; break;
232 case SQLITE_SCHEMA: z = "database schema has changed"; break;
233 case SQLITE_CONSTRAINT: z = "constraint failed"; break;
234 case SQLITE_MISMATCH: z = "datatype mismatch"; break;
235 case SQLITE_MISUSE: z = "library routine called out of sequence";break;
236 case SQLITE_NOLFS: z = "kernel lacks large file support"; break;
237 case SQLITE_AUTH: z = "authorization denied"; break;
238 case SQLITE_FORMAT: z = "auxiliary database format error"; break;
239 case SQLITE_RANGE: z = "bind or column index out of range"; break;
240 case SQLITE_NOTADB: z = "file is encrypted or is not a database";break;
241 default: z = "unknown error"; break;
242 }
243 return z;
244 }
245
246 /*
247 ** This routine implements a busy callback that sleeps and tries
248 ** again until a timeout value is reached. The timeout value is
249 ** an integer number of milliseconds passed in as the first
250 ** argument.
251 */
252 static int sqliteDefaultBusyCallback(
253 void *ptr, /* Database connection */
254 int count /* Number of times table has been busy */
255 ){
256 #if OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
257 static const u8 delays[] =
258 { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 };
259 static const u8 totals[] =
260 { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228 };
261 # define NDELAY (sizeof(delays)/sizeof(delays[0]))
262 int timeout = ((sqlite3 *)ptr)->busyTimeout;
263 int delay, prior;
264
265 assert( count>=0 );
266 if( count < NDELAY ){
267 delay = delays[count];
268 prior = totals[count];
269 }else{
270 delay = delays[NDELAY-1];
271 prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
272 }
273 if( prior + delay > timeout ){
274 delay = timeout - prior;
275 if( delay<=0 ) return 0;
276 }
277 sqlite3OsSleep(delay);
278 return 1;
279 #else
280 int timeout = ((sqlite3 *)ptr)->busyTimeout;
281 if( (count+1)*1000 > timeout ){
282 return 0;
283 }
284 sqlite3OsSleep(1000);
285 return 1;
286 #endif
287 }
288
289 /*
290 ** Invoke the given busy handler.
291 **
292 ** This routine is called when an operation failed with a lock.
293 ** If this routine returns non-zero, the lock is retried. If it
294 ** returns 0, the operation aborts with an SQLITE_BUSY error.
295 */
296 int sqlite3InvokeBusyHandler(BusyHandler *p){
297 int rc;
298 if( p==0 || p->xFunc==0 || p->nBusy<0 ) return 0;
299 rc = p->xFunc(p->pArg, p->nBusy);
300 if( rc==0 ){
301 p->nBusy = -1;
302 }else{
303 p->nBusy++;
304 }
305 return rc;
306 }
307
308 /*
309 ** This routine sets the busy callback for an Sqlite database to the
310 ** given callback function with the given argument.
311 */
312 int sqlite3_busy_handler(
313 sqlite3 *db,
314 int (*xBusy)(void*,int),
315 void *pArg
316 ){
317 if( sqlite3SafetyCheck(db) ){
318 return SQLITE_MISUSE;
319 }
320 db->busyHandler.xFunc = xBusy;
321 db->busyHandler.pArg = pArg;
322 db->busyHandler.nBusy = 0;
323 return SQLITE_OK;
324 }
325
326 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
327 /*
328 ** This routine sets the progress callback for an Sqlite database to the
329 ** given callback function with the given argument. The progress callback will
330 ** be invoked every nOps opcodes.
331 */
332 void sqlite3_progress_handler(
333 sqlite3 *db,
334 int nOps,
335 int (*xProgress)(void*),
336 void *pArg
337 ){
338 if( !sqlite3SafetyCheck(db) ){
339 if( nOps>0 ){
340 db->xProgress = xProgress;
341 db->nProgressOps = nOps;
342 db->pProgressArg = pArg;
343 }else{
344 db->xProgress = 0;
345 db->nProgressOps = 0;
346 db->pProgressArg = 0;
347 }
348 }
349 }
350 #endif
351
352
353 /*
354 ** This routine installs a default busy handler that waits for the
355 ** specified number of milliseconds before returning 0.
356 */
357 int sqlite3_busy_timeout(sqlite3 *db, int ms){
358 if( ms>0 ){
359 db->busyTimeout = ms;
360 sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
361 }else{
362 sqlite3_busy_handler(db, 0, 0);
363 }
364 return SQLITE_OK;
365 }
366
367 /*
368 ** Cause any pending operation to stop at its earliest opportunity.
369 */
370 void sqlite3_interrupt(sqlite3 *db){
371 if( !sqlite3SafetyCheck(db) ){
372 db->flags |= SQLITE_Interrupt;
373 }
374 }
375
376 /*
377 ** Windows systems should call this routine to free memory that
378 ** is returned in the in the errmsg parameter of sqlite3_open() when
379 ** SQLite is a DLL. For some reason, it does not work to call free()
380 ** directly.
381 **
382 ** Note that we need to call free() not sqliteFree() here.
383 */
384 void sqlite3_free(char *p){ free(p); }
385
386 /*
387 ** This function is exactly the same as sqlite3_create_function(), except
388 ** that it is designed to be called by internal code. The difference is
389 ** that if a malloc() fails in sqlite3_create_function(), an error code
390 ** is returned and the mallocFailed flag cleared.
391 */
392 int sqlite3CreateFunc(
393 sqlite3 *db,
394 const char *zFunctionName,
395 int nArg,
396 int enc,
397 void *pUserData,
398 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
399 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
400 void (*xFinal)(sqlite3_context*)
401 ){
402 FuncDef *p;
403 int nName;
404
405 if( sqlite3SafetyCheck(db) ){
406 return SQLITE_MISUSE;
407 }
408 if( zFunctionName==0 ||
409 (xFunc && (xFinal || xStep)) ||
410 (!xFunc && (xFinal && !xStep)) ||
411 (!xFunc && (!xFinal && xStep)) ||
412 (nArg<-1 || nArg>127) ||
413 (255<(nName = strlen(zFunctionName))) ){
414 return SQLITE_ERROR;
415 }
416
417 #ifndef SQLITE_OMIT_UTF16
418 /* If SQLITE_UTF16 is specified as the encoding type, transform this
419 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
420 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
421 **
422 ** If SQLITE_ANY is specified, add three versions of the function
423 ** to the hash table.
424 */
425 if( enc==SQLITE_UTF16 ){
426 enc = SQLITE_UTF16NATIVE;
427 }else if( enc==SQLITE_ANY ){
428 int rc;
429 rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
430 pUserData, xFunc, xStep, xFinal);
431 if( rc!=SQLITE_OK ) return rc;
432 rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
433 pUserData, xFunc, xStep, xFinal);
434 if( rc!=SQLITE_OK ) return rc;
435 enc = SQLITE_UTF16BE;
436 }
437 #else
438 enc = SQLITE_UTF8;
439 #endif
440
441 /* Check if an existing function is being overridden or deleted. If so,
442 ** and there are active VMs, then return SQLITE_BUSY. If a function
443 ** is being overridden/deleted but there are no active VMs, allow the
444 ** operation to continue but invalidate all precompiled statements.
445 */
446 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 0);
447 if( p && p->iPrefEnc==enc && p->nArg==nArg ){
448 if( db->activeVdbeCnt ){
449 sqlite3Error(db, SQLITE_BUSY,
450 "Unable to delete/modify user-function due to active statements");
451 assert( !sqlite3MallocFailed() );
452 return SQLITE_BUSY;
453 }else{
454 sqlite3ExpirePreparedStatements(db);
455 }
456 }
457
458 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 1);
459 if( p ){
460 p->flags = 0;
461 p->xFunc = xFunc;
462 p->xStep = xStep;
463 p->xFinalize = xFinal;
464 p->pUserData = pUserData;
465 }
466 return SQLITE_OK;
467 }
468
469 /*
470 ** Create new user functions.
471 */
472 int sqlite3_create_function(
473 sqlite3 *db,
474 const char *zFunctionName,
475 int nArg,
476 int enc,
477 void *p,
478 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
479 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
480 void (*xFinal)(sqlite3_context*)
481 ){
482 int rc;
483 assert( !sqlite3MallocFailed() );
484 rc = sqlite3CreateFunc(db, zFunctionName, nArg, enc, p, xFunc, xStep, xFinal);
485
486 return sqlite3ApiExit(db, rc);
487 }
488
489 #ifndef SQLITE_OMIT_UTF16
490 int sqlite3_create_function16(
491 sqlite3 *db,
492 const void *zFunctionName,
493 int nArg,
494 int eTextRep,
495 void *p,
496 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
497 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
498 void (*xFinal)(sqlite3_context*)
499 ){
500 int rc;
501 char *zFunc8;
502 assert( !sqlite3MallocFailed() );
503
504 zFunc8 = sqlite3utf16to8(zFunctionName, -1);
505 rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal);
506 sqliteFree(zFunc8);
507
508 return sqlite3ApiExit(db, rc);
509 }
510 #endif
511
512 #ifndef SQLITE_OMIT_TRACE
513 /*
514 ** Register a trace function. The pArg from the previously registered trace
515 ** is returned.
516 **
517 ** A NULL trace function means that no tracing is executes. A non-NULL
518 ** trace is a pointer to a function that is invoked at the start of each
519 ** SQL statement.
520 */
521 void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
522 void *pOld = db->pTraceArg;
523 db->xTrace = xTrace;
524 db->pTraceArg = pArg;
525 return pOld;
526 }
527 /*
528 ** Register a profile function. The pArg from the previously registered
529 ** profile function is returned.
530 **
531 ** A NULL profile function means that no profiling is executes. A non-NULL
532 ** profile is a pointer to a function that is invoked at the conclusion of
533 ** each SQL statement that is run.
534 */
535 void *sqlite3_profile(
536 sqlite3 *db,
537 void (*xProfile)(void*,const char*,sqlite_uint64),
538 void *pArg
539 ){
540 void *pOld = db->pProfileArg;
541 db->xProfile = xProfile;
542 db->pProfileArg = pArg;
543 return pOld;
544 }
545 #endif /* SQLITE_OMIT_TRACE */
546
547 /*** EXPERIMENTAL ***
548 **
549 ** Register a function to be invoked when a transaction comments.
550 ** If the invoked function returns non-zero, then the commit becomes a
551 ** rollback.
552 */
553 void *sqlite3_commit_hook(
554 sqlite3 *db, /* Attach the hook to this database */
555 int (*xCallback)(void*), /* Function to invoke on each commit */
556 void *pArg /* Argument to the function */
557 ){
558 void *pOld = db->pCommitArg;
559 db->xCommitCallback = xCallback;
560 db->pCommitArg = pArg;
561 return pOld;
562 }
563
564 /*
565 ** Register a callback to be invoked each time a row is updated,
566 ** inserted or deleted using this database connection.
567 */
568 void *sqlite3_update_hook(
569 sqlite3 *db, /* Attach the hook to this database */
570 void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
571 void *pArg /* Argument to the function */
572 ){
573 void *pRet = db->pUpdateArg;
574 db->xUpdateCallback = xCallback;
575 db->pUpdateArg = pArg;
576 return pRet;
577 }
578
579 /*
580 ** Register a callback to be invoked each time a transaction is rolled
581 ** back by this database connection.
582 */
583 void *sqlite3_rollback_hook(
584 sqlite3 *db, /* Attach the hook to this database */
585 void (*xCallback)(void*), /* Callback function */
586 void *pArg /* Argument to the function */
587 ){
588 void *pRet = db->pRollbackArg;
589 db->xRollbackCallback = xCallback;
590 db->pRollbackArg = pArg;
591 return pRet;
592 }
593
594 /*
595 ** This routine is called to create a connection to a database BTree
596 ** driver. If zFilename is the name of a file, then that file is
597 ** opened and used. If zFilename is the magic name ":memory:" then
598 ** the database is stored in memory (and is thus forgotten as soon as
599 ** the connection is closed.) If zFilename is NULL then the database
600 ** is a "virtual" database for transient use only and is deleted as
601 ** soon as the connection is closed.
602 **
603 ** A virtual database can be either a disk file (that is automatically
604 ** deleted when the file is closed) or it an be held entirely in memory,
605 ** depending on the values of the TEMP_STORE compile-time macro and the
606 ** db->temp_store variable, according to the following chart:
607 **
608 ** TEMP_STORE db->temp_store Location of temporary database
609 ** ---------- -------------- ------------------------------
610 ** 0 any file
611 ** 1 1 file
612 ** 1 2 memory
613 ** 1 0 file
614 ** 2 1 file
615 ** 2 2 memory
616 ** 2 0 memory
617 ** 3 any memory
618 */
619 int sqlite3BtreeFactory(
620 const sqlite3 *db, /* Main database when opening aux otherwise 0 */
621 const char *zFilename, /* Name of the file containing the BTree database */
622 int omitJournal, /* if TRUE then do not journal this file */
623 int nCache, /* How many pages in the page cache */
624 Btree **ppBtree /* Pointer to new Btree object written here */
625 ){
626 int btree_flags = 0;
627 int rc;
628
629 assert( ppBtree != 0);
630 if( omitJournal ){
631 btree_flags |= BTREE_OMIT_JOURNAL;
632 }
633 if( db->flags & SQLITE_NoReadlock ){
634 btree_flags |= BTREE_NO_READLOCK;
635 }
636 if( zFilename==0 ){
637 #if TEMP_STORE==0
638 /* Do nothing */
639 #endif
640 #ifndef SQLITE_OMIT_MEMORYDB
641 #if TEMP_STORE==1
642 if( db->temp_store==2 ) zFilename = ":memory:";
643 #endif
644 #if TEMP_STORE==2
645 if( db->temp_store!=1 ) zFilename = ":memory:";
646 #endif
647 #if TEMP_STORE==3
648 zFilename = ":memory:";
649 #endif
650 #endif /* SQLITE_OMIT_MEMORYDB */
651 }
652
653 rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btree_flags);
654 if( rc==SQLITE_OK ){
655 sqlite3BtreeSetBusyHandler(*ppBtree, (void*)&db->busyHandler);
656 sqlite3BtreeSetCacheSize(*ppBtree, nCache);
657 }
658 return rc;
659 }
660
661 /*
662 ** Return UTF-8 encoded English language explanation of the most recent
663 ** error.
664 */
665 const char *sqlite3_errmsg(sqlite3 *db){
666 const char *z;
667 if( !db || sqlite3MallocFailed() ){
668 return sqlite3ErrStr(SQLITE_NOMEM);
669 }
670 if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
671 return sqlite3ErrStr(SQLITE_MISUSE);
672 }
673 z = (char*)sqlite3_value_text(db->pErr);
674 if( z==0 ){
675 z = sqlite3ErrStr(db->errCode);
676 }
677 return z;
678 }
679
680 #ifndef SQLITE_OMIT_UTF16
681 /*
682 ** Return UTF-16 encoded English language explanation of the most recent
683 ** error.
684 */
685 const void *sqlite3_errmsg16(sqlite3 *db){
686 /* Because all the characters in the string are in the unicode
687 ** range 0x00-0xFF, if we pad the big-endian string with a
688 ** zero byte, we can obtain the little-endian string with
689 ** &big_endian[1].
690 */
691 static const char outOfMemBe[] = {
692 0, 'o', 0, 'u', 0, 't', 0, ' ',
693 0, 'o', 0, 'f', 0, ' ',
694 0, 'm', 0, 'e', 0, 'm', 0, 'o', 0, 'r', 0, 'y', 0, 0, 0
695 };
696 static const char misuseBe [] = {
697 0, 'l', 0, 'i', 0, 'b', 0, 'r', 0, 'a', 0, 'r', 0, 'y', 0, ' ',
698 0, 'r', 0, 'o', 0, 'u', 0, 't', 0, 'i', 0, 'n', 0, 'e', 0, ' ',
699 0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ',
700 0, 'o', 0, 'u', 0, 't', 0, ' ',
701 0, 'o', 0, 'f', 0, ' ',
702 0, 's', 0, 'e', 0, 'q', 0, 'u', 0, 'e', 0, 'n', 0, 'c', 0, 'e', 0, 0, 0
703 };
704
705 const void *z;
706 if( sqlite3MallocFailed() ){
707 return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
708 }
709 if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
710 return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
711 }
712 z = sqlite3_value_text16(db->pErr);
713 if( z==0 ){
714 sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
715 SQLITE_UTF8, SQLITE_STATIC);
716 z = sqlite3_value_text16(db->pErr);
717 }
718 sqlite3ApiExit(0, 0);
719 return z;
720 }
721 #endif /* SQLITE_OMIT_UTF16 */
722
723 /*
724 ** Return the most recent error code generated by an SQLite routine. If NULL is
725 ** passed to this function, we assume a malloc() failed during sqlite3_open().
726 */
727 int sqlite3_errcode(sqlite3 *db){
728 if( !db || sqlite3MallocFailed() ){
729 return SQLITE_NOMEM;
730 }
731 if( sqlite3SafetyCheck(db) ){
732 return SQLITE_MISUSE;
733 }
734 return db->errCode;
735 }
736
737 /*
738 ** Create a new collating function for database "db". The name is zName
739 ** and the encoding is enc.
740 */
741 static int createCollation(
742 sqlite3* db,
743 const char *zName,
744 int enc,
745 void* pCtx,
746 int(*xCompare)(void*,int,const void*,int,const void*)
747 ){
748 CollSeq *pColl;
749 int enc2;
750
751 if( sqlite3SafetyCheck(db) ){
752 return SQLITE_MISUSE;
753 }
754
755 /* If SQLITE_UTF16 is specified as the encoding type, transform this
756 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
757 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
758 */
759 enc2 = enc & ~SQLITE_UTF16_ALIGNED;
760 if( enc2==SQLITE_UTF16 ){
761 enc2 = SQLITE_UTF16NATIVE;
762 }
763
764 if( (enc2&~3)!=0 ){
765 sqlite3Error(db, SQLITE_ERROR, "unknown encoding");
766 return SQLITE_ERROR;
767 }
768
769 /* Check if this call is removing or replacing an existing collation
770 ** sequence. If so, and there are active VMs, return busy. If there
771 ** are no active VMs, invalidate any pre-compiled statements.
772 */
773 pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, strlen(zName), 0);
774 if( pColl && pColl->xCmp ){
775 if( db->activeVdbeCnt ){
776 sqlite3Error(db, SQLITE_BUSY,
777 "Unable to delete/modify collation sequence due to active statements");
778 return SQLITE_BUSY;
779 }
780 sqlite3ExpirePreparedStatements(db);
781 }
782
783 pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, strlen(zName), 1);
784 if( pColl ){
785 pColl->xCmp = xCompare;
786 pColl->pUser = pCtx;
787 pColl->enc = enc2 | (enc & SQLITE_UTF16_ALIGNED);
788 }
789 sqlite3Error(db, SQLITE_OK, 0);
790 return SQLITE_OK;
791 }
792
793
794 /*
795 ** This routine does the work of opening a database on behalf of
796 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
797 ** is UTF-8 encoded.
798 */
799 static int openDatabase(
800 const char *zFilename, /* Database filename UTF-8 encoded */
801 sqlite3 **ppDb /* OUT: Returned database handle */
802 ){
803 sqlite3 *db;
804 int rc;
805 CollSeq *pColl;
806
807 assert( !sqlite3MallocFailed() );
808
809 /* Allocate the sqlite data structure */
810 db = sqliteMalloc( sizeof(sqlite3) );
811 if( db==0 ) goto opendb_out;
812 db->priorNewRowid = 0;
813 db->magic = SQLITE_MAGIC_BUSY;
814 db->nDb = 2;
815 db->aDb = db->aDbStatic;
816 db->autoCommit = 1;
817 db->flags |= SQLITE_ShortColNames;
818 sqlite3HashInit(&db->aFunc, SQLITE_HASH_STRING, 0);
819 sqlite3HashInit(&db->aCollSeq, SQLITE_HASH_STRING, 0);
820
821 /* Add the default collation sequence BINARY. BINARY works for both UTF-8
822 ** and UTF-16, so add a version for each to avoid any unnecessary
823 ** conversions. The only error that can occur here is a malloc() failure.
824 */
825 if( createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc) ||
826 createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc) ||
827 createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc) ||
828 (db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 6, 0))==0
829 ){
830 assert( sqlite3MallocFailed() );
831 db->magic = SQLITE_MAGIC_CLOSED;
832 goto opendb_out;
833 }
834
835 /* Also add a UTF-8 case-insensitive collation sequence. */
836 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc);
837
838 /* Set flags on the built-in collating sequences */
839 db->pDfltColl->type = SQLITE_COLL_BINARY;
840 pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 6, 0);
841 if( pColl ){
842 pColl->type = SQLITE_COLL_NOCASE;
843 }
844
845 /* Open the backend database driver */
846 rc = sqlite3BtreeFactory(db, zFilename, 0, MAX_PAGES, &db->aDb[0].pBt);
847 if( rc!=SQLITE_OK ){
848 sqlite3Error(db, rc, 0);
849 db->magic = SQLITE_MAGIC_CLOSED;
850 goto opendb_out;
851 }
852 db->aDb[0].pSchema = sqlite3SchemaGet(db->aDb[0].pBt);
853 db->aDb[1].pSchema = sqlite3SchemaGet(0);
854
855
856 /* The default safety_level for the main database is 'full'; for the temp
857 ** database it is 'NONE'. This matches the pager layer defaults.
858 */
859 db->aDb[0].zName = "main";
860 db->aDb[0].safety_level = 3;
861 #ifndef SQLITE_OMIT_TEMPDB
862 db->aDb[1].zName = "temp";
863 db->aDb[1].safety_level = 1;
864 #endif
865
866 /* Register all built-in functions, but do not attempt to read the
867 ** database schema yet. This is delayed until the first time the database
868 ** is accessed.
869 */
870 if( !sqlite3MallocFailed() ){
871 sqlite3RegisterBuiltinFunctions(db);
872 sqlite3Error(db, SQLITE_OK, 0);
873 }
874 db->magic = SQLITE_MAGIC_OPEN;
875
876 opendb_out:
877 if( SQLITE_NOMEM==(rc = sqlite3_errcode(db)) ){
878 sqlite3_close(db);
879 db = 0;
880 }
881 *ppDb = db;
882 return sqlite3ApiExit(0, rc);
883 }
884
885 /*
886 ** Open a new database handle.
887 */
888 int sqlite3_open(
889 const char *zFilename,
890 sqlite3 **ppDb
891 ){
892 return openDatabase(zFilename, ppDb);
893 }
894
895 #ifndef SQLITE_OMIT_UTF16
896 /*
897 ** Open a new database handle.
898 */
899 int sqlite3_open16(
900 const void *zFilename,
901 sqlite3 **ppDb
902 ){
903 char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
904 int rc = SQLITE_OK;
905 sqlite3_value *pVal;
906
907 assert( zFilename );
908 assert( ppDb );
909 *ppDb = 0;
910 pVal = sqlite3ValueNew();
911 sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
912 zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
913 if( zFilename8 ){
914 rc = openDatabase(zFilename8, ppDb);
915 if( rc==SQLITE_OK && *ppDb ){
916 rc = sqlite3_exec(*ppDb, "PRAGMA encoding = 'UTF-16'", 0, 0, 0);
917 if( rc!=SQLITE_OK ){
918 sqlite3_close(*ppDb);
919 *ppDb = 0;
920 }
921 }
922 }
923 sqlite3ValueFree(pVal);
924
925 return sqlite3ApiExit(0, rc);
926 }
927 #endif /* SQLITE_OMIT_UTF16 */
928
929 /*
930 ** The following routine destroys a virtual machine that is created by
931 ** the sqlite3_compile() routine. The integer returned is an SQLITE_
932 ** success/failure code that describes the result of executing the virtual
933 ** machine.
934 **
935 ** This routine sets the error code and string returned by
936 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
937 */
938 int sqlite3_finalize(sqlite3_stmt *pStmt){
939 int rc;
940 if( pStmt==0 ){
941 rc = SQLITE_OK;
942 }else{
943 rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
944 }
945 return rc;
946 }
947
948 /*
949 ** Terminate the current execution of an SQL statement and reset it
950 ** back to its starting state so that it can be reused. A success code from
951 ** the prior execution is returned.
952 **
953 ** This routine sets the error code and string returned by
954 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
955 */
956 int sqlite3_reset(sqlite3_stmt *pStmt){
957 int rc;
958 if( pStmt==0 ){
959 rc = SQLITE_OK;
960 }else{
961 rc = sqlite3VdbeReset((Vdbe*)pStmt);
962 sqlite3VdbeMakeReady((Vdbe*)pStmt, -1, 0, 0, 0);
963 }
964 return rc;
965 }
966
967 /*
968 ** Register a new collation sequence with the database handle db.
969 */
970 int sqlite3_create_collation(
971 sqlite3* db,
972 const char *zName,
973 int enc,
974 void* pCtx,
975 int(*xCompare)(void*,int,const void*,int,const void*)
976 ){
977 int rc;
978 assert( !sqlite3MallocFailed() );
979 rc = createCollation(db, zName, enc, pCtx, xCompare);
980 return sqlite3ApiExit(db, rc);
981 }
982
983 #ifndef SQLITE_OMIT_UTF16
984 /*
985 ** Register a new collation sequence with the database handle db.
986 */
987 int sqlite3_create_collation16(
988 sqlite3* db,
989 const char *zName,
990 int enc,
991 void* pCtx,
992 int(*xCompare)(void*,int,const void*,int,const void*)
993 ){
994 int rc = SQLITE_OK;
995 char *zName8;
996 assert( !sqlite3MallocFailed() );
997 zName8 = sqlite3utf16to8(zName, -1);
998 if( zName8 ){
999 rc = createCollation(db, zName8, enc, pCtx, xCompare);
1000 sqliteFree(zName8);
1001 }
1002 return sqlite3ApiExit(db, rc);
1003 }
1004 #endif /* SQLITE_OMIT_UTF16 */
1005
1006 /*
1007 ** Register a collation sequence factory callback with the database handle
1008 ** db. Replace any previously installed collation sequence factory.
1009 */
1010 int sqlite3_collation_needed(
1011 sqlite3 *db,
1012 void *pCollNeededArg,
1013 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
1014 ){
1015 if( sqlite3SafetyCheck(db) ){
1016 return SQLITE_MISUSE;
1017 }
1018 db->xCollNeeded = xCollNeeded;
1019 db->xCollNeeded16 = 0;
1020 db->pCollNeededArg = pCollNeededArg;
1021 return SQLITE_OK;
1022 }
1023
1024 #ifndef SQLITE_OMIT_UTF16
1025 /*
1026 ** Register a collation sequence factory callback with the database handle
1027 ** db. Replace any previously installed collation sequence factory.
1028 */
1029 int sqlite3_collation_needed16(
1030 sqlite3 *db,
1031 void *pCollNeededArg,
1032 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
1033 ){
1034 if( sqlite3SafetyCheck(db) ){
1035 return SQLITE_MISUSE;
1036 }
1037 db->xCollNeeded = 0;
1038 db->xCollNeeded16 = xCollNeeded16;
1039 db->pCollNeededArg = pCollNeededArg;
1040 return SQLITE_OK;
1041 }
1042 #endif /* SQLITE_OMIT_UTF16 */
1043
1044 #ifndef SQLITE_OMIT_GLOBALRECOVER
1045 /*
1046 ** This function is now an anachronism. It used to be used to recover from a
1047 ** malloc() failure, but SQLite now does this automatically.
1048 */
1049 int sqlite3_global_recover(){
1050 return SQLITE_OK;
1051 }
1052 #endif
1053
1054 /*
1055 ** Test to see whether or not the database connection is in autocommit
1056 ** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
1057 ** by default. Autocommit is disabled by a BEGIN statement and reenabled
1058 ** by the next COMMIT or ROLLBACK.
1059 **
1060 ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
1061 */
1062 int sqlite3_get_autocommit(sqlite3 *db){
1063 return db->autoCommit;
1064 }
1065
1066 #ifdef SQLITE_DEBUG
1067 /*
1068 ** The following routine is subtituted for constant SQLITE_CORRUPT in
1069 ** debugging builds. This provides a way to set a breakpoint for when
1070 ** corruption is first detected.
1071 */
1072 int sqlite3Corrupt(void){
1073 return SQLITE_CORRUPT;
1074 }
1075 #endif
1076
1077
1078 #ifndef SQLITE_OMIT_SHARED_CACHE
1079 /*
1080 ** Enable or disable the shared pager and schema features for the
1081 ** current thread.
1082 **
1083 ** This routine should only be called when there are no open
1084 ** database connections.
1085 */
1086 int sqlite3_enable_shared_cache(int enable){
1087 ThreadData *pTd = sqlite3ThreadData();
1088 if( pTd ){
1089 /* It is only legal to call sqlite3_enable_shared_cache() when there
1090 ** are no currently open b-trees that were opened by the calling thread.
1091 ** This condition is only easy to detect if the shared-cache were
1092 ** previously enabled (and is being disabled).
1093 */
1094 if( pTd->pBtree && !enable ){
1095 assert( pTd->useSharedData );
1096 return SQLITE_MISUSE;
1097 }
1098
1099 pTd->useSharedData = enable;
1100 sqlite3ReleaseThreadData();
1101 }
1102 return sqlite3ApiExit(0, SQLITE_OK);
1103 }
1104 #endif
1105
1106 /*
1107 ** This is a convenience routine that makes sure that all thread-specific
1108 ** data for this thread has been deallocated.
1109 */
1110 void sqlite3_thread_cleanup(void){
1111 ThreadData *pTd = sqlite3OsThreadSpecificData(0);
1112 if( pTd ){
1113 memset(pTd, 0, sizeof(*pTd));
1114 sqlite3OsThreadSpecificData(-1);
1115 }
1116 }
1117
1118 /*
1119 ** Return meta information about a specific column of a database table.
1120 ** See comment in sqlite3.h (sqlite.h.in) for details.
1121 */
1122 #ifdef SQLITE_ENABLE_COLUMN_METADATA
1123 int sqlite3_table_column_metadata(
1124 sqlite3 *db, /* Connection handle */
1125 const char *zDbName, /* Database name or NULL */
1126 const char *zTableName, /* Table name */
1127 const char *zColumnName, /* Column name */
1128 char const **pzDataType, /* OUTPUT: Declared data type */
1129 char const **pzCollSeq, /* OUTPUT: Collation sequence name */
1130 int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
1131 int *pPrimaryKey, /* OUTPUT: True if column part of PK */
1132 int *pAutoinc /* OUTPUT: True if colums is auto-increment */
1133 ){
1134 int rc;
1135 char *zErrMsg = 0;
1136 Table *pTab = 0;
1137 Column *pCol = 0;
1138 int iCol;
1139
1140 char const *zDataType = 0;
1141 char const *zCollSeq = 0;
1142 int notnull = 0;
1143 int primarykey = 0;
1144 int autoinc = 0;
1145
1146 /* Ensure the database schema has been loaded */
1147 if( sqlite3SafetyOn(db) ){
1148 return SQLITE_MISUSE;
1149 }
1150 rc = sqlite3Init(db, &zErrMsg);
1151 if( SQLITE_OK!=rc ){
1152 goto error_out;
1153 }
1154
1155 /* Locate the table in question */
1156 pTab = sqlite3FindTable(db, zTableName, zDbName);
1157 if( !pTab || pTab->pSelect ){
1158 pTab = 0;
1159 goto error_out;
1160 }
1161
1162 /* Find the column for which info is requested */
1163 if( sqlite3IsRowid(zColumnName) ){
1164 iCol = pTab->iPKey;
1165 if( iCol>=0 ){
1166 pCol = &pTab->aCol[iCol];
1167 }
1168 }else{
1169 for(iCol=0; iCol<pTab->nCol; iCol++){
1170 pCol = &pTab->aCol[iCol];
1171 if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
1172 break;
1173 }
1174 }
1175 if( iCol==pTab->nCol ){
1176 pTab = 0;
1177 goto error_out;
1178 }
1179 }
1180
1181 /* The following block stores the meta information that will be returned
1182 ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
1183 ** and autoinc. At this point there are two possibilities:
1184 **
1185 ** 1. The specified column name was rowid", "oid" or "_rowid_"
1186 ** and there is no explicitly declared IPK column.
1187 **
1188 ** 2. The table is not a view and the column name identified an
1189 ** explicitly declared column. Copy meta information from *pCol.
1190 */
1191 if( pCol ){
1192 zDataType = pCol->zType;
1193 zCollSeq = pCol->zColl;
1194 notnull = (pCol->notNull?1:0);
1195 primarykey = (pCol->isPrimKey?1:0);
1196 autoinc = ((pTab->iPKey==iCol && pTab->autoInc)?1:0);
1197 }else{
1198 zDataType = "INTEGER";
1199 primarykey = 1;
1200 }
1201 if( !zCollSeq ){
1202 zCollSeq = "BINARY";
1203 }
1204
1205 error_out:
1206 if( sqlite3SafetyOff(db) ){
1207 rc = SQLITE_MISUSE;
1208 }
1209
1210 /* Whether the function call succeeded or failed, set the output parameters
1211 ** to whatever their local counterparts contain. If an error did occur,
1212 ** this has the effect of zeroing all output parameters.
1213 */
1214 if( pzDataType ) *pzDataType = zDataType;
1215 if( pzCollSeq ) *pzCollSeq = zCollSeq;
1216 if( pNotNull ) *pNotNull = notnull;
1217 if( pPrimaryKey ) *pPrimaryKey = primarykey;
1218 if( pAutoinc ) *pAutoinc = autoinc;
1219
1220 if( SQLITE_OK==rc && !pTab ){
1221 sqlite3SetString(&zErrMsg, "no such table column: ", zTableName, ".",
1222 zColumnName, 0);
1223 rc = SQLITE_ERROR;
1224 }
1225 sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
1226 sqliteFree(zErrMsg);
1227 return sqlite3ApiExit(db, rc);
1228 }
1229 #endif