blob: 9858e6efc00173a4169f5db1fd854d1f86ebc51a [file] [log] [blame]
drh75897232000-05-29 14:26:00 +00001/*
drhb19a2bc2001-09-16 00:13:26 +00002** 2001 September 15
drh75897232000-05-29 14:26:00 +00003**
drhb19a2bc2001-09-16 00:13:26 +00004** The author disclaims copyright to this source code. In place of
5** a legal notice, here is a blessing:
drh75897232000-05-29 14:26:00 +00006**
drhb19a2bc2001-09-16 00:13:26 +00007** 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.
drh75897232000-05-29 14:26:00 +000010**
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**
danielk1977da184232006-01-05 11:34:32 +000017** $Id: main.c,v 1.314 2006/01/05 11:34:34 danielk1977 Exp $
drh75897232000-05-29 14:26:00 +000018*/
19#include "sqliteInt.h"
drh8cfbf082001-09-19 13:22:39 +000020#include "os.h"
drhce9079c2002-05-15 14:17:44 +000021#include <ctype.h>
drh75897232000-05-29 14:26:00 +000022
23/*
drh9c054832004-05-31 18:51:57 +000024** The following constant value is used by the SQLITE_BIGENDIAN and
25** SQLITE_LITTLEENDIAN macros.
drhbbd42a62004-05-22 17:41:58 +000026*/
27const int sqlite3one = 1;
28
drhc2311722002-07-19 17:46:38 +000029/*
drhb217a572000-08-22 13:40:18 +000030** The version of the library
31*/
drh38f82712004-06-18 17:10:16 +000032const char rcsid3[] = "@(#) \044Id: SQLite version " SQLITE_VERSION " $";
danielk197724b03fd2004-05-10 10:34:34 +000033const char sqlite3_version[] = SQLITE_VERSION;
drh4aec8b62004-08-28 16:19:00 +000034const char *sqlite3_libversion(void){ return sqlite3_version; }
danielk197799ba19e2005-02-05 07:33:34 +000035int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
drhb217a572000-08-22 13:40:18 +000036
37/*
drhd3d39e92004-05-20 22:16:29 +000038** This is the default collating function named "BINARY" which is always
39** available.
40*/
danielk19772c336542005-01-13 02:14:23 +000041static int binCollFunc(
drhd3d39e92004-05-20 22:16:29 +000042 void *NotUsed,
43 int nKey1, const void *pKey1,
44 int nKey2, const void *pKey2
45){
46 int rc, n;
47 n = nKey1<nKey2 ? nKey1 : nKey2;
48 rc = memcmp(pKey1, pKey2, n);
49 if( rc==0 ){
50 rc = nKey1 - nKey2;
51 }
52 return rc;
53}
54
55/*
danielk1977dc1bdc42004-06-11 10:51:27 +000056** Another built-in collating sequence: NOCASE.
57**
58** This collating sequence is intended to be used for "case independant
59** comparison". SQLite's knowledge of upper and lower case equivalents
60** extends only to the 26 characters used in the English language.
61**
62** At the moment there is only a UTF-8 implementation.
danielk19770202b292004-06-09 09:55:16 +000063*/
64static int nocaseCollatingFunc(
65 void *NotUsed,
66 int nKey1, const void *pKey1,
67 int nKey2, const void *pKey2
68){
69 int r = sqlite3StrNICmp(
drh208f80a2004-08-29 20:08:58 +000070 (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
danielk19770202b292004-06-09 09:55:16 +000071 if( 0==r ){
72 r = nKey1-nKey2;
73 }
74 return r;
75}
76
77/*
drhaf9ff332002-01-16 21:00:27 +000078** Return the ROWID of the most recent insert
79*/
drh9bb575f2004-09-06 17:24:11 +000080sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
drhaf9ff332002-01-16 21:00:27 +000081 return db->lastRowid;
82}
83
84/*
danielk197724b03fd2004-05-10 10:34:34 +000085** Return the number of changes in the most recent call to sqlite3_exec().
drhc8d30ac2002-04-12 10:08:59 +000086*/
drh9bb575f2004-09-06 17:24:11 +000087int sqlite3_changes(sqlite3 *db){
drhc8d30ac2002-04-12 10:08:59 +000088 return db->nChange;
89}
90
rdcf146a772004-02-25 22:51:06 +000091/*
danielk1977b28af712004-06-21 06:50:26 +000092** Return the number of changes since the database handle was opened.
rdcf146a772004-02-25 22:51:06 +000093*/
danielk1977b28af712004-06-21 06:50:26 +000094int sqlite3_total_changes(sqlite3 *db){
95 return db->nTotalChange;
rdcb0c374f2004-02-20 22:53:38 +000096}
97
drhc8d30ac2002-04-12 10:08:59 +000098/*
danielk1977da184232006-01-05 11:34:32 +000099** Free a schema structure.
100*/
101void sqlite3SchemaFree(void *p){
102 sqliteFree(p);
103}
104
105DbSchema *sqlite3SchemaGet(Btree *pBt){
106 DbSchema * p;
107 if( pBt ){
108 p = (DbSchema *)sqlite3BtreeSchema(pBt,sizeof(DbSchema),sqlite3SchemaFree);
109 }else{
110 p = (DbSchema *)sqliteMalloc(sizeof(DbSchema));
111 }
112 if( p ){
113 sqlite3HashInit(&p->tblHash, SQLITE_HASH_STRING, 0);
114 sqlite3HashInit(&p->idxHash, SQLITE_HASH_STRING, 0);
115 sqlite3HashInit(&p->trigHash, SQLITE_HASH_STRING, 0);
116 sqlite3HashInit(&p->aFKey, SQLITE_HASH_STRING, 1);
117 }
118 return p;
119}
120
121int sqlite3SchemaToIndex(sqlite3 *db, DbSchema *pSchema){
122 int i = -1000000;
123
124 /* If pSchema is NULL, then return -1000000. This happens when code in
125 ** expr.c is trying to resolve a reference to a transient table (i.e. one
126 ** created by a sub-select). In this case the return value of this
127 ** function should never be used.
128 **
129 ** We return -1000000 instead of the more usual -1 simply because using
130 ** -1000000 as incorrectly using -1000000 index into db->aDb[] is much
131 ** more likely to cause a segfault than -1 (of course there are assert()
132 ** statements too, but it never hurts to play the odds).
133 */
134 if( pSchema ){
135 for(i=0; i<db->nDb; i++){
136 if( db->aDb[i].pSchema==pSchema ){
137 break;
138 }
139 }
140 assert( i>=0 &&i>=0 && i<db->nDb );
141 }
142 return i;
143}
144
145/*
drh50e5dad2001-09-15 00:57:28 +0000146** Close an existing SQLite database
147*/
drh9bb575f2004-09-06 17:24:11 +0000148int sqlite3_close(sqlite3 *db){
drh8e0a2f92002-02-23 23:45:45 +0000149 HashElem *i;
drh001bbcb2003-03-19 03:14:00 +0000150 int j;
danielk19775c4c7782004-06-16 10:39:23 +0000151
152 if( !db ){
danielk197796d81f92004-06-19 03:33:57 +0000153 return SQLITE_OK;
danielk19775c4c7782004-06-16 10:39:23 +0000154 }
drhc60d0442004-09-30 13:43:13 +0000155 if( sqlite3SafetyCheck(db) ){
danielk1977e35ee192004-06-26 09:50:11 +0000156 return SQLITE_MISUSE;
157 }
158
danielk19771f723bd2005-05-26 12:37:29 +0000159#ifdef SQLITE_SSE
160 sqlite3_finalize(db->pFetch);
161#endif
162
danielk197796d81f92004-06-19 03:33:57 +0000163 /* If there are any outstanding VMs, return SQLITE_BUSY. */
164 if( db->pVdbe ){
165 sqlite3Error(db, SQLITE_BUSY,
166 "Unable to close due to unfinalised statements");
167 return SQLITE_BUSY;
168 }
169 assert( !sqlite3SafetyCheck(db) );
danielk1977e0048402004-06-15 16:51:01 +0000170
171 /* FIX ME: db->magic may be set to SQLITE_MAGIC_CLOSED if the database
172 ** cannot be opened for some reason. So this routine needs to run in
173 ** that case. But maybe there should be an extra magic value for the
174 ** "failed to open" state.
175 */
danielk197796d81f92004-06-19 03:33:57 +0000176 if( db->magic!=SQLITE_MAGIC_CLOSED && sqlite3SafetyOn(db) ){
drh94e92032003-02-16 22:21:32 +0000177 /* printf("DID NOT CLOSE\n"); fflush(stdout); */
danielk197796d81f92004-06-19 03:33:57 +0000178 return SQLITE_ERROR;
drh94e92032003-02-16 22:21:32 +0000179 }
danielk1977e0048402004-06-15 16:51:01 +0000180
danielk19777ddad962005-12-12 06:53:03 +0000181 /* sqlite3_close() may not invoke sqliteMalloc(). */
182 sqlite3MallocDisallow();
183
drh001bbcb2003-03-19 03:14:00 +0000184 for(j=0; j<db->nDb; j++){
drh4d189ca2004-02-12 18:46:38 +0000185 struct Db *pDb = &db->aDb[j];
186 if( pDb->pBt ){
danielk19774adee202004-05-08 08:23:19 +0000187 sqlite3BtreeClose(pDb->pBt);
drh4d189ca2004-02-12 18:46:38 +0000188 pDb->pBt = 0;
drh113088e2003-03-20 01:16:58 +0000189 }
drhf57b3392001-10-08 13:22:32 +0000190 }
danielk19774adee202004-05-08 08:23:19 +0000191 sqlite3ResetInternalSchema(db, 0);
drh1c2d8412003-03-31 00:30:47 +0000192 assert( db->nDb<=2 );
193 assert( db->aDb==db->aDbStatic );
drh0bce8352002-02-28 00:41:10 +0000194 for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){
195 FuncDef *pFunc, *pNext;
196 for(pFunc = (FuncDef*)sqliteHashData(i); pFunc; pFunc=pNext){
drh8e0a2f92002-02-23 23:45:45 +0000197 pNext = pFunc->pNext;
198 sqliteFree(pFunc);
199 }
200 }
danielk1977466be562004-06-10 02:16:01 +0000201
danielk1977d8123362004-06-12 09:25:12 +0000202 for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
danielk1977466be562004-06-10 02:16:01 +0000203 CollSeq *pColl = (CollSeq *)sqliteHashData(i);
danielk1977d8123362004-06-12 09:25:12 +0000204 sqliteFree(pColl);
danielk1977466be562004-06-10 02:16:01 +0000205 }
danielk1977d8123362004-06-12 09:25:12 +0000206 sqlite3HashClear(&db->aCollSeq);
danielk1977466be562004-06-10 02:16:01 +0000207
danielk19774adee202004-05-08 08:23:19 +0000208 sqlite3HashClear(&db->aFunc);
danielk19776622cce2004-05-20 11:00:52 +0000209 sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
danielk1977bfd6cce2004-06-18 04:24:54 +0000210 if( db->pErr ){
211 sqlite3ValueFree(db->pErr);
212 }
danielk197796d81f92004-06-19 03:33:57 +0000213
danielk19777ddad962005-12-12 06:53:03 +0000214#if 0
danielk19776b456a22005-03-21 04:04:02 +0000215#ifndef SQLITE_OMIT_GLOBALRECOVER
216 {
danielk19773eb8db92005-03-29 23:34:58 +0000217 sqlite3 *pPrev;
drh054889e2005-11-30 03:20:31 +0000218 sqlite3Os.xEnterMutex();
danielk19773eb8db92005-03-29 23:34:58 +0000219 pPrev = pDbList;
danielk19776b456a22005-03-21 04:04:02 +0000220 while( pPrev && pPrev->pNext!=db ){
221 pPrev = pPrev->pNext;
222 }
223 if( pPrev ){
224 pPrev->pNext = db->pNext;
225 }else{
226 assert( pDbList==db );
227 pDbList = db->pNext;
228 }
drh054889e2005-11-30 03:20:31 +0000229 sqlite3Os.xLeaveMutex();
danielk19776b456a22005-03-21 04:04:02 +0000230 }
231#endif
danielk19777ddad962005-12-12 06:53:03 +0000232#endif
danielk19776b456a22005-03-21 04:04:02 +0000233
danielk197796d81f92004-06-19 03:33:57 +0000234 db->magic = SQLITE_MAGIC_ERROR;
danielk1977da184232006-01-05 11:34:32 +0000235 sqliteFree(db->aDb[1].pSchema);
drh75897232000-05-29 14:26:00 +0000236 sqliteFree(db);
danielk19777ddad962005-12-12 06:53:03 +0000237 sqlite3MallocAllow();
danielk197796d81f92004-06-19 03:33:57 +0000238 return SQLITE_OK;
drh75897232000-05-29 14:26:00 +0000239}
240
241/*
drh001bbcb2003-03-19 03:14:00 +0000242** Rollback all database files.
243*/
drh9bb575f2004-09-06 17:24:11 +0000244void sqlite3RollbackAll(sqlite3 *db){
drh001bbcb2003-03-19 03:14:00 +0000245 int i;
danielk1977f3f06bb2005-12-16 15:24:28 +0000246 int inTrans = 0;
drh001bbcb2003-03-19 03:14:00 +0000247 for(i=0; i<db->nDb; i++){
248 if( db->aDb[i].pBt ){
danielk1977f3f06bb2005-12-16 15:24:28 +0000249 if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
250 inTrans = 1;
251 }
danielk19774adee202004-05-08 08:23:19 +0000252 sqlite3BtreeRollback(db->aDb[i].pBt);
drh001bbcb2003-03-19 03:14:00 +0000253 db->aDb[i].inTrans = 0;
254 }
255 }
danielk197771fd80b2005-12-16 06:54:01 +0000256 if( db->flags&SQLITE_InternChanges ){
257 sqlite3ResetInternalSchema(db, 0);
258 }
259
260 /* If one has been configured, invoke the rollback-hook callback */
danielk1977f3f06bb2005-12-16 15:24:28 +0000261 if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
danielk197771fd80b2005-12-16 06:54:01 +0000262 db->xRollbackCallback(db->pRollbackArg);
263 }
drh001bbcb2003-03-19 03:14:00 +0000264}
265
266/*
drhc22bd472002-05-10 13:14:07 +0000267** Return a static string that describes the kind of error specified in the
268** argument.
drh247be432002-05-10 05:44:55 +0000269*/
danielk1977f20b21c2004-05-31 23:56:42 +0000270const char *sqlite3ErrStr(int rc){
drhc22bd472002-05-10 13:14:07 +0000271 const char *z;
272 switch( rc ){
drhc60d0442004-09-30 13:43:13 +0000273 case SQLITE_ROW:
274 case SQLITE_DONE:
drhc22bd472002-05-10 13:14:07 +0000275 case SQLITE_OK: z = "not an error"; break;
276 case SQLITE_ERROR: z = "SQL logic error or missing database"; break;
drhc22bd472002-05-10 13:14:07 +0000277 case SQLITE_PERM: z = "access permission denied"; break;
278 case SQLITE_ABORT: z = "callback requested query abort"; break;
279 case SQLITE_BUSY: z = "database is locked"; break;
280 case SQLITE_LOCKED: z = "database table is locked"; break;
281 case SQLITE_NOMEM: z = "out of memory"; break;
282 case SQLITE_READONLY: z = "attempt to write a readonly database"; break;
283 case SQLITE_INTERRUPT: z = "interrupted"; break;
284 case SQLITE_IOERR: z = "disk I/O error"; break;
285 case SQLITE_CORRUPT: z = "database disk image is malformed"; break;
drh2db0bbc2005-08-11 02:10:18 +0000286 case SQLITE_FULL: z = "database or disk is full"; break;
drhc22bd472002-05-10 13:14:07 +0000287 case SQLITE_CANTOPEN: z = "unable to open database file"; break;
288 case SQLITE_PROTOCOL: z = "database locking protocol failure"; break;
289 case SQLITE_EMPTY: z = "table contains no data"; break;
290 case SQLITE_SCHEMA: z = "database schema has changed"; break;
drhc22bd472002-05-10 13:14:07 +0000291 case SQLITE_CONSTRAINT: z = "constraint failed"; break;
292 case SQLITE_MISMATCH: z = "datatype mismatch"; break;
293 case SQLITE_MISUSE: z = "library routine called out of sequence";break;
drh8766c342002-11-09 00:33:15 +0000294 case SQLITE_NOLFS: z = "kernel lacks large file support"; break;
drhed6c8672003-01-12 18:02:16 +0000295 case SQLITE_AUTH: z = "authorization denied"; break;
jplyon892f6712003-06-12 08:59:00 +0000296 case SQLITE_FORMAT: z = "auxiliary database format error"; break;
drhb08153d2004-11-20 20:18:55 +0000297 case SQLITE_RANGE: z = "bind or column index out of range"; break;
drhc602f9a2004-02-12 19:01:04 +0000298 case SQLITE_NOTADB: z = "file is encrypted or is not a database";break;
drhc22bd472002-05-10 13:14:07 +0000299 default: z = "unknown error"; break;
drh247be432002-05-10 05:44:55 +0000300 }
drhc22bd472002-05-10 13:14:07 +0000301 return z;
drh247be432002-05-10 05:44:55 +0000302}
303
304/*
drh2dfbbca2000-07-28 14:32:48 +0000305** This routine implements a busy callback that sleeps and tries
306** again until a timeout value is reached. The timeout value is
307** an integer number of milliseconds passed in as the first
308** argument.
309*/
drhdaffd0e2001-04-11 14:28:42 +0000310static int sqliteDefaultBusyCallback(
drh97903fe2005-05-24 20:19:57 +0000311 void *ptr, /* Database connection */
drh2dfbbca2000-07-28 14:32:48 +0000312 int count /* Number of times table has been busy */
313){
drh8cfbf082001-09-19 13:22:39 +0000314#if SQLITE_MIN_SLEEP_MS==1
drhee570fa2005-04-28 12:06:05 +0000315 static const u8 delays[] =
316 { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 };
317 static const u8 totals[] =
318 { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228 };
drhd1bec472004-01-15 13:29:31 +0000319# define NDELAY (sizeof(delays)/sizeof(delays[0]))
drh97903fe2005-05-24 20:19:57 +0000320 int timeout = ((sqlite3 *)ptr)->busyTimeout;
321 int delay, prior;
drh2dfbbca2000-07-28 14:32:48 +0000322
drhee570fa2005-04-28 12:06:05 +0000323 assert( count>=0 );
324 if( count < NDELAY ){
325 delay = delays[count];
326 prior = totals[count];
drhd1bec472004-01-15 13:29:31 +0000327 }else{
328 delay = delays[NDELAY-1];
drh68cb6192005-05-06 22:05:56 +0000329 prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
drh2dfbbca2000-07-28 14:32:48 +0000330 }
drhd1bec472004-01-15 13:29:31 +0000331 if( prior + delay > timeout ){
332 delay = timeout - prior;
drh2dfbbca2000-07-28 14:32:48 +0000333 if( delay<=0 ) return 0;
334 }
drh054889e2005-11-30 03:20:31 +0000335 sqlite3Os.xSleep(delay);
drh2dfbbca2000-07-28 14:32:48 +0000336 return 1;
337#else
drh3f737082005-06-14 02:24:31 +0000338 int timeout = ((sqlite3 *)ptr)->busyTimeout;
drh2dfbbca2000-07-28 14:32:48 +0000339 if( (count+1)*1000 > timeout ){
340 return 0;
341 }
drh054889e2005-11-30 03:20:31 +0000342 sqlite3Os.xSleep(1000);
drh2dfbbca2000-07-28 14:32:48 +0000343 return 1;
344#endif
345}
346
347/*
drha4afb652005-07-09 02:16:02 +0000348** Invoke the given busy handler.
349**
350** This routine is called when an operation failed with a lock.
351** If this routine returns non-zero, the lock is retried. If it
352** returns 0, the operation aborts with an SQLITE_BUSY error.
353*/
354int sqlite3InvokeBusyHandler(BusyHandler *p){
355 int rc;
356 if( p==0 || p->xFunc==0 || p->nBusy<0 ) return 0;
357 rc = p->xFunc(p->pArg, p->nBusy);
358 if( rc==0 ){
359 p->nBusy = -1;
360 }else{
361 p->nBusy++;
362 }
363 return rc;
364}
365
366/*
drh2dfbbca2000-07-28 14:32:48 +0000367** This routine sets the busy callback for an Sqlite database to the
368** given callback function with the given argument.
369*/
danielk1977f9d64d22004-06-19 08:18:07 +0000370int sqlite3_busy_handler(
371 sqlite3 *db,
danielk19772a764eb2004-06-12 01:43:26 +0000372 int (*xBusy)(void*,int),
drh2dfbbca2000-07-28 14:32:48 +0000373 void *pArg
374){
drhc60d0442004-09-30 13:43:13 +0000375 if( sqlite3SafetyCheck(db) ){
376 return SQLITE_MISUSE;
377 }
danielk197724162fe2004-06-04 06:22:00 +0000378 db->busyHandler.xFunc = xBusy;
379 db->busyHandler.pArg = pArg;
drha4afb652005-07-09 02:16:02 +0000380 db->busyHandler.nBusy = 0;
danielk1977f9d64d22004-06-19 08:18:07 +0000381 return SQLITE_OK;
drh2dfbbca2000-07-28 14:32:48 +0000382}
383
danielk1977348bb5d2003-10-18 09:37:26 +0000384#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
385/*
386** This routine sets the progress callback for an Sqlite database to the
387** given callback function with the given argument. The progress callback will
388** be invoked every nOps opcodes.
389*/
danielk197724b03fd2004-05-10 10:34:34 +0000390void sqlite3_progress_handler(
drh9bb575f2004-09-06 17:24:11 +0000391 sqlite3 *db,
danielk1977348bb5d2003-10-18 09:37:26 +0000392 int nOps,
393 int (*xProgress)(void*),
394 void *pArg
395){
drhc60d0442004-09-30 13:43:13 +0000396 if( !sqlite3SafetyCheck(db) ){
397 if( nOps>0 ){
398 db->xProgress = xProgress;
399 db->nProgressOps = nOps;
400 db->pProgressArg = pArg;
401 }else{
402 db->xProgress = 0;
403 db->nProgressOps = 0;
404 db->pProgressArg = 0;
405 }
danielk1977348bb5d2003-10-18 09:37:26 +0000406 }
407}
408#endif
409
410
drh2dfbbca2000-07-28 14:32:48 +0000411/*
412** This routine installs a default busy handler that waits for the
413** specified number of milliseconds before returning 0.
414*/
danielk1977f9d64d22004-06-19 08:18:07 +0000415int sqlite3_busy_timeout(sqlite3 *db, int ms){
drh2dfbbca2000-07-28 14:32:48 +0000416 if( ms>0 ){
drh97903fe2005-05-24 20:19:57 +0000417 db->busyTimeout = ms;
418 sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
drh2dfbbca2000-07-28 14:32:48 +0000419 }else{
danielk197724b03fd2004-05-10 10:34:34 +0000420 sqlite3_busy_handler(db, 0, 0);
drh2dfbbca2000-07-28 14:32:48 +0000421 }
danielk1977f9d64d22004-06-19 08:18:07 +0000422 return SQLITE_OK;
drh2dfbbca2000-07-28 14:32:48 +0000423}
drh4c504392000-10-16 22:06:40 +0000424
425/*
426** Cause any pending operation to stop at its earliest opportunity.
427*/
drh9bb575f2004-09-06 17:24:11 +0000428void sqlite3_interrupt(sqlite3 *db){
drhc60d0442004-09-30 13:43:13 +0000429 if( !sqlite3SafetyCheck(db) ){
430 db->flags |= SQLITE_Interrupt;
431 }
drh4c504392000-10-16 22:06:40 +0000432}
drhfa86c412002-02-02 15:01:15 +0000433
434/*
435** Windows systems should call this routine to free memory that
danielk197724b03fd2004-05-10 10:34:34 +0000436** is returned in the in the errmsg parameter of sqlite3_open() when
drhfa86c412002-02-02 15:01:15 +0000437** SQLite is a DLL. For some reason, it does not work to call free()
438** directly.
439**
drhae29ffb2004-09-25 14:39:18 +0000440** Note that we need to call free() not sqliteFree() here.
drhfa86c412002-02-02 15:01:15 +0000441*/
drh3f4fedb2004-05-31 19:34:33 +0000442void sqlite3_free(char *p){ free(p); }
drhfa86c412002-02-02 15:01:15 +0000443
444/*
drhdf014892004-06-02 00:41:09 +0000445** Create new user functions.
drhfa86c412002-02-02 15:01:15 +0000446*/
danielk197724b03fd2004-05-10 10:34:34 +0000447int sqlite3_create_function(
danielk197765904932004-05-26 06:18:37 +0000448 sqlite3 *db,
449 const char *zFunctionName,
450 int nArg,
danielk1977d8123362004-06-12 09:25:12 +0000451 int enc,
danielk197765904932004-05-26 06:18:37 +0000452 void *pUserData,
453 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
454 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
455 void (*xFinal)(sqlite3_context*)
drh8e0a2f92002-02-23 23:45:45 +0000456){
drh0bce8352002-02-28 00:41:10 +0000457 FuncDef *p;
drh4b59ab52002-08-24 18:24:51 +0000458 int nName;
danielk197765904932004-05-26 06:18:37 +0000459
drhc60d0442004-09-30 13:43:13 +0000460 if( sqlite3SafetyCheck(db) ){
461 return SQLITE_MISUSE;
462 }
463 if( zFunctionName==0 ||
danielk1977398eae72004-05-26 06:58:43 +0000464 (xFunc && (xFinal || xStep)) ||
465 (!xFunc && (xFinal && !xStep)) ||
466 (!xFunc && (!xFinal && xStep)) ||
467 (nArg<-1 || nArg>127) ||
468 (255<(nName = strlen(zFunctionName))) ){
danielk197765904932004-05-26 06:18:37 +0000469 return SQLITE_ERROR;
470 }
danielk1977d8123362004-06-12 09:25:12 +0000471
danielk197793758c82005-01-21 08:13:14 +0000472#ifndef SQLITE_OMIT_UTF16
danielk1977d8123362004-06-12 09:25:12 +0000473 /* If SQLITE_UTF16 is specified as the encoding type, transform this
474 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
475 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
476 **
477 ** If SQLITE_ANY is specified, add three versions of the function
478 ** to the hash table.
479 */
480 if( enc==SQLITE_UTF16 ){
481 enc = SQLITE_UTF16NATIVE;
482 }else if( enc==SQLITE_ANY ){
483 int rc;
484 rc = sqlite3_create_function(db, zFunctionName, nArg, SQLITE_UTF8,
danielk1977f9d64d22004-06-19 08:18:07 +0000485 pUserData, xFunc, xStep, xFinal);
danielk1977d8123362004-06-12 09:25:12 +0000486 if( rc!=SQLITE_OK ) return rc;
487 rc = sqlite3_create_function(db, zFunctionName, nArg, SQLITE_UTF16LE,
danielk1977f9d64d22004-06-19 08:18:07 +0000488 pUserData, xFunc, xStep, xFinal);
danielk1977d8123362004-06-12 09:25:12 +0000489 if( rc!=SQLITE_OK ) return rc;
490 enc = SQLITE_UTF16BE;
491 }
danielk197793758c82005-01-21 08:13:14 +0000492#else
493 enc = SQLITE_UTF8;
494#endif
danielk19779636c4e2005-01-25 04:27:54 +0000495
496 /* Check if an existing function is being overridden or deleted. If so,
497 ** and there are active VMs, then return SQLITE_BUSY. If a function
498 ** is being overridden/deleted but there are no active VMs, allow the
499 ** operation to continue but invalidate all precompiled statements.
500 */
501 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 0);
502 if( p && p->iPrefEnc==enc && p->nArg==nArg ){
503 if( db->activeVdbeCnt ){
504 sqlite3Error(db, SQLITE_BUSY,
505 "Unable to delete/modify user-function due to active statements");
506 return SQLITE_BUSY;
507 }else{
508 sqlite3ExpirePreparedStatements(db);
509 }
510 }
danielk197765904932004-05-26 06:18:37 +0000511
danielk1977d8123362004-06-12 09:25:12 +0000512 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, enc, 1);
danielk197713073932004-06-30 11:54:06 +0000513 if( p==0 ) return SQLITE_NOMEM;
drh55ef4d92005-08-14 01:20:37 +0000514 p->flags = 0;
drh8e0a2f92002-02-23 23:45:45 +0000515 p->xFunc = xFunc;
drh8e0a2f92002-02-23 23:45:45 +0000516 p->xStep = xStep;
danielk197765904932004-05-26 06:18:37 +0000517 p->xFinalize = xFinal;
drh1350b032002-02-27 19:00:20 +0000518 p->pUserData = pUserData;
danielk197765904932004-05-26 06:18:37 +0000519 return SQLITE_OK;
520}
danielk197793758c82005-01-21 08:13:14 +0000521#ifndef SQLITE_OMIT_UTF16
danielk197765904932004-05-26 06:18:37 +0000522int sqlite3_create_function16(
523 sqlite3 *db,
524 const void *zFunctionName,
525 int nArg,
526 int eTextRep,
danielk197765904932004-05-26 06:18:37 +0000527 void *pUserData,
528 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
529 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
530 void (*xFinal)(sqlite3_context*)
531){
532 int rc;
drhaf9a7c22005-12-15 03:04:10 +0000533 char *zFunc8;
danielk1977bfd6cce2004-06-18 04:24:54 +0000534
drhc60d0442004-09-30 13:43:13 +0000535 if( sqlite3SafetyCheck(db) ){
536 return SQLITE_MISUSE;
537 }
drhaf9a7c22005-12-15 03:04:10 +0000538 zFunc8 = sqlite3utf16to8(zFunctionName, -1);
danielk1977bfd6cce2004-06-18 04:24:54 +0000539 if( !zFunc8 ){
danielk197765904932004-05-26 06:18:37 +0000540 return SQLITE_NOMEM;
541 }
danielk1977bfd6cce2004-06-18 04:24:54 +0000542 rc = sqlite3_create_function(db, zFunc8, nArg, eTextRep,
danielk1977f9d64d22004-06-19 08:18:07 +0000543 pUserData, xFunc, xStep, xFinal);
drhaf9a7c22005-12-15 03:04:10 +0000544 sqliteFree(zFunc8);
danielk197765904932004-05-26 06:18:37 +0000545 return rc;
drh8e0a2f92002-02-23 23:45:45 +0000546}
danielk197793758c82005-01-21 08:13:14 +0000547#endif
drhc9b84a12002-06-20 11:36:48 +0000548
drh19e2d372005-08-29 23:00:03 +0000549#ifndef SQLITE_OMIT_TRACE
drhc9b84a12002-06-20 11:36:48 +0000550/*
drh18de4822003-01-16 16:28:53 +0000551** Register a trace function. The pArg from the previously registered trace
552** is returned.
553**
554** A NULL trace function means that no tracing is executes. A non-NULL
555** trace is a pointer to a function that is invoked at the start of each
drh19e2d372005-08-29 23:00:03 +0000556** SQL statement.
drh18de4822003-01-16 16:28:53 +0000557*/
drh9bb575f2004-09-06 17:24:11 +0000558void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
drh18de4822003-01-16 16:28:53 +0000559 void *pOld = db->pTraceArg;
560 db->xTrace = xTrace;
561 db->pTraceArg = pArg;
562 return pOld;
drh0d1a6432003-04-03 15:46:04 +0000563}
drh19e2d372005-08-29 23:00:03 +0000564/*
565** Register a profile function. The pArg from the previously registered
566** profile function is returned.
567**
568** A NULL profile function means that no profiling is executes. A non-NULL
569** profile is a pointer to a function that is invoked at the conclusion of
570** each SQL statement that is run.
571*/
572void *sqlite3_profile(
573 sqlite3 *db,
574 void (*xProfile)(void*,const char*,sqlite_uint64),
575 void *pArg
576){
577 void *pOld = db->pProfileArg;
578 db->xProfile = xProfile;
579 db->pProfileArg = pArg;
580 return pOld;
581}
582#endif /* SQLITE_OMIT_TRACE */
paulb0208cc2003-04-13 18:26:49 +0000583
drhaa940ea2004-01-15 02:44:03 +0000584/*** EXPERIMENTAL ***
585**
586** Register a function to be invoked when a transaction comments.
danielk197771fd80b2005-12-16 06:54:01 +0000587** If the invoked function returns non-zero, then the commit becomes a
drhaa940ea2004-01-15 02:44:03 +0000588** rollback.
589*/
danielk197724b03fd2004-05-10 10:34:34 +0000590void *sqlite3_commit_hook(
drh9bb575f2004-09-06 17:24:11 +0000591 sqlite3 *db, /* Attach the hook to this database */
drhaa940ea2004-01-15 02:44:03 +0000592 int (*xCallback)(void*), /* Function to invoke on each commit */
593 void *pArg /* Argument to the function */
594){
595 void *pOld = db->pCommitArg;
596 db->xCommitCallback = xCallback;
597 db->pCommitArg = pArg;
598 return pOld;
599}
600
danielk197794eb6a12005-12-15 15:22:08 +0000601/*
602** Register a callback to be invoked each time a row is updated,
603** inserted or deleted using this database connection.
604*/
danielk197771fd80b2005-12-16 06:54:01 +0000605void *sqlite3_update_hook(
danielk197794eb6a12005-12-15 15:22:08 +0000606 sqlite3 *db, /* Attach the hook to this database */
607 void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
608 void *pArg /* Argument to the function */
609){
danielk197771fd80b2005-12-16 06:54:01 +0000610 void *pRet = db->pUpdateArg;
danielk197794eb6a12005-12-15 15:22:08 +0000611 db->xUpdateCallback = xCallback;
612 db->pUpdateArg = pArg;
danielk197771fd80b2005-12-16 06:54:01 +0000613 return pRet;
danielk197794eb6a12005-12-15 15:22:08 +0000614}
615
danielk197771fd80b2005-12-16 06:54:01 +0000616/*
617** Register a callback to be invoked each time a transaction is rolled
618** back by this database connection.
619*/
620void *sqlite3_rollback_hook(
621 sqlite3 *db, /* Attach the hook to this database */
622 void (*xCallback)(void*), /* Callback function */
623 void *pArg /* Argument to the function */
624){
625 void *pRet = db->pRollbackArg;
626 db->xRollbackCallback = xCallback;
627 db->pRollbackArg = pArg;
628 return pRet;
629}
drhaa940ea2004-01-15 02:44:03 +0000630
paulb0208cc2003-04-13 18:26:49 +0000631/*
drh13bff812003-04-15 01:19:47 +0000632** This routine is called to create a connection to a database BTree
633** driver. If zFilename is the name of a file, then that file is
634** opened and used. If zFilename is the magic name ":memory:" then
635** the database is stored in memory (and is thus forgotten as soon as
636** the connection is closed.) If zFilename is NULL then the database
drh84bfda42005-07-15 13:05:21 +0000637** is a "virtual" database for transient use only and is deleted as
638** soon as the connection is closed.
drh90f5ecb2004-07-22 01:19:35 +0000639**
drh84bfda42005-07-15 13:05:21 +0000640** A virtual database can be either a disk file (that is automatically
641** deleted when the file is closed) or it an be held entirely in memory,
drh90f5ecb2004-07-22 01:19:35 +0000642** depending on the values of the TEMP_STORE compile-time macro and the
643** db->temp_store variable, according to the following chart:
644**
645** TEMP_STORE db->temp_store Location of temporary database
646** ---------- -------------- ------------------------------
647** 0 any file
648** 1 1 file
649** 1 2 memory
650** 1 0 file
651** 2 1 file
652** 2 2 memory
653** 2 0 memory
654** 3 any memory
paulb0208cc2003-04-13 18:26:49 +0000655*/
danielk19774adee202004-05-08 08:23:19 +0000656int sqlite3BtreeFactory(
drh9bb575f2004-09-06 17:24:11 +0000657 const sqlite3 *db, /* Main database when opening aux otherwise 0 */
paulb0208cc2003-04-13 18:26:49 +0000658 const char *zFilename, /* Name of the file containing the BTree database */
659 int omitJournal, /* if TRUE then do not journal this file */
660 int nCache, /* How many pages in the page cache */
danielk19774adee202004-05-08 08:23:19 +0000661 Btree **ppBtree /* Pointer to new Btree object written here */
662){
danielk19774adee202004-05-08 08:23:19 +0000663 int btree_flags = 0;
drh90f5ecb2004-07-22 01:19:35 +0000664 int rc;
danielk19774adee202004-05-08 08:23:19 +0000665
drheec983e2004-05-08 10:11:36 +0000666 assert( ppBtree != 0);
danielk19774adee202004-05-08 08:23:19 +0000667 if( omitJournal ){
668 btree_flags |= BTREE_OMIT_JOURNAL;
paulb0208cc2003-04-13 18:26:49 +0000669 }
drh7bec5052005-02-06 02:45:41 +0000670 if( db->flags & SQLITE_NoReadlock ){
671 btree_flags |= BTREE_NO_READLOCK;
672 }
drh90f5ecb2004-07-22 01:19:35 +0000673 if( zFilename==0 ){
drh90f5ecb2004-07-22 01:19:35 +0000674#if TEMP_STORE==0
drh22ac46d2004-08-14 18:34:54 +0000675 /* Do nothing */
drh90f5ecb2004-07-22 01:19:35 +0000676#endif
danielk197703aded42004-11-22 05:26:27 +0000677#ifndef SQLITE_OMIT_MEMORYDB
drh90f5ecb2004-07-22 01:19:35 +0000678#if TEMP_STORE==1
drh22ac46d2004-08-14 18:34:54 +0000679 if( db->temp_store==2 ) zFilename = ":memory:";
drh90f5ecb2004-07-22 01:19:35 +0000680#endif
681#if TEMP_STORE==2
drh22ac46d2004-08-14 18:34:54 +0000682 if( db->temp_store!=1 ) zFilename = ":memory:";
drh90f5ecb2004-07-22 01:19:35 +0000683#endif
684#if TEMP_STORE==3
drh22ac46d2004-08-14 18:34:54 +0000685 zFilename = ":memory:";
drh90f5ecb2004-07-22 01:19:35 +0000686#endif
danielk197703aded42004-11-22 05:26:27 +0000687#endif /* SQLITE_OMIT_MEMORYDB */
drh90f5ecb2004-07-22 01:19:35 +0000688 }
danielk19774adee202004-05-08 08:23:19 +0000689
danielk1977da184232006-01-05 11:34:32 +0000690 rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btree_flags);
drh90f5ecb2004-07-22 01:19:35 +0000691 if( rc==SQLITE_OK ){
692 sqlite3BtreeSetBusyHandler(*ppBtree, (void*)&db->busyHandler);
693 sqlite3BtreeSetCacheSize(*ppBtree, nCache);
694 }
695 return rc;
paulb0208cc2003-04-13 18:26:49 +0000696}
danielk19774adee202004-05-08 08:23:19 +0000697
danielk19774ad17132004-05-21 01:47:26 +0000698/*
699** Return UTF-8 encoded English language explanation of the most recent
700** error.
701*/
danielk19776622cce2004-05-20 11:00:52 +0000702const char *sqlite3_errmsg(sqlite3 *db){
drhc60d0442004-09-30 13:43:13 +0000703 const char *z;
danielk1977261919c2005-12-06 12:52:59 +0000704 if( sqlite3Tsd()->mallocFailed ){
danielk1977f20b21c2004-05-31 23:56:42 +0000705 return sqlite3ErrStr(SQLITE_NOMEM);
danielk19774ad17132004-05-21 01:47:26 +0000706 }
drhc60d0442004-09-30 13:43:13 +0000707 if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
danielk1977e35ee192004-06-26 09:50:11 +0000708 return sqlite3ErrStr(SQLITE_MISUSE);
709 }
drh2646da72005-12-09 20:02:05 +0000710 z = (char*)sqlite3_value_text(db->pErr);
drhc60d0442004-09-30 13:43:13 +0000711 if( z==0 ){
712 z = sqlite3ErrStr(db->errCode);
danielk19776622cce2004-05-20 11:00:52 +0000713 }
drhc60d0442004-09-30 13:43:13 +0000714 return z;
danielk19776622cce2004-05-20 11:00:52 +0000715}
716
drh6c626082004-11-14 21:56:29 +0000717#ifndef SQLITE_OMIT_UTF16
danielk19774ad17132004-05-21 01:47:26 +0000718/*
719** Return UTF-16 encoded English language explanation of the most recent
720** error.
721*/
danielk19776622cce2004-05-20 11:00:52 +0000722const void *sqlite3_errmsg16(sqlite3 *db){
danielk1977bfd6cce2004-06-18 04:24:54 +0000723 /* Because all the characters in the string are in the unicode
724 ** range 0x00-0xFF, if we pad the big-endian string with a
725 ** zero byte, we can obtain the little-endian string with
726 ** &big_endian[1].
727 */
drh57196282004-10-06 15:41:16 +0000728 static const char outOfMemBe[] = {
danielk1977bfd6cce2004-06-18 04:24:54 +0000729 0, 'o', 0, 'u', 0, 't', 0, ' ',
730 0, 'o', 0, 'f', 0, ' ',
731 0, 'm', 0, 'e', 0, 'm', 0, 'o', 0, 'r', 0, 'y', 0, 0, 0
732 };
drh57196282004-10-06 15:41:16 +0000733 static const char misuseBe [] = {
danielk1977e35ee192004-06-26 09:50:11 +0000734 0, 'l', 0, 'i', 0, 'b', 0, 'r', 0, 'a', 0, 'r', 0, 'y', 0, ' ',
735 0, 'r', 0, 'o', 0, 'u', 0, 't', 0, 'i', 0, 'n', 0, 'e', 0, ' ',
736 0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ',
737 0, 'o', 0, 'u', 0, 't', 0, ' ',
738 0, 'o', 0, 'f', 0, ' ',
739 0, 's', 0, 'e', 0, 'q', 0, 'u', 0, 'e', 0, 'n', 0, 'c', 0, 'e', 0, 0, 0
740 };
danielk19774ad17132004-05-21 01:47:26 +0000741
drhc60d0442004-09-30 13:43:13 +0000742 const void *z;
danielk1977261919c2005-12-06 12:52:59 +0000743 if( sqlite3Tsd()->mallocFailed ){
drhc60d0442004-09-30 13:43:13 +0000744 return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
745 }
746 if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){
747 return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
748 }
749 z = sqlite3_value_text16(db->pErr);
750 if( z==0 ){
751 sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
752 SQLITE_UTF8, SQLITE_STATIC);
753 z = sqlite3_value_text16(db->pErr);
754 }
755 return z;
danielk19776622cce2004-05-20 11:00:52 +0000756}
drh6c626082004-11-14 21:56:29 +0000757#endif /* SQLITE_OMIT_UTF16 */
danielk19776622cce2004-05-20 11:00:52 +0000758
drhc60d0442004-09-30 13:43:13 +0000759/*
danielk19777ddad962005-12-12 06:53:03 +0000760** Return the most recent error code generated by an SQLite routine. If NULL is
761** passed to this function, we assume a malloc() failed during sqlite3_open().
drhc60d0442004-09-30 13:43:13 +0000762*/
danielk19776622cce2004-05-20 11:00:52 +0000763int sqlite3_errcode(sqlite3 *db){
danielk19777ddad962005-12-12 06:53:03 +0000764 if( !db || sqlite3Tsd()->mallocFailed ){
drhc60d0442004-09-30 13:43:13 +0000765 return SQLITE_NOMEM;
766 }
767 if( sqlite3SafetyCheck(db) ){
768 return SQLITE_MISUSE;
769 }
danielk19776622cce2004-05-20 11:00:52 +0000770 return db->errCode;
771}
772
773/*
danielk19774ad17132004-05-21 01:47:26 +0000774** This routine does the work of opening a database on behalf of
775** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
drhee570fa2005-04-28 12:06:05 +0000776** is UTF-8 encoded.
danielk19774ad17132004-05-21 01:47:26 +0000777*/
778static int openDatabase(
779 const char *zFilename, /* Database filename UTF-8 encoded */
danielk19778e227872004-06-07 07:52:17 +0000780 sqlite3 **ppDb /* OUT: Returned database handle */
danielk19774ad17132004-05-21 01:47:26 +0000781){
782 sqlite3 *db;
danielk1977da184232006-01-05 11:34:32 +0000783 int rc;
drhd64fe2f2005-08-28 17:00:23 +0000784 CollSeq *pColl;
danielk19774ad17132004-05-21 01:47:26 +0000785
danielk19777ddad962005-12-12 06:53:03 +0000786 assert( !sqlite3Tsd()->mallocFailed );
787
danielk19774ad17132004-05-21 01:47:26 +0000788 /* Allocate the sqlite data structure */
drh9bb575f2004-09-06 17:24:11 +0000789 db = sqliteMalloc( sizeof(sqlite3) );
danielk19774ad17132004-05-21 01:47:26 +0000790 if( db==0 ) goto opendb_out;
danielk19774ad17132004-05-21 01:47:26 +0000791 db->priorNewRowid = 0;
792 db->magic = SQLITE_MAGIC_BUSY;
793 db->nDb = 2;
794 db->aDb = db->aDbStatic;
danielk1977dc8453f2004-06-12 00:42:34 +0000795 db->enc = SQLITE_UTF8;
danielk19771d850a72004-05-31 08:26:49 +0000796 db->autoCommit = 1;
drh47a6db22005-01-18 16:02:40 +0000797 db->flags |= SQLITE_ShortColNames;
drhf9b596e2004-05-26 16:54:42 +0000798 sqlite3HashInit(&db->aFunc, SQLITE_HASH_STRING, 0);
danielk19774ad17132004-05-21 01:47:26 +0000799 sqlite3HashInit(&db->aCollSeq, SQLITE_HASH_STRING, 0);
danielk1977da184232006-01-05 11:34:32 +0000800
801#if 0
danielk19774ad17132004-05-21 01:47:26 +0000802 for(i=0; i<db->nDb; i++){
803 sqlite3HashInit(&db->aDb[i].tblHash, SQLITE_HASH_STRING, 0);
804 sqlite3HashInit(&db->aDb[i].idxHash, SQLITE_HASH_STRING, 0);
805 sqlite3HashInit(&db->aDb[i].trigHash, SQLITE_HASH_STRING, 0);
806 sqlite3HashInit(&db->aDb[i].aFKey, SQLITE_HASH_STRING, 1);
807 }
danielk1977da184232006-01-05 11:34:32 +0000808#endif
danielk19774ad17132004-05-21 01:47:26 +0000809
danielk19770202b292004-06-09 09:55:16 +0000810 /* Add the default collation sequence BINARY. BINARY works for both UTF-8
811 ** and UTF-16, so add a version for each to avoid any unnecessary
812 ** conversions. The only error that can occur here is a malloc() failure.
813 */
danielk19772c336542005-01-13 02:14:23 +0000814 if( sqlite3_create_collation(db, "BINARY", SQLITE_UTF8, 0,binCollFunc) ||
815 sqlite3_create_collation(db, "BINARY", SQLITE_UTF16, 0,binCollFunc) ||
danielk19777ddad962005-12-12 06:53:03 +0000816 (db->pDfltColl = sqlite3FindCollSeq(db, db->enc, "BINARY", 6, 0))==0
817 ){
818 /* sqlite3_create_collation() is an external API. So the mallocFailed flag
819 ** will have been cleared before returning. So set it explicitly here.
820 */
821 sqlite3Tsd()->mallocFailed = 1;
danielk19770202b292004-06-09 09:55:16 +0000822 db->magic = SQLITE_MAGIC_CLOSED;
823 goto opendb_out;
824 }
825
826 /* Also add a UTF-8 case-insensitive collation sequence. */
danielk1977466be562004-06-10 02:16:01 +0000827 sqlite3_create_collation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc);
danielk19770202b292004-06-09 09:55:16 +0000828
drhd64fe2f2005-08-28 17:00:23 +0000829 /* Set flags on the built-in collating sequences */
830 db->pDfltColl->type = SQLITE_COLL_BINARY;
831 pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 6, 0);
832 if( pColl ){
833 pColl->type = SQLITE_COLL_NOCASE;
834 }
835
danielk19774ad17132004-05-21 01:47:26 +0000836 /* Open the backend database driver */
danielk19774ad17132004-05-21 01:47:26 +0000837 rc = sqlite3BtreeFactory(db, zFilename, 0, MAX_PAGES, &db->aDb[0].pBt);
838 if( rc!=SQLITE_OK ){
danielk19774ad17132004-05-21 01:47:26 +0000839 sqlite3Error(db, rc, 0);
840 db->magic = SQLITE_MAGIC_CLOSED;
841 goto opendb_out;
842 }
danielk1977da184232006-01-05 11:34:32 +0000843 db->aDb[0].pSchema = sqlite3SchemaGet(db->aDb[0].pBt);
844 db->aDb[1].pSchema = sqlite3SchemaGet(0);
danielk19774ad17132004-05-21 01:47:26 +0000845
danielk197753c0f742005-03-29 03:10:59 +0000846 /* The default safety_level for the main database is 'full'; for the temp
847 ** database it is 'NONE'. This matches the pager layer defaults.
848 */
849 db->aDb[0].zName = "main";
danielk197791cf71b2004-06-26 06:37:06 +0000850 db->aDb[0].safety_level = 3;
danielk197753c0f742005-03-29 03:10:59 +0000851#ifndef SQLITE_OMIT_TEMPDB
852 db->aDb[1].zName = "temp";
danielk197791cf71b2004-06-26 06:37:06 +0000853 db->aDb[1].safety_level = 1;
danielk197753c0f742005-03-29 03:10:59 +0000854#endif
855
danielk19778e227872004-06-07 07:52:17 +0000856 /* Register all built-in functions, but do not attempt to read the
857 ** database schema yet. This is delayed until the first time the database
858 ** is accessed.
859 */
danielk19774ad17132004-05-21 01:47:26 +0000860 sqlite3RegisterBuiltinFunctions(db);
danielk19774397de52005-01-12 12:44:03 +0000861 sqlite3Error(db, SQLITE_OK, 0);
862 db->magic = SQLITE_MAGIC_OPEN;
danielk19774ad17132004-05-21 01:47:26 +0000863
864opendb_out:
danielk19777ddad962005-12-12 06:53:03 +0000865 if( SQLITE_NOMEM==(rc = sqlite3_errcode(db)) ){
866 sqlite3_close(db);
867 db = 0;
danielk197713073932004-06-30 11:54:06 +0000868 }
danielk19774ad17132004-05-21 01:47:26 +0000869 *ppDb = db;
danielk19777ddad962005-12-12 06:53:03 +0000870 sqlite3MallocClearFailed();
871 return rc;
danielk19774ad17132004-05-21 01:47:26 +0000872}
873
874/*
875** Open a new database handle.
876*/
danielk197780290862004-05-22 09:21:21 +0000877int sqlite3_open(
danielk19774ad17132004-05-21 01:47:26 +0000878 const char *zFilename,
danielk19774f057f92004-06-08 00:02:33 +0000879 sqlite3 **ppDb
danielk19774ad17132004-05-21 01:47:26 +0000880){
danielk19778e227872004-06-07 07:52:17 +0000881 return openDatabase(zFilename, ppDb);
danielk197783ab5a82004-05-21 11:39:05 +0000882}
883
drh6c626082004-11-14 21:56:29 +0000884#ifndef SQLITE_OMIT_UTF16
danielk19774ad17132004-05-21 01:47:26 +0000885/*
886** Open a new database handle.
887*/
888int sqlite3_open16(
889 const void *zFilename,
danielk19774f057f92004-06-08 00:02:33 +0000890 sqlite3 **ppDb
danielk19774ad17132004-05-21 01:47:26 +0000891){
danielk1977bfd6cce2004-06-18 04:24:54 +0000892 char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
893 int rc = SQLITE_NOMEM;
894 sqlite3_value *pVal;
danielk19774ad17132004-05-21 01:47:26 +0000895
danielk19777ddad962005-12-12 06:53:03 +0000896 assert( zFilename );
danielk19774ad17132004-05-21 01:47:26 +0000897 assert( ppDb );
danielk1977bfd6cce2004-06-18 04:24:54 +0000898 *ppDb = 0;
899 pVal = sqlite3ValueNew();
900 sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
901 zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
902 if( zFilename8 ){
903 rc = openDatabase(zFilename8, ppDb);
904 if( rc==SQLITE_OK && *ppDb ){
drh7dd90a42005-12-06 13:19:07 +0000905 rc = sqlite3_exec(*ppDb, "PRAGMA encoding = 'UTF-16'", 0, 0, 0);
danielk1977bfd6cce2004-06-18 04:24:54 +0000906 }
danielk19777ddad962005-12-12 06:53:03 +0000907 }else{
908 assert( sqlite3Tsd()->mallocFailed );
909 sqlite3MallocClearFailed();
danielk19774ad17132004-05-21 01:47:26 +0000910 }
danielk19777ddad962005-12-12 06:53:03 +0000911 sqlite3ValueFree(pVal);
danielk19778e227872004-06-07 07:52:17 +0000912
danielk19774ad17132004-05-21 01:47:26 +0000913 return rc;
914}
drh6c626082004-11-14 21:56:29 +0000915#endif /* SQLITE_OMIT_UTF16 */
danielk19774ad17132004-05-21 01:47:26 +0000916
danielk1977106bb232004-05-21 10:08:53 +0000917/*
918** The following routine destroys a virtual machine that is created by
919** the sqlite3_compile() routine. The integer returned is an SQLITE_
920** success/failure code that describes the result of executing the virtual
921** machine.
922**
923** This routine sets the error code and string returned by
924** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
925*/
danielk1977fc57d7b2004-05-26 02:04:57 +0000926int sqlite3_finalize(sqlite3_stmt *pStmt){
drh1bcdb0c2004-08-28 14:49:46 +0000927 int rc;
928 if( pStmt==0 ){
929 rc = SQLITE_OK;
930 }else{
931 rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
932 }
933 return rc;
danielk1977106bb232004-05-21 10:08:53 +0000934}
935
936/*
937** Terminate the current execution of an SQL statement and reset it
938** back to its starting state so that it can be reused. A success code from
939** the prior execution is returned.
940**
941** This routine sets the error code and string returned by
942** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
943*/
danielk1977fc57d7b2004-05-26 02:04:57 +0000944int sqlite3_reset(sqlite3_stmt *pStmt){
drh1bcdb0c2004-08-28 14:49:46 +0000945 int rc;
946 if( pStmt==0 ){
947 rc = SQLITE_OK;
948 }else{
949 rc = sqlite3VdbeReset((Vdbe*)pStmt);
drh13449892005-09-07 21:22:45 +0000950 sqlite3VdbeMakeReady((Vdbe*)pStmt, -1, 0, 0, 0);
drh1bcdb0c2004-08-28 14:49:46 +0000951 }
danielk1977106bb232004-05-21 10:08:53 +0000952 return rc;
953}
danielk19770202b292004-06-09 09:55:16 +0000954
danielk1977d8123362004-06-12 09:25:12 +0000955/*
956** Register a new collation sequence with the database handle db.
957*/
danielk19770202b292004-06-09 09:55:16 +0000958int sqlite3_create_collation(
959 sqlite3* db,
960 const char *zName,
danielk1977466be562004-06-10 02:16:01 +0000961 int enc,
danielk19770202b292004-06-09 09:55:16 +0000962 void* pCtx,
963 int(*xCompare)(void*,int,const void*,int,const void*)
964){
965 CollSeq *pColl;
966 int rc = SQLITE_OK;
danielk1977d8123362004-06-12 09:25:12 +0000967
drhc60d0442004-09-30 13:43:13 +0000968 if( sqlite3SafetyCheck(db) ){
969 return SQLITE_MISUSE;
970 }
971
danielk1977d8123362004-06-12 09:25:12 +0000972 /* If SQLITE_UTF16 is specified as the encoding type, transform this
973 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
974 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
975 */
976 if( enc==SQLITE_UTF16 ){
977 enc = SQLITE_UTF16NATIVE;
978 }
979
danielk1977466be562004-06-10 02:16:01 +0000980 if( enc!=SQLITE_UTF8 && enc!=SQLITE_UTF16LE && enc!=SQLITE_UTF16BE ){
981 sqlite3Error(db, SQLITE_ERROR,
982 "Param 3 to sqlite3_create_collation() must be one of "
danielk1977d8123362004-06-12 09:25:12 +0000983 "SQLITE_UTF8, SQLITE_UTF16, SQLITE_UTF16LE or SQLITE_UTF16BE"
danielk1977466be562004-06-10 02:16:01 +0000984 );
985 return SQLITE_ERROR;
986 }
danielk1977a21c6b62005-01-24 10:25:59 +0000987
danielk19779636c4e2005-01-25 04:27:54 +0000988 /* Check if this call is removing or replacing an existing collation
989 ** sequence. If so, and there are active VMs, return busy. If there
990 ** are no active VMs, invalidate any pre-compiled statements.
danielk1977a21c6b62005-01-24 10:25:59 +0000991 */
danielk19779636c4e2005-01-25 04:27:54 +0000992 pColl = sqlite3FindCollSeq(db, (u8)enc, zName, strlen(zName), 0);
993 if( pColl && pColl->xCmp ){
994 if( db->activeVdbeCnt ){
995 sqlite3Error(db, SQLITE_BUSY,
996 "Unable to delete/modify collation sequence due to active statements");
997 return SQLITE_BUSY;
998 }
danielk1977a21c6b62005-01-24 10:25:59 +0000999 sqlite3ExpirePreparedStatements(db);
1000 }
1001
danielk1977466be562004-06-10 02:16:01 +00001002 pColl = sqlite3FindCollSeq(db, (u8)enc, zName, strlen(zName), 1);
danielk19770202b292004-06-09 09:55:16 +00001003 if( 0==pColl ){
drhd64fe2f2005-08-28 17:00:23 +00001004 rc = SQLITE_NOMEM;
danielk19770202b292004-06-09 09:55:16 +00001005 }else{
1006 pColl->xCmp = xCompare;
1007 pColl->pUser = pCtx;
danielk1977312d6b32004-06-29 13:18:23 +00001008 pColl->enc = enc;
danielk19770202b292004-06-09 09:55:16 +00001009 }
1010 sqlite3Error(db, rc, 0);
danielk1977466be562004-06-10 02:16:01 +00001011 return rc;
danielk19770202b292004-06-09 09:55:16 +00001012}
1013
drh6c626082004-11-14 21:56:29 +00001014#ifndef SQLITE_OMIT_UTF16
danielk1977d8123362004-06-12 09:25:12 +00001015/*
1016** Register a new collation sequence with the database handle db.
1017*/
danielk19770202b292004-06-09 09:55:16 +00001018int sqlite3_create_collation16(
1019 sqlite3* db,
1020 const char *zName,
danielk1977466be562004-06-10 02:16:01 +00001021 int enc,
danielk19770202b292004-06-09 09:55:16 +00001022 void* pCtx,
1023 int(*xCompare)(void*,int,const void*,int,const void*)
1024){
drhaf9a7c22005-12-15 03:04:10 +00001025 char *zName8;
1026 int rc;
drhc60d0442004-09-30 13:43:13 +00001027 if( sqlite3SafetyCheck(db) ){
1028 return SQLITE_MISUSE;
1029 }
drhaf9a7c22005-12-15 03:04:10 +00001030 zName8 = sqlite3utf16to8(zName, -1);
1031 rc = sqlite3_create_collation(db, zName8, enc, pCtx, xCompare);
1032 sqliteFree(zName8);
1033 return rc;
danielk19770202b292004-06-09 09:55:16 +00001034}
drh6c626082004-11-14 21:56:29 +00001035#endif /* SQLITE_OMIT_UTF16 */
danielk19777cedc8d2004-06-10 10:50:08 +00001036
danielk1977d8123362004-06-12 09:25:12 +00001037/*
1038** Register a collation sequence factory callback with the database handle
1039** db. Replace any previously installed collation sequence factory.
1040*/
danielk19777cedc8d2004-06-10 10:50:08 +00001041int sqlite3_collation_needed(
1042 sqlite3 *db,
1043 void *pCollNeededArg,
1044 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
1045){
drhc60d0442004-09-30 13:43:13 +00001046 if( sqlite3SafetyCheck(db) ){
1047 return SQLITE_MISUSE;
1048 }
danielk19777cedc8d2004-06-10 10:50:08 +00001049 db->xCollNeeded = xCollNeeded;
1050 db->xCollNeeded16 = 0;
1051 db->pCollNeededArg = pCollNeededArg;
1052 return SQLITE_OK;
1053}
danielk1977d8123362004-06-12 09:25:12 +00001054
drh6c626082004-11-14 21:56:29 +00001055#ifndef SQLITE_OMIT_UTF16
danielk1977d8123362004-06-12 09:25:12 +00001056/*
1057** Register a collation sequence factory callback with the database handle
1058** db. Replace any previously installed collation sequence factory.
1059*/
danielk19777cedc8d2004-06-10 10:50:08 +00001060int sqlite3_collation_needed16(
1061 sqlite3 *db,
1062 void *pCollNeededArg,
1063 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
1064){
drhc60d0442004-09-30 13:43:13 +00001065 if( sqlite3SafetyCheck(db) ){
1066 return SQLITE_MISUSE;
1067 }
danielk19777cedc8d2004-06-10 10:50:08 +00001068 db->xCollNeeded = 0;
1069 db->xCollNeeded16 = xCollNeeded16;
1070 db->pCollNeededArg = pCollNeededArg;
1071 return SQLITE_OK;
1072}
drh6c626082004-11-14 21:56:29 +00001073#endif /* SQLITE_OMIT_UTF16 */
danielk19776b456a22005-03-21 04:04:02 +00001074
1075#ifndef SQLITE_OMIT_GLOBALRECOVER
1076/*
danielk19777ddad962005-12-12 06:53:03 +00001077** This function is now an anachronism. It used to be used to recover from a
1078** malloc() failure, but SQLite now does this automatically.
danielk19776b456a22005-03-21 04:04:02 +00001079*/
1080int sqlite3_global_recover(){
danielk1977261919c2005-12-06 12:52:59 +00001081 return SQLITE_OK;
danielk19776b456a22005-03-21 04:04:02 +00001082}
1083#endif
drh3e1d8e62005-05-26 16:23:34 +00001084
1085/*
1086** Test to see whether or not the database connection is in autocommit
1087** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
1088** by default. Autocommit is disabled by a BEGIN statement and reenabled
1089** by the next COMMIT or ROLLBACK.
1090**
1091******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
1092*/
1093int sqlite3_get_autocommit(sqlite3 *db){
1094 return db->autoCommit;
1095}
drh49285702005-09-17 15:20:26 +00001096
1097#ifdef SQLITE_DEBUG
1098/*
1099** The following routine is subtituted for constant SQLITE_CORRUPT in
1100** debugging builds. This provides a way to set a breakpoint for when
1101** corruption is first detected.
1102*/
1103int sqlite3Corrupt(void){
1104 return SQLITE_CORRUPT;
1105}
1106#endif