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