/ Hex Artifact Content
Login

Artifact fc984008243a41ae70ebffb4076d09a20d92871d:


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 32 39 37 20 32 30 30 35 2f 30 38  ,v 1.297 2005/08
0280: 2f 31 31 20 30 32 3a 31 30 3a 31 39 20 64 72 68  /11 02:10:19 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h>../*.** The f
02e0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
02f0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
0300: 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42 49  by the SQLITE_BI
0310: 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20 53  GENDIAN and.** S
0320: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
0330: 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63 6f  AN macros..*/.co
0340: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
0350: 6e 65 20 3d 20 31 3b 0a 0a 23 69 66 6e 64 65 66  ne = 1;..#ifndef
0360: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
0370: 42 41 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a  BALRECOVER./*.**
0380: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
0390: 61 6c 6c 20 6f 70 65 6e 20 64 61 74 61 62 61 73  all open databas
03a0: 65 20 68 61 6e 64 6c 65 73 2e 20 54 68 69 73 20  e handles. This 
03b0: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  is used by the .
03c0: 2a 2a 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61  ** sqlite3_globa
03d0: 6c 5f 72 65 63 6f 76 65 72 28 29 20 66 75 6e 63  l_recover() func
03e0: 74 69 6f 6e 2e 20 45 6e 74 72 69 65 73 20 61 72  tion. Entries ar
03f0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
0400: 69 73 74 0a 2a 2a 20 62 79 20 6f 70 65 6e 44 61  ist.** by openDa
0410: 74 61 62 61 73 65 28 29 20 61 6e 64 20 72 65 6d  tabase() and rem
0420: 6f 76 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  oved by sqlite3_
0430: 63 6c 6f 73 65 28 29 2e 0a 2a 2f 0a 73 74 61 74  close()..*/.stat
0440: 69 63 20 73 71 6c 69 74 65 33 20 2a 70 44 62 4c  ic sqlite3 *pDbL
0450: 69 73 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  ist = 0;.#endif.
0460: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
0470: 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 20 0a 2a  OMIT_UTF16./* .*
0480: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 72 61  * Return the tra
0490: 6e 73 69 65 6e 74 20 73 71 6c 69 74 65 33 5f 76  nsient sqlite3_v
04a0: 61 6c 75 65 20 6f 62 6a 65 63 74 20 75 73 65 64  alue object used
04b0: 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 63 6f   for encoding co
04c0: 6e 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 64 75 72  nversions.** dur
04d0: 69 6e 67 20 53 51 4c 20 63 6f 6d 70 69 6c 61 74  ing SQL compilat
04e0: 69 6f 6e 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f  ion..*/.sqlite3_
04f0: 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 47 65  value *sqlite3Ge
0500: 74 54 72 61 6e 73 69 65 6e 74 56 61 6c 75 65 28  tTransientValue(
0510: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
0520: 69 66 28 20 21 64 62 2d 3e 70 56 61 6c 75 65 20  if( !db->pValue 
0530: 29 7b 0a 20 20 20 20 64 62 2d 3e 70 56 61 6c 75  ){.    db->pValu
0540: 65 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  e = sqlite3Value
0550: 4e 65 77 28 29 3b 0a 20 20 7d 0a 20 20 72 65 74  New();.  }.  ret
0560: 75 72 6e 20 64 62 2d 3e 70 56 61 6c 75 65 3b 0a  urn db->pValue;.
0570: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0580: 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  The version of t
0590: 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f  he library.*/.co
05a0: 6e 73 74 20 63 68 61 72 20 72 63 73 69 64 33 5b  nst char rcsid3[
05b0: 5d 20 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64  ] = "@(#) \044Id
05c0: 3a 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  : SQLite version
05d0: 20 22 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   " SQLITE_VERSIO
05e0: 4e 20 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68  N " $";.const ch
05f0: 61 72 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69  ar sqlite3_versi
0600: 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45  on[] = SQLITE_VE
0610: 52 53 49 4f 4e 3b 0a 63 6f 6e 73 74 20 63 68 61  RSION;.const cha
0620: 72 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  r *sqlite3_libve
0630: 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65 74  rsion(void){ ret
0640: 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 65 72 73  urn sqlite3_vers
0650: 69 6f 6e 3b 20 7d 0a 69 6e 74 20 73 71 6c 69 74  ion; }.int sqlit
0660: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
0670: 6d 62 65 72 28 76 6f 69 64 29 7b 20 72 65 74 75  mber(void){ retu
0680: 72 6e 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  rn SQLITE_VERSIO
0690: 4e 5f 4e 55 4d 42 45 52 3b 20 7d 0a 0a 2f 2a 0a  N_NUMBER; }../*.
06a0: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 64  ** This is the d
06b0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
06c0: 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20   function named 
06d0: 22 42 49 4e 41 52 59 22 20 77 68 69 63 68 20 69  "BINARY" which i
06e0: 73 20 61 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69  s always.** avai
06f0: 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  lable..*/.static
0700: 20 69 6e 74 20 62 69 6e 43 6f 6c 6c 46 75 6e 63   int binCollFunc
0710: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
0720: 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20  d,.  int nKey1, 
0730: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
0740: 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20  1,.  int nKey2, 
0750: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
0760: 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e  2.){.  int rc, n
0770: 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b  ;.  n = nKey1<nK
0780: 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b  ey2 ? nKey1 : nK
0790: 65 79 32 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63  ey2;.  rc = memc
07a0: 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c  mp(pKey1, pKey2,
07b0: 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30   n);.  if( rc==0
07c0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65   ){.    rc = nKe
07d0: 79 31 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a  y1 - nKey2;.  }.
07e0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
07f0: 2f 2a 0a 2a 2a 20 41 6e 6f 74 68 65 72 20 62 75  /*.** Another bu
0800: 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67  ilt-in collating
0810: 20 73 65 71 75 65 6e 63 65 3a 20 4e 4f 43 41 53   sequence: NOCAS
0820: 45 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 63  E. .**.** This c
0830: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
0840: 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f  e is intended to
0850: 20 62 65 20 75 73 65 64 20 66 6f 72 20 22 63 61   be used for "ca
0860: 73 65 20 69 6e 64 65 70 65 6e 64 61 6e 74 0a 2a  se independant.*
0870: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 22 2e 20 53  * comparison". S
0880: 51 4c 69 74 65 27 73 20 6b 6e 6f 77 6c 65 64 67  QLite's knowledg
0890: 65 20 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c  e of upper and l
08a0: 6f 77 65 72 20 63 61 73 65 20 65 71 75 69 76 61  ower case equiva
08b0: 6c 65 6e 74 73 0a 2a 2a 20 65 78 74 65 6e 64 73  lents.** extends
08c0: 20 6f 6e 6c 79 20 74 6f 20 74 68 65 20 32 36 20   only to the 26 
08d0: 63 68 61 72 61 63 74 65 72 73 20 75 73 65 64 20  characters used 
08e0: 69 6e 20 74 68 65 20 45 6e 67 6c 69 73 68 20 6c  in the English l
08f0: 61 6e 67 75 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 41  anguage..**.** A
0900: 74 20 74 68 65 20 6d 6f 6d 65 6e 74 20 74 68 65  t the moment the
0910: 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 55 54 46  re is only a UTF
0920: 2d 38 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  -8 implementatio
0930: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
0940: 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67   nocaseCollating
0950: 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  Func(.  void *No
0960: 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65  tUsed,.  int nKe
0970: 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y1, const void *
0980: 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65  pKey1,.  int nKe
0990: 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y2, const void *
09a0: 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72  pKey2.){.  int r
09b0: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43   = sqlite3StrNIC
09c0: 6d 70 28 0a 20 20 20 20 20 20 28 63 6f 6e 73 74  mp(.      (const
09d0: 20 63 68 61 72 20 2a 29 70 4b 65 79 31 2c 20 28   char *)pKey1, (
09e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65  const char *)pKe
09f0: 79 32 2c 20 28 6e 4b 65 79 31 3c 6e 4b 65 79 32  y2, (nKey1<nKey2
0a00: 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32 29 3b 0a  )?nKey1:nKey2);.
0a10: 20 20 69 66 28 20 30 3d 3d 72 20 29 7b 0a 20 20    if( 0==r ){.  
0a20: 20 20 72 20 3d 20 6e 4b 65 79 31 2d 6e 4b 65 79    r = nKey1-nKey
0a30: 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  2;.  }.  return 
0a40: 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  r;.}../*.** Retu
0a50: 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20  rn the ROWID of 
0a60: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
0a70: 69 6e 73 65 72 74 0a 2a 2f 0a 73 71 6c 69 74 65  insert.*/.sqlite
0a80: 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 6c  _int64 sqlite3_l
0a90: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
0aa0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
0ab0: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73 74   return db->last
0ac0: 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Rowid;.}../*.** 
0ad0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
0ae0: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  r of changes in 
0af0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
0b00: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
0b10: 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  exec()..*/.int s
0b20: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 73  qlite3_changes(s
0b30: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72  qlite3 *db){.  r
0b40: 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67  eturn db->nChang
0b50: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  e;.}../*.** Retu
0b60: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
0b70: 20 63 68 61 6e 67 65 73 20 73 69 6e 63 65 20 74   changes since t
0b80: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
0b90: 6c 65 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 2a  le was opened..*
0ba0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 6f  /.int sqlite3_to
0bb0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 73 71 6c 69  tal_changes(sqli
0bc0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75  te3 *db){.  retu
0bd0: 72 6e 20 64 62 2d 3e 6e 54 6f 74 61 6c 43 68 61  rn db->nTotalCha
0be0: 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c  nge;.}../*.** Cl
0bf0: 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ose an existing 
0c00: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a  SQLite database.
0c10: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
0c20: 6c 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 64 62  lose(sqlite3 *db
0c30: 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a 69  ){.  HashElem *i
0c40: 3b 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 69 66  ;.  int j;..  if
0c50: 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74  ( !db ){.    ret
0c60: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  urn SQLITE_OK;. 
0c70: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
0c80: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
0c90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
0ca0: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
0cb0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
0cc0: 53 53 45 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  SSE.  sqlite3_fi
0cd0: 6e 61 6c 69 7a 65 28 64 62 2d 3e 70 46 65 74 63  nalize(db->pFetc
0ce0: 68 29 3b 0a 23 65 6e 64 69 66 20 0a 0a 20 20 2f  h);.#endif ..  /
0cf0: 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  * If there are a
0d00: 6e 79 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56  ny outstanding V
0d10: 4d 73 2c 20 72 65 74 75 72 6e 20 53 51 4c 49 54  Ms, return SQLIT
0d20: 45 5f 42 55 53 59 2e 20 2a 2f 0a 20 20 69 66 28  E_BUSY. */.  if(
0d30: 20 64 62 2d 3e 70 56 64 62 65 20 29 7b 0a 20 20   db->pVdbe ){.  
0d40: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
0d50: 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20  b, SQLITE_BUSY, 
0d60: 0a 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65  .        "Unable
0d70: 20 74 6f 20 63 6c 6f 73 65 20 64 75 65 20 74 6f   to close due to
0d80: 20 75 6e 66 69 6e 61 6c 69 73 65 64 20 73 74 61   unfinalised sta
0d90: 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 72  tements");.    r
0da0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
0db0: 59 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  Y;.  }.  assert(
0dc0: 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
0dd0: 68 65 63 6b 28 64 62 29 20 29 3b 0a 0a 20 20 2f  heck(db) );..  /
0de0: 2a 20 46 49 58 20 4d 45 3a 20 64 62 2d 3e 6d 61  * FIX ME: db->ma
0df0: 67 69 63 20 6d 61 79 20 62 65 20 73 65 74 20 74  gic may be set t
0e00: 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  o SQLITE_MAGIC_C
0e10: 4c 4f 53 45 44 20 69 66 20 74 68 65 20 64 61 74  LOSED if the dat
0e20: 61 62 61 73 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f  abase.  ** canno
0e30: 74 20 62 65 20 6f 70 65 6e 65 64 20 66 6f 72 20  t be opened for 
0e40: 73 6f 6d 65 20 72 65 61 73 6f 6e 2e 20 53 6f 20  some reason. So 
0e50: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6e 65 65  this routine nee
0e60: 64 73 20 74 6f 20 72 75 6e 20 69 6e 0a 20 20 2a  ds to run in.  *
0e70: 2a 20 74 68 61 74 20 63 61 73 65 2e 20 42 75 74  * that case. But
0e80: 20 6d 61 79 62 65 20 74 68 65 72 65 20 73 68 6f   maybe there sho
0e90: 75 6c 64 20 62 65 20 61 6e 20 65 78 74 72 61 20  uld be an extra 
0ea0: 6d 61 67 69 63 20 76 61 6c 75 65 20 66 6f 72 20  magic value for 
0eb0: 74 68 65 0a 20 20 2a 2a 20 22 66 61 69 6c 65 64  the.  ** "failed
0ec0: 20 74 6f 20 6f 70 65 6e 22 20 73 74 61 74 65 2e   to open" state.
0ed0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
0ee0: 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41  magic!=SQLITE_MA
0ef0: 47 49 43 5f 43 4c 4f 53 45 44 20 26 26 20 73 71  GIC_CLOSED && sq
0f00: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
0f10: 29 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e  ) ){.    /* prin
0f20: 74 66 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53  tf("DID NOT CLOS
0f30: 45 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74  E\n"); fflush(st
0f40: 64 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65  dout); */.    re
0f50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
0f60: 52 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 6a 3d  R;.  }..  for(j=
0f70: 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b  0; j<db->nDb; j+
0f80: 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20 44  +){.    struct D
0f90: 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  b *pDb = &db->aD
0fa0: 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70 44  b[j];.    if( pD
0fb0: 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20  b->pBt ){.      
0fc0: 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73  sqlite3BtreeClos
0fd0: 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  e(pDb->pBt);.   
0fe0: 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b     pDb->pBt = 0;
0ff0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
1000: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
1010: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
1020: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 44    assert( db->nD
1030: 62 3c 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74  b<=2 );.  assert
1040: 28 20 64 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61  ( db->aDb==db->a
1050: 44 62 53 74 61 74 69 63 20 29 3b 0a 20 20 66 6f  DbStatic );.  fo
1060: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
1070: 72 73 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b  rst(&db->aFunc);
1080: 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68   i; i=sqliteHash
1090: 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75  Next(i)){.    Fu
10a0: 6e 63 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70  ncDef *pFunc, *p
10b0: 4e 65 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46  Next;.    for(pF
10c0: 75 6e 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29  unc = (FuncDef*)
10d0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
10e0: 29 3b 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d  ); pFunc; pFunc=
10f0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e  pNext){.      pN
1100: 65 78 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65  ext = pFunc->pNe
1110: 78 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  xt;.      sqlite
1120: 46 72 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20  Free(pFunc);.   
1130: 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d   }.  }..  for(i=
1140: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
1150: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
1160: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
1170: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c  ext(i)){.    Col
1180: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
1190: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
11a0: 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20  ashData(i);.    
11b0: 73 71 6c 69 74 65 46 72 65 65 28 70 43 6f 6c 6c  sqliteFree(pColl
11c0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
11d0: 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61  HashClear(&db->a
11e0: 43 6f 6c 6c 53 65 71 29 3b 0a 0a 20 20 73 71 6c  CollSeq);..  sql
11f0: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
1200: 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c  b->aFunc);.  sql
1210: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
1220: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20  LITE_OK, 0); /* 
1230: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
1240: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
1250: 69 6e 67 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64  ings. */.  if( d
1260: 62 2d 3e 70 56 61 6c 75 65 20 29 7b 0a 20 20 20  b->pValue ){.   
1270: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
1280: 65 28 64 62 2d 3e 70 56 61 6c 75 65 29 3b 0a 20  e(db->pValue);. 
1290: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72   }.  if( db->pEr
12a0: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
12b0: 56 61 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45  ValueFree(db->pE
12c0: 72 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65  rr);.  }..#ifnde
12d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c  f SQLITE_OMIT_GL
12e0: 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 7b 0a  OBALRECOVER.  {.
12f0: 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70 50 72      sqlite3 *pPr
1300: 65 76 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4f  ev;.    sqlite3O
1310: 73 45 6e 74 65 72 4d 75 74 65 78 28 29 3b 0a 20  sEnterMutex();. 
1320: 20 20 20 70 50 72 65 76 20 3d 20 70 44 62 4c 69     pPrev = pDbLi
1330: 73 74 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 70  st;.    while( p
1340: 50 72 65 76 20 26 26 20 70 50 72 65 76 2d 3e 70  Prev && pPrev->p
1350: 4e 65 78 74 21 3d 64 62 20 29 7b 0a 20 20 20 20  Next!=db ){.    
1360: 20 20 70 50 72 65 76 20 3d 20 70 50 72 65 76 2d    pPrev = pPrev-
1370: 3e 70 4e 65 78 74 3b 0a 20 20 20 20 7d 0a 20 20  >pNext;.    }.  
1380: 20 20 69 66 28 20 70 50 72 65 76 20 29 7b 0a 20    if( pPrev ){. 
1390: 20 20 20 20 20 70 50 72 65 76 2d 3e 70 4e 65 78       pPrev->pNex
13a0: 74 20 3d 20 64 62 2d 3e 70 4e 65 78 74 3b 0a 20  t = db->pNext;. 
13b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13c0: 61 73 73 65 72 74 28 20 70 44 62 4c 69 73 74 3d  assert( pDbList=
13d0: 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 70 44 62  =db );.      pDb
13e0: 4c 69 73 74 20 3d 20 64 62 2d 3e 70 4e 65 78 74  List = db->pNext
13f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
1400: 74 65 33 4f 73 4c 65 61 76 65 4d 75 74 65 78 28  te3OsLeaveMutex(
1410: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
1420: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
1430: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b  ITE_MAGIC_ERROR;
1440: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64 62  .  sqliteFree(db
1450: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
1460: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
1470: 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74  Rollback all dat
1480: 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a  abase files..*/.
1490: 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
14a0: 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 20  backAll(sqlite3 
14b0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  *db){.  int i;. 
14c0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
14d0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  nDb; i++){.    i
14e0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
14f0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
1500: 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28  e3BtreeRollback(
1510: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b  db->aDb[i].pBt);
1520: 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69  .      db->aDb[i
1530: 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20  ].inTrans = 0;. 
1540: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
1550: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
1560: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 7d 0a  chema(db, 0);.}.
1570: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1580: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 68  static string th
1590: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
15a0: 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73   kind of error s
15b0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
15c0: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
15d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
15e0: 74 65 33 45 72 72 53 74 72 28 69 6e 74 20 72 63  te3ErrStr(int rc
15f0: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
1600: 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63  *z;.  switch( rc
1610: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
1620: 49 54 45 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73  ITE_ROW:.    cas
1630: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20  e SQLITE_DONE:. 
1640: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f     case SQLITE_O
1650: 4b 3a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22  K:         z = "
1660: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20  not an error";  
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1680: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1690: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
16a0: 52 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22  RROR:      z = "
16b0: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20  SQL logic error 
16c0: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
16d0: 61 73 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20  ase";   break;. 
16e0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50     case SQLITE_P
16f0: 45 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  ERM:       z = "
1700: 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f  access permissio
1710: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
1720: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1730: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
1740: 42 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22  BORT:      z = "
1750: 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74  callback request
1760: 65 64 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b  ed query abort";
1770: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1780: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
1790: 55 53 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  USY:       z = "
17a0: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
17b0: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
17c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
17d0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c     case SQLITE_L
17e0: 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22  OCKED:     z = "
17f0: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
1800: 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20  s locked";      
1810: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1820: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
1830: 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22  OMEM:      z = "
1840: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20  out of memory"; 
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1870: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
1880: 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22  EADONLY:   z = "
1890: 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
18a0: 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61   a readonly data
18b0: 62 61 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20  base";  break;. 
18c0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
18d0: 4e 54 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22  NTERRUPT:  z = "
18e0: 69 6e 74 65 72 72 75 70 74 65 64 22 3b 20 20 20  interrupted";   
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1910: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
1920: 4f 45 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22  OERR:      z = "
1930: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b  disk I/O error";
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1960: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
1970: 4f 52 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22  ORRUPT:    z = "
1980: 64 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d  database disk im
1990: 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64  age is malformed
19a0: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
19b0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
19c0: 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  ULL:       z = "
19d0: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
19e0: 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20   is full";      
19f0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1a00: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
1a10: 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22  ANTOPEN:   z = "
1a20: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
1a30: 61 74 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20  atabase file";  
1a40: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1a50: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50     case SQLITE_P
1a60: 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22  ROTOCOL:   z = "
1a70: 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67  database locking
1a80: 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72   protocol failur
1a90: 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  e";     break;. 
1aa0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
1ab0: 4d 50 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22  MPTY:      z = "
1ac0: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e  table contains n
1ad0: 6f 20 64 61 74 61 22 3b 20 20 20 20 20 20 20 20  o data";        
1ae0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1af0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53     case SQLITE_S
1b00: 43 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22  CHEMA:     z = "
1b10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1b20: 68 61 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20  has changed";   
1b30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1b40: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
1b50: 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22  ONSTRAINT: z = "
1b60: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
1b70: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
1b80: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1b90: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d     case SQLITE_M
1ba0: 49 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22  ISMATCH:   z = "
1bb0: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
1bc0: 68 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  h";             
1bd0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1be0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d     case SQLITE_M
1bf0: 49 53 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22  ISUSE:     z = "
1c00: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
1c10: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
1c20: 71 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20  quence";break;. 
1c30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
1c40: 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22  OLFS:      z = "
1c50: 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72  kernel lacks lar
1c60: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22  ge file support"
1c70: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
1c80: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
1c90: 55 54 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  UTH:       z = "
1ca0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65  authorization de
1cb0: 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  nied";          
1cc0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1cd0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
1ce0: 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20 22  ORMAT:     z = "
1cf0: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
1d00: 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22  se format error"
1d10: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
1d20: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
1d30: 41 4e 47 45 3a 20 20 20 20 20 20 7a 20 3d 20 22  ANGE:      z = "
1d40: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
1d50: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
1d60: 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  e";     break;. 
1d70: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
1d80: 4f 54 41 44 42 3a 20 20 20 20 20 7a 20 3d 20 22  OTADB:     z = "
1d90: 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65  file is encrypte
1da0: 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61  d or is not a da
1db0: 74 61 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20  tabase";break;. 
1dc0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
1dd0: 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22             z = "
1de0: 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20  unknown error"; 
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e10: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d   }.  return z;.}
1e20: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
1e30: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tine implements 
1e40: 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  a busy callback 
1e50: 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20  that sleeps and 
1e60: 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75  tries.** again u
1e70: 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76  ntil a timeout v
1e80: 61 6c 75 65 20 69 73 20 72 65 61 63 68 65 64 2e  alue is reached.
1e90: 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61    The timeout va
1ea0: 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74  lue is.** an int
1eb0: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d  eger number of m
1ec0: 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73  illiseconds pass
1ed0: 65 64 20 69 6e 20 61 73 20 74 68 65 20 66 69 72  ed in as the fir
1ee0: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  st.** argument..
1ef0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
1f00: 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43  liteDefaultBusyC
1f10: 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a  allback(. void *
1f20: 70 74 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ptr,            
1f30: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
1f40: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e  onnection */. in
1f50: 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20  t count         
1f60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f70: 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20   of times table 
1f80: 68 61 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f  has been busy */
1f90: 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .){.#if SQLITE_M
1fa0: 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20  IN_SLEEP_MS==1. 
1fb0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
1fc0: 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20   delays[] =.    
1fd0: 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20   { 1, 2, 5, 10, 
1fe0: 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20  15, 20, 25, 25, 
1ff0: 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 31   25,  50,  50, 1
2000: 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63  00 };.  static c
2010: 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73 5b 5d  onst u8 totals[]
2020: 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20   =.     { 0, 1, 
2030: 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35  3,  8, 18, 33, 5
2040: 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c  3, 78, 103, 128,
2050: 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23 20 64   178, 228 };.# d
2060: 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 28 73 69  efine NDELAY (si
2070: 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f 73 69 7a  zeof(delays)/siz
2080: 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a  eof(delays[0])).
2090: 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20    int timeout = 
20a0: 28 28 73 71 6c 69 74 65 33 20 2a 29 70 74 72 29  ((sqlite3 *)ptr)
20b0: 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b 0a 20  ->busyTimeout;. 
20c0: 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72 69 6f   int delay, prio
20d0: 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 63 6f  r;..  assert( co
20e0: 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  unt>=0 );.  if( 
20f0: 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41 59 20 29  count < NDELAY )
2100: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  {.    delay = de
2110: 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 20  lays[count];.   
2120: 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b   prior = totals[
2130: 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c 73 65 7b  count];.  }else{
2140: 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c  .    delay = del
2150: 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a 20  ays[NDELAY-1];. 
2160: 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c     prior = total
2170: 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64 65  s[NDELAY-1] + de
2180: 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e 44 45 4c  lay*(count-(NDEL
2190: 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 69 66  AY-1));.  }.  if
21a0: 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79 20  ( prior + delay 
21b0: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
21c0: 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74   delay = timeout
21d0: 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69 66   - prior;.    if
21e0: 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74  ( delay<=0 ) ret
21f0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
2200: 69 74 65 33 4f 73 53 6c 65 65 70 28 64 65 6c 61  ite3OsSleep(dela
2210: 79 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a  y);.  return 1;.
2220: 23 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d 65  #else.  int time
2230: 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20  out = ((sqlite3 
2240: 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65  *)ptr)->busyTime
2250: 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e  out;.  if( (coun
2260: 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65  t+1)*1000 > time
2270: 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72  out ){.    retur
2280: 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n 0;.  }.  sqlit
2290: 65 33 4f 73 53 6c 65 65 70 28 31 30 30 30 29 3b  e3OsSleep(1000);
22a0: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e  .  return 1;.#en
22b0: 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  dif.}../*.** Inv
22c0: 6f 6b 65 20 74 68 65 20 67 69 76 65 6e 20 62 75  oke the given bu
22d0: 73 79 20 68 61 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a  sy handler..**.*
22e0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
22f0: 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 6e  s called when an
2300: 20 6f 70 65 72 61 74 69 6f 6e 20 66 61 69 6c 65   operation faile
2310: 64 20 77 69 74 68 20 61 20 6c 6f 63 6b 2e 0a 2a  d with a lock..*
2320: 2a 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e  * If this routin
2330: 65 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  e returns non-ze
2340: 72 6f 2c 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ro, the lock is 
2350: 72 65 74 72 69 65 64 2e 20 20 49 66 20 69 74 0a  retried.  If it.
2360: 2a 2a 20 72 65 74 75 72 6e 73 20 30 2c 20 74 68  ** returns 0, th
2370: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 62 6f 72  e operation abor
2380: 74 73 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ts with an SQLIT
2390: 45 5f 42 55 53 59 20 65 72 72 6f 72 2e 0a 2a 2f  E_BUSY error..*/
23a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
23b0: 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
23c0: 73 79 48 61 6e 64 6c 65 72 20 2a 70 29 7b 0a 20  syHandler *p){. 
23d0: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70   int rc;.  if( p
23e0: 3d 3d 30 20 7c 7c 20 70 2d 3e 78 46 75 6e 63 3d  ==0 || p->xFunc=
23f0: 3d 30 20 7c 7c 20 70 2d 3e 6e 42 75 73 79 3c 30  =0 || p->nBusy<0
2400: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72   ) return 0;.  r
2410: 63 20 3d 20 70 2d 3e 78 46 75 6e 63 28 70 2d 3e  c = p->xFunc(p->
2420: 70 41 72 67 2c 20 70 2d 3e 6e 42 75 73 79 29 3b  pArg, p->nBusy);
2430: 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a  .  if( rc==0 ){.
2440: 20 20 20 20 70 2d 3e 6e 42 75 73 79 20 3d 20 2d      p->nBusy = -
2450: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2460: 70 2d 3e 6e 42 75 73 79 2b 2b 3b 0a 20 20 7d 0a  p->nBusy++;.  }.
2470: 20 20 72 65 74 75 72 6e 20 72 63 3b 20 0a 7d 0a    return rc; .}.
2480: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
2490: 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75 73  ine sets the bus
24a0: 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  y callback for a
24b0: 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73  n Sqlite databas
24c0: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65  e to the.** give
24d0: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
24e0: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76  ion with the giv
24f0: 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  en argument..*/.
2500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79  int sqlite3_busy
2510: 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69  _handler(.  sqli
2520: 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28  te3 *db,.  int (
2530: 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 69 6e  *xBusy)(void*,in
2540: 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67  t),.  void *pArg
2550: 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .){.  if( sqlite
2560: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
2570: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
2580: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
2590: 7d 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  }.  db->busyHand
25a0: 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42 75 73  ler.xFunc = xBus
25b0: 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  y;.  db->busyHan
25c0: 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41 72 67  dler.pArg = pArg
25d0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
25e0: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
25f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2600: 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
2610: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
2620: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a  SS_CALLBACK./*.*
2630: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
2640: 65 74 73 20 74 68 65 20 70 72 6f 67 72 65 73 73  ets the progress
2650: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e   callback for an
2660: 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73 65   Sqlite database
2670: 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e   to the.** given
2680: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
2690: 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76 65  on with the give
26a0: 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65 20  n argument. The 
26b0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
26c0: 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 69 6e 76  k will.** be inv
26d0: 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f 70 73 20  oked every nOps 
26e0: 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76 6f 69 64  opcodes..*/.void
26f0: 20 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73   sqlite3_progres
2700: 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c  s_handler(.  sql
2710: 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 69 6e 74  ite3 *db, .  int
2720: 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20 28 2a 78   nOps,.  int (*x
2730: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 2a 29  Progress)(void*)
2740: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a  , .  void *pArg.
2750: 29 7b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  ){.  if( !sqlite
2760: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
2770: 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 4f 70 73   ){.    if( nOps
2780: 3e 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  >0 ){.      db->
2790: 78 50 72 6f 67 72 65 73 73 20 3d 20 78 50 72 6f  xProgress = xPro
27a0: 67 72 65 73 73 3b 0a 20 20 20 20 20 20 64 62 2d  gress;.      db-
27b0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20  >nProgressOps = 
27c0: 6e 4f 70 73 3b 0a 20 20 20 20 20 20 64 62 2d 3e  nOps;.      db->
27d0: 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70  pProgressArg = p
27e0: 41 72 67 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Arg;.    }else{.
27f0: 20 20 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72        db->xProgr
2800: 65 73 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  ess = 0;.      d
2810: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
2820: 3d 20 30 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70  = 0;.      db->p
2830: 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 30 3b  ProgressArg = 0;
2840: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6e  .    }.  }.}.#en
2850: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  dif.../*.** This
2860: 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c 6c   routine install
2870: 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73 79  s a default busy
2880: 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77 61   handler that wa
2890: 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73  its for the.** s
28a0: 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20  pecified number 
28b0: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
28c0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
28d0: 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74   0..*/.int sqlit
28e0: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
28f0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
2900: 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30   ms){.  if( ms>0
2910: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 62 75 73 79   ){.    db->busy
2920: 54 69 6d 65 6f 75 74 20 3d 20 6d 73 3b 0a 20 20  Timeout = ms;.  
2930: 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68    sqlite3_busy_h
2940: 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69 74  andler(db, sqlit
2950: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
2960: 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 64 62 29  back, (void*)db)
2970: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2980: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
2990: 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20  ler(db, 0, 0);. 
29a0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
29b0: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
29c0: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
29d0: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
29e0: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
29f0: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
2a00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2a10: 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74  _interrupt(sqlit
2a20: 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21  e3 *db){.  if( !
2a30: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2a40: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 64 62  ck(db) ){.    db
2a50: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
2a60: 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  E_Interrupt;.  }
2a70: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77  .}../*.** Window
2a80: 73 20 73 79 73 74 65 6d 73 20 73 68 6f 75 6c 64  s systems should
2a90: 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69   call this routi
2aa0: 6e 65 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72  ne to free memor
2ab0: 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 72 65 74  y that.** is ret
2ac0: 75 72 6e 65 64 20 69 6e 20 74 68 65 20 69 6e 20  urned in the in 
2ad0: 74 68 65 20 65 72 72 6d 73 67 20 70 61 72 61 6d  the errmsg param
2ae0: 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f  eter of sqlite3_
2af0: 6f 70 65 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53  open() when.** S
2b00: 51 4c 69 74 65 20 69 73 20 61 20 44 4c 4c 2e 20  QLite is a DLL. 
2b10: 20 46 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   For some reason
2b20: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f  , it does not wo
2b30: 72 6b 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28  rk to call free(
2b40: 29 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a  ).** directly..*
2b50: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 77  *.** Note that w
2b60: 65 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20 66  e need to call f
2b70: 72 65 65 28 29 20 6e 6f 74 20 73 71 6c 69 74 65  ree() not sqlite
2b80: 46 72 65 65 28 29 20 68 65 72 65 2e 0a 2a 2f 0a  Free() here..*/.
2b90: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 66 72 65  void sqlite3_fre
2ba0: 65 28 63 68 61 72 20 2a 70 29 7b 20 66 72 65 65  e(char *p){ free
2bb0: 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  (p); }../*.** Cr
2bc0: 65 61 74 65 20 6e 65 77 20 75 73 65 72 20 66 75  eate new user fu
2bd0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20  nctions..*/.int 
2be0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
2bf0: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
2c00: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
2c10: 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e  char *zFunctionN
2c20: 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c  ame,.  int nArg,
2c30: 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f  .  int enc,.  vo
2c40: 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20  id *pUserData,. 
2c50: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
2c60: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2c70: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2c80: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2c90: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
2ca0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2cb0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2cc0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28   void (*xFinal)(
2cd0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2ce0: 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  ).){.  FuncDef *
2cf0: 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  p;.  int nName;.
2d00: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2d10: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
2d20: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2d30: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
2d40: 20 69 66 28 20 7a 46 75 6e 63 74 69 6f 6e 4e 61   if( zFunctionNa
2d50: 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20 20 20 28  me==0 ||.      (
2d60: 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c  xFunc && (xFinal
2d70: 20 7c 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a   || xStep)) || .
2d80: 20 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26        (!xFunc &&
2d90: 20 28 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74   (xFinal && !xSt
2da0: 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21  ep)) ||.      (!
2db0: 78 46 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61  xFunc && (!xFina
2dc0: 6c 20 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a  l && xStep)) ||.
2dd0: 20 20 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c        (nArg<-1 |
2de0: 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20  | nArg>127) ||. 
2df0: 20 20 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65       (255<(nName
2e00: 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74   = strlen(zFunct
2e10: 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20  ionName))) ){.  
2e20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2e30: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 23 69  ERROR;.  }.  .#i
2e40: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e50: 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 49 66 20  T_UTF16.  /* If 
2e60: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
2e70: 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
2e80: 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20   encoding type, 
2e90: 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20  transform this. 
2ea0: 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51   ** to one of SQ
2eb0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
2ec0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75  SQLITE_UTF16BE u
2ed0: 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51  sing the.  ** SQ
2ee0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
2ef0: 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55   macro. SQLITE_U
2f00: 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64  TF16 is not used
2f10: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a   internally..  *
2f20: 2a 0a 20 20 2a 2a 20 49 66 20 53 51 4c 49 54 45  *.  ** If SQLITE
2f30: 5f 41 4e 59 20 69 73 20 73 70 65 63 69 66 69 65  _ANY is specifie
2f40: 64 2c 20 61 64 64 20 74 68 72 65 65 20 76 65 72  d, add three ver
2f50: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 66 75 6e  sions of the fun
2f60: 63 74 69 6f 6e 0a 20 20 2a 2a 20 74 6f 20 74 68  ction.  ** to th
2f70: 65 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 20 20  e hash table..  
2f80: 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51  */.  if( enc==SQ
2f90: 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20  LITE_UTF16 ){.  
2fa0: 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55    enc = SQLITE_U
2fb0: 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 65  TF16NATIVE;.  }e
2fc0: 6c 73 65 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c  lse if( enc==SQL
2fd0: 49 54 45 5f 41 4e 59 20 29 7b 0a 20 20 20 20 69  ITE_ANY ){.    i
2fe0: 6e 74 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20  nt rc;.    rc = 
2ff0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3000: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
3010: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  ctionName, nArg,
3020: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20   SQLITE_UTF8,.  
3030: 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61         pUserData
3040: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
3050: 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28  xFinal);.    if(
3060: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
3070: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
3080: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
3090: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
30a0: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
30b0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
30c0: 31 36 4c 45 2c 0a 20 20 20 20 20 20 20 20 70 55  16LE,.        pU
30d0: 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20  serData, xFunc, 
30e0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a  xStep, xFinal);.
30f0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
3100: 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72  TE_OK ) return r
3110: 63 3b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c  c;.    enc = SQL
3120: 49 54 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d  ITE_UTF16BE;.  }
3130: 0a 23 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53  .#else.  enc = S
3140: 51 4c 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64  QLITE_UTF8;.#end
3150: 69 66 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b  if.  .  /* Check
3160: 20 69 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   if an existing 
3170: 66 75 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  function is bein
3180: 67 20 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20  g overridden or 
3190: 64 65 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a  deleted. If so,.
31a0: 20 20 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61    ** and there a
31b0: 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74  re active VMs, t
31c0: 68 65 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54  hen return SQLIT
31d0: 45 5f 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e  E_BUSY. If a fun
31e0: 63 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65  ction.  ** is be
31f0: 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64  ing overridden/d
3200: 65 6c 65 74 65 64 20 62 75 74 20 74 68 65 72 65  eleted but there
3210: 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56   are no active V
3220: 4d 73 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20  Ms, allow the.  
3230: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20  ** operation to 
3240: 63 6f 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76  continue but inv
3250: 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63  alidate all prec
3260: 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
3270: 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73  ts..  */.  p = s
3280: 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
3290: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
32a0: 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72  Name, nName, nAr
32b0: 67 2c 20 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66  g, enc, 0);.  if
32c0: 28 20 70 20 26 26 20 70 2d 3e 69 50 72 65 66 45  ( p && p->iPrefE
32d0: 6e 63 3d 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41  nc==enc && p->nA
32e0: 72 67 3d 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20  rg==nArg ){.    
32f0: 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
3300: 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  beCnt ){.      s
3310: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
3320: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
3330: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
3340: 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75   delete/modify u
3350: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65  ser-function due
3360: 20 74 6f 20 61 63 74 69 76 65 20 73 74 61 74 65   to active state
3370: 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 72  ments");.      r
3380: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
3390: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
33a0: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
33b0: 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
33c0: 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  nts(db);.    }. 
33d0: 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   }..  p = sqlite
33e0: 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62  3FindFunction(db
33f0: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
3400: 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e   nName, nArg, en
3410: 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d  c, 1);.  if( p==
3420: 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  0 ) return SQLIT
3430: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 2d 3e 78 46  E_NOMEM;.  p->xF
3440: 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 70  unc = xFunc;.  p
3450: 2d 3e 78 53 74 65 70 20 3d 20 78 53 74 65 70 3b  ->xStep = xStep;
3460: 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20  .  p->xFinalize 
3470: 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 70 2d 3e 70  = xFinal;.  p->p
3480: 55 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72  UserData = pUser
3490: 44 61 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 53  Data;.  return S
34a0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 69 66 6e  QLITE_OK;.}.#ifn
34b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34c0: 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
34d0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
34e0: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  n16(.  sqlite3 *
34f0: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  db,.  const void
3500: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3510: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
3520: 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76  nt eTextRep,.  v
3530: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a  oid *pUserData,.
3540: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
3550: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
3560: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
3570: 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ue**),.  void (*
3580: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
3590: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
35a0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
35b0: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73  void (*xFinal)(s
35c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
35d0: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
35e0: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 75 6e  char const *zFun
35f0: 63 38 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  c8;.  sqlite3_va
3600: 6c 75 65 20 2a 70 54 6d 70 3b 0a 0a 20 20 69 66  lue *pTmp;..  if
3610: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
3620: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
3630: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
3640: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70  SUSE;.  }.  pTmp
3650: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72 61   = sqlite3GetTra
3660: 6e 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b  nsientValue(db);
3670: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
3680: 65 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20  etStr(pTmp, -1, 
3690: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 53  zFunctionName, S
36a0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
36b0: 45 2c 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  E,SQLITE_STATIC)
36c0: 3b 0a 20 20 7a 46 75 6e 63 38 20 3d 20 73 71 6c  ;.  zFunc8 = sql
36d0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 54  ite3ValueText(pT
36e0: 6d 70 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  mp, SQLITE_UTF8)
36f0: 3b 0a 0a 20 20 69 66 28 20 21 7a 46 75 6e 63 38  ;..  if( !zFunc8
3700: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
3710: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
3720: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
3730: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3740: 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67  db, zFunc8, nArg
3750: 2c 20 65 54 65 78 74 52 65 70 2c 20 0a 20 20 20  , eTextRep, .   
3760: 20 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46     pUserData, xF
3770: 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  unc, xStep, xFin
3780: 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  al);.  return rc
3790: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
37a0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61  * Register a tra
37b0: 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  ce function.  Th
37c0: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
37d0: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
37e0: 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69  tered trace.** i
37f0: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
3800: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65  .** A NULL trace
3810: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
3820: 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20  that no tracing 
3830: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
3840: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63  non-NULL.** trac
3850: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
3860: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
3870: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
3880: 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63  the start of eac
3890: 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 65  h.** sqlite3_exe
38a0: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  c()..*/.void *sq
38b0: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
38c0: 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a  te3 *db, void (*
38d0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
38e0: 6e 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64  nst char*), void
38f0: 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20   *pArg){.  void 
3900: 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61  *pOld = db->pTra
3910: 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72  ceArg;.  db->xTr
3920: 61 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20  ace = xTrace;.  
3930: 64 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20  db->pTraceArg = 
3940: 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70  pArg;.  return p
3950: 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50  Old;.}../*** EXP
3960: 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a  ERIMENTAL ***.**
3970: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 66  .** Register a f
3980: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e  unction to be in
3990: 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61  voked when a tra
39a0: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  nsaction comment
39b0: 73 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  s..** If either 
39c0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
39d0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
39e0: 74 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d  the commit becom
39f0: 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b  es a.** rollback
3a00: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
3a10: 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a  e3_commit_hook(.
3a20: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
3a40: 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74  ttach the hook t
3a50: 6f 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  o this database 
3a60: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c  */.  int (*xCall
3a70: 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f  back)(void*),  /
3a80: 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e  * Function to in
3a90: 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d  voke on each com
3aa0: 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  mit */.  void *p
3ab0: 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Arg             
3ac0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
3ad0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  o the function *
3ae0: 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c  /.){.  void *pOl
3af0: 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41  d = db->pCommitA
3b00: 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69  rg;.  db->xCommi
3b10: 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  tCallback = xCal
3b20: 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f  lback;.  db->pCo
3b30: 6d 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a  mmitArg = pArg;.
3b40: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
3b50: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  .../*.** This ro
3b60: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20  utine is called 
3b70: 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e  to create a conn
3b80: 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61  ection to a data
3b90: 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72  base BTree.** dr
3ba0: 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e  iver.  If zFilen
3bb0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
3bc0: 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20  of a file, then 
3bd0: 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20  that file is.** 
3be0: 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e  opened and used.
3bf0: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
3c00: 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65  s the magic name
3c10: 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e   ":memory:" then
3c20: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
3c30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65   is stored in me
3c40: 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75  mory (and is thu
3c50: 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73  s forgotten as s
3c60: 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f  oon as.** the co
3c70: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
3c80: 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61  ed.)  If zFilena
3c90: 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  me is NULL then 
3ca0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
3cb0: 69 73 20 61 20 22 76 69 72 74 75 61 6c 22 20 64  is a "virtual" d
3cc0: 61 74 61 62 61 73 65 20 66 6f 72 20 74 72 61 6e  atabase for tran
3cd0: 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61  sient use only a
3ce0: 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20 61 73  nd is deleted as
3cf0: 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65 20  .** soon as the 
3d00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
3d10: 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69  osed..**.** A vi
3d20: 72 74 75 61 6c 20 64 61 74 61 62 61 73 65 20 63  rtual database c
3d30: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
3d40: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
3d50: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
3d60: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
3d70: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
3d80: 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62 65 20  ed) or it an be 
3d90: 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20 69 6e  held entirely in
3da0: 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65   memory,.** depe
3db0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c  nding on the val
3dc0: 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f  ues of the TEMP_
3dd0: 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69  STORE compile-ti
3de0: 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65  me macro and the
3df0: 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  .** db->temp_sto
3e00: 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63  re variable, acc
3e10: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
3e20: 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a  llowing chart:.*
3e30: 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f  *.**       TEMP_
3e40: 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65  STORE     db->te
3e50: 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63  mp_store     Loc
3e60: 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61  ation of tempora
3e70: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20  ry database.**  
3e80: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20       ---------- 
3e90: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
3ea0: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
3eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ec0: 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20  -----.**        
3ed0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
3ee0: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
3ef0: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
3f00: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
3f10: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
3f20: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
3f30: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
3f40: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
3f50: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
3f60: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20              0   
3f80: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
3f90: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
3fc0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fe0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  2              m
3ff0: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
4000: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
4010: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
4020: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
4030: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
4040: 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20         any      
4050: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f         memory.*/
4060: 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65  .int sqlite3Btre
4070: 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73  eFactory(.  cons
4080: 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20  t sqlite3 *db,  
4090: 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61        /* Main da
40a0: 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e  tabase when open
40b0: 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73  ing aux otherwis
40c0: 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  e 0 */.  const c
40d0: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
40e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
40f0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
4100: 67 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61  g the BTree data
4110: 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d  base */.  int om
4120: 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20  itJournal,      
4130: 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74      /* if TRUE t
4140: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e  hen do not journ
4150: 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  al this file */.
4160: 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20    int nCache,   
4170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
4180: 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e  ow many pages in
4190: 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20   the page cache 
41a0: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42  */.  Btree **ppB
41b0: 74 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f  tree           /
41c0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77  * Pointer to new
41d0: 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72   Btree object wr
41e0: 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
41f0: 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61  .  int btree_fla
4200: 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  gs = 0;.  int rc
4210: 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20 70  ;.  .  assert( p
4220: 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20  pBtree != 0);.  
4230: 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20  if( omitJournal 
4240: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
4250: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54  gs |= BTREE_OMIT
4260: 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20  _JOURNAL;.  }.  
4270: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
4280: 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63  SQLITE_NoReadloc
4290: 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  k ){.    btree_f
42a0: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f  lags |= BTREE_NO
42b0: 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20  _READLOCK;.  }. 
42c0: 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d   if( zFilename==
42d0: 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54  0 ){.#if TEMP_ST
42e0: 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f  ORE==0.    /* Do
42f0: 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64   nothing */.#end
4300: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4310: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
4320: 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  #if TEMP_STORE==
4330: 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65  1.    if( db->te
4340: 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46  mp_store==2 ) zF
4350: 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f  ilename = ":memo
4360: 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ry:";.#endif.#if
4370: 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20   TEMP_STORE==2. 
4380: 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f     if( db->temp_
4390: 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c 65  store!=1 ) zFile
43a0: 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a  name = ":memory:
43b0: 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45  ";.#endif.#if TE
43c0: 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20  MP_STORE==3.    
43d0: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
43e0: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
43f0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4400: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f  OMIT_MEMORYDB */
4410: 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
4420: 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46  ite3BtreeOpen(zF
4430: 69 6c 65 6e 61 6d 65 2c 20 70 70 42 74 72 65 65  ilename, ppBtree
4440: 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a  , btree_flags);.
4450: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
4460: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
4470: 65 33 42 74 72 65 65 53 65 74 42 75 73 79 48 61  e3BtreeSetBusyHa
4480: 6e 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c 20  ndler(*ppBtree, 
4490: 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73 79  (void*)&db->busy
44a0: 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73 71  Handler);.    sq
44b0: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
44c0: 68 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65 2c  heSize(*ppBtree,
44d0: 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20   nCache);.  }.  
44e0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
44f0: 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 38  .** Return UTF-8
4500: 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68   encoded English
4510: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
4520: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73  ation of the mos
4530: 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f  t recent.** erro
4540: 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  r..*/.const char
4550: 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   *sqlite3_errmsg
4560: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4570: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a   const char *z;.
4580: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61    if( sqlite3_ma
4590: 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20  lloc_failed ){. 
45a0: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
45b0: 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e  3ErrStr(SQLITE_N
45c0: 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  OMEM);.  }.  if(
45d0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
45e0: 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65  eck(db) || db->e
45f0: 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d  rrCode==SQLITE_M
4600: 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74  ISUSE ){.    ret
4610: 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74  urn sqlite3ErrSt
4620: 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 29  r(SQLITE_MISUSE)
4630: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
4640: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 64  te3_value_text(d
4650: 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28 20  b->pErr);.  if( 
4660: 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 20 3d 20  z==0 ){.    z = 
4670: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64 62  sqlite3ErrStr(db
4680: 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20 20 7d 0a  ->errCode);.  }.
4690: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23    return z;.}..#
46a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
46b0: 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52  IT_UTF16./*.** R
46c0: 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e 63  eturn UTF-16 enc
46d0: 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e  oded English lan
46e0: 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f  guage explanatio
46f0: 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
4700: 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a  cent.** error..*
4710: 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  /.const void *sq
4720: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 73  lite3_errmsg16(s
4730: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 2f  qlite3 *db){.  /
4740: 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74 68  * Because all th
4750: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
4760: 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20 69  the string are i
4770: 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20 20  n the unicode.  
4780: 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d 30 78  ** range 0x00-0x
4790: 46 46 2c 20 69 66 20 77 65 20 70 61 64 20 74 68  FF, if we pad th
47a0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 74 72  e big-endian str
47b0: 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20 2a 2a  ing with a .  **
47c0: 20 7a 65 72 6f 20 62 79 74 65 2c 20 77 65 20 63   zero byte, we c
47d0: 61 6e 20 6f 62 74 61 69 6e 20 74 68 65 20 6c 69  an obtain the li
47e0: 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 74 72 69  ttle-endian stri
47f0: 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20 26 62 69  ng with.  ** &bi
4800: 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20 2a  g_endian[1]..  *
4810: 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  /.  static const
4820: 20 63 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42 65   char outOfMemBe
4830: 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6f  [] = {.    0, 'o
4840: 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74  ', 0, 'u', 0, 't
4850: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
4860: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20  0, 'o', 0, 'f', 
4870: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
4880: 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  'm', 0, 'e', 0, 
4890: 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20  'm', 0, 'o', 0, 
48a0: 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20  'r', 0, 'y', 0, 
48b0: 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61 74  0, 0.  };.  stat
48c0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6d 69  ic const char mi
48d0: 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b 0a 20 20  suseBe [] = {.  
48e0: 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 69 27    0, 'l', 0, 'i'
48f0: 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20 27 72 27  , 0, 'b', 0, 'r'
4900: 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 72 27  , 0, 'a', 0, 'r'
4910: 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 27 20 27  , 0, 'y', 0, ' '
4920: 2c 20 0a 20 20 20 20 30 2c 20 27 72 27 2c 20 30  , .    0, 'r', 0
4930: 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30  , 'o', 0, 'u', 0
4940: 2c 20 27 74 27 2c 20 30 2c 20 27 69 27 2c 20 30  , 't', 0, 'i', 0
4950: 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27 2c 20 30  , 'n', 0, 'e', 0
4960: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
4970: 63 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27  c', 0, 'a', 0, '
4980: 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27  l', 0, 'l', 0, '
4990: 65 27 2c 20 30 2c 20 27 64 27 2c 20 30 2c 20 27  e', 0, 'd', 0, '
49a0: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c   ', .    0, 'o',
49b0: 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c   0, 'u', 0, 't',
49c0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
49d0: 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c   'o', 0, 'f', 0,
49e0: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 73   ' ', .    0, 's
49f0: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 71  ', 0, 'e', 0, 'q
4a00: 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 65  ', 0, 'u', 0, 'e
4a10: 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27 63  ', 0, 'n', 0, 'c
4a20: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 30 2c  ', 0, 'e', 0, 0,
4a30: 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73 74   0.  };..  const
4a40: 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 69 66 28 20   void *z;.  if( 
4a50: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
4a60: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 65 74  ailed ){.    ret
4a70: 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f 75  urn (void *)(&ou
4a80: 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f  tOfMemBe[SQLITE_
4a90: 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c  UTF16NATIVE==SQL
4aa0: 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d  ITE_UTF16LE?1:0]
4ab0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
4ac0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
4ad0: 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f  db) || db->errCo
4ae0: 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  de==SQLITE_MISUS
4af0: 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  E ){.    return 
4b00: 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75 73 65  (void *)(&misuse
4b10: 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  Be[SQLITE_UTF16N
4b20: 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54  ATIVE==SQLITE_UT
4b30: 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d  F16LE?1:0]);.  }
4b40: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
4b50: 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e  alue_text16(db->
4b60: 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d  pErr);.  if( z==
4b70: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
4b80: 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e  ValueSetStr(db->
4b90: 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69 74 65  pErr, -1, sqlite
4ba0: 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43  3ErrStr(db->errC
4bb0: 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20 20 53  ode),.         S
4bc0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
4bd0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
4be0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  z = sqlite3_valu
4bf0: 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72  e_text16(db->pEr
4c00: 72 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  r);.  }.  return
4c10: 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20   z;.}.#endif /* 
4c20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
4c30: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  6 */../*.** Retu
4c40: 72 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  rn the most rece
4c50: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 67 65  nt error code ge
4c60: 6e 65 72 61 74 65 64 20 62 79 20 61 6e 20 53 51  nerated by an SQ
4c70: 4c 69 74 65 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f  Lite routine..*/
4c80: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72  .int sqlite3_err
4c90: 63 6f 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62  code(sqlite3 *db
4ca0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
4cb0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
4cc0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
4cd0: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20  ITE_NOMEM;.  }. 
4ce0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
4cf0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
4d00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4d10: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72  _MISUSE;.  }.  r
4d20: 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f 64  eturn db->errCod
4d30: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  e;.}../*.** This
4d40: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 74 68   routine does th
4d50: 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e 69 6e  e work of openin
4d60: 67 20 61 20 64 61 74 61 62 61 73 65 20 6f 6e 20  g a database on 
4d70: 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c  behalf of.** sql
4d80: 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64 20  ite3_open() and 
4d90: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 29  sqlite3_open16()
4da0: 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66  . The database f
4db0: 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65 6e 61  ilename "zFilena
4dc0: 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55 54 46 2d  me"  .** is UTF-
4dd0: 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f 0a 73 74  8 encoded..*/.st
4de0: 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61 74  atic int openDat
4df0: 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20 63  abase(.  const c
4e00: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
4e10: 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c 65  /* Database file
4e20: 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f 64  name UTF-8 encod
4e30: 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ed */.  sqlite3 
4e40: 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20 20 2f  **ppDb         /
4e50: 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64 20  * OUT: Returned 
4e60: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
4e70: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
4e80: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20 69  *db;.  int rc, i
4e90: 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65  ;..  /* Allocate
4ea0: 20 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61   the sqlite data
4eb0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
4ec0: 64 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  db = sqliteMallo
4ed0: 63 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  c( sizeof(sqlite
4ee0: 33 29 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d  3) );.  if( db==
4ef0: 30 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f  0 ) goto opendb_
4f00: 6f 75 74 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72  out;.  db->prior
4f10: 4e 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20  NewRowid = 0;.  
4f20: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
4f30: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20  TE_MAGIC_BUSY;. 
4f40: 20 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20   db->nDb = 2;.  
4f50: 64 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44  db->aDb = db->aD
4f60: 62 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65  bStatic;.  db->e
4f70: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
4f80: 3b 0a 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  ;.  db->autoComm
4f90: 69 74 20 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c  it = 1;.  db->fl
4fa0: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68  ags |= SQLITE_Sh
4fb0: 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 73  ortColNames;.  s
4fc0: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
4fd0: 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54  db->aFunc, SQLIT
4fe0: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
4ff0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  );.  sqlite3Hash
5000: 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  Init(&db->aCollS
5010: 65 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  eq, SQLITE_HASH_
5020: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 66 6f  STRING, 0);.  fo
5030: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
5040: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
5050: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
5060: 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 2c  >aDb[i].tblHash,
5070: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
5080: 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ING, 0);.    sql
5090: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
50a0: 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61 73 68  ->aDb[i].idxHash
50b0: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
50c0: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71  RING, 0);.    sq
50d0: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
50e0: 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67 48 61  b->aDb[i].trigHa
50f0: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
5100: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
5110: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
5120: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46 4b 65  &db->aDb[i].aFKe
5130: 79 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  y, SQLITE_HASH_S
5140: 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d 0a 20  TRING, 1);.  }. 
5150: 20 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64   .  /* Add the d
5160: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
5170: 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59   sequence BINARY
5180: 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66  . BINARY works f
5190: 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20  or both UTF-8.  
51a0: 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73  ** and UTF-16, s
51b0: 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20  o add a version 
51c0: 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69  for each to avoi
51d0: 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72  d any unnecessar
51e0: 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  y.  ** conversio
51f0: 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72  ns. The only err
5200: 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75  or that can occu
5210: 72 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c  r here is a mall
5220: 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20  oc() failure..  
5230: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
5240: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
5250: 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20  n(db, "BINARY", 
5260: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 62  SQLITE_UTF8, 0,b
5270: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
5280: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65       sqlite3_cre
5290: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
52a0: 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49  , "BINARY", SQLI
52b0: 54 45 5f 55 54 46 31 36 2c 20 30 2c 62 69 6e 43  TE_UTF16, 0,binC
52c0: 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20  ollFunc) ||.    
52d0: 20 20 21 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c    !(db->pDfltCol
52e0: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
52f0: 6f 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d 3e 65  ollSeq(db, db->e
5300: 6e 63 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c  nc, "BINARY", 6,
5310: 20 30 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d   0)) ){.    rc =
5320: 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 20 20   db->errCode;.  
5330: 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
5340: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 64  LITE_OK );.    d
5350: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
5360: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
5370: 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
5380: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41  out;.  }..  /* A
5390: 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38 20  lso add a UTF-8 
53a0: 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
53b0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
53c0: 6e 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  nce. */.  sqlite
53d0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
53e0: 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c  on(db, "NOCASE",
53f0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
5400: 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67   nocaseCollating
5410: 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 4f 70 65  Func);..  /* Ope
5420: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61  n the backend da
5430: 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f  tabase driver */
5440: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
5450: 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
5460: 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41  zFilename, 0, MA
5470: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44  X_PAGES, &db->aD
5480: 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28  b[0].pBt);.  if(
5490: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
54a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
54b0: 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20  or(db, rc, 0);. 
54c0: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
54d0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
54e0: 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  ED;.    goto ope
54f0: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ndb_out;.  }..  
5500: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 73  /* The default s
5510: 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f 72 20  afety_level for 
5520: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
5530: 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66 6f 72  e is 'full'; for
5540: 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a 20 64   the temp.  ** d
5550: 61 74 61 62 61 73 65 20 69 74 20 69 73 20 27 4e  atabase it is 'N
5560: 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74 63 68  ONE'. This match
5570: 65 73 20 74 68 65 20 70 61 67 65 72 20 6c 61 79  es the pager lay
5580: 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20 0a 20  er defaults.  . 
5590: 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d   */.  db->aDb[0]
55a0: 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b  .zName = "main";
55b0: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 73 61  .  db->aDb[0].sa
55c0: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33 3b 0a  fety_level = 3;.
55d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
55e0: 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64 62 2d  MIT_TEMPDB.  db-
55f0: 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20  >aDb[1].zName = 
5600: 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e 61 44  "temp";.  db->aD
5610: 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65  b[1].safety_leve
5620: 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a 0a 0a  l = 1;.#endif...
5630: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61 6c    /* Register al
5640: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
5650: 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e 6f 74  ions, but do not
5660: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64   attempt to read
5670: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
5680: 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e 20 54  se schema yet. T
5690: 68 69 73 20 69 73 20 64 65 6c 61 79 65 64 20 75  his is delayed u
56a0: 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20 74  ntil the first t
56b0: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
56c0: 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73 73 65  .  ** is accesse
56d0: 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
56e0: 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
56f0: 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20  Functions(db);. 
5700: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
5710: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
5720: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
5730: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
5740: 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20  ;..opendb_out:. 
5750: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 65 72 72   if( sqlite3_err
5760: 63 6f 64 65 28 64 62 29 3d 3d 53 51 4c 49 54 45  code(db)==SQLITE
5770: 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 6d  _OK && sqlite3_m
5780: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
5790: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
57a0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
57b0: 4d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 2a 70 70  M, 0);.  }.  *pp
57c0: 44 62 20 3d 20 64 62 3b 0a 23 69 66 6e 64 65 66  Db = db;.#ifndef
57d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
57e0: 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 66 28  BALRECOVER.  if(
57f0: 20 64 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   db ){.    sqlit
5800: 65 33 4f 73 45 6e 74 65 72 4d 75 74 65 78 28 29  e3OsEnterMutex()
5810: 3b 0a 20 20 20 20 64 62 2d 3e 70 4e 65 78 74 20  ;.    db->pNext 
5820: 3d 20 70 44 62 4c 69 73 74 3b 0a 20 20 20 20 70  = pDbList;.    p
5830: 44 62 4c 69 73 74 20 3d 20 64 62 3b 0a 20 20 20  DbList = db;.   
5840: 20 73 71 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d   sqlite3OsLeaveM
5850: 75 74 65 78 28 29 3b 0a 20 20 7d 0a 23 65 6e 64  utex();.  }.#end
5860: 69 66 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  if.  return sqli
5870: 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b  te3_errcode(db);
5880: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  .}../*.** Open a
5890: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68 61   new database ha
58a0: 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ndle..*/.int sql
58b0: 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e  ite3_open(.  con
58c0: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
58d0: 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a  me, .  sqlite3 *
58e0: 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65 74 75  *ppDb .){.  retu
58f0: 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28  rn openDatabase(
5900: 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 29  zFilename, ppDb)
5910: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
5920: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
5930: 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
5940: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
5950: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
5960: 6f 70 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20  open16(.  const 
5970: 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  void *zFilename,
5980: 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70   .  sqlite3 **pp
5990: 44 62 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e  Db.){.  char con
59a0: 73 74 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20  st *zFilename8; 
59b0: 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65    /* zFilename e
59c0: 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 20  ncoded in UTF-8 
59d0: 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46 2d 31  instead of UTF-1
59e0: 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  6 */.  int rc = 
59f0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
5a00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
5a10: 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Val;..  assert( 
5a20: 70 70 44 62 20 29 3b 0a 20 20 2a 70 70 44 62 20  ppDb );.  *ppDb 
5a30: 3d 20 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  = 0;.  pVal = sq
5a40: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
5a50: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
5a60: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
5a70: 7a 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54  zFilename, SQLIT
5a80: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53  E_UTF16NATIVE, S
5a90: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
5aa0: 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71   zFilename8 = sq
5ab0: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70  lite3ValueText(p
5ac0: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Val, SQLITE_UTF8
5ad0: 29 3b 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61  );.  if( zFilena
5ae0: 6d 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  me8 ){.    rc = 
5af0: 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69  openDatabase(zFi
5b00: 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a  lename8, ppDb);.
5b10: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
5b20: 54 45 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20 29  TE_OK && *ppDb )
5b30: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
5b40: 65 78 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41  exec(*ppDb, "PRA
5b50: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27  GMA encoding = '
5b60: 55 54 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20  UTF-16'", 0, 0, 
5b70: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  0);.    }.  }.  
5b80: 69 66 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20  if( pVal ){.    
5b90: 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
5ba0: 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 0a 20 20 72  (pVal);.  }..  r
5bb0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64  eturn rc;.}.#end
5bc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
5bd0: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a  T_UTF16 */../*.*
5be0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
5bf0: 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73  routine destroys
5c00: 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69   a virtual machi
5c10: 6e 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74  ne that is creat
5c20: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c  ed by.** the sql
5c30: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72  ite3_compile() r
5c40: 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74 65  outine. The inte
5c50: 67 65 72 20 72 65 74 75 72 6e 65 64 20 69 73 20  ger returned is 
5c60: 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75  an SQLITE_.** su
5c70: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f  ccess/failure co
5c80: 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  de that describe
5c90: 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
5ca0: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 76 69  executing the vi
5cb0: 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
5cc0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
5cd0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72  tine sets the er
5ce0: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72  ror code and str
5cf0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a  ing returned by.
5d00: 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ** sqlite3_errco
5d10: 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  de(), sqlite3_er
5d20: 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74  rmsg() and sqlit
5d30: 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a  e3_errmsg16()..*
5d40: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69  /.int sqlite3_fi
5d50: 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73  nalize(sqlite3_s
5d60: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
5d70: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74  nt rc;.  if( pSt
5d80: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  mt==0 ){.    rc 
5d90: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
5da0: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
5db0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
5dc0: 7a 65 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29  ze((Vdbe*)pStmt)
5dd0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
5de0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d  c;.}../*.** Term
5df0: 69 6e 61 74 65 20 74 68 65 20 63 75 72 72 65 6e  inate the curren
5e00: 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61  t execution of a
5e10: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
5e20: 61 6e 64 20 72 65 73 65 74 20 69 74 0a 2a 2a 20  and reset it.** 
5e30: 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74 61 72  back to its star
5e40: 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20 74 68  ting state so th
5e50: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 75  at it can be reu
5e60: 73 65 64 2e 20 41 20 73 75 63 63 65 73 73 20 63  sed. A success c
5e70: 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20  ode from.** the 
5e80: 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 20  prior execution 
5e90: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a  is returned..**.
5ea0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
5eb0: 73 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63  sets the error c
5ec0: 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72  ode and string r
5ed0: 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71  eturned by.** sq
5ee0: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c  lite3_errcode(),
5ef0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
5f00: 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72  ) and sqlite3_er
5f10: 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74  rmsg16()..*/.int
5f20: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73   sqlite3_reset(s
5f30: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5f40: 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  mt){.  int rc;. 
5f50: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
5f60: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
5f70: 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _OK;.  }else{.  
5f80: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
5f90: 62 65 52 65 73 65 74 28 28 56 64 62 65 2a 29 70  beReset((Vdbe*)p
5fa0: 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
5fb0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
5fc0: 28 56 64 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31  (Vdbe*)pStmt, -1
5fd0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  , 0, 0, 0, 0);. 
5fe0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
5ff0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
6000: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
6010: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
6020: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
6030: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
6040: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
6050: 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  llation(.  sqlit
6060: 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3* db, .  const
6070: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20   char *zName, . 
6080: 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69   int enc, .  voi
6090: 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a  d* pCtx,.  int(*
60a0: 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c  xCompare)(void*,
60b0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  int,const void*,
60c0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  int,const void*)
60d0: 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  .){.  CollSeq *p
60e0: 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20 72 63 20 3d  Coll;.  int rc =
60f0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 0a 20   SQLITE_OK;.  . 
6100: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
6110: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
6120: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6130: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20  _MISUSE;.  }..  
6140: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46  /* If SQLITE_UTF
6150: 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20  16 is specified 
6160: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  as the encoding 
6170: 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20  type, transform 
6180: 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65  this.  ** to one
6190: 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   of SQLITE_UTF16
61a0: 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46  LE or SQLITE_UTF
61b0: 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20  16BE using the. 
61c0: 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   ** SQLITE_UTF16
61d0: 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51  NATIVE macro. SQ
61e0: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f  LITE_UTF16 is no
61f0: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
6200: 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 6e  y..  */.  if( en
6210: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20  c==SQLITE_UTF16 
6220: 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c  ){.    enc = SQL
6230: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
6240: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 65 6e 63 21  .  }..  if( enc!
6250: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 26 26 20  =SQLITE_UTF8 && 
6260: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc!=SQLITE_UTF1
6270: 36 4c 45 20 26 26 20 65 6e 63 21 3d 53 51 4c 49  6LE && enc!=SQLI
6280: 54 45 5f 55 54 46 31 36 42 45 20 29 7b 0a 20 20  TE_UTF16BE ){.  
6290: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
62a0: 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2c  b, SQLITE_ERROR,
62b0: 20 0a 20 20 20 20 20 20 20 20 22 50 61 72 61 6d   .        "Param
62c0: 20 33 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 72   3 to sqlite3_cr
62d0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
62e0: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
62f0: 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 49 54  ".        "SQLIT
6300: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
6310: 54 46 31 36 2c 20 53 51 4c 49 54 45 5f 55 54 46  TF16, SQLITE_UTF
6320: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
6330: 54 46 31 36 42 45 22 0a 20 20 20 20 29 3b 0a 20  TF16BE".    );. 
6340: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6350: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f  _ERROR;.  }..  /
6360: 2a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20  * Check if this 
6370: 63 61 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e 67  call is removing
6380: 20 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 61 6e   or replacing an
6390: 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61 74   existing collat
63a0: 69 6f 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65 6e  ion .  ** sequen
63b0: 63 65 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20 74  ce. If so, and t
63c0: 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
63d0: 56 4d 73 2c 20 72 65 74 75 72 6e 20 62 75 73 79  VMs, return busy
63e0: 2e 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a 20  . If there.  ** 
63f0: 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d  are no active VM
6400: 73 2c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6e  s, invalidate an
6410: 79 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20 73  y pre-compiled s
6420: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a  tatements..  */.
6430: 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65    pColl = sqlite
6440: 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c  3FindCollSeq(db,
6450: 20 28 75 38 29 65 6e 63 2c 20 7a 4e 61 6d 65 2c   (u8)enc, zName,
6460: 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20   strlen(zName), 
6470: 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20  0);.  if( pColl 
6480: 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29  && pColl->xCmp )
6490: 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 63  {.    if( db->ac
64a0: 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b 0a 20  tiveVdbeCnt ){. 
64b0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
64c0: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53  r(db, SQLITE_BUS
64d0: 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55 6e 61  Y, .        "Una
64e0: 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f  ble to delete/mo
64f0: 64 69 66 79 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  dify collation s
6500: 65 71 75 65 6e 63 65 20 64 75 65 20 74 6f 20 61  equence due to a
6510: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
6520: 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ");.      return
6530: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6540: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 45    }.    sqlite3E
6550: 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
6560: 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
6570: 0a 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69  ..  pColl = sqli
6580: 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64  te3FindCollSeq(d
6590: 62 2c 20 28 75 38 29 65 6e 63 2c 20 7a 4e 61 6d  b, (u8)enc, zNam
65a0: 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29  e, strlen(zName)
65b0: 2c 20 31 29 3b 0a 20 20 69 66 28 20 30 3d 3d 70  , 1);.  if( 0==p
65c0: 43 6f 6c 6c 20 29 7b 0a 20 20 20 72 63 20 3d 20  Coll ){.   rc = 
65d0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
65e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 6f 6c 6c  }else{.    pColl
65f0: 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d 70 61 72  ->xCmp = xCompar
6600: 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 70 55  e;.    pColl->pU
6610: 73 65 72 20 3d 20 70 43 74 78 3b 0a 20 20 20 20  ser = pCtx;.    
6620: 70 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 65 6e 63  pColl->enc = enc
6630: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
6640: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
6650: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
6660: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6670: 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a  OMIT_UTF16./*.**
6680: 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20   Register a new 
6690: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
66a0: 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ce with the data
66b0: 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a  base handle db..
66c0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
66d0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31  reate_collation1
66e0: 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62  6(.  sqlite3* db
66f0: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
6700: 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65  *zName, .  int e
6710: 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
6720: 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
6730: 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
6740: 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
6750: 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
6760: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4e 61 6d  char const *zNam
6770: 65 38 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  e8;.  sqlite3_va
6780: 6c 75 65 20 2a 70 54 6d 70 3b 0a 20 20 69 66 28  lue *pTmp;.  if(
6790: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
67a0: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
67b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
67c0: 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70 20  USE;.  }.  pTmp 
67d0: 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72 61 6e  = sqlite3GetTran
67e0: 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b 0a  sientValue(db);.
67f0: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
6800: 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20 7a  tStr(pTmp, -1, z
6810: 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
6820: 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45  16NATIVE, SQLITE
6830: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 4e 61 6d  _STATIC);.  zNam
6840: 65 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  e8 = sqlite3Valu
6850: 65 54 65 78 74 28 70 54 6d 70 2c 20 53 51 4c 49  eText(pTmp, SQLI
6860: 54 45 5f 55 54 46 38 29 3b 0a 20 20 72 65 74 75  TE_UTF8);.  retu
6870: 72 6e 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  rn sqlite3_creat
6880: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
6890: 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c 20 70 43 74  zName8, enc, pCt
68a0: 78 2c 20 78 43 6f 6d 70 61 72 65 29 3b 0a 7d 0a  x, xCompare);.}.
68b0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
68c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
68d0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
68e0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
68f0: 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c  nce factory call
6900: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61  back with the da
6910: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
6920: 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79   db. Replace any
6930: 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74   previously inst
6940: 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  alled collation 
6950: 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
6960: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
6970: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65  _collation_neede
6980: 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  d(.  sqlite3 *db
6990: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  , .  void *pColl
69a0: 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76 6f  NeededArg, .  vo
69b0: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
69c0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
69d0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
69e0: 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20 69  st char*).){.  i
69f0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
6a00: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
6a10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
6a20: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d  ISUSE;.  }.  db-
6a30: 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 78  >xCollNeeded = x
6a40: 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20 64 62  CollNeeded;.  db
6a50: 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20  ->xCollNeeded16 
6a60: 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c  = 0;.  db->pColl
6a70: 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c  NeededArg = pCol
6a80: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65  lNeededArg;.  re
6a90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
6aa0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
6ab0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
6ac0: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 6f  ** Register a co
6ad0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
6ae0: 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63   factory callbac
6af0: 6b 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  k with the datab
6b00: 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62  ase handle.** db
6b10: 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72  . Replace any pr
6b20: 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c  eviously install
6b30: 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
6b40: 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a  uence factory..*
6b50: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  /.int sqlite3_co
6b60: 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36  llation_needed16
6b70: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
6b80: 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e   .  void *pCollN
6b90: 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76 6f 69  eededArg, .  voi
6ba0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
6bb0: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
6bc0: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
6bd0: 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
6be0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
6bf0: 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20  yCheck(db) ){.  
6c00: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6c10: 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62  MISUSE;.  }.  db
6c20: 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20  ->xCollNeeded = 
6c30: 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65  0;.  db->xCollNe
6c40: 65 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c 4e 65  eded16 = xCollNe
6c50: 65 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e 70 43  eded16;.  db->pC
6c60: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70  ollNeededArg = p
6c70: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
6c80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6c90: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  K;.}.#endif /* S
6ca0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
6cb0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
6cc0: 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52  ITE_OMIT_GLOBALR
6cd0: 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a 20 54 68 69  ECOVER./*.** Thi
6ce0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  s function is ca
6cf0: 6c 6c 65 64 20 74 6f 20 72 65 63 6f 76 65 72 20  lled to recover 
6d00: 66 72 6f 6d 20 61 20 6d 61 6c 6c 6f 63 20 66 61  from a malloc fa
6d10: 69 6c 75 72 65 20 74 68 61 74 20 6f 63 63 75 72  ilure that occur
6d20: 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 53 51 4c  ed.** within SQL
6d30: 69 74 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ite. .**.** This
6d40: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 2a 6e 6f   function is *no
6d50: 74 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 43  t* threadsafe. C
6d60: 61 6c 6c 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  alling this from
6d70: 20 77 69 74 68 69 6e 20 61 20 74 68 72 65 61 64   within a thread
6d80: 65 64 0a 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f  ed.** applicatio
6d90: 6e 20 77 68 65 6e 20 74 68 72 65 61 64 73 20 6f  n when threads o
6da0: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 63 61  ther than the ca
6db0: 6c 6c 65 72 20 68 61 76 65 20 75 73 65 64 20 53  ller have used S
6dc0: 51 4c 69 74 65 20 69 73 20 0a 2a 2a 20 64 61 6e  QLite is .** dan
6dd0: 67 65 72 6f 75 73 20 61 6e 64 20 77 69 6c 6c 20  gerous and will 
6de0: 61 6c 6d 6f 73 74 20 63 65 72 74 61 69 6e 6c 79  almost certainly
6df0: 20 72 65 73 75 6c 74 20 69 6e 20 6d 61 6c 66 75   result in malfu
6e00: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20  nctions..*/.int 
6e10: 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72  sqlite3_global_r
6e20: 65 63 6f 76 65 72 28 29 7b 0a 20 20 69 6e 74 20  ecover(){.  int 
6e30: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
6e40: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d  .  if( sqlite3_m
6e50: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
6e60: 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b      sqlite3 *db;
6e70: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
6e80: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
6e90: 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 66  ailed = 0;.    f
6ea0: 6f 72 28 64 62 3d 70 44 62 4c 69 73 74 3b 20 64  or(db=pDbList; d
6eb0: 62 3b 20 64 62 3d 64 62 2d 3e 70 4e 65 78 74 20  b; db=db->pNext 
6ec0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6ed0: 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
6ee0: 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
6ef0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
6f00: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
6f10: 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74        Btree *pBt
6f20: 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
6f30: 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  t;.        if( p
6f40: 42 74 20 26 26 20 28 72 63 3d 73 71 6c 69 74 65  Bt && (rc=sqlite
6f50: 33 42 74 72 65 65 52 65 73 65 74 28 70 42 74 29  3BtreeReset(pBt)
6f60: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  ) ){.          g
6f70: 6f 74 6f 20 72 65 63 6f 76 65 72 5f 6f 75 74 3b  oto recover_out;
6f80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6f90: 20 7d 20 0a 20 20 20 20 20 20 64 62 2d 3e 61 75   } .      db->au
6fa0: 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
6fb0: 20 20 7d 0a 20 20 7d 0a 0a 72 65 63 6f 76 65 72    }.  }..recover
6fc0: 5f 6f 75 74 3a 0a 20 20 69 66 28 20 72 63 21 3d  _out:.  if( rc!=
6fd0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
6fe0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
6ff0: 66 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  failed = 1;.  }.
7000: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23    return rc;.}.#
7010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  endif../*.** Tes
7020: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
7030: 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
7040: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7050: 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  is in autocommit
7060: 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65 74 75 72  .** mode.  Retur
7070: 6e 20 54 52 55 45 20 69 66 20 69 74 20 69 73 20  n TRUE if it is 
7080: 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e 6f 74  and FALSE if not
7090: 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  .  Autocommit mo
70a0: 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62 79 20 64  de is on.** by d
70b0: 65 66 61 75 6c 74 2e 20 20 41 75 74 6f 63 6f 6d  efault.  Autocom
70c0: 6d 69 74 20 69 73 20 64 69 73 61 62 6c 65 64 20  mit is disabled 
70d0: 62 79 20 61 20 42 45 47 49 4e 20 73 74 61 74 65  by a BEGIN state
70e0: 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e 61 62 6c  ment and reenabl
70f0: 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 6e 65 78  ed.** by the nex
7100: 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t COMMIT or ROLL
7110: 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a  BACK..**.*******
7120: 20 54 48 49 53 20 49 53 20 41 4e 20 45 58 50 45   THIS IS AN EXPE
7130: 52 49 4d 45 4e 54 41 4c 20 41 50 49 20 41 4e 44  RIMENTAL API AND
7140: 20 49 53 20 53 55 42 4a 45 43 54 20 54 4f 20 43   IS SUBJECT TO C
7150: 48 41 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a 2f 0a  HANGE ******.*/.
7160: 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  int sqlite3_get_
7170: 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c 69 74  autocommit(sqlit
7180: 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72  e3 *db){.  retur
7190: 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  n db->autoCommit
71a0: 3b 0a 7d 0a                                      ;.}.