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