/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 066356cdc7f7fbef389c1849b1ccbeec96a5b348:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 69 6e 2e 63  *.** $Id: main.c
0270: 2c 76 20 31 2e 33 31 30 20 32 30 30 35 2f 31 32  ,v 1.310 2005/12
0280: 2f 31 35 20 31 35 3a 32 32 3a 30 39 20 64 61 6e  /15 15:22:09 dan
0290: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
02a0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
02b0: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
02c0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
02d0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
02e0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
02f0: 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20   constant value 
0300: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 53  is used by the S
0310: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
0320: 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 4c 49  and.** SQLITE_LI
0330: 54 54 4c 45 45 4e 44 49 41 4e 20 6d 61 63 72 6f  TTLEENDIAN macro
0340: 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 69 6e 74 20  s..*/.const int 
0350: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
0360: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
0370: 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56  OMIT_GLOBALRECOV
0380: 45 52 0a 2f 2a 0a 2a 2a 20 4c 69 6e 6b 65 64 20  ER./*.** Linked 
0390: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 6f 70 65 6e  list of all open
03a0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
03b0: 73 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  s. This is used 
03c0: 62 79 20 74 68 65 20 0a 2a 2a 20 73 71 6c 69 74  by the .** sqlit
03d0: 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65  e3_global_recove
03e0: 72 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 45 6e  r() function. En
03f0: 74 72 69 65 73 20 61 72 65 20 61 64 64 65 64 20  tries are added 
0400: 74 6f 20 74 68 65 20 6c 69 73 74 0a 2a 2a 20 62  to the list.** b
0410: 79 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 29  y openDatabase()
0420: 20 61 6e 64 20 72 65 6d 6f 76 65 64 20 62 79 20   and removed by 
0430: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
0440: 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74  .*/.static sqlit
0450: 65 33 20 2a 70 44 62 4c 69 73 74 20 3d 20 30 3b  e3 *pDbList = 0;
0460: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0470: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
0480: 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e  e library.*/.con
0490: 73 74 20 63 68 61 72 20 72 63 73 69 64 33 5b 5d  st char rcsid3[]
04a0: 20 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64 3a   = "@(#) \044Id:
04b0: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
04c0: 22 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  " SQLITE_VERSION
04d0: 20 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68 61   " $";.const cha
04e0: 72 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f  r sqlite3_versio
04f0: 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52  n[] = SQLITE_VER
0500: 53 49 4f 4e 3b 0a 63 6f 6e 73 74 20 63 68 61 72  SION;.const char
0510: 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72   *sqlite3_libver
0520: 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65 74 75  sion(void){ retu
0530: 72 6e 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69  rn sqlite3_versi
0540: 6f 6e 3b 20 7d 0a 69 6e 74 20 73 71 6c 69 74 65  on; }.int sqlite
0550: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  3_libversion_num
0560: 62 65 72 28 76 6f 69 64 29 7b 20 72 65 74 75 72  ber(void){ retur
0570: 6e 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  n SQLITE_VERSION
0580: 5f 4e 55 4d 42 45 52 3b 20 7d 0a 0a 2f 2a 0a 2a  _NUMBER; }../*.*
0590: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65  * This is the de
05a0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
05b0: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
05c0: 42 49 4e 41 52 59 22 20 77 68 69 63 68 20 69 73  BINARY" which is
05d0: 20 61 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c   always.** avail
05e0: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  able..*/.static 
05f0: 69 6e 74 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 28  int binCollFunc(
0600: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
0610: 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63  ,.  int nKey1, c
0620: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31  onst void *pKey1
0630: 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63  ,.  int nKey2, c
0640: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32  onst void *pKey2
0650: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b  .){.  int rc, n;
0660: 0a 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65  .  n = nKey1<nKe
0670: 79 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65  y2 ? nKey1 : nKe
0680: 79 32 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d  y2;.  rc = memcm
0690: 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20  p(pKey1, pKey2, 
06a0: 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20  n);.  if( rc==0 
06b0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79  ){.    rc = nKey
06c0: 31 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20  1 - nKey2;.  }. 
06d0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
06e0: 2a 0a 2a 2a 20 41 6e 6f 74 68 65 72 20 62 75 69  *.** Another bui
06f0: 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20  lt-in collating 
0700: 73 65 71 75 65 6e 63 65 3a 20 4e 4f 43 41 53 45  sequence: NOCASE
0710: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 6f  . .**.** This co
0720: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
0730: 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20   is intended to 
0740: 62 65 20 75 73 65 64 20 66 6f 72 20 22 63 61 73  be used for "cas
0750: 65 20 69 6e 64 65 70 65 6e 64 61 6e 74 0a 2a 2a  e independant.**
0760: 20 63 6f 6d 70 61 72 69 73 6f 6e 22 2e 20 53 51   comparison". SQ
0770: 4c 69 74 65 27 73 20 6b 6e 6f 77 6c 65 64 67 65  Lite's knowledge
0780: 20 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f   of upper and lo
0790: 77 65 72 20 63 61 73 65 20 65 71 75 69 76 61 6c  wer case equival
07a0: 65 6e 74 73 0a 2a 2a 20 65 78 74 65 6e 64 73 20  ents.** extends 
07b0: 6f 6e 6c 79 20 74 6f 20 74 68 65 20 32 36 20 63  only to the 26 c
07c0: 68 61 72 61 63 74 65 72 73 20 75 73 65 64 20 69  haracters used i
07d0: 6e 20 74 68 65 20 45 6e 67 6c 69 73 68 20 6c 61  n the English la
07e0: 6e 67 75 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 41 74  nguage..**.** At
07f0: 20 74 68 65 20 6d 6f 6d 65 6e 74 20 74 68 65 72   the moment ther
0800: 65 20 69 73 20 6f 6e 6c 79 20 61 20 55 54 46 2d  e is only a UTF-
0810: 38 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  8 implementation
0820: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
0830: 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46  nocaseCollatingF
0840: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  unc(.  void *Not
0850: 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Used,.  int nKey
0860: 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  1, const void *p
0870: 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Key1,.  int nKey
0880: 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  2, const void *p
0890: 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 20  Key2.){.  int r 
08a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  = sqlite3StrNICm
08b0: 70 28 0a 20 20 20 20 20 20 28 63 6f 6e 73 74 20  p(.      (const 
08c0: 63 68 61 72 20 2a 29 70 4b 65 79 31 2c 20 28 63  char *)pKey1, (c
08d0: 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65 79  onst char *)pKey
08e0: 32 2c 20 28 6e 4b 65 79 31 3c 6e 4b 65 79 32 29  2, (nKey1<nKey2)
08f0: 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32 29 3b 0a 20  ?nKey1:nKey2);. 
0900: 20 69 66 28 20 30 3d 3d 72 20 29 7b 0a 20 20 20   if( 0==r ){.   
0910: 20 72 20 3d 20 6e 4b 65 79 31 2d 6e 4b 65 79 32   r = nKey1-nKey2
0920: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
0930: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
0940: 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20 74  n the ROWID of t
0950: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  he most recent i
0960: 6e 73 65 72 74 0a 2a 2f 0a 73 71 6c 69 74 65 5f  nsert.*/.sqlite_
0970: 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 6c 61  int64 sqlite3_la
0980: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
0990: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
09a0: 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73 74 52  return db->lastR
09b0: 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  owid;.}../*.** R
09c0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
09d0: 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
09e0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63  he most recent c
09f0: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  all to sqlite3_e
0a00: 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  xec()..*/.int sq
0a10: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 73 71  lite3_changes(sq
0a20: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65  lite3 *db){.  re
0a30: 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67 65  turn db->nChange
0a40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
0a50: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
0a60: 63 68 61 6e 67 65 73 20 73 69 6e 63 65 20 74 68  changes since th
0a70: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
0a80: 65 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 2a 2f  e was opened..*/
0a90: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 6f 74  .int sqlite3_tot
0aa0: 61 6c 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74  al_changes(sqlit
0ab0: 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72  e3 *db){.  retur
0ac0: 6e 20 64 62 2d 3e 6e 54 6f 74 61 6c 43 68 61 6e  n db->nTotalChan
0ad0: 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f  ge;.}../*.** Clo
0ae0: 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 53  se an existing S
0af0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a 2a  QLite database.*
0b00: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c  /.int sqlite3_cl
0b10: 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ose(sqlite3 *db)
0b20: 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b  {.  HashElem *i;
0b30: 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 69 66 28  .  int j;..  if(
0b40: 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74 75   !db ){.    retu
0b50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
0b60: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
0b70: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29  afetyCheck(db) )
0b80: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
0b90: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
0ba0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 53  .#ifdef SQLITE_S
0bb0: 53 45 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  SE.  sqlite3_fin
0bc0: 61 6c 69 7a 65 28 64 62 2d 3e 70 46 65 74 63 68  alize(db->pFetch
0bd0: 29 3b 0a 23 65 6e 64 69 66 20 0a 0a 20 20 2f 2a  );.#endif ..  /*
0be0: 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
0bf0: 79 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d  y outstanding VM
0c00: 73 2c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  s, return SQLITE
0c10: 5f 42 55 53 59 2e 20 2a 2f 0a 20 20 69 66 28 20  _BUSY. */.  if( 
0c20: 64 62 2d 3e 70 56 64 62 65 20 29 7b 0a 20 20 20  db->pVdbe ){.   
0c30: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
0c40: 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a  , SQLITE_BUSY, .
0c50: 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20          "Unable 
0c60: 74 6f 20 63 6c 6f 73 65 20 64 75 65 20 74 6f 20  to close due to 
0c70: 75 6e 66 69 6e 61 6c 69 73 65 64 20 73 74 61 74  unfinalised stat
0c80: 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 72 65  ements");.    re
0c90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
0ca0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
0cb0: 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68  !sqlite3SafetyCh
0cc0: 65 63 6b 28 64 62 29 20 29 3b 0a 0a 20 20 2f 2a  eck(db) );..  /*
0cd0: 20 46 49 58 20 4d 45 3a 20 64 62 2d 3e 6d 61 67   FIX ME: db->mag
0ce0: 69 63 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f  ic may be set to
0cf0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
0d00: 4f 53 45 44 20 69 66 20 74 68 65 20 64 61 74 61  OSED if the data
0d10: 62 61 73 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74  base.  ** cannot
0d20: 20 62 65 20 6f 70 65 6e 65 64 20 66 6f 72 20 73   be opened for s
0d30: 6f 6d 65 20 72 65 61 73 6f 6e 2e 20 53 6f 20 74  ome reason. So t
0d40: 68 69 73 20 72 6f 75 74 69 6e 65 20 6e 65 65 64  his routine need
0d50: 73 20 74 6f 20 72 75 6e 20 69 6e 0a 20 20 2a 2a  s to run in.  **
0d60: 20 74 68 61 74 20 63 61 73 65 2e 20 42 75 74 20   that case. But 
0d70: 6d 61 79 62 65 20 74 68 65 72 65 20 73 68 6f 75  maybe there shou
0d80: 6c 64 20 62 65 20 61 6e 20 65 78 74 72 61 20 6d  ld be an extra m
0d90: 61 67 69 63 20 76 61 6c 75 65 20 66 6f 72 20 74  agic value for t
0da0: 68 65 0a 20 20 2a 2a 20 22 66 61 69 6c 65 64 20  he.  ** "failed 
0db0: 74 6f 20 6f 70 65 6e 22 20 73 74 61 74 65 2e 0a  to open" state..
0dc0: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d    */.  if( db->m
0dd0: 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47  agic!=SQLITE_MAG
0de0: 49 43 5f 43 4c 4f 53 45 44 20 26 26 20 73 71 6c  IC_CLOSED && sql
0df0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
0e00: 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74   ){.    /* print
0e10: 66 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45  f("DID NOT CLOSE
0e20: 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64  \n"); fflush(std
0e30: 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74  out); */.    ret
0e40: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
0e50: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 73 71 6c 69  ;.  }..  /* sqli
0e60: 74 65 33 5f 63 6c 6f 73 65 28 29 20 6d 61 79 20  te3_close() may 
0e70: 6e 6f 74 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74  not invoke sqlit
0e80: 65 4d 61 6c 6c 6f 63 28 29 2e 20 2a 2f 0a 20 20  eMalloc(). */.  
0e90: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 44 69 73  sqlite3MallocDis
0ea0: 61 6c 6c 6f 77 28 29 3b 0a 0a 20 20 66 6f 72 28  allow();..  for(
0eb0: 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20  j=0; j<db->nDb; 
0ec0: 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74  j++){.    struct
0ed0: 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e   Db *pDb = &db->
0ee0: 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20  aDb[j];.    if( 
0ef0: 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20  pDb->pBt ){.    
0f00: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
0f10: 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ose(pDb->pBt);. 
0f20: 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20       pDb->pBt = 
0f30: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  0;.    }.  }.  s
0f40: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
0f50: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
0f60: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
0f70: 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73 73 65  nDb<=2 );.  asse
0f80: 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64 62 2d  rt( db->aDb==db-
0f90: 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a 20 20  >aDbStatic );.  
0fa0: 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68  for(i=sqliteHash
0fb0: 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75 6e 63  First(&db->aFunc
0fc0: 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61  ); i; i=sqliteHa
0fd0: 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20  shNext(i)){.    
0fe0: 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 2c 20  FuncDef *pFunc, 
0ff0: 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66 6f 72 28  *pNext;.    for(
1000: 70 46 75 6e 63 20 3d 20 28 46 75 6e 63 44 65 66  pFunc = (FuncDef
1010: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
1020: 28 69 29 3b 20 70 46 75 6e 63 3b 20 70 46 75 6e  (i); pFunc; pFun
1030: 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  c=pNext){.      
1040: 70 4e 65 78 74 20 3d 20 70 46 75 6e 63 2d 3e 70  pNext = pFunc->p
1050: 4e 65 78 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  Next;.      sqli
1060: 74 65 46 72 65 65 28 70 46 75 6e 63 29 3b 0a 20  teFree(pFunc);. 
1070: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 28     }.  }..  for(
1080: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
1090: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
10a0: 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73  ; i; i=sqliteHas
10b0: 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 43  hNext(i)){.    C
10c0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
10d0: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
10e0: 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20  eHashData(i);.  
10f0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 43 6f    sqliteFree(pCo
1100: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ll);.  }.  sqlit
1110: 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d  e3HashClear(&db-
1120: 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a 0a 20 20 73  >aCollSeq);..  s
1130: 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28  qlite3HashClear(
1140: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73  &db->aFunc);.  s
1150: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
1160: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f  SQLITE_OK, 0); /
1170: 2a 20 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e  * Deallocates an
1180: 79 20 63 61 63 68 65 64 20 65 72 72 6f 72 20 73  y cached error s
1190: 74 72 69 6e 67 73 2e 20 2a 2f 0a 20 20 69 66 28  trings. */.  if(
11a0: 20 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20 20 20   db->pErr ){.   
11b0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
11c0: 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d  e(db->pErr);.  }
11d0: 0a 0a 23 69 66 20 30 20 0a 23 69 66 6e 64 65 66  ..#if 0 .#ifndef
11e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
11f0: 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 7b 0a 20  BALRECOVER.  {. 
1200: 20 20 20 73 71 6c 69 74 65 33 20 2a 70 50 72 65     sqlite3 *pPre
1210: 76 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73  v;.    sqlite3Os
1220: 2e 78 45 6e 74 65 72 4d 75 74 65 78 28 29 3b 0a  .xEnterMutex();.
1230: 20 20 20 20 70 50 72 65 76 20 3d 20 70 44 62 4c      pPrev = pDbL
1240: 69 73 74 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  ist;.    while( 
1250: 70 50 72 65 76 20 26 26 20 70 50 72 65 76 2d 3e  pPrev && pPrev->
1260: 70 4e 65 78 74 21 3d 64 62 20 29 7b 0a 20 20 20  pNext!=db ){.   
1270: 20 20 20 70 50 72 65 76 20 3d 20 70 50 72 65 76     pPrev = pPrev
1280: 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 7d 0a 20  ->pNext;.    }. 
1290: 20 20 20 69 66 28 20 70 50 72 65 76 20 29 7b 0a     if( pPrev ){.
12a0: 20 20 20 20 20 20 70 50 72 65 76 2d 3e 70 4e 65        pPrev->pNe
12b0: 78 74 20 3d 20 64 62 2d 3e 70 4e 65 78 74 3b 0a  xt = db->pNext;.
12c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12d0: 20 61 73 73 65 72 74 28 20 70 44 62 4c 69 73 74   assert( pDbList
12e0: 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 70 44  ==db );.      pD
12f0: 62 4c 69 73 74 20 3d 20 64 62 2d 3e 70 4e 65 78  bList = db->pNex
1300: 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  t;.    }.    sql
1310: 69 74 65 33 4f 73 2e 78 4c 65 61 76 65 4d 75 74  ite3Os.xLeaveMut
1320: 65 78 28 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ex();.  }.#endif
1330: 0a 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e 6d  .#endif..  db->m
1340: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
1350: 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c  GIC_ERROR;.  sql
1360: 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20 20 73  iteFree(db);.  s
1370: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f  qlite3MallocAllo
1380: 77 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  w();.  return SQ
1390: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
13a0: 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64  * Rollback all d
13b0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a  atabase files..*
13c0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  /.void sqlite3Ro
13d0: 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
13e0: 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b  3 *db){.  int i;
13f0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62  .  for(i=0; i<db
1400: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
1410: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
1420: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  pBt ){.      sql
1430: 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63  ite3BtreeRollbac
1440: 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  k(db->aDb[i].pBt
1450: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  );.      db->aDb
1460: 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b  [i].inTrans = 0;
1470: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
1480: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
1490: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
14a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
14b0: 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  a static string 
14c0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
14d0: 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72  he kind of error
14e0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
14f0: 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  e.** argument..*
1500: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
1510: 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 20  lite3ErrStr(int 
1520: 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  rc){.  const cha
1530: 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28 20  r *z;.  switch( 
1540: 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  rc ){.    case S
1550: 51 4c 49 54 45 5f 52 4f 57 3a 0a 20 20 20 20 63  QLITE_ROW:.    c
1560: 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a  ase SQLITE_DONE:
1570: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1580: 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 20 3d  _OK:         z =
1590: 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b   "not an error";
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
15c0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
15d0: 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d  _ERROR:      z =
15e0: 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   "SQL logic erro
15f0: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
1600: 61 62 61 73 65 22 3b 20 20 20 62 72 65 61 6b 3b  abase";   break;
1610: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1620: 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d  _PERM:       z =
1630: 20 22 61 63 63 65 73 73 20 70 65 72 6d 69 73 73   "access permiss
1640: 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20  ion denied";    
1650: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1660: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1670: 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d  _ABORT:      z =
1680: 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65   "callback reque
1690: 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74  sted query abort
16a0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
16b0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
16c0: 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a 20 3d  _BUSY:       z =
16d0: 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   "database is lo
16e0: 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  cked";          
16f0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1700: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1710: 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d  _LOCKED:     z =
1720: 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
1730: 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20   is locked";    
1740: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1750: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1760: 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d  _NOMEM:      z =
1770: 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
1780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1790: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
17a0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
17b0: 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d  _READONLY:   z =
17c0: 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69   "attempt to wri
17d0: 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61  te a readonly da
17e0: 74 61 62 61 73 65 22 3b 20 20 62 72 65 61 6b 3b  tabase";  break;
17f0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1800: 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 20 3d  _INTERRUPT:  z =
1810: 20 22 69 6e 74 65 72 72 75 70 74 65 64 22 3b 20   "interrupted"; 
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1840: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1850: 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 20 3d  _IOERR:      z =
1860: 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72   "disk I/O error
1870: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
1880: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1890: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
18a0: 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 20 3d  _CORRUPT:    z =
18b0: 20 22 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   "database disk 
18c0: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
18d0: 65 64 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  ed";      break;
18e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
18f0: 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d  _FULL:       z =
1900: 20 22 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   "database or di
1910: 73 6b 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20  sk is full";    
1920: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1930: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1940: 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d  _CANTOPEN:   z =
1950: 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   "unable to open
1960: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 3b   database file";
1970: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1980: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1990: 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d  _PROTOCOL:   z =
19a0: 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69   "database locki
19b0: 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c  ng protocol fail
19c0: 75 72 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ure";     break;
19d0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
19e0: 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a 20 3d  _EMPTY:      z =
19f0: 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73   "table contains
1a00: 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20 20 20   no data";      
1a10: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1a20: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1a30: 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d  _SCHEMA:     z =
1a40: 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
1a50: 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 3b 20  a has changed"; 
1a60: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1a70: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1a80: 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d  _CONSTRAINT: z =
1a90: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
1aa0: 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  led";           
1ab0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1ac0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1ad0: 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d  _MISMATCH:   z =
1ae0: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
1af0: 74 63 68 22 3b 20 20 20 20 20 20 20 20 20 20 20  tch";           
1b00: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1b10: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1b20: 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 20 3d  _MISUSE:     z =
1b30: 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   "library routin
1b40: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
1b50: 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b  sequence";break;
1b60: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1b70: 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d  _NOLFS:      z =
1b80: 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c   "kernel lacks l
1b90: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
1ba0: 74 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  t";       break;
1bb0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1bc0: 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a 20 3d  _AUTH:       z =
1bd0: 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20   "authorization 
1be0: 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20  denied";        
1bf0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1c00: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1c10: 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20 3d  _FORMAT:     z =
1c20: 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61   "auxiliary data
1c30: 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f  base format erro
1c40: 72 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  r";       break;
1c50: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1c60: 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 20 3d  _RANGE:      z =
1c70: 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e   "bind or column
1c80: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
1c90: 6e 67 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  nge";     break;
1ca0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1cb0: 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 20 3d  _NOTADB:     z =
1cc0: 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70   "file is encryp
1cd0: 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ted or is not a 
1ce0: 64 61 74 61 62 61 73 65 22 3b 62 72 65 61 6b 3b  database";break;
1cf0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d               z =
1d10: 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22   "unknown error"
1d20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d30: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1d40: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b  .  }.  return z;
1d50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
1d60: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
1d70: 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63  s a busy callbac
1d80: 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e  k that sleeps an
1d90: 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e  d tries.** again
1da0: 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74   until a timeout
1db0: 20 76 61 6c 75 65 20 69 73 20 72 65 61 63 68 65   value is reache
1dc0: 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20  d.  The timeout 
1dd0: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69  value is.** an i
1de0: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
1df0: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61   milliseconds pa
1e00: 73 73 65 64 20 69 6e 20 61 73 20 74 68 65 20 66  ssed in as the f
1e10: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
1e20: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1e30: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
1e40: 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64  yCallback(. void
1e50: 20 2a 70 74 72 2c 20 20 20 20 20 20 20 20 20 20   *ptr,          
1e60: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
1e70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
1e80: 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20  int count       
1e90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ea0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c  er of times tabl
1eb0: 65 20 68 61 73 20 62 65 65 6e 20 62 75 73 79 20  e has been busy 
1ec0: 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45  */.){.#if SQLITE
1ed0: 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31  _MIN_SLEEP_MS==1
1ee0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1ef0: 75 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20  u8 delays[] =.  
1f00: 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30     { 1, 2, 5, 10
1f10: 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35  , 15, 20, 25, 25
1f20: 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c  ,  25,  50,  50,
1f30: 20 31 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63   100 };.  static
1f40: 20 63 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73   const u8 totals
1f50: 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31  [] =.     { 0, 1
1f60: 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c  , 3,  8, 18, 33,
1f70: 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32   53, 78, 103, 12
1f80: 38 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23  8, 178, 228 };.#
1f90: 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 28   define NDELAY (
1fa0: 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f 73  sizeof(delays)/s
1fb0: 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29  izeof(delays[0])
1fc0: 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20  ).  int timeout 
1fd0: 3d 20 28 28 73 71 6c 69 74 65 33 20 2a 29 70 74  = ((sqlite3 *)pt
1fe0: 72 29 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b  r)->busyTimeout;
1ff0: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
2000: 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ior;..  assert( 
2010: 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69 66  count>=0 );.  if
2020: 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41 59  ( count < NDELAY
2030: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
2040: 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a 20  delays[count];. 
2050: 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c     prior = total
2060: 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c 73  s[count];.  }els
2070: 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  e{.    delay = d
2080: 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b  elays[NDELAY-1];
2090: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
20a0: 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20  als[NDELAY-1] + 
20b0: 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e 44  delay*(count-(ND
20c0: 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  ELAY-1));.  }.  
20d0: 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61  if( prior + dela
20e0: 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20  y > timeout ){. 
20f0: 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f     delay = timeo
2100: 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20  ut - prior;.    
2110: 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72  if( delay<=0 ) r
2120: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
2130: 71 6c 69 74 65 33 4f 73 2e 78 53 6c 65 65 70 28  qlite3Os.xSleep(
2140: 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e  delay);.  return
2150: 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20   1;.#else.  int 
2160: 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69  timeout = ((sqli
2170: 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79  te3 *)ptr)->busy
2180: 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28  Timeout;.  if( (
2190: 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20  count+1)*1000 > 
21a0: 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72  timeout ){.    r
21b0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
21c0: 71 6c 69 74 65 33 4f 73 2e 78 53 6c 65 65 70 28  qlite3Os.xSleep(
21d0: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
21e0: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
21f0: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 67 69  ** Invoke the gi
2200: 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ven busy handler
2210: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
2220: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 77  tine is called w
2230: 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  hen an operation
2240: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 20 6c   failed with a l
2250: 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20  ock..** If this 
2260: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
2270: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f  non-zero, the lo
2280: 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e 20 20  ck is retried.  
2290: 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73  If it.** returns
22a0: 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f   0, the operatio
22b0: 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 6e  n aborts with an
22c0: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
22d0: 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  or..*/.int sqlit
22e0: 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
22f0: 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 20  ler(BusyHandler 
2300: 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *p){.  int rc;. 
2310: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e   if( p==0 || p->
2320: 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e  xFunc==0 || p->n
2330: 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20  Busy<0 ) return 
2340: 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75  0;.  rc = p->xFu
2350: 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e  nc(p->pArg, p->n
2360: 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d  Busy);.  if( rc=
2370: 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75  =0 ){.    p->nBu
2380: 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  sy = -1;.  }else
2390: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b  {.    p->nBusy++
23a0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
23b0: 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  c; .}../*.** Thi
23c0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
23d0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
23e0: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
23f0: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
2400: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
2410: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
2420: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
2430: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2440: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  3_busy_handler(.
2450: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
2460: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
2470: 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64  id*,int),.  void
2480: 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20   *pArg.){.  if( 
2490: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
24a0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
24b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
24c0: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75  SE;.  }.  db->bu
24d0: 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20  syHandler.xFunc 
24e0: 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62  = xBusy;.  db->b
24f0: 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20  usyHandler.pArg 
2500: 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75  = pArg;.  db->bu
2510: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
2520: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  = 0;.  return SQ
2530: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
2540: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2550: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
2560: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  K./*.** This rou
2570: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72  tine sets the pr
2580: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
2590: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
25a0: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
25b0: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
25c0: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
25d0: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
25e0: 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  . The progress c
25f0: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20  allback will.** 
2600: 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79  be invoked every
2610: 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a   nOps opcodes..*
2620: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70  /.void sqlite3_p
2630: 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
2640: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
2650: 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69  .  int nOps,.  i
2660: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
2670: 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20  void*), .  void 
2680: 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21  *pArg.){.  if( !
2690: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
26a0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66  ck(db) ){.    if
26b0: 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20  ( nOps>0 ){.    
26c0: 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20    db->xProgress 
26d0: 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20  = xProgress;.   
26e0: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
26f0: 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20  Ops = nOps;.    
2700: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
2710: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d  rg = pArg;.    }
2720: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2730: 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20  xProgress = 0;. 
2740: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
2750: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
2760: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
2770: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  g = 0;.    }.  }
2780: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
2790: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
27a0: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
27b0: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
27c0: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
27d0: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
27e0: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
27f0: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
2800: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74  urning 0..*/.int
2810: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
2820: 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64  meout(sqlite3 *d
2830: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
2840: 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64 62  ( ms>0 ){.    db
2850: 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20  ->busyTimeout = 
2860: 6d 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ms;.    sqlite3_
2870: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
2880: 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75   sqliteDefaultBu
2890: 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69  syCallback, (voi
28a0: 64 2a 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  d*)db);.  }else{
28b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
28c0: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c  y_handler(db, 0,
28d0: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
28e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
28f0: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
2900: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
2910: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
2920: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
2930: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
2940: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
2950: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
2960: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
2970: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
2980: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
2990: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
29a0: 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t;.  }.}../*.** 
29b0: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
29c0: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69 73  should call this
29d0: 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65 65   routine to free
29e0: 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a 20   memory that.** 
29f0: 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74  is returned in t
2a00: 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73 67  he in the errmsg
2a10: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
2a20: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 77 68 65  lite3_open() whe
2a30: 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 61  n.** SQLite is a
2a40: 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20   DLL.  For some 
2a50: 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20  reason, it does 
2a60: 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c  not work to call
2a70: 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65 63   free().** direc
2a80: 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  tly..**.** Note 
2a90: 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20  that we need to 
2aa0: 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74 20  call free() not 
2ab0: 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65 72  sqliteFree() her
2ac0: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  e..*/.void sqlit
2ad0: 65 33 5f 66 72 65 65 28 63 68 61 72 20 2a 70 29  e3_free(char *p)
2ae0: 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a  { free(p); }../*
2af0: 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20 75  .** Create new u
2b00: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ser functions..*
2b10: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
2b20: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
2b30: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
2b40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e  const char *zFun
2b50: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
2b60: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63   nArg,.  int enc
2b70: 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ,.  void *pUserD
2b80: 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ata,.  void (*xF
2b90: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
2ba0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2bb0: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2bc0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
2bd0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2be0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2bf0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
2c00: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
2c10: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e  ntext*).){.  Fun
2c20: 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e  cDef *p;.  int n
2c30: 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c  Name;..  if( sql
2c40: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
2c50: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
2c60: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
2c70: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63  .  }.  if( zFunc
2c80: 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20  tionName==0 ||. 
2c90: 20 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28       (xFunc && (
2ca0: 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29  xFinal || xStep)
2cb0: 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46  ) || .      (!xF
2cc0: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
2cd0: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
2ce0: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
2cf0: 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70  !xFinal && xStep
2d00: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72  )) ||.      (nAr
2d10: 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37  g<-1 || nArg>127
2d20: 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c  ) ||.      (255<
2d30: 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28  (nName = strlen(
2d40: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29  zFunctionName)))
2d50: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
2d60: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
2d70: 0a 20 20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .  .#ifndef SQLI
2d80: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
2d90: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46  /* If SQLITE_UTF
2da0: 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20  16 is specified 
2db0: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  as the encoding 
2dc0: 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20  type, transform 
2dd0: 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65  this.  ** to one
2de0: 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   of SQLITE_UTF16
2df0: 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46  LE or SQLITE_UTF
2e00: 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20  16BE using the. 
2e10: 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   ** SQLITE_UTF16
2e20: 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51  NATIVE macro. SQ
2e30: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f  LITE_UTF16 is no
2e40: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
2e50: 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20  y..  **.  ** If 
2e60: 53 51 4c 49 54 45 5f 41 4e 59 20 69 73 20 73 70  SQLITE_ANY is sp
2e70: 65 63 69 66 69 65 64 2c 20 61 64 64 20 74 68 72  ecified, add thr
2e80: 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ee versions of t
2e90: 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a  he function.  **
2ea0: 20 74 6f 20 74 68 65 20 68 61 73 68 20 74 61 62   to the hash tab
2eb0: 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  le..  */.  if( e
2ec0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2ed0: 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51   ){.    enc = SQ
2ee0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
2ef0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 6e  ;.  }else if( en
2f00: 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b  c==SQLITE_ANY ){
2f10: 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20  .    int rc;.   
2f20: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
2f30: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
2f40: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
2f50: 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54   nArg, SQLITE_UT
2f60: 46 38 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73  F8,.         pUs
2f70: 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78  erData, xFunc, x
2f80: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20  Step, xFinal);. 
2f90: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
2fa0: 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
2fb0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2fc0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
2fd0: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
2fe0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49  Name, nArg, SQLI
2ff0: 54 45 5f 55 54 46 31 36 4c 45 2c 0a 20 20 20 20  TE_UTF16LE,.    
3000: 20 20 20 20 70 55 73 65 72 44 61 74 61 2c 20 78      pUserData, x
3010: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
3020: 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63  nal);.    if( rc
3030: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65  !=SQLITE_OK ) re
3040: 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63  turn rc;.    enc
3050: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42   = SQLITE_UTF16B
3060: 45 3b 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 65  E;.  }.#else.  e
3070: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
3080: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 2f 2a  ;.#endif.  .  /*
3090: 20 43 68 65 63 6b 20 69 66 20 61 6e 20 65 78 69   Check if an exi
30a0: 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  sting function i
30b0: 73 20 62 65 69 6e 67 20 6f 76 65 72 72 69 64 64  s being overridd
30c0: 65 6e 20 6f 72 20 64 65 6c 65 74 65 64 2e 20 49  en or deleted. I
30d0: 66 20 73 6f 2c 0a 20 20 2a 2a 20 61 6e 64 20 74  f so,.  ** and t
30e0: 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
30f0: 56 4d 73 2c 20 74 68 65 6e 20 72 65 74 75 72 6e  VMs, then return
3100: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 20 49 66   SQLITE_BUSY. If
3110: 20 61 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a   a function.  **
3120: 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72 72 69   is being overri
3130: 64 64 65 6e 2f 64 65 6c 65 74 65 64 20 62 75 74  dden/deleted but
3140: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 61 63   there are no ac
3150: 74 69 76 65 20 56 4d 73 2c 20 61 6c 6c 6f 77 20  tive VMs, allow 
3160: 74 68 65 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  the.  ** operati
3170: 6f 6e 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 62  on to continue b
3180: 75 74 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c  ut invalidate al
3190: 6c 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  l precompiled st
31a0: 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20  atements..  */. 
31b0: 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64   p = sqlite3Find
31c0: 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75  Function(db, zFu
31d0: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d  nctionName, nNam
31e0: 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 30 29  e, nArg, enc, 0)
31f0: 3b 0a 20 20 69 66 28 20 70 20 26 26 20 70 2d 3e  ;.  if( p && p->
3200: 69 50 72 65 66 45 6e 63 3d 3d 65 6e 63 20 26 26  iPrefEnc==enc &&
3210: 20 70 2d 3e 6e 41 72 67 3d 3d 6e 41 72 67 20 29   p->nArg==nArg )
3220: 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 63  {.    if( db->ac
3230: 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b 0a 20  tiveVdbeCnt ){. 
3240: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
3250: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53  r(db, SQLITE_BUS
3260: 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55 6e 61  Y, .        "Una
3270: 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f  ble to delete/mo
3280: 64 69 66 79 20 75 73 65 72 2d 66 75 6e 63 74 69  dify user-functi
3290: 6f 6e 20 64 75 65 20 74 6f 20 61 63 74 69 76 65  on due to active
32a0: 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20   statements");. 
32b0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
32c0: 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
32d0: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
32e0: 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
32f0: 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
3300: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 20 3d 20     }.  }..  p = 
3310: 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
3320: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
3330: 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41  nName, nName, nA
3340: 72 67 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20 69  rg, enc, 1);.  i
3350: 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( p==0 ) return
3360: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
3370: 20 70 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 20   p->flags = 0;. 
3380: 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e   p->xFunc = xFun
3390: 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20  c;.  p->xStep = 
33a0: 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e  xStep;.  p->xFin
33b0: 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a  alize = xFinal;.
33c0: 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d    p->pUserData =
33d0: 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65   pUserData;.  re
33e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
33f0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
3400: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20  _OMIT_UTF16.int 
3410: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3420: 75 6e 63 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c  unction16(.  sql
3430: 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73  ite3 *db,.  cons
3440: 74 20 76 6f 69 64 20 2a 7a 46 75 6e 63 74 69 6f  t void *zFunctio
3450: 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72  nName,.  int nAr
3460: 67 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65  g,.  int eTextRe
3470: 70 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  p,.  void *pUser
3480: 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78  Data,.  void (*x
3490: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
34a0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
34b0: 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76  e3_value**),.  v
34c0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
34d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
34e0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
34f0: 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69  *),.  void (*xFi
3500: 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  nal)(sqlite3_con
3510: 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20  text*).){.  int 
3520: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e  rc;.  char *zFun
3530: 63 38 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  c8;..  if( sqlit
3540: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
3550: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3560: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
3570: 20 7d 0a 20 20 7a 46 75 6e 63 38 20 3d 20 73 71   }.  zFunc8 = sq
3580: 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a 46  lite3utf16to8(zF
3590: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31 29  unctionName, -1)
35a0: 3b 0a 20 20 69 66 28 20 21 7a 46 75 6e 63 38 20  ;.  if( !zFunc8 
35b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
35c0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
35d0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
35e0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
35f0: 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c  b, zFunc8, nArg,
3600: 20 65 54 65 78 74 52 65 70 2c 20 0a 20 20 20 20   eTextRep, .    
3610: 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75    pUserData, xFu
3620: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
3630: 6c 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  l);.  sqliteFree
3640: 28 7a 46 75 6e 63 38 29 3b 0a 20 20 72 65 74 75  (zFunc8);.  retu
3650: 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a  rn rc;.}.#endif.
3660: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3670: 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 0a 2a 2a  OMIT_TRACE./*.**
3680: 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61 63   Register a trac
3690: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  e function.  The
36a0: 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20 70   pArg from the p
36b0: 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74  reviously regist
36c0: 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69 73  ered trace.** is
36d0: 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a   returned.  .**.
36e0: 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65 20  ** A NULL trace 
36f0: 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74  function means t
3700: 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20 69  hat no tracing i
3710: 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20 6e  s executes.  A n
3720: 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63 65  on-NULL.** trace
3730: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
3740: 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74   a function that
3750: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20 74   is invoked at t
3760: 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63 68  he start of each
3770: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
3780: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  t..*/.void *sqli
3790: 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69 74 65  te3_trace(sqlite
37a0: 33 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78 54  3 *db, void (*xT
37b0: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
37c0: 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20 2a  t char*), void *
37d0: 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a 70  pArg){.  void *p
37e0: 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63 65  Old = db->pTrace
37f0: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63  Arg;.  db->xTrac
3800: 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62  e = xTrace;.  db
3810: 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70 41  ->pTraceArg = pA
3820: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c  rg;.  return pOl
3830: 64 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  d;.}./*.** Regis
3840: 74 65 72 20 61 20 70 72 6f 66 69 6c 65 20 66 75  ter a profile fu
3850: 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41 72  nction.  The pAr
3860: 67 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69  g from the previ
3870: 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72 65 64  ously registered
3880: 20 0a 2a 2a 20 70 72 6f 66 69 6c 65 20 66 75 6e   .** profile fun
3890: 63 74 69 6f 6e 20 69 73 20 72 65 74 75 72 6e 65  ction is returne
38a0: 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  d.  .**.** A NUL
38b0: 4c 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  L profile functi
38c0: 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  on means that no
38d0: 20 70 72 6f 66 69 6c 69 6e 67 20 69 73 20 65 78   profiling is ex
38e0: 65 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e  ecutes.  A non-N
38f0: 55 4c 4c 0a 2a 2a 20 70 72 6f 66 69 6c 65 20 69  ULL.** profile i
3900: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
3910: 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 69   function that i
3920: 73 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65  s invoked at the
3930: 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f 66 0a 2a   conclusion of.*
3940: 2a 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  * each SQL state
3950: 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e  ment that is run
3960: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
3970: 65 33 5f 70 72 6f 66 69 6c 65 28 0a 20 20 73 71  e3_profile(.  sq
3980: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 76 6f 69  lite3 *db,.  voi
3990: 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f  d (*xProfile)(vo
39a0: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
39b0: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 29 2c 0a  sqlite_uint64),.
39c0: 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a    void *pArg.){.
39d0: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
39e0: 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67 3b 0a  b->pProfileArg;.
39f0: 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 3d    db->xProfile =
3a00: 20 78 50 72 6f 66 69 6c 65 3b 0a 20 20 64 62 2d   xProfile;.  db-
3a10: 3e 70 50 72 6f 66 69 6c 65 41 72 67 20 3d 20 70  >pProfileArg = p
3a20: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Arg;.  return pO
3a30: 6c 64 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ld;.}.#endif /* 
3a40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
3a50: 45 20 2a 2f 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52  E */../*** EXPER
3a60: 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a  IMENTAL ***.**.*
3a70: 2a 20 52 65 67 69 73 74 65 72 20 61 20 66 75 6e  * Register a fun
3a80: 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
3a90: 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e 73  ked when a trans
3aa0: 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e  action comments.
3ab0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66 75  .** If either fu
3ac0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e  nction returns n
3ad0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
3ae0: 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73  e commit becomes
3af0: 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a   a.** rollback..
3b00: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
3b10: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20  _commit_hook(.  
3b20: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
3b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74            /* Att
3b40: 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20  ach the hook to 
3b50: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
3b60: 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61  .  int (*xCallba
3b70: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20  ck)(void*),  /* 
3b80: 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  Function to invo
3b90: 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69  ke on each commi
3ba0: 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  t */.  void *pAr
3bb0: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
3bc0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
3bd0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
3be0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
3bf0: 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67  = db->pCommitArg
3c00: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43  ;.  db->xCommitC
3c10: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
3c20: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d  ack;.  db->pComm
3c30: 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  itArg = pArg;.  
3c40: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a  return pOld;.}..
3c50: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
3c60: 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20   callback to be 
3c70: 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d  invoked each tim
3c80: 65 20 61 20 72 6f 77 20 69 73 20 75 70 64 61 74  e a row is updat
3c90: 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  ed,.** inserted 
3ca0: 6f 72 20 64 65 6c 65 74 65 64 20 75 73 69 6e 67  or deleted using
3cb0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
3cc0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f  onnection..*/.vo
3cd0: 69 64 20 73 71 6c 69 74 65 33 5f 75 70 64 61 74  id sqlite3_updat
3ce0: 65 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65  e_hook(.  sqlite
3cf0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
3d00: 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68      /* Attach th
3d10: 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64  e hook to this d
3d20: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69  atabase */.  voi
3d30: 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  d (*xCallback)(v
3d40: 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f  oid*,int,char co
3d50: 6e 73 74 20 2a 2c 63 68 61 72 20 63 6f 6e 73 74  nst *,char const
3d60: 20 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29   *,sqlite_int64)
3d70: 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20  ,.  void *pArg  
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3d90: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
3da0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
3db0: 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
3dc0: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
3dd0: 6b 3b 0a 20 20 64 62 2d 3e 70 55 70 64 61 74 65  k;.  db->pUpdate
3de0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a 0a  Arg = pArg;.}...
3df0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
3e00: 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  ne is called to 
3e10: 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63 74  create a connect
3e20: 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73  ion to a databas
3e30: 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76 65  e BTree.** drive
3e40: 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  r.  If zFilename
3e50: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
3e60: 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68 61  a file, then tha
3e70: 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65  t file is.** ope
3e80: 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20 49  ned and used.  I
3e90: 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74  f zFilename is t
3ea0: 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a  he magic name ":
3eb0: 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a  memory:" then.**
3ec0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
3ed0: 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72   stored in memor
3ee0: 79 20 28 61 6e 64 20 69 73 20 74 68 75 73 20 66  y (and is thus f
3ef0: 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e  orgotten as soon
3f00: 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65   as.** the conne
3f10: 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e  ction is closed.
3f20: 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20  )  If zFilename 
3f30: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
3f40: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73 20   database.** is 
3f50: 61 20 22 76 69 72 74 75 61 6c 22 20 64 61 74 61  a "virtual" data
3f60: 62 61 73 65 20 66 6f 72 20 74 72 61 6e 73 69 65  base for transie
3f70: 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20  nt use only and 
3f80: 69 73 20 64 65 6c 65 74 65 64 20 61 73 0a 2a 2a  is deleted as.**
3f90: 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e   soon as the con
3fa0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
3fb0: 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69 72 74 75  d..**.** A virtu
3fc0: 61 6c 20 64 61 74 61 62 61 73 65 20 63 61 6e 20  al database can 
3fd0: 62 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b  be either a disk
3fe0: 20 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61   file (that is a
3ff0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
4000: 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65  deleted when the
4010: 20 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29   file is closed)
4020: 20 6f 72 20 69 74 20 61 6e 20 62 65 20 68 65 6c   or it an be hel
4030: 64 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65  d entirely in me
4040: 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69  mory,.** dependi
4050: 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73  ng on the values
4060: 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f   of the TEMP_STO
4070: 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  RE compile-time 
4080: 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a  macro and the.**
4090: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
40a0: 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64  variable, accord
40b0: 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ing to the follo
40c0: 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a  wing chart:.**.*
40d0: 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f  *       TEMP_STO
40e0: 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f  RE     db->temp_
40f0: 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69  store     Locati
4100: 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  on of temporary 
4110: 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20  database.**     
4120: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20    ----------    
4130: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20   -------------- 
4140: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
4150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4160: 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  --.**           
4170: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
4180: 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20  any             
4190: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
41a0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
41b0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
41c0: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
41d0: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
41e0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
41f0: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20      memory.**   
4200: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
4210: 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20           0      
4220: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
4230: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
4240: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
4250: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
4260: 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20  *           2   
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
4280: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f              memo
4290: 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ry.**           
42a0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
42b0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
42c0: 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20  memory.**       
42d0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
42e0: 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20      any         
42f0: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e      memory.*/.in
4300: 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  t sqlite3BtreeFa
4310: 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73  ctory(.  const s
4320: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
4330: 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62     /* Main datab
4340: 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67  ase when opening
4350: 20 61 75 78 20 6f 74 68 65 72 77 69 73 65 20 30   aux otherwise 0
4360: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
4370: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20   *zFilename,    
4380: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66  /* Name of the f
4390: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
43a0: 68 65 20 42 54 72 65 65 20 64 61 74 61 62 61 73  he BTree databas
43b0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a  e */.  int omitJ
43c0: 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20  ournal,         
43d0: 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e   /* if TRUE then
43e0: 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20   do not journal 
43f0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
4400: 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20  nt nCache,      
4410: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
4420: 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68  many pages in th
4430: 65 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a  e page cache */.
4440: 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65    Btree **ppBtre
4450: 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  e           /* P
4460: 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74  ointer to new Bt
4470: 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74  ree object writt
4480: 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20  en here */.){.  
4490: 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73 20  int btree_flags 
44a0: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  = 0;.  int rc;. 
44b0: 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74   .  assert( ppBt
44c0: 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28  ree != 0);.  if(
44d0: 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a   omitJournal ){.
44e0: 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20      btree_flags 
44f0: 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  |= BTREE_OMIT_JO
4500: 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28  URNAL;.  }.  if(
4510: 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
4520: 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 29  ITE_NoReadlock )
4530: 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67  {.    btree_flag
4540: 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f 5f 52 45  s |= BTREE_NO_RE
4550: 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69 66  ADLOCK;.  }.  if
4560: 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29  ( zFilename==0 )
4570: 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45  {.#if TEMP_STORE
4580: 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f  ==0.    /* Do no
4590: 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  thing */.#endif.
45a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
45b0: 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69 66  MIT_MEMORYDB.#if
45c0: 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a 20   TEMP_STORE==1. 
45d0: 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f     if( db->temp_
45e0: 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c 65  store==2 ) zFile
45f0: 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a  name = ":memory:
4600: 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45  ";.#endif.#if TE
4610: 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20 20  MP_STORE==2.    
4620: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
4630: 72 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61 6d  re!=1 ) zFilenam
4640: 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a  e = ":memory:";.
4650: 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f  #endif.#if TEMP_
4660: 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46 69  STORE==3.    zFi
4670: 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
4680: 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  y:";.#endif.#end
4690: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
46a0: 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20 20  T_MEMORYDB */.  
46b0: 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  }..  rc = sqlite
46c0: 33 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65  3BtreeOpen(zFile
46d0: 6e 61 6d 65 2c 20 70 70 42 74 72 65 65 2c 20 62  name, ppBtree, b
46e0: 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69  tree_flags);.  i
46f0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
4700: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
4710: 74 72 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c  treeSetBusyHandl
4720: 65 72 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f  er(*ppBtree, (vo
4730: 69 64 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e  id*)&db->busyHan
4740: 64 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  dler);.    sqlit
4750: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
4760: 69 7a 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43  ize(*ppBtree, nC
4770: 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ache);.  }.  ret
4780: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
4790: 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e   Return UTF-8 en
47a0: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
47b0: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
47c0: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
47d0: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
47e0: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
47f0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71  qlite3_errmsg(sq
4800: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
4810: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  nst char *z;.  i
4820: 66 28 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  f( sqlite3Tsd()-
4830: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
4840: 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .    return sqli
4850: 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
4860: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69  _NOMEM);.  }.  i
4870: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
4880: 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d  Check(db) || db-
4890: 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45  >errCode==SQLITE
48a0: 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72  _MISUSE ){.    r
48b0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72  eturn sqlite3Err
48c0: 53 74 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53  Str(SQLITE_MISUS
48d0: 45 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 28 63  E);.  }.  z = (c
48e0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
48f0: 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72  ue_text(db->pErr
4900: 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  );.  if( z==0 ){
4910: 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
4920: 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f  ErrStr(db->errCo
4930: 64 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  de);.  }.  retur
4940: 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  n z;.}..#ifndef 
4950: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
4960: 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55  6./*.** Return U
4970: 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e  TF-16 encoded En
4980: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
4990: 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68  xplanation of th
49a0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a  e most recent.**
49b0: 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74   error..*/.const
49c0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65   void *sqlite3_e
49d0: 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20  rrmsg16(sqlite3 
49e0: 2a 64 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61 75  *db){.  /* Becau
49f0: 73 65 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61  se all the chara
4a00: 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
4a10: 69 6e 67 20 61 72 65 20 69 6e 20 74 68 65 20 75  ing are in the u
4a20: 6e 69 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e 67  nicode.  ** rang
4a30: 65 20 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20  e 0x00-0xFF, if 
4a40: 77 65 20 70 61 64 20 74 68 65 20 62 69 67 2d 65  we pad the big-e
4a50: 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74  ndian string wit
4a60: 68 20 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20 62  h a .  ** zero b
4a70: 79 74 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61  yte, we can obta
4a80: 69 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e  in the little-en
4a90: 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68  dian string with
4aa0: 0a 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61  .  ** &big_endia
4ab0: 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74 61  n[1]..  */.  sta
4ac0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6f  tic const char o
4ad0: 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a  utOfMemBe[] = {.
4ae0: 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27      0, 'o', 0, '
4af0: 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27  u', 0, 't', 0, '
4b00: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c   ', .    0, 'o',
4b10: 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c   0, 'f', 0, ' ',
4b20: 20 0a 20 20 20 20 30 2c 20 27 6d 27 2c 20 30 2c   .    0, 'm', 0,
4b30: 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30 2c   'e', 0, 'm', 0,
4b40: 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c   'o', 0, 'r', 0,
4b50: 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20   'y', 0, 0, 0.  
4b60: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
4b70: 74 20 63 68 61 72 20 6d 69 73 75 73 65 42 65 20  t char misuseBe 
4b80: 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6c  [] = {.    0, 'l
4b90: 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 62  ', 0, 'i', 0, 'b
4ba0: 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 61  ', 0, 'r', 0, 'a
4bb0: 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79  ', 0, 'r', 0, 'y
4bc0: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
4bd0: 30 2c 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c 20  0, 'r', 0, 'o', 
4be0: 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20  0, 'u', 0, 't', 
4bf0: 30 2c 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c 20  0, 'i', 0, 'n', 
4c00: 30 2c 20 27 65 27 2c 20 30 2c 20 27 20 27 2c 20  0, 'e', 0, ' ', 
4c10: 0a 20 20 20 20 30 2c 20 27 63 27 2c 20 30 2c 20  .    0, 'c', 0, 
4c20: 27 61 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20  'a', 0, 'l', 0, 
4c30: 27 6c 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  'l', 0, 'e', 0, 
4c40: 27 64 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'd', 0, ' ', .  
4c50: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
4c60: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
4c70: 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30  , .    0, 'o', 0
4c80: 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'f', 0, ' ', .
4c90: 20 20 20 20 30 2c 20 27 73 27 2c 20 30 2c 20 27      0, 's', 0, '
4ca0: 65 27 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20 27  e', 0, 'q', 0, '
4cb0: 75 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  u', 0, 'e', 0, '
4cc0: 6e 27 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20 27  n', 0, 'c', 0, '
4cd0: 65 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b  e', 0, 0, 0.  };
4ce0: 0a 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
4cf0: 7a 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  z;.  if( sqlite3
4d00: 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69  Tsd()->mallocFai
4d10: 6c 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72  led ){.    retur
4d20: 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f  n (void *)(&outO
4d30: 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54  fMemBe[SQLITE_UT
4d40: 46 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54  F16NATIVE==SQLIT
4d50: 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b  E_UTF16LE?1:0]);
4d60: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
4d70: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
4d80: 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65  ) || db->errCode
4d90: 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  ==SQLITE_MISUSE 
4da0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76  ){.    return (v
4db0: 6f 69 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65  oid *)(&misuseBe
4dc0: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54  [SQLITE_UTF16NAT
4dd0: 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  IVE==SQLITE_UTF1
4de0: 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20  6LE?1:0]);.  }. 
4df0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
4e00: 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45  ue_text16(db->pE
4e10: 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  rr);.  if( z==0 
4e20: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  ){.    sqlite3Va
4e30: 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45  lueSetStr(db->pE
4e40: 72 72 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45  rr, -1, sqlite3E
4e50: 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64  rrStr(db->errCod
4e60: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c  e),.         SQL
4e70: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
4e80: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20  _STATIC);.    z 
4e90: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
4ea0: 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29  text16(db->pErr)
4eb0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
4ec0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
4ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
4ee0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
4ef0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
4f00: 20 65 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65   error code gene
4f10: 72 61 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69  rated by an SQLi
4f20: 74 65 20 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e  te routine. If N
4f30: 55 4c 4c 20 69 73 0a 2a 2a 20 70 61 73 73 65 64  ULL is.** passed
4f40: 20 74 6f 20 74 68 69 73 20 66 75 6e 63 74 69 6f   to this functio
4f50: 6e 2c 20 77 65 20 61 73 73 75 6d 65 20 61 20 6d  n, we assume a m
4f60: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64  alloc() failed d
4f70: 75 72 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70  uring sqlite3_op
4f80: 65 6e 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  en()..*/.int sql
4f90: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c  ite3_errcode(sql
4fa0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
4fb0: 20 21 64 62 20 7c 7c 20 73 71 6c 69 74 65 33 54   !db || sqlite3T
4fc0: 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  sd()->mallocFail
4fd0: 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ed ){.    return
4fe0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
4ff0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
5000: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5010: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5020: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5030: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72  .  return db->er
5040: 72 43 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rCode;.}../*.** 
5050: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  This routine doe
5060: 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70  s the work of op
5070: 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  ening a database
5080: 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a   on behalf of.**
5090: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20   sqlite3_open() 
50a0: 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  and sqlite3_open
50b0: 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61  16(). The databa
50c0: 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69  se filename "zFi
50d0: 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20  lename"  .** is 
50e0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a  UTF-8 encoded..*
50f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65  /.static int ope
5100: 6e 44 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e  nDatabase(.  con
5110: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
5120: 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20  me, /* Database 
5130: 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65  filename UTF-8 e
5140: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69  ncoded */.  sqli
5150: 74 65 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20  te3 **ppDb      
5160: 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72     /* OUT: Retur
5170: 6e 65 64 20 64 61 74 61 62 61 73 65 20 68 61 6e  ned database han
5180: 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  dle */.){.  sqli
5190: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
51a0: 63 2c 20 69 3b 0a 20 20 43 6f 6c 6c 53 65 71 20  c, i;.  CollSeq 
51b0: 2a 70 43 6f 6c 6c 3b 0a 0a 20 20 61 73 73 65 72  *pColl;..  asser
51c0: 74 28 20 21 73 71 6c 69 74 65 33 54 73 64 28 29  t( !sqlite3Tsd()
51d0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
51e0: 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65  ;..  /* Allocate
51f0: 20 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61   the sqlite data
5200: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
5210: 64 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  db = sqliteMallo
5220: 63 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  c( sizeof(sqlite
5230: 33 29 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d  3) );.  if( db==
5240: 30 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f  0 ) goto opendb_
5250: 6f 75 74 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72  out;.  db->prior
5260: 4e 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20  NewRowid = 0;.  
5270: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
5280: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20  TE_MAGIC_BUSY;. 
5290: 20 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20   db->nDb = 2;.  
52a0: 64 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44  db->aDb = db->aD
52b0: 62 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65  bStatic;.  db->e
52c0: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
52d0: 3b 0a 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  ;.  db->autoComm
52e0: 69 74 20 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c  it = 1;.  db->fl
52f0: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68  ags |= SQLITE_Sh
5300: 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 73  ortColNames;.  s
5310: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
5320: 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54  db->aFunc, SQLIT
5330: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
5340: 29 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  );.  sqlite3Hash
5350: 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  Init(&db->aCollS
5360: 65 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  eq, SQLITE_HASH_
5370: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 66 6f  STRING, 0);.  fo
5380: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
5390: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
53a0: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
53b0: 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 2c  >aDb[i].tblHash,
53c0: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
53d0: 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ING, 0);.    sql
53e0: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
53f0: 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61 73 68  ->aDb[i].idxHash
5400: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
5410: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71  RING, 0);.    sq
5420: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
5430: 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67 48 61  b->aDb[i].trigHa
5440: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
5450: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
5460: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
5470: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46 4b 65  &db->aDb[i].aFKe
5480: 79 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  y, SQLITE_HASH_S
5490: 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d 0a 20  TRING, 1);.  }. 
54a0: 20 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64   .  /* Add the d
54b0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
54c0: 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59   sequence BINARY
54d0: 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66  . BINARY works f
54e0: 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20  or both UTF-8.  
54f0: 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73  ** and UTF-16, s
5500: 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20  o add a version 
5510: 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69  for each to avoi
5520: 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72  d any unnecessar
5530: 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  y.  ** conversio
5540: 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72  ns. The only err
5550: 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75  or that can occu
5560: 72 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c  r here is a mall
5570: 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20  oc() failure..  
5580: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
5590: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
55a0: 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20  n(db, "BINARY", 
55b0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 62  SQLITE_UTF8, 0,b
55c0: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
55d0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65       sqlite3_cre
55e0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
55f0: 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49  , "BINARY", SQLI
5600: 54 45 5f 55 54 46 31 36 2c 20 30 2c 62 69 6e 43  TE_UTF16, 0,binC
5610: 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20  ollFunc) ||.    
5620: 20 20 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c    (db->pDfltColl
5630: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
5640: 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e  llSeq(db, db->en
5650: 63 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20  c, "BINARY", 6, 
5660: 30 29 29 3d 3d 30 20 0a 20 20 29 7b 0a 20 20 20  0))==0 .  ){.   
5670: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61   /* sqlite3_crea
5680: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 20 69  te_collation() i
5690: 73 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 41 50  s an external AP
56a0: 49 2e 20 53 6f 20 74 68 65 20 6d 61 6c 6c 6f 63  I. So the malloc
56b0: 46 61 69 6c 65 64 20 66 6c 61 67 0a 20 20 20 20  Failed flag.    
56c0: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 62 65 65  ** will have bee
56d0: 6e 20 63 6c 65 61 72 65 64 20 62 65 66 6f 72 65  n cleared before
56e0: 20 72 65 74 75 72 6e 69 6e 67 2e 20 53 6f 20 73   returning. So s
56f0: 65 74 20 69 74 20 65 78 70 6c 69 63 69 74 6c 79  et it explicitly
5700: 20 68 65 72 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   here..    */.  
5710: 20 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e    sqlite3Tsd()->
5720: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
5730: 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  ;.    db->magic 
5740: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  = SQLITE_MAGIC_C
5750: 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20  LOSED;.    goto 
5760: 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a  opendb_out;.  }.
5770: 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20 61  .  /* Also add a
5780: 20 55 54 46 2d 38 20 63 61 73 65 2d 69 6e 73 65   UTF-8 case-inse
5790: 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61 74 69 6f  nsitive collatio
57a0: 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 20  n sequence. */. 
57b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
57c0: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e  collation(db, "N
57d0: 4f 43 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55  OCASE", SQLITE_U
57e0: 54 46 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f  TF8, 0, nocaseCo
57f0: 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20  llatingFunc);.. 
5800: 20 2f 2a 20 53 65 74 20 66 6c 61 67 73 20 6f 6e   /* Set flags on
5810: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f   the built-in co
5820: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5830: 73 20 2a 2f 0a 20 20 64 62 2d 3e 70 44 66 6c 74  s */.  db->pDflt
5840: 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c  Coll->type = SQL
5850: 49 54 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b  ITE_COLL_BINARY;
5860: 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  .  pColl = sqlit
5870: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
5880: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 22  , SQLITE_UTF8, "
5890: 4e 4f 43 41 53 45 22 2c 20 36 2c 20 30 29 3b 0a  NOCASE", 6, 0);.
58a0: 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20    if( pColl ){. 
58b0: 20 20 20 70 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d     pColl->type =
58c0: 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43   SQLITE_COLL_NOC
58d0: 41 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f  ASE;.  }..  /* O
58e0: 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20  pen the backend 
58f0: 64 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20  database driver 
5900: 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
5910: 33 42 74 72 65 65 46 61 63 74 6f 72 79 28 64 62  3BtreeFactory(db
5920: 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20  , zFilename, 0, 
5930: 4d 41 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e  MAX_PAGES, &db->
5940: 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69  aDb[0].pBt);.  i
5950: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
5960: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
5970: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
5980: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
5990: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
59a0: 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  OSED;.    goto o
59b0: 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  pendb_out;.  }..
59c0: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
59d0: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f   safety_level fo
59e0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
59f0: 61 73 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66  ase is 'full'; f
5a00: 6f 72 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a  or the temp.  **
5a10: 20 64 61 74 61 62 61 73 65 20 69 74 20 69 73 20   database it is 
5a20: 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74  'NONE'. This mat
5a30: 63 68 65 73 20 74 68 65 20 70 61 67 65 72 20 6c  ches the pager l
5a40: 61 79 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20  ayer defaults.  
5a50: 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b  .  */.  db->aDb[
5a60: 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e  0].zName = "main
5a70: 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e  ";.  db->aDb[0].
5a80: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
5a90: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5aa0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64  _OMIT_TEMPDB.  d
5ab0: 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20  b->aDb[1].zName 
5ac0: 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e  = "temp";.  db->
5ad0: 61 44 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65  aDb[1].safety_le
5ae0: 76 65 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a  vel = 1;.#endif.
5af0: 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
5b00: 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  all built-in fun
5b10: 63 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e  ctions, but do n
5b20: 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  ot attempt to re
5b30: 61 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  ad the.  ** data
5b40: 62 61 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e  base schema yet.
5b50: 20 54 68 69 73 20 69 73 20 64 65 6c 61 79 65 64   This is delayed
5b60: 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74   until the first
5b70: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
5b80: 73 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73  se.  ** is acces
5b90: 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
5ba0: 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
5bb0: 69 6e 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b  inFunctions(db);
5bc0: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
5bd0: 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30  db, SQLITE_OK, 0
5be0: 29 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  );.  db->magic =
5bf0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
5c00: 45 4e 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a  EN;..opendb_out:
5c10: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f  .  if( SQLITE_NO
5c20: 4d 45 4d 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74  MEM==(rc = sqlit
5c30: 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 29 20  e3_errcode(db)) 
5c40: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
5c50: 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62  lose(db);.    db
5c60: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70 70 44   = 0;.  }.  *ppD
5c70: 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74 65  b = db;.  sqlite
5c80: 33 4d 61 6c 6c 6f 63 43 6c 65 61 72 46 61 69 6c  3MallocClearFail
5c90: 65 64 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  ed();.  return r
5ca0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  c;.}../*.** Open
5cb0: 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   a new database 
5cc0: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
5cd0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63  qlite3_open(.  c
5ce0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
5cf0: 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33  name, .  sqlite3
5d00: 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65   **ppDb .){.  re
5d10: 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73  turn openDatabas
5d20: 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44  e(zFilename, ppD
5d30: 62 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  b);.}..#ifndef S
5d40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
5d50: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
5d60: 77 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  w database handl
5d70: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
5d80: 33 5f 6f 70 65 6e 31 36 28 0a 20 20 63 6f 6e 73  3_open16(.  cons
5d90: 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
5da0: 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a  e, .  sqlite3 **
5db0: 70 70 44 62 0a 29 7b 0a 20 20 63 68 61 72 20 63  ppDb.){.  char c
5dc0: 6f 6e 73 74 20 2a 7a 46 69 6c 65 6e 61 6d 65 38  onst *zFilename8
5dd0: 3b 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65  ;   /* zFilename
5de0: 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d   encoded in UTF-
5df0: 38 20 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46  8 instead of UTF
5e00: 2d 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  -16 */.  int rc 
5e10: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
5e20: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
5e30: 2a 70 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72 74  *pVal;..  assert
5e40: 28 20 7a 46 69 6c 65 6e 61 6d 65 20 29 3b 0a 20  ( zFilename );. 
5e50: 20 61 73 73 65 72 74 28 20 70 70 44 62 20 29 3b   assert( ppDb );
5e60: 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20 20  .  *ppDb = 0;.  
5e70: 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61  pVal = sqlite3Va
5e80: 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69  lueNew();.  sqli
5e90: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
5ea0: 56 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c 65 6e 61  Val, -1, zFilena
5eb0: 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  me, SQLITE_UTF16
5ec0: 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 53  NATIVE, SQLITE_S
5ed0: 54 41 54 49 43 29 3b 0a 20 20 7a 46 69 6c 65 6e  TATIC);.  zFilen
5ee0: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 56 61  ame8 = sqlite3Va
5ef0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
5f00: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66  LITE_UTF8);.  if
5f10: 28 20 7a 46 69 6c 65 6e 61 6d 65 38 20 29 7b 0a  ( zFilename8 ){.
5f20: 20 20 20 20 72 63 20 3d 20 6f 70 65 6e 44 61 74      rc = openDat
5f30: 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38  abase(zFilename8
5f40: 2c 20 70 70 44 62 29 3b 0a 20 20 20 20 69 66 28  , ppDb);.    if(
5f50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
5f60: 26 20 2a 70 70 44 62 20 29 7b 0a 20 20 20 20 20  & *ppDb ){.     
5f70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
5f80: 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41 47 4d  ec(*ppDb, "PRAGM
5f90: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54  A encoding = 'UT
5fa0: 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20 30 29  F-16'", 0, 0, 0)
5fb0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
5fc0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
5fd0: 69 74 65 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f  ite3Tsd()->mallo
5fe0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 73  cFailed );.    s
5ff0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 43 6c 65 61  qlite3MallocClea
6000: 72 46 61 69 6c 65 64 28 29 3b 0a 20 20 7d 0a 20  rFailed();.  }. 
6010: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
6020: 65 28 70 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75  e(pVal);..  retu
6030: 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20  rn rc;.}.#endif 
6040: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
6050: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  TF16 */../*.** T
6060: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
6070: 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20  tine destroys a 
6080: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6090: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
60a0: 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  by.** the sqlite
60b0: 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74  3_compile() rout
60c0: 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ine. The integer
60d0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20   returned is an 
60e0: 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65  SQLITE_.** succe
60f0: 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20  ss/failure code 
6100: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
6110: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65  he result of exe
6120: 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75  cuting the virtu
6130: 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a  al.** machine..*
6140: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
6150: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
6160: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
6170: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
6180: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
6190: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
61a0: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
61b0: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
61c0: 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  nt sqlite3_final
61d0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ize(sqlite3_stmt
61e0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
61f0: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
6200: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
6210: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
6220: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
6230: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
6240: 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20  (Vdbe*)pStmt);. 
6250: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
6260: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
6270: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
6280: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
6290: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
62a0: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
62b0: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
62c0: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
62d0: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
62e0: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
62f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
6300: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
6310: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
6320: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
6330: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
6340: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
6350: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
6360: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
6370: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
6380: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
6390: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
63a0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
63b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
63c0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
63d0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
63e0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
63f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
6400: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
6410: 65 73 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d  eset((Vdbe*)pStm
6420: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
6430: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64  dbeMakeReady((Vd
6440: 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30  be*)pStmt, -1, 0
6450: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  , 0, 0);.  }.  r
6460: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
6470: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
6480: 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
6490: 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
64a0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
64b0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
64c0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
64d0: 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62  n(.  sqlite3* db
64e0: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
64f0: 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65  *zName, .  int e
6500: 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
6510: 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
6520: 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
6530: 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
6540: 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
6550: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a  CollSeq *pColl;.
6560: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
6570: 45 5f 4f 4b 3b 0a 20 20 0a 20 20 69 66 28 20 73  E_OK;.  .  if( s
6580: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
6590: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
65a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
65b0: 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  E;.  }..  /* If 
65c0: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
65d0: 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
65e0: 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20   encoding type, 
65f0: 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20  transform this. 
6600: 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51   ** to one of SQ
6610: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
6620: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75  SQLITE_UTF16BE u
6630: 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51  sing the.  ** SQ
6640: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6650: 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55   macro. SQLITE_U
6660: 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64  TF16 is not used
6670: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a   internally..  *
6680: 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c  /.  if( enc==SQL
6690: 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20  ITE_UTF16 ){.   
66a0: 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54   enc = SQLITE_UT
66b0: 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 0a  F16NATIVE;.  }..
66c0: 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54    if( enc!=SQLIT
66d0: 45 5f 55 54 46 38 20 26 26 20 65 6e 63 21 3d 53  E_UTF8 && enc!=S
66e0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 26 26  QLITE_UTF16LE &&
66f0: 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46   enc!=SQLITE_UTF
6700: 31 36 42 45 20 29 7b 0a 20 20 20 20 73 71 6c 69  16BE ){.    sqli
6710: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
6720: 49 54 45 5f 45 52 52 4f 52 2c 20 0a 20 20 20 20  ITE_ERROR, .    
6730: 20 20 20 20 22 50 61 72 61 6d 20 33 20 74 6f 20      "Param 3 to 
6740: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
6750: 6f 6c 6c 61 74 69 6f 6e 28 29 20 6d 75 73 74 20  ollation() must 
6760: 62 65 20 6f 6e 65 20 6f 66 20 22 0a 20 20 20 20  be one of ".    
6770: 20 20 20 20 22 53 51 4c 49 54 45 5f 55 54 46 38      "SQLITE_UTF8
6780: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20  , SQLITE_UTF16, 
6790: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
67a0: 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  r SQLITE_UTF16BE
67b0: 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 72 65 74  ".    );.    ret
67c0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
67d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63  ;.  }..  /* Chec
67e0: 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 20 69  k if this call i
67f0: 73 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65  s removing or re
6800: 70 6c 61 63 69 6e 67 20 61 6e 20 65 78 69 73 74  placing an exist
6810: 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20  ing collation . 
6820: 20 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20 49 66   ** sequence. If
6830: 20 73 6f 2c 20 61 6e 64 20 74 68 65 72 65 20 61   so, and there a
6840: 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 72  re active VMs, r
6850: 65 74 75 72 6e 20 62 75 73 79 2e 20 49 66 20 74  eturn busy. If t
6860: 68 65 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f  here.  ** are no
6870: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 69 6e 76   active VMs, inv
6880: 61 6c 69 64 61 74 65 20 61 6e 79 20 70 72 65 2d  alidate any pre-
6890: 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
68a0: 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c  nts..  */.  pCol
68b0: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
68c0: 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65  ollSeq(db, (u8)e
68d0: 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  nc, zName, strle
68e0: 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20  n(zName), 0);.  
68f0: 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f  if( pColl && pCo
6900: 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20  ll->xCmp ){.    
6910: 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
6920: 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  beCnt ){.      s
6930: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
6940: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
6950: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
6960: 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63   delete/modify c
6970: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
6980: 65 20 64 75 65 20 74 6f 20 61 63 74 69 76 65 20  e due to active 
6990: 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20  statements");.  
69a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
69b0: 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20  E_BUSY;.    }.  
69c0: 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
69d0: 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
69e0: 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43  s(db);.  }..  pC
69f0: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
6a00: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38  dCollSeq(db, (u8
6a10: 29 65 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72  )enc, zName, str
6a20: 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a  len(zName), 1);.
6a30: 20 20 69 66 28 20 30 3d 3d 70 43 6f 6c 6c 20 29    if( 0==pColl )
6a40: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
6a50: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 65 6c 73 65  E_NOMEM;.  }else
6a60: 7b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d  {.    pColl->xCm
6a70: 70 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20  p = xCompare;.  
6a80: 20 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d    pColl->pUser =
6a90: 20 70 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c   pCtx;.    pColl
6aa0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 3b 0a 20 20 7d  ->enc = enc;.  }
6ab0: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
6ac0: 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 72 65  db, rc, 0);.  re
6ad0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e  turn rc;.}..#ifn
6ae0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
6af0: 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69  UTF16./*.** Regi
6b00: 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61  ster a new colla
6b10: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
6b20: 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
6b30: 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e  handle db..*/.in
6b40: 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  t sqlite3_create
6b50: 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20  _collation16(.  
6b60: 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20  sqlite3* db, .  
6b70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
6b80: 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a  e, .  int enc, .
6b90: 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20    void* pCtx,.  
6ba0: 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76  int(*xCompare)(v
6bb0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76  oid*,int,const v
6bc0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76  oid*,int,const v
6bd0: 6f 69 64 2a 29 0a 29 7b 0a 20 20 63 68 61 72 20  oid*).){.  char 
6be0: 2a 7a 4e 61 6d 65 38 3b 0a 20 20 69 6e 74 20 72  *zName8;.  int r
6bf0: 63 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  c;.  if( sqlite3
6c00: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
6c10: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
6c20: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
6c30: 0a 20 20 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69  .  zName8 = sqli
6c40: 74 65 33 75 74 66 31 36 74 6f 38 28 7a 4e 61 6d  te3utf16to8(zNam
6c50: 65 2c 20 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73  e, -1);.  rc = s
6c60: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
6c70: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d  llation(db, zNam
6c80: 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78  e8, enc, pCtx, x
6c90: 43 6f 6d 70 61 72 65 29 3b 0a 20 20 73 71 6c 69  Compare);.  sqli
6ca0: 74 65 46 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a  teFree(zName8);.
6cb0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23    return rc;.}.#
6cc0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
6cd0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f  OMIT_UTF16 */../
6ce0: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
6cf0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
6d00: 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62  ce factory callb
6d10: 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61 74  ack with the dat
6d20: 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
6d30: 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20  db. Replace any 
6d40: 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61  previously insta
6d50: 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  lled collation s
6d60: 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e  equence factory.
6d70: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6d80: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
6d90: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
6da0: 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e   .  void *pCollN
6db0: 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76 6f 69  eededArg, .  voi
6dc0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
6dd0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
6de0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
6df0: 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20 69 66  t char*).){.  if
6e00: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
6e10: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
6e20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
6e30: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  SUSE;.  }.  db->
6e40: 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 78 43  xCollNeeded = xC
6e50: 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20 64 62 2d  ollNeeded;.  db-
6e60: 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d  >xCollNeeded16 =
6e70: 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e   0;.  db->pCollN
6e80: 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c  eededArg = pColl
6e90: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74  NeededArg;.  ret
6ea0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
6eb0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
6ec0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
6ed0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c  * Register a col
6ee0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
6ef0: 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b  factory callback
6f00: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
6f10: 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e  se handle.** db.
6f20: 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65   Replace any pre
6f30: 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65  viously installe
6f40: 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
6f50: 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f  ence factory..*/
6f60: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
6f70: 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28  lation_needed16(
6f80: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
6f90: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
6fa0: 65 64 65 64 41 72 67 2c 20 0a 20 20 76 6f 69 64  ededArg, .  void
6fb0: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
6fc0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
6fd0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
6fe0: 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69  st void*).){.  i
6ff0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
7000: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
7010: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
7020: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d  ISUSE;.  }.  db-
7030: 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 30  >xCollNeeded = 0
7040: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  ;.  db->xCollNee
7050: 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c 4e 65 65  ded16 = xCollNee
7060: 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e 70 43 6f  ded16;.  db->pCo
7070: 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43  llNeededArg = pC
7080: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
7090: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
70a0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
70b0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
70c0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
70d0: 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45  TE_OMIT_GLOBALRE
70e0: 43 4f 56 45 52 0a 2f 2a 0a 2a 2a 20 54 68 69 73  COVER./*.** This
70f0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 77   function is now
7100: 20 61 6e 20 61 6e 61 63 68 72 6f 6e 69 73 6d 2e   an anachronism.
7110: 20 49 74 20 75 73 65 64 20 74 6f 20 62 65 20 75   It used to be u
7120: 73 65 64 20 74 6f 20 72 65 63 6f 76 65 72 20 66  sed to recover f
7130: 72 6f 6d 20 61 0a 2a 2a 20 6d 61 6c 6c 6f 63 28  rom a.** malloc(
7140: 29 20 66 61 69 6c 75 72 65 2c 20 62 75 74 20 53  ) failure, but S
7150: 51 4c 69 74 65 20 6e 6f 77 20 64 6f 65 73 20 74  QLite now does t
7160: 68 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  his automaticall
7170: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
7180: 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72  3_global_recover
7190: 28 29 7b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  (){.  return SQL
71a0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
71b0: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
71c0: 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
71d0: 6f 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ot the database 
71e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 69 6e  connection is in
71f0: 20 61 75 74 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d   autocommit.** m
7200: 6f 64 65 2e 20 20 52 65 74 75 72 6e 20 54 52 55  ode.  Return TRU
7210: 45 20 69 66 20 69 74 20 69 73 20 61 6e 64 20 46  E if it is and F
7220: 41 4c 53 45 20 69 66 20 6e 6f 74 2e 20 20 41 75  ALSE if not.  Au
7230: 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73  tocommit mode is
7240: 20 6f 6e 0a 2a 2a 20 62 79 20 64 65 66 61 75 6c   on.** by defaul
7250: 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 69  t.  Autocommit i
7260: 73 20 64 69 73 61 62 6c 65 64 20 62 79 20 61 20  s disabled by a 
7270: 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e 74 20  BEGIN statement 
7280: 61 6e 64 20 72 65 65 6e 61 62 6c 65 64 0a 2a 2a  and reenabled.**
7290: 20 62 79 20 74 68 65 20 6e 65 78 74 20 43 4f 4d   by the next COM
72a0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e  MIT or ROLLBACK.
72b0: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 20 54 48 49 53  .**.******* THIS
72c0: 20 49 53 20 41 4e 20 45 58 50 45 52 49 4d 45 4e   IS AN EXPERIMEN
72d0: 54 41 4c 20 41 50 49 20 41 4e 44 20 49 53 20 53  TAL API AND IS S
72e0: 55 42 4a 45 43 54 20 54 4f 20 43 48 41 4e 47 45  UBJECT TO CHANGE
72f0: 20 2a 2a 2a 2a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73   ******.*/.int s
7300: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
7310: 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
7320: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
7330: 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a  >autoCommit;.}..
7340: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
7350: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  BUG./*.** The fo
7360: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
7370: 69 73 20 73 75 62 74 69 74 75 74 65 64 20 66 6f  is subtituted fo
7380: 72 20 63 6f 6e 73 74 61 6e 74 20 53 51 4c 49 54  r constant SQLIT
7390: 45 5f 43 4f 52 52 55 50 54 20 69 6e 0a 2a 2a 20  E_CORRUPT in.** 
73a0: 64 65 62 75 67 67 69 6e 67 20 62 75 69 6c 64 73  debugging builds
73b0: 2e 20 20 54 68 69 73 20 70 72 6f 76 69 64 65 73  .  This provides
73c0: 20 61 20 77 61 79 20 74 6f 20 73 65 74 20 61 20   a way to set a 
73d0: 62 72 65 61 6b 70 6f 69 6e 74 20 66 6f 72 20 77  breakpoint for w
73e0: 68 65 6e 0a 2a 2a 20 63 6f 72 72 75 70 74 69 6f  hen.** corruptio
73f0: 6e 20 69 73 20 66 69 72 73 74 20 64 65 74 65 63  n is first detec
7400: 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ted..*/.int sqli
7410: 74 65 33 43 6f 72 72 75 70 74 28 76 6f 69 64 29  te3Corrupt(void)
7420: 7b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  {.  return SQLIT
7430: 45 5f 43 4f 52 52 55 50 54 3b 0a 7d 0a 23 65 6e  E_CORRUPT;.}.#en
7440: 64 69 66 0a                                      dif.