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

Artifact 7d719efe04b760c5e0faa9e910c6d4f00f85f2f3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 69 6e 2e 63  *.** $Id: main.c
0270: 2c 76 20 31 2e 33 30 34 20 32 30 30 35 2f 31 31  ,v 1.304 2005/11
0280: 2f 33 30 20 30 33 3a 32 30 3a 33 31 20 64 72 68  /30 03:20:31 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 2e 78 45 6e 74 65 72 4d 75 74 65 78 28 29 3b  s.xEnterMutex();
1320: 0a 20 20 20 20 70 50 72 65 76 20 3d 20 70 44 62  .    pPrev = pDb
1330: 4c 69 73 74 3b 0a 20 20 20 20 77 68 69 6c 65 28  List;.    while(
1340: 20 70 50 72 65 76 20 26 26 20 70 50 72 65 76 2d   pPrev && pPrev-
1350: 3e 70 4e 65 78 74 21 3d 64 62 20 29 7b 0a 20 20  >pNext!=db ){.  
1360: 20 20 20 20 70 50 72 65 76 20 3d 20 70 50 72 65      pPrev = pPre
1370: 76 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 7d 0a  v->pNext;.    }.
1380: 20 20 20 20 69 66 28 20 70 50 72 65 76 20 29 7b      if( pPrev ){
1390: 0a 20 20 20 20 20 20 70 50 72 65 76 2d 3e 70 4e  .      pPrev->pN
13a0: 65 78 74 20 3d 20 64 62 2d 3e 70 4e 65 78 74 3b  ext = db->pNext;
13b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13c0: 20 20 61 73 73 65 72 74 28 20 70 44 62 4c 69 73    assert( pDbLis
13d0: 74 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 70  t==db );.      p
13e0: 44 62 4c 69 73 74 20 3d 20 64 62 2d 3e 70 4e 65  DbList = db->pNe
13f0: 78 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  xt;.    }.    sq
1400: 6c 69 74 65 33 4f 73 2e 78 4c 65 61 76 65 4d 75  lite3Os.xLeaveMu
1410: 74 65 78 28 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  tex();.  }.#endi
1420: 66 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  f..  db->magic =
1430: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
1440: 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  ROR;.  sqliteFre
1450: 65 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  e(db);.  return 
1460: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
1470: 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c  .** Rollback all
1480: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
1490: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
14a0: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
14b0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
14c0: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
14d0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
14e0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
14f0: 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73  ].pBt ){.      s
1500: 71 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62  qlite3BtreeRollb
1510: 61 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ack(db->aDb[i].p
1520: 42 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Bt);.      db->a
1530: 44 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20  Db[i].inTrans = 
1540: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  0;.    }.  }.  s
1550: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
1560: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
1570: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
1580: 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  n a static strin
1590: 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  g that describes
15a0: 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72   the kind of err
15b0: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
15c0: 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  the.** argument.
15d0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
15e0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
15f0: 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63  t rc){.  const c
1600: 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68  har *z;.  switch
1610: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
1620: 20 53 51 4c 49 54 45 5f 52 4f 57 3a 0a 20 20 20   SQLITE_ROW:.   
1630: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e   case SQLITE_DON
1640: 45 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  E:.    case SQLI
1650: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
1660: 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72   = "not an error
1670: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
1680: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1690: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
16a0: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a  TE_ERROR:      z
16b0: 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72   = "SQL logic er
16c0: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
16d0: 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61  atabase";   brea
16e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
16f0: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
1700: 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69   = "access permi
1710: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ssion denied";  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1730: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1740: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
1750: 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71   = "callback req
1760: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
1770: 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  rt";        brea
1780: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1790: 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a  TE_BUSY:       z
17a0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
17b0: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
17d0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
17e0: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
17f0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62   = "database tab
1800: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20  le is locked";  
1810: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1820: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1830: 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a  TE_NOMEM:      z
1840: 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   = "out of memor
1850: 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y";             
1860: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1870: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1880: 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a  TE_READONLY:   z
1890: 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77   = "attempt to w
18a0: 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20  rite a readonly 
18b0: 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61  database";  brea
18c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
18d0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
18e0: 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22   = "interrupted"
18f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1900: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1910: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1920: 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a  TE_IOERR:      z
1930: 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72   = "disk I/O err
1940: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
1950: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1960: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1970: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
1980: 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73   = "database dis
1990: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
19a0: 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61  rmed";      brea
19b0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
19c0: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
19d0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6f 72 20   = "database or 
19e0: 64 69 73 6b 20 69 73 20 66 75 6c 6c 22 3b 20 20  disk is full";  
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1a00: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a10: 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a  TE_CANTOPEN:   z
1a20: 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70   = "unable to op
1a30: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
1a40: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
1a50: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a60: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
1a70: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63   = "database loc
1a80: 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61  king protocol fa
1a90: 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61  ilure";     brea
1aa0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1ab0: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
1ac0: 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69   = "table contai
1ad0: 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20  ns no data";    
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1af0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1b00: 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a  TE_SCHEMA:     z
1b10: 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68   = "database sch
1b20: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
1b30: 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;           brea
1b40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1b50: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
1b60: 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66   = "constraint f
1b70: 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20  ailed";         
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1b90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1ba0: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a  TE_MISMATCH:   z
1bb0: 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   = "datatype mis
1bc0: 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20  match";         
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1be0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1bf0: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
1c00: 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74   = "library rout
1c10: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
1c20: 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61  f sequence";brea
1c30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1c40: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
1c50: 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73   = "kernel lacks
1c60: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
1c70: 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61  ort";       brea
1c80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1c90: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a  TE_AUTH:       z
1ca0: 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f   = "authorizatio
1cb0: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1cd0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1ce0: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
1cf0: 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61   = "auxiliary da
1d00: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
1d10: 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61  ror";       brea
1d20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1d30: 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a  TE_RANGE:      z
1d40: 20 3d 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75   = "bind or colu
1d50: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
1d60: 72 61 6e 67 65 22 3b 20 20 20 20 20 62 72 65 61  range";     brea
1d70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1d80: 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a  TE_NOTADB:     z
1d90: 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72   = "file is encr
1da0: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
1db0: 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61  a database";brea
1dc0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
1de0: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f   = "unknown erro
1df0: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1e10: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1e20: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
1e30: 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65   routine impleme
1e40: 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62  nts a busy callb
1e50: 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20  ack that sleeps 
1e60: 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61  and tries.** aga
1e70: 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f  in until a timeo
1e80: 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63  ut value is reac
1e90: 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75  hed.  The timeou
1ea0: 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e  t value is.** an
1eb0: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
1ec0: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
1ed0: 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
1ee0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
1ef0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
1f00: 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  t sqliteDefaultB
1f10: 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f  usyCallback(. vo
1f20: 69 64 20 2a 70 74 72 2c 20 20 20 20 20 20 20 20  id *ptr,        
1f30: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1f40: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
1f50: 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20  . int count     
1f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f70: 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61  mber of times ta
1f80: 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62 75 73  ble has been bus
1f90: 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49  y */.){.#if SQLI
1fa0: 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d  TE_MIN_SLEEP_MS=
1fb0: 3d 31 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  =1.  static cons
1fc0: 74 20 75 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a  t u8 delays[] =.
1fd0: 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20       { 1, 2, 5, 
1fe0: 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20  10, 15, 20, 25, 
1ff0: 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35  25,  25,  50,  5
2000: 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73 74 61 74  0, 100 };.  stat
2010: 69 63 20 63 6f 6e 73 74 20 75 38 20 74 6f 74 61  ic const u8 tota
2020: 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c  ls[] =.     { 0,
2030: 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33   1, 3,  8, 18, 3
2040: 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20  3, 53, 78, 103, 
2050: 31 32 38 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b  128, 178, 228 };
2060: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59  .# define NDELAY
2070: 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29   (sizeof(delays)
2080: 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30  /sizeof(delays[0
2090: 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75  ])).  int timeou
20a0: 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20 2a 29  t = ((sqlite3 *)
20b0: 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65 6f 75  ptr)->busyTimeou
20c0: 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20  t;.  int delay, 
20d0: 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74  prior;..  assert
20e0: 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20  ( count>=0 );.  
20f0: 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c  if( count < NDEL
2100: 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  AY ){.    delay 
2110: 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b  = delays[count];
2120: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
2130: 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65  als[count];.  }e
2140: 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d  lse{.    delay =
2150: 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31   delays[NDELAY-1
2160: 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74  ];.    prior = t
2170: 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20  otals[NDELAY-1] 
2180: 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28  + delay*(count-(
2190: 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a  NDELAY-1));.  }.
21a0: 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65    if( prior + de
21b0: 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b  lay > timeout ){
21c0: 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d  .    delay = tim
21d0: 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20  eout - prior;.  
21e0: 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29    if( delay<=0 )
21f0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
2200: 20 73 71 6c 69 74 65 33 4f 73 2e 78 53 6c 65 65   sqlite3Os.xSlee
2210: 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75  p(delay);.  retu
2220: 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e  rn 1;.#else.  in
2230: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71  t timeout = ((sq
2240: 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75  lite3 *)ptr)->bu
2250: 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28  syTimeout;.  if(
2260: 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20   (count+1)*1000 
2270: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
2280: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
2290: 20 73 71 6c 69 74 65 33 4f 73 2e 78 53 6c 65 65   sqlite3Os.xSlee
22a0: 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72  p(1000);.  retur
22b0: 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  n 1;.#endif.}../
22c0: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20  *.** Invoke the 
22d0: 67 69 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c  given busy handl
22e0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  er..**.** This r
22f0: 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64  outine is called
2300: 20 77 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69   when an operati
2310: 6f 6e 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  on failed with a
2320: 20 6c 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69   lock..** If thi
2330: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
2340: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2350: 6c 6f 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e  lock is retried.
2360: 20 20 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72    If it.** retur
2370: 6e 73 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74  ns 0, the operat
2380: 69 6f 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20  ion aborts with 
2390: 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  an SQLITE_BUSY e
23a0: 72 72 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  rror..*/.int sql
23b0: 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
23c0: 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
23d0: 72 20 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b  r *p){.  int rc;
23e0: 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70  .  if( p==0 || p
23f0: 2d 3e 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d  ->xFunc==0 || p-
2400: 3e 6e 42 75 73 79 3c 30 20 29 20 72 65 74 75 72  >nBusy<0 ) retur
2410: 6e 20 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78  n 0;.  rc = p->x
2420: 46 75 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d  Func(p->pArg, p-
2430: 3e 6e 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72  >nBusy);.  if( r
2440: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  c==0 ){.    p->n
2450: 42 75 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  Busy = -1;.  }el
2460: 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79  se{.    p->nBusy
2470: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
2480: 20 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   rc; .}../*.** T
2490: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
24a0: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
24b0: 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65  ck for an Sqlite
24c0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
24d0: 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61  .** given callba
24e0: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  ck function with
24f0: 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d   the given argum
2500: 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ent..*/.int sqli
2510: 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  te3_busy_handler
2520: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
2530: 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28  .  int (*xBusy)(
2540: 76 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f  void*,int),.  vo
2550: 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66  id *pArg.){.  if
2560: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
2570: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
2580: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
2590: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  SUSE;.  }.  db->
25a0: 62 75 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e  busyHandler.xFun
25b0: 63 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d  c = xBusy;.  db-
25c0: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72  >busyHandler.pAr
25d0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e  g = pArg;.  db->
25e0: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
25f0: 79 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  y = 0;.  return 
2600: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
2610: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2620: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
2630: 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  ACK./*.** This r
2640: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
2650: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
2660: 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20  k for an Sqlite 
2670: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a  database to the.
2680: 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63  ** given callbac
2690: 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  k function with 
26a0: 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65  the given argume
26b0: 6e 74 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73  nt. The progress
26c0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a   callback will.*
26d0: 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65  * be invoked eve
26e0: 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e  ry nOps opcodes.
26f0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2700: 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65  _progress_handle
2710: 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  r(.  sqlite3 *db
2720: 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20  , .  int nOps,. 
2730: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
2740: 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69  )(void*), .  voi
2750: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28  d *pArg.){.  if(
2760: 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
2770: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
2780: 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20  if( nOps>0 ){.  
2790: 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73      db->xProgres
27a0: 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20  s = xProgress;. 
27b0: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
27c0: 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20  ssOps = nOps;.  
27d0: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
27e0: 73 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20  sArg = pArg;.   
27f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
2800: 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b  ->xProgress = 0;
2810: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67  .      db->nProg
2820: 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20  ressOps = 0;.   
2830: 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73     db->pProgress
2840: 41 72 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Arg = 0;.    }. 
2850: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a   }.}.#endif.../*
2860: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
2870: 20 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61   installs a defa
2880: 75 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ult busy handler
2890: 20 74 68 61 74 20 77 61 69 74 73 20 66 6f 72 20   that waits for 
28a0: 74 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64  the.** specified
28b0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
28c0: 73 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72  seconds before r
28d0: 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69  eturning 0..*/.i
28e0: 6e 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  nt sqlite3_busy_
28f0: 74 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20  timeout(sqlite3 
2900: 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20  *db, int ms){.  
2910: 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20  if( ms>0 ){.    
2920: 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 20  db->busyTimeout 
2930: 3d 20 6d 73 3b 0a 20 20 20 20 73 71 6c 69 74 65  = ms;.    sqlite
2940: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64  3_busy_handler(d
2950: 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74  b, sqliteDefault
2960: 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76  BusyCallback, (v
2970: 6f 69 64 2a 29 64 62 29 3b 0a 20 20 7d 65 6c 73  oid*)db);.  }els
2980: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  e{.    sqlite3_b
2990: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
29a0: 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74  0, 0);.  }.  ret
29b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
29c0: 0a 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e  ../*.** Cause an
29d0: 79 20 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74  y pending operat
29e0: 69 6f 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69  ion to stop at i
29f0: 74 73 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f  ts earliest oppo
2a00: 72 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64  rtunity..*/.void
2a10: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
2a20: 70 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  pt(sqlite3 *db){
2a30: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
2a40: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29  afetyCheck(db) )
2a50: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2a60: 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72  |= SQLITE_Interr
2a70: 75 70 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  upt;.  }.}../*.*
2a80: 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d  * Windows system
2a90: 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68  s should call th
2aa0: 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72  is routine to fr
2ab0: 65 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a  ee memory that.*
2ac0: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e  * is returned in
2ad0: 20 74 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d   the in the errm
2ae0: 73 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  sg parameter of 
2af0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 77  sqlite3_open() w
2b00: 68 65 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73  hen.** SQLite is
2b10: 20 61 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d   a DLL.  For som
2b20: 65 20 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65  e reason, it doe
2b30: 73 20 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61  s not work to ca
2b40: 6c 6c 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72  ll free().** dir
2b50: 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ectly..**.** Not
2b60: 65 20 74 68 61 74 20 77 65 20 6e 65 65 64 20 74  e that we need t
2b70: 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f  o call free() no
2b80: 74 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 68  t sqliteFree() h
2b90: 65 72 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ere..*/.void sql
2ba0: 69 74 65 33 5f 66 72 65 65 28 63 68 61 72 20 2a  ite3_free(char *
2bb0: 70 29 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a  p){ free(p); }..
2bc0: 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77  /*.** Create new
2bd0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e   user functions.
2be0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2bf0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
2c00: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
2c10: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
2c20: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69  unctionName,.  i
2c30: 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65  nt nArg,.  int e
2c40: 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  nc,.  void *pUse
2c50: 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a  rData,.  void (*
2c60: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
2c70: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2c80: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2c90: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
2ca0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2cb0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2cc0: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2cd0: 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f  xFinal)(sqlite3_
2ce0: 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46  context*).){.  F
2cf0: 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74  uncDef *p;.  int
2d00: 20 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73   nName;..  if( s
2d10: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2d20: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
2d30: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
2d40: 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75  E;.  }.  if( zFu
2d50: 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c  nctionName==0 ||
2d60: 0a 20 20 20 20 20 20 28 78 46 75 6e 63 20 26 26  .      (xFunc &&
2d70: 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65   (xFinal || xSte
2d80: 70 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21  p)) || .      (!
2d90: 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c  xFunc && (xFinal
2da0: 20 26 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a   && !xStep)) ||.
2db0: 20 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26        (!xFunc &&
2dc0: 20 28 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74   (!xFinal && xSt
2dd0: 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e  ep)) ||.      (n
2de0: 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31  Arg<-1 || nArg>1
2df0: 32 37 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35  27) ||.      (25
2e00: 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65  5<(nName = strle
2e10: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
2e20: 29 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  )) ){.    return
2e30: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2e40: 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66 20 53 51   }.  .#ifndef SQ
2e50: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2e60: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55    /* If SQLITE_U
2e70: 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69 65  TF16 is specifie
2e80: 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  d as the encodin
2e90: 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72  g type, transfor
2ea0: 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f  m this.  ** to o
2eb0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46  ne of SQLITE_UTF
2ec0: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
2ed0: 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68 65  TF16BE using the
2ee0: 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46  .  ** SQLITE_UTF
2ef0: 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20  16NATIVE macro. 
2f00: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
2f10: 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
2f20: 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  lly..  **.  ** I
2f30: 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69 73 20  f SQLITE_ANY is 
2f40: 73 70 65 63 69 66 69 65 64 2c 20 61 64 64 20 74  specified, add t
2f50: 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  hree versions of
2f60: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20   the function.  
2f70: 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68 20 74  ** to the hash t
2f80: 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  able..  */.  if(
2f90: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46   enc==SQLITE_UTF
2fa0: 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20  16 ){.    enc = 
2fb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
2fc0: 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  VE;.  }else if( 
2fd0: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20  enc==SQLITE_ANY 
2fe0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20  ){.    int rc;. 
2ff0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
3000: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3010: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
3020: 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f  e, nArg, SQLITE_
3030: 55 54 46 38 2c 0a 20 20 20 20 20 20 20 20 20 70  UTF8,.         p
3040: 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c  UserData, xFunc,
3050: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b   xStep, xFinal);
3060: 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
3070: 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20  ITE_OK ) return 
3080: 72 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  rc;.    rc = sql
3090: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
30a0: 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69  tion(db, zFuncti
30b0: 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51  onName, nArg, SQ
30c0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 0a 20 20  LITE_UTF16LE,.  
30d0: 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c        pUserData,
30e0: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
30f0: 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28 20  Final);.    if( 
3100: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
3110: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 65  return rc;.    e
3120: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31  nc = SQLITE_UTF1
3130: 36 42 45 3b 0a 20 20 7d 0a 23 65 6c 73 65 0a 20  6BE;.  }.#else. 
3140: 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54   enc = SQLITE_UT
3150: 46 38 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20  F8;.#endif.  .  
3160: 2f 2a 20 43 68 65 63 6b 20 69 66 20 61 6e 20 65  /* Check if an e
3170: 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
3180: 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72 72 69   is being overri
3190: 64 64 65 6e 20 6f 72 20 64 65 6c 65 74 65 64 2e  dden or deleted.
31a0: 20 49 66 20 73 6f 2c 0a 20 20 2a 2a 20 61 6e 64   If so,.  ** and
31b0: 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
31c0: 65 20 56 4d 73 2c 20 74 68 65 6e 20 72 65 74 75  e VMs, then retu
31d0: 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 20  rn SQLITE_BUSY. 
31e0: 49 66 20 61 20 66 75 6e 63 74 69 6f 6e 0a 20 20  If a function.  
31f0: 2a 2a 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72  ** is being over
3200: 72 69 64 64 65 6e 2f 64 65 6c 65 74 65 64 20 62  ridden/deleted b
3210: 75 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  ut there are no 
3220: 61 63 74 69 76 65 20 56 4d 73 2c 20 61 6c 6c 6f  active VMs, allo
3230: 77 20 74 68 65 0a 20 20 2a 2a 20 6f 70 65 72 61  w the.  ** opera
3240: 74 69 6f 6e 20 74 6f 20 63 6f 6e 74 69 6e 75 65  tion to continue
3250: 20 62 75 74 20 69 6e 76 61 6c 69 64 61 74 65 20   but invalidate 
3260: 61 6c 6c 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  all precompiled 
3270: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f  statements..  */
3280: 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69  .  p = sqlite3Fi
3290: 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a  ndFunction(db, z
32a0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e  FunctionName, nN
32b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20  ame, nArg, enc, 
32c0: 30 29 3b 0a 20 20 69 66 28 20 70 20 26 26 20 70  0);.  if( p && p
32d0: 2d 3e 69 50 72 65 66 45 6e 63 3d 3d 65 6e 63 20  ->iPrefEnc==enc 
32e0: 26 26 20 70 2d 3e 6e 41 72 67 3d 3d 6e 41 72 67  && p->nArg==nArg
32f0: 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
3300: 61 63 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b  activeVdbeCnt ){
3310: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
3320: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  ror(db, SQLITE_B
3330: 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55  USY, .        "U
3340: 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f  nable to delete/
3350: 6d 6f 64 69 66 79 20 75 73 65 72 2d 66 75 6e 63  modify user-func
3360: 74 69 6f 6e 20 64 75 65 20 74 6f 20 61 63 74 69  tion due to acti
3370: 76 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b  ve statements");
3380: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3390: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
33a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
33b0: 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
33c0: 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
33d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 20  .    }.  }..  p 
33e0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
33f0: 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74  ction(db, zFunct
3400: 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20  ionName, nName, 
3410: 6e 41 72 67 2c 20 65 6e 63 2c 20 31 29 3b 0a 20  nArg, enc, 1);. 
3420: 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75   if( p==0 ) retu
3430: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
3440: 0a 20 20 70 2d 3e 66 6c 61 67 73 20 3d 20 30 3b  .  p->flags = 0;
3450: 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46  .  p->xFunc = xF
3460: 75 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20  unc;.  p->xStep 
3470: 3d 20 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46  = xStep;.  p->xF
3480: 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c  inalize = xFinal
3490: 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61  ;.  p->pUserData
34a0: 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20   = pUserData;.  
34b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
34c0: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
34d0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
34e0: 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  t sqlite3_create
34f0: 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a 20 20 73  _function16(.  s
3500: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f  qlite3 *db,.  co
3510: 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75 6e 63 74  nst void *zFunct
3520: 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e  ionName,.  int n
3530: 41 72 67 2c 0a 20 20 69 6e 74 20 65 54 65 78 74  Arg,.  int eText
3540: 52 65 70 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73  Rep,.  void *pUs
3550: 65 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28  erData,.  void (
3560: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
3570: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
3580: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20  ite3_value**),. 
3590: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
35a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
35b0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
35c0: 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78  e**),.  void (*x
35d0: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
35e0: 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e  ontext*).){.  in
35f0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 63 6f 6e  t rc;.  char con
3600: 73 74 20 2a 7a 46 75 6e 63 38 3b 0a 20 20 73 71  st *zFunc8;.  sq
3610: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d  lite3_value *pTm
3620: 70 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  p;..  if( sqlite
3630: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
3640: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
3650: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
3660: 7d 0a 20 20 70 54 6d 70 20 3d 20 73 71 6c 69 74  }.  pTmp = sqlit
3670: 65 33 47 65 74 54 72 61 6e 73 69 65 6e 74 56 61  e3GetTransientVa
3680: 6c 75 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74  lue(db);.  sqlit
3690: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 54  e3ValueSetStr(pT
36a0: 6d 70 2c 20 2d 31 2c 20 7a 46 75 6e 63 74 69 6f  mp, -1, zFunctio
36b0: 6e 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  nName, SQLITE_UT
36c0: 46 31 36 4e 41 54 49 56 45 2c 53 51 4c 49 54 45  F16NATIVE,SQLITE
36d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46 75 6e  _STATIC);.  zFun
36e0: 63 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  c8 = sqlite3Valu
36f0: 65 54 65 78 74 28 70 54 6d 70 2c 20 53 51 4c 49  eText(pTmp, SQLI
3700: 54 45 5f 55 54 46 38 29 3b 0a 0a 20 20 69 66 28  TE_UTF8);..  if(
3710: 20 21 7a 46 75 6e 63 38 20 29 7b 0a 20 20 20 20   !zFunc8 ){.    
3720: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
3730: 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  MEM;.  }.  rc = 
3740: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3750: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
3760: 63 38 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52  c8, nArg, eTextR
3770: 65 70 2c 20 0a 20 20 20 20 20 20 70 55 73 65 72  ep, .      pUser
3780: 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74  Data, xFunc, xSt
3790: 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 72  ep, xFinal);.  r
37a0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64  eturn rc;.}.#end
37b0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
37c0: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
37d0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 74  .** Register a t
37e0: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  race function.  
37f0: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
3800: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
3810: 69 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a  istered trace.**
3820: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a   is returned.  .
3830: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61  **.** A NULL tra
3840: 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e  ce function mean
3850: 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e  s that no tracin
3860: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
3870: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72  A non-NULL.** tr
3880: 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
3890: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
38a0: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
38b0: 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 65  t the start of e
38c0: 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ach.** SQL state
38d0: 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  ment..*/.void *s
38e0: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c  qlite3_trace(sql
38f0: 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 28  ite3 *db, void (
3900: 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63  *xTrace)(void*,c
3910: 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69  onst char*), voi
3920: 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64  d *pArg){.  void
3930: 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72   *pOld = db->pTr
3940: 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54  aceArg;.  db->xT
3950: 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20  race = xTrace;. 
3960: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d   db->pTraceArg =
3970: 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20   pArg;.  return 
3980: 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 52 65  pOld;.}./*.** Re
3990: 67 69 73 74 65 72 20 61 20 70 72 6f 66 69 6c 65  gister a profile
39a0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
39b0: 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72  pArg from the pr
39c0: 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65  eviously registe
39d0: 72 65 64 20 0a 2a 2a 20 70 72 6f 66 69 6c 65 20  red .** profile 
39e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 74 75  function is retu
39f0: 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20  rned.  .**.** A 
3a00: 4e 55 4c 4c 20 70 72 6f 66 69 6c 65 20 66 75 6e  NULL profile fun
3a10: 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74  ction means that
3a20: 20 6e 6f 20 70 72 6f 66 69 6c 69 6e 67 20 69 73   no profiling is
3a30: 20 65 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f   executes.  A no
3a40: 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72 6f 66 69 6c  n-NULL.** profil
3a50: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
3a60: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
3a70: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
3a80: 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f  the conclusion o
3a90: 66 0a 2a 2a 20 65 61 63 68 20 53 51 4c 20 73 74  f.** each SQL st
3aa0: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 73 20  atement that is 
3ab0: 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  run..*/.void *sq
3ac0: 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28 0a 20  lite3_profile(. 
3ad0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
3ae0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
3af0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
3b00: 72 2a 2c 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  r*,sqlite_uint64
3b10: 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a  ),.  void *pArg.
3b20: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
3b30: 3d 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72  = db->pProfileAr
3b40: 67 3b 0a 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c  g;.  db->xProfil
3b50: 65 20 3d 20 78 50 72 6f 66 69 6c 65 3b 0a 20 20  e = xProfile;.  
3b60: 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67 20  db->pProfileArg 
3b70: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
3b80: 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e 64 69 66 20   pOld;.}.#endif 
3b90: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
3ba0: 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a 2a 20 45 58  RACE */../*** EX
3bb0: 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a  PERIMENTAL ***.*
3bc0: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
3bd0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69  function to be i
3be0: 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72  nvoked when a tr
3bf0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  ansaction commen
3c00: 74 73 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  ts..** If either
3c10: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
3c20: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
3c30: 20 74 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f   the commit beco
3c40: 6d 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63  mes a.** rollbac
3c50: 6b 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  k..*/.void *sqli
3c60: 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28  te3_commit_hook(
3c70: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3c90: 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20  Attach the hook 
3ca0: 74 6f 20 74 68 69 73 20 64 61 74 61 62 61 73 65  to this database
3cb0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c   */.  int (*xCal
3cc0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20  lback)(void*),  
3cd0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69  /* Function to i
3ce0: 6e 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f  nvoke on each co
3cf0: 6d 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mmit */.  void *
3d00: 70 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20  pArg            
3d10: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
3d20: 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  to the function 
3d30: 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f  */.){.  void *pO
3d40: 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74  ld = db->pCommit
3d50: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d  Arg;.  db->xComm
3d60: 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  itCallback = xCa
3d70: 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43  llback;.  db->pC
3d80: 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b  ommitArg = pArg;
3d90: 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a  .  return pOld;.
3da0: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  }.../*.** This r
3db0: 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64  outine is called
3dc0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e   to create a con
3dd0: 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74  nection to a dat
3de0: 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64  abase BTree.** d
3df0: 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65  river.  If zFile
3e00: 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  name is the name
3e10: 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e   of a file, then
3e20: 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a   that file is.**
3e30: 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64   opened and used
3e40: 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20  .  If zFilename 
3e50: 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d  is the magic nam
3e60: 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65  e ":memory:" the
3e70: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
3e80: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d  e is stored in m
3e90: 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68  emory (and is th
3ea0: 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20  us forgotten as 
3eb0: 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63  soon as.** the c
3ec0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f  onnection is clo
3ed0: 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e  sed.)  If zFilen
3ee0: 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ame is NULL then
3ef0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
3f00: 20 69 73 20 61 20 22 76 69 72 74 75 61 6c 22 20   is a "virtual" 
3f10: 64 61 74 61 62 61 73 65 20 66 6f 72 20 74 72 61  database for tra
3f20: 6e 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20  nsient use only 
3f30: 61 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20 61  and is deleted a
3f40: 73 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65  s.** soon as the
3f50: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
3f60: 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76  losed..**.** A v
3f70: 69 72 74 75 61 6c 20 64 61 74 61 62 61 73 65 20  irtual database 
3f80: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20  can be either a 
3f90: 64 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20  disk file (that 
3fa0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
3fb0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e  .** deleted when
3fc0: 20 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f   the file is clo
3fd0: 73 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62 65  sed) or it an be
3fe0: 20 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20 69   held entirely i
3ff0: 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70  n memory,.** dep
4000: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61  ending on the va
4010: 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50  lues of the TEMP
4020: 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74  _STORE compile-t
4030: 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68  ime macro and th
4040: 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74  e.** db->temp_st
4050: 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63  ore variable, ac
4060: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66  cording to the f
4070: 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a  ollowing chart:.
4080: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50  **.**       TEMP
4090: 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74  _STORE     db->t
40a0: 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f  emp_store     Lo
40b0: 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72  cation of tempor
40c0: 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
40d0: 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d        ----------
40e0: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d       -----------
40f0: 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  ---     --------
4100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4110: 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20  ------.**       
4120: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
4130: 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20      any         
4140: 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20      file.**     
4150: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
4160: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
4170: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
4180: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
4190: 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
41a0: 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a          memory.*
41b0: 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20  *           1   
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20               0  
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
41e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20  .**           2 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
4210: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
4220: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
4230: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
4240: 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20  memory.**       
4250: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
4260: 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
4270: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20      memory.**   
4280: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
4290: 20 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20          any     
42a0: 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a          memory.*
42b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72  /.int sqlite3Btr
42c0: 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e  eeFactory(.  con
42d0: 73 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  st sqlite3 *db, 
42e0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64         /* Main d
42f0: 61 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65  atabase when ope
4300: 6e 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69  ning aux otherwi
4310: 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  se 0 */.  const 
4320: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
4330: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
4340: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  he file containi
4350: 6e 67 20 74 68 65 20 42 54 72 65 65 20 64 61 74  ng the BTree dat
4360: 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f  abase */.  int o
4370: 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20  mitJournal,     
4380: 20 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20       /* if TRUE 
4390: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72  then do not jour
43a0: 6e 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  nal this file */
43b0: 0a 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20  .  int nCache,  
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
43d0: 48 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69  How many pages i
43e0: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
43f0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70   */.  Btree **pp
4400: 42 74 72 65 65 20 20 20 20 20 20 20 20 20 20 20  Btree           
4410: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65  /* Pointer to ne
4420: 77 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77  w Btree object w
4430: 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29  ritten here */.)
4440: 7b 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c  {.  int btree_fl
4450: 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  ags = 0;.  int r
4460: 63 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20  c;.  .  assert( 
4470: 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20  ppBtree != 0);. 
4480: 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   if( omitJournal
4490: 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c   ){.    btree_fl
44a0: 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49  ags |= BTREE_OMI
44b0: 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20  T_JOURNAL;.  }. 
44c0: 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
44d0: 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f   SQLITE_NoReadlo
44e0: 63 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f  ck ){.    btree_
44f0: 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e  flags |= BTREE_N
4500: 4f 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a  O_READLOCK;.  }.
4510: 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d    if( zFilename=
4520: 3d 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53  =0 ){.#if TEMP_S
4530: 54 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44  TORE==0.    /* D
4540: 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e  o nothing */.#en
4550: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
4560: 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42  TE_OMIT_MEMORYDB
4570: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
4580: 3d 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74  =1.    if( db->t
4590: 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a  emp_store==2 ) z
45a0: 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d  Filename = ":mem
45b0: 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69  ory:";.#endif.#i
45c0: 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a  f TEMP_STORE==2.
45d0: 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70      if( db->temp
45e0: 5f 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c  _store!=1 ) zFil
45f0: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
4600: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54  :";.#endif.#if T
4610: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20  EMP_STORE==3.   
4620: 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d   zFilename = ":m
4630: 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a  emory:";.#endif.
4640: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
4650: 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a  _OMIT_MEMORYDB *
4660: 2f 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  /.  }..  rc = sq
4670: 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a  lite3BtreeOpen(z
4680: 46 69 6c 65 6e 61 6d 65 2c 20 70 70 42 74 72 65  Filename, ppBtre
4690: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b  e, btree_flags);
46a0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
46b0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
46c0: 74 65 33 42 74 72 65 65 53 65 74 42 75 73 79 48  te3BtreeSetBusyH
46d0: 61 6e 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c  andler(*ppBtree,
46e0: 20 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73   (void*)&db->bus
46f0: 79 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73  yHandler);.    s
4700: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
4710: 63 68 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65  cheSize(*ppBtree
4720: 2c 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20  , nCache);.  }. 
4730: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
4740: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d  *.** Return UTF-
4750: 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73  8 encoded Englis
4760: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
4770: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  nation of the mo
4780: 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72  st recent.** err
4790: 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  or..*/.const cha
47a0: 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  r *sqlite3_errms
47b0: 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  g(sqlite3 *db){.
47c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
47d0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d  .  if( sqlite3_m
47e0: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
47f0: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
4800: 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f  e3ErrStr(SQLITE_
4810: 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69 66  NOMEM);.  }.  if
4820: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
4830: 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e  heck(db) || db->
4840: 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f  errCode==SQLITE_
4850: 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72 65  MISUSE ){.    re
4860: 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53  turn sqlite3ErrS
4870: 74 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  tr(SQLITE_MISUSE
4880: 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  );.  }.  z = sql
4890: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
48a0: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28  db->pErr);.  if(
48b0: 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 20 3d   z==0 ){.    z =
48c0: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
48d0: 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20 20 7d  b->errCode);.  }
48e0: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
48f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4900: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
4910: 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e  Return UTF-16 en
4920: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
4930: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
4940: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
4950: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
4960: 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  */.const void *s
4970: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
4980: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
4990: 2f 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74  /* Because all t
49a0: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
49b0: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
49c0: 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  in the unicode. 
49d0: 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d 30   ** range 0x00-0
49e0: 78 46 46 2c 20 69 66 20 77 65 20 70 61 64 20 74  xFF, if we pad t
49f0: 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 74  he big-endian st
4a00: 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20 2a  ring with a .  *
4a10: 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20 77 65 20  * zero byte, we 
4a20: 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65 20 6c  can obtain the l
4a30: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 74 72  ittle-endian str
4a40: 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20 26 62  ing with.  ** &b
4a50: 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20  ig_endian[1]..  
4a60: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  */.  static cons
4a70: 74 20 63 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42  t char outOfMemB
4a80: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27  e[] = {.    0, '
4a90: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
4aa0: 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  t', 0, ' ', .   
4ab0: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c   0, 'o', 0, 'f',
4ac0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
4ad0: 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'm', 0, 'e', 0,
4ae0: 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'm', 0, 'o', 0,
4af0: 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c   'r', 0, 'y', 0,
4b00: 20 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61   0, 0.  };.  sta
4b10: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6d  tic const char m
4b20: 69 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b 0a 20  isuseBe [] = {. 
4b30: 20 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 69     0, 'l', 0, 'i
4b40: 27 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20 27 72  ', 0, 'b', 0, 'r
4b50: 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 72  ', 0, 'a', 0, 'r
4b60: 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 27 20  ', 0, 'y', 0, ' 
4b70: 27 2c 20 0a 20 20 20 20 30 2c 20 27 72 27 2c 20  ', .    0, 'r', 
4b80: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
4b90: 30 2c 20 27 74 27 2c 20 30 2c 20 27 69 27 2c 20  0, 't', 0, 'i', 
4ba0: 30 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'n', 0, 'e', 
4bb0: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
4bc0: 27 63 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20  'c', 0, 'a', 0, 
4bd0: 27 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20  'l', 0, 'l', 0, 
4be0: 27 65 27 2c 20 30 2c 20 27 64 27 2c 20 30 2c 20  'e', 0, 'd', 0, 
4bf0: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27  ' ', .    0, 'o'
4c00: 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27  , 0, 'u', 0, 't'
4c10: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30  , 0, ' ', .    0
4c20: 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30  , 'o', 0, 'f', 0
4c30: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
4c40: 73 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  s', 0, 'e', 0, '
4c50: 71 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  q', 0, 'u', 0, '
4c60: 65 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27  e', 0, 'n', 0, '
4c70: 63 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 30  c', 0, 'e', 0, 0
4c80: 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73  , 0.  };..  cons
4c90: 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 69 66 28  t void *z;.  if(
4ca0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
4cb0: 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 65  failed ){.    re
4cc0: 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f  turn (void *)(&o
4cd0: 75 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45  utOfMemBe[SQLITE
4ce0: 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51  _UTF16NATIVE==SQ
4cf0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30  LITE_UTF16LE?1:0
4d00: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ]);.  }.  if( sq
4d10: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
4d20: 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43  (db) || db->errC
4d30: 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55  ode==SQLITE_MISU
4d40: 53 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  SE ){.    return
4d50: 20 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75 73   (void *)(&misus
4d60: 65 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  eBe[SQLITE_UTF16
4d70: 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55  NATIVE==SQLITE_U
4d80: 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20  TF16LE?1:0]);.  
4d90: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
4da0: 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d  value_text16(db-
4db0: 3e 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d  >pErr);.  if( z=
4dc0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
4dd0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d  3ValueSetStr(db-
4de0: 3e 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69 74  >pErr, -1, sqlit
4df0: 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72  e3ErrStr(db->err
4e00: 43 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20 20  Code),.         
4e10: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
4e20: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
4e30: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
4e40: 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45  ue_text16(db->pE
4e50: 72 72 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  rr);.  }.  retur
4e60: 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  n z;.}.#endif /*
4e70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
4e80: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  16 */../*.** Ret
4e90: 75 72 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63  urn the most rec
4ea0: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 67  ent error code g
4eb0: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 20 53  enerated by an S
4ec0: 51 4c 69 74 65 20 72 6f 75 74 69 6e 65 2e 0a 2a  QLite routine..*
4ed0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 72  /.int sqlite3_er
4ee0: 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20 2a 64  rcode(sqlite3 *d
4ef0: 62 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  b){.  if( sqlite
4f00: 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  3_malloc_failed 
4f10: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
4f20: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
4f30: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
4f40: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
4f50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4f60: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
4f70: 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f  return db->errCo
4f80: 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  de;.}../*.** Thi
4f90: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 74  s routine does t
4fa0: 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e 69  he work of openi
4fb0: 6e 67 20 61 20 64 61 74 61 62 61 73 65 20 6f 6e  ng a database on
4fc0: 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73 71   behalf of.** sq
4fd0: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64  lite3_open() and
4fe0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
4ff0: 29 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  ). The database 
5000: 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65 6e  filename "zFilen
5010: 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55 54 46  ame"  .** is UTF
5020: 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f 0a 73  -8 encoded..*/.s
5030: 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61  tatic int openDa
5040: 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20  tabase(.  const 
5050: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
5060: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
5070: 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f  ename UTF-8 enco
5080: 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ded */.  sqlite3
5090: 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20 20   **ppDb         
50a0: 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64  /* OUT: Returned
50b0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
50c0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
50d0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20   *db;.  int rc, 
50e0: 69 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  i;.  CollSeq *pC
50f0: 6f 6c 6c 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63  oll;..  /* Alloc
5100: 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 20 64  ate the sqlite d
5110: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ata structure */
5120: 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65 4d 61  .  db = sqliteMa
5130: 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28 73 71 6c  lloc( sizeof(sql
5140: 69 74 65 33 29 20 29 3b 0a 20 20 69 66 28 20 64  ite3) );.  if( d
5150: 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70 65 6e  b==0 ) goto open
5160: 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e 70 72  db_out;.  db->pr
5170: 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20 30 3b  iorNewRowid = 0;
5180: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
5190: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
51a0: 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20 32 3b  ;.  db->nDb = 2;
51b0: 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64 62 2d  .  db->aDb = db-
51c0: 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20 64 62  >aDbStatic;.  db
51d0: 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
51e0: 54 46 38 3b 0a 20 20 64 62 2d 3e 61 75 74 6f 43  TF8;.  db->autoC
51f0: 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 64 62 2d  ommit = 1;.  db-
5200: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
5210: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 0a  _ShortColNames;.
5220: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
5230: 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51  t(&db->aFunc, SQ
5240: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
5250: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48  , 0);.  sqlite3H
5260: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f  ashInit(&db->aCo
5270: 6c 6c 53 65 71 2c 20 53 51 4c 49 54 45 5f 48 41  llSeq, SQLITE_HA
5280: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20  SH_STRING, 0);. 
5290: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
52a0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  nDb; i++){.    s
52b0: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
52c0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61  db->aDb[i].tblHa
52d0: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
52e0: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
52f0: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
5300: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48  &db->aDb[i].idxH
5310: 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  ash, SQLITE_HASH
5320: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20  _STRING, 0);.   
5330: 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74   sqlite3HashInit
5340: 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69  (&db->aDb[i].tri
5350: 67 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41  gHash, SQLITE_HA
5360: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20  SH_STRING, 0);. 
5370: 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e     sqlite3HashIn
5380: 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61  it(&db->aDb[i].a
5390: 46 4b 65 79 2c 20 53 51 4c 49 54 45 5f 48 41 53  FKey, SQLITE_HAS
53a0: 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20  H_STRING, 1);.  
53b0: 7d 0a 20 20 0a 20 20 2f 2a 20 41 64 64 20 74 68  }.  .  /* Add th
53c0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
53d0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 42 49 4e  ion sequence BIN
53e0: 41 52 59 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b  ARY. BINARY work
53f0: 73 20 66 6f 72 20 62 6f 74 68 20 55 54 46 2d 38  s for both UTF-8
5400: 0a 20 20 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36  .  ** and UTF-16
5410: 2c 20 73 6f 20 61 64 64 20 61 20 76 65 72 73 69  , so add a versi
5420: 6f 6e 20 66 6f 72 20 65 61 63 68 20 74 6f 20 61  on for each to a
5430: 76 6f 69 64 20 61 6e 79 20 75 6e 6e 65 63 65 73  void any unneces
5440: 73 61 72 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72  sary.  ** conver
5450: 73 69 6f 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20  sions. The only 
5460: 65 72 72 6f 72 20 74 68 61 74 20 63 61 6e 20 6f  error that can o
5470: 63 63 75 72 20 68 65 72 65 20 69 73 20 61 20 6d  ccur here is a m
5480: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 2e  alloc() failure.
5490: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
54a0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
54b0: 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59  tion(db, "BINARY
54c0: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
54d0: 30 2c 62 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c  0,binCollFunc) |
54e0: 7c 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  |.      sqlite3_
54f0: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
5500: 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53  (db, "BINARY", S
5510: 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 30 2c 62  QLITE_UTF16, 0,b
5520: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
5530: 20 20 20 20 20 28 64 62 2d 3e 70 44 66 6c 74 43       (db->pDfltC
5540: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
5550: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d  dCollSeq(db, db-
5560: 3e 65 6e 63 2c 20 22 42 49 4e 41 52 59 22 2c 20  >enc, "BINARY", 
5570: 36 2c 20 30 29 29 3d 3d 30 20 29 7b 0a 20 20 20  6, 0))==0 ){.   
5580: 20 72 63 20 3d 20 64 62 2d 3e 65 72 72 43 6f 64   rc = db->errCod
5590: 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e;.    assert( r
55a0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c!=SQLITE_OK );.
55b0: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
55c0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
55d0: 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  SED;.    goto op
55e0: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  endb_out;.  }.. 
55f0: 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20 61 20 55   /* Also add a U
5600: 54 46 2d 38 20 63 61 73 65 2d 69 6e 73 65 6e 73  TF-8 case-insens
5610: 69 74 69 76 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  itive collation 
5620: 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 20 20 73  sequence. */.  s
5630: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
5640: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43  llation(db, "NOC
5650: 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ASE", SQLITE_UTF
5660: 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c  8, 0, nocaseColl
5670: 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20 20 2f  atingFunc);..  /
5680: 2a 20 53 65 74 20 66 6c 61 67 73 20 6f 6e 20 74  * Set flags on t
5690: 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  he built-in coll
56a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
56b0: 2a 2f 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f  */.  db->pDfltCo
56c0: 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  ll->type = SQLIT
56d0: 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20  E_COLL_BINARY;. 
56e0: 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33   pColl = sqlite3
56f0: 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20  FindCollSeq(db, 
5700: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f  SQLITE_UTF8, "NO
5710: 43 41 53 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20  CASE", 6, 0);.  
5720: 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20  if( pColl ){.   
5730: 20 70 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53   pColl->type = S
5740: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53  QLITE_COLL_NOCAS
5750: 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65  E;.  }..  /* Ope
5760: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61  n the backend da
5770: 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f  tabase driver */
5780: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
5790: 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
57a0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41  zFilename, 0, MA
57b0: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44  X_PAGES, &db->aD
57c0: 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28  b[0].pBt);.  if(
57d0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
57e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
57f0: 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20  or(db, rc, 0);. 
5800: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
5810: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
5820: 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  ED;.    goto ope
5830: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ndb_out;.  }..  
5840: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 73  /* The default s
5850: 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f 72 20  afety_level for 
5860: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
5870: 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66 6f 72  e is 'full'; for
5880: 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a 20 64   the temp.  ** d
5890: 61 74 61 62 61 73 65 20 69 74 20 69 73 20 27 4e  atabase it is 'N
58a0: 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74 63 68  ONE'. This match
58b0: 65 73 20 74 68 65 20 70 61 67 65 72 20 6c 61 79  es the pager lay
58c0: 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20 0a 20  er defaults.  . 
58d0: 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d   */.  db->aDb[0]
58e0: 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b  .zName = "main";
58f0: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 73 61  .  db->aDb[0].sa
5900: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33 3b 0a  fety_level = 3;.
5910: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5920: 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64 62 2d  MIT_TEMPDB.  db-
5930: 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20  >aDb[1].zName = 
5940: 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e 61 44  "temp";.  db->aD
5950: 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65  b[1].safety_leve
5960: 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a 0a 0a  l = 1;.#endif...
5970: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61 6c    /* Register al
5980: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
5990: 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e 6f 74  ions, but do not
59a0: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64   attempt to read
59b0: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
59c0: 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e 20 54  se schema yet. T
59d0: 68 69 73 20 69 73 20 64 65 6c 61 79 65 64 20 75  his is delayed u
59e0: 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20 74  ntil the first t
59f0: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
5a00: 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73 73 65  .  ** is accesse
5a10: 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
5a20: 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
5a30: 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20  Functions(db);. 
5a40: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
5a50: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
5a60: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
5a70: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
5a80: 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20  ;..opendb_out:. 
5a90: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 65 72 72   if( sqlite3_err
5aa0: 63 6f 64 65 28 64 62 29 3d 3d 53 51 4c 49 54 45  code(db)==SQLITE
5ab0: 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 6d  _OK && sqlite3_m
5ac0: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
5ad0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
5ae0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
5af0: 4d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 2a 70 70  M, 0);.  }.  *pp
5b00: 44 62 20 3d 20 64 62 3b 0a 23 69 66 6e 64 65 66  Db = db;.#ifndef
5b10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
5b20: 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 66 28  BALRECOVER.  if(
5b30: 20 64 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   db ){.    sqlit
5b40: 65 33 4f 73 2e 78 45 6e 74 65 72 4d 75 74 65 78  e3Os.xEnterMutex
5b50: 28 29 3b 0a 20 20 20 20 64 62 2d 3e 70 4e 65 78  ();.    db->pNex
5b60: 74 20 3d 20 70 44 62 4c 69 73 74 3b 0a 20 20 20  t = pDbList;.   
5b70: 20 70 44 62 4c 69 73 74 20 3d 20 64 62 3b 0a 20   pDbList = db;. 
5b80: 20 20 20 73 71 6c 69 74 65 33 4f 73 2e 78 4c 65     sqlite3Os.xLe
5b90: 61 76 65 4d 75 74 65 78 28 29 3b 0a 20 20 7d 0a  aveMutex();.  }.
5ba0: 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
5bb0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
5bc0: 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  db);.}../*.** Op
5bd0: 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
5be0: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  e handle..*/.int
5bf0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20   sqlite3_open(. 
5c00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
5c10: 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74  lename, .  sqlit
5c20: 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20  e3 **ppDb .){.  
5c30: 72 65 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62  return openDatab
5c40: 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70  ase(zFilename, p
5c50: 70 44 62 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  pDb);.}..#ifndef
5c60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
5c70: 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  16./*.** Open a 
5c80: 6e 65 77 20 64 61 74 61 62 61 73 65 20 68 61 6e  new database han
5c90: 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  dle..*/.int sqli
5ca0: 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20 20 63 6f  te3_open16(.  co
5cb0: 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e  nst void *zFilen
5cc0: 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20  ame, .  sqlite3 
5cd0: 2a 2a 70 70 44 62 0a 29 7b 0a 20 20 63 68 61 72  **ppDb.){.  char
5ce0: 20 63 6f 6e 73 74 20 2a 7a 46 69 6c 65 6e 61 6d   const *zFilenam
5cf0: 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61  e8;   /* zFilena
5d00: 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  me encoded in UT
5d10: 46 2d 38 20 69 6e 73 74 65 61 64 20 6f 66 20 55  F-8 instead of U
5d20: 54 46 2d 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72  TF-16 */.  int r
5d30: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
5d40: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
5d50: 65 20 2a 70 56 61 6c 3b 0a 0a 20 20 61 73 73 65  e *pVal;..  asse
5d60: 72 74 28 20 70 70 44 62 20 29 3b 0a 20 20 2a 70  rt( ppDb );.  *p
5d70: 70 44 62 20 3d 20 30 3b 0a 20 20 70 56 61 6c 20  pDb = 0;.  pVal 
5d80: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
5d90: 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  w();.  sqlite3Va
5da0: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
5db0: 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 53  -1, zFilename, S
5dc0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5dd0: 45 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  E, SQLITE_STATIC
5de0: 29 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20  );.  zFilename8 
5df0: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65  = sqlite3ValueTe
5e00: 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f  xt(pVal, SQLITE_
5e10: 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a 46 69  UTF8);.  if( zFi
5e20: 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20 72  lename8 ){.    r
5e30: 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73 65  c = openDatabase
5e40: 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44  (zFilename8, ppD
5e50: 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
5e60: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a 70 70  SQLITE_OK && *pp
5e70: 44 62 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  Db ){.      sqli
5e80: 74 65 33 5f 65 78 65 63 28 2a 70 70 44 62 2c 20  te3_exec(*ppDb, 
5e90: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
5ea0: 20 3d 20 27 55 54 46 2d 31 36 27 22 2c 20 30 2c   = 'UTF-16'", 0,
5eb0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20   0, 0);.    }.  
5ec0: 7d 0a 20 20 69 66 28 20 70 56 61 6c 20 29 7b 0a  }.  if( pVal ){.
5ed0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
5ee0: 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  Free(pVal);.  }.
5ef0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
5f00: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
5f10: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
5f20: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5f30: 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73 74  ing routine dest
5f40: 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20 6d  roys a virtual m
5f50: 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20 63  achine that is c
5f60: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
5f70: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
5f80: 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68 65 20  () routine. The 
5f90: 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65 64  integer returned
5fa0: 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a   is an SQLITE_.*
5fb0: 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  * success/failur
5fc0: 65 20 63 6f 64 65 20 74 68 61 74 20 64 65 73 63  e code that desc
5fd0: 72 69 62 65 73 20 74 68 65 20 72 65 73 75 6c 74  ribes the result
5fe0: 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68   of executing th
5ff0: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  e virtual.** mac
6000: 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  hine..**.** This
6010: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
6020: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  e error code and
6030: 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
6040: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65   by.** sqlite3_e
6050: 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65  rrcode(), sqlite
6060: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
6070: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
6080: 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
6090: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74  3_finalize(sqlit
60a0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
60b0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
60c0: 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20   pStmt==0 ){.   
60d0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
60e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
60f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 69   = sqlite3VdbeFi
6100: 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a 29 70 53  nalize((Vdbe*)pS
6110: 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tmt);.  }.  retu
6120: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
6130: 54 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63 75  Terminate the cu
6140: 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20  rrent execution 
6150: 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  of an SQL statem
6160: 65 6e 74 20 61 6e 64 20 72 65 73 65 74 20 69 74  ent and reset it
6170: 0a 2a 2a 20 62 61 63 6b 20 74 6f 20 69 74 73 20  .** back to its 
6180: 73 74 61 72 74 69 6e 67 20 73 74 61 74 65 20 73  starting state s
6190: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
61a0: 20 72 65 75 73 65 64 2e 20 41 20 73 75 63 63 65   reused. A succe
61b0: 73 73 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20  ss code from.** 
61c0: 74 68 65 20 70 72 69 6f 72 20 65 78 65 63 75 74  the prior execut
61d0: 69 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ion is returned.
61e0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
61f0: 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72 72  ine sets the err
6200: 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69  or code and stri
6210: 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a  ng returned by.*
6220: 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  * sqlite3_errcod
6230: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  e(), sqlite3_err
6240: 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65  msg() and sqlite
6250: 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f  3_errmsg16()..*/
6260: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73  .int sqlite3_res
6270: 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  et(sqlite3_stmt 
6280: 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72  *pStmt){.  int r
6290: 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d  c;.  if( pStmt==
62a0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
62b0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
62c0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
62d0: 65 33 56 64 62 65 52 65 73 65 74 28 28 56 64 62  e3VdbeReset((Vdb
62e0: 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 20 20 73  e*)pStmt);.    s
62f0: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
6300: 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d 74  ady((Vdbe*)pStmt
6310: 2c 20 2d 31 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  , -1, 0, 0, 0);.
6320: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
6330: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  .}../*.** Regist
6340: 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69  er a new collati
6350: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68  on sequence with
6360: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
6370: 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20  ndle db..*/.int 
6380: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
6390: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69  ollation(.  sqli
63a0: 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73  te3* db, .  cons
63b0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a  t char *zName, .
63c0: 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f    int enc, .  vo
63d0: 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28  id* pCtx,.  int(
63e0: 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a  *xCompare)(void*
63f0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  ,int,const void*
6400: 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  ,int,const void*
6410: 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  ).){.  CollSeq *
6420: 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20 72 63 20  pColl;.  int rc 
6430: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 0a  = SQLITE_OK;.  .
6440: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
6450: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
6460: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6470: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 20  E_MISUSE;.  }.. 
6480: 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54   /* If SQLITE_UT
6490: 46 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64  F16 is specified
64a0: 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   as the encoding
64b0: 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d   type, transform
64c0: 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e   this.  ** to on
64d0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31  e of SQLITE_UTF1
64e0: 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54  6LE or SQLITE_UT
64f0: 46 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a  F16BE using the.
6500: 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31    ** SQLITE_UTF1
6510: 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53  6NATIVE macro. S
6520: 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e  QLITE_UTF16 is n
6530: 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  ot used internal
6540: 6c 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ly..  */.  if( e
6550: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
6560: 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51   ){.    enc = SQ
6570: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6580: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 65 6e 63  ;.  }..  if( enc
6590: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 26 26  !=SQLITE_UTF8 &&
65a0: 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46   enc!=SQLITE_UTF
65b0: 31 36 4c 45 20 26 26 20 65 6e 63 21 3d 53 51 4c  16LE && enc!=SQL
65c0: 49 54 45 5f 55 54 46 31 36 42 45 20 29 7b 0a 20  ITE_UTF16BE ){. 
65d0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
65e0: 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  db, SQLITE_ERROR
65f0: 2c 20 0a 20 20 20 20 20 20 20 20 22 50 61 72 61  , .        "Para
6600: 6d 20 33 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  m 3 to sqlite3_c
6610: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
6620: 29 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  ) must be one of
6630: 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 49   ".        "SQLI
6640: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
6650: 55 54 46 31 36 2c 20 53 51 4c 49 54 45 5f 55 54  UTF16, SQLITE_UT
6660: 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f  F16LE or SQLITE_
6670: 55 54 46 31 36 42 45 22 0a 20 20 20 20 29 3b 0a  UTF16BE".    );.
6680: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6690: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  E_ERROR;.  }..  
66a0: 2f 2a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  /* Check if this
66b0: 20 63 61 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e   call is removin
66c0: 67 20 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 61  g or replacing a
66d0: 6e 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61  n existing colla
66e0: 74 69 6f 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65  tion .  ** seque
66f0: 6e 63 65 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20  nce. If so, and 
6700: 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
6710: 20 56 4d 73 2c 20 72 65 74 75 72 6e 20 62 75 73   VMs, return bus
6720: 79 2e 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a  y. If there.  **
6730: 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56   are no active V
6740: 4d 73 2c 20 69 6e 76 61 6c 69 64 61 74 65 20 61  Ms, invalidate a
6750: 6e 79 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20  ny pre-compiled 
6760: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f  statements..  */
6770: 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  .  pColl = sqlit
6780: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
6790: 2c 20 28 75 38 29 65 6e 63 2c 20 7a 4e 61 6d 65  , (u8)enc, zName
67a0: 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c  , strlen(zName),
67b0: 20 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c   0);.  if( pColl
67c0: 20 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20   && pColl->xCmp 
67d0: 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  ){.    if( db->a
67e0: 63 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b 0a  ctiveVdbeCnt ){.
67f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
6800: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55  or(db, SQLITE_BU
6810: 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55 6e  SY, .        "Un
6820: 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d  able to delete/m
6830: 6f 64 69 66 79 20 63 6f 6c 6c 61 74 69 6f 6e 20  odify collation 
6840: 73 65 71 75 65 6e 63 65 20 64 75 65 20 74 6f 20  sequence due to 
6850: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
6860: 73 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  s");.      retur
6870: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
6880: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
6890: 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
68a0: 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
68b0: 7d 0a 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c  }..  pColl = sql
68c0: 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
68d0: 64 62 2c 20 28 75 38 29 65 6e 63 2c 20 7a 4e 61  db, (u8)enc, zNa
68e0: 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65  me, strlen(zName
68f0: 29 2c 20 31 29 3b 0a 20 20 69 66 28 20 30 3d 3d  ), 1);.  if( 0==
6900: 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 72 63 20  pColl ){.    rc 
6910: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
6920: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 6f    }else{.    pCo
6930: 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d 70  ll->xCmp = xComp
6940: 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e  are;.    pColl->
6950: 70 55 73 65 72 20 3d 20 70 43 74 78 3b 0a 20 20  pUser = pCtx;.  
6960: 20 20 70 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 65    pColl->enc = e
6970: 6e 63 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  nc;.  }.  sqlite
6980: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
6990: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
69a0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
69b0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
69c0: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
69d0: 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
69e0: 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
69f0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
6a00: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
6a10: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
6a20: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  n16(.  sqlite3* 
6a30: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
6a40: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
6a50: 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70   enc, .  void* p
6a60: 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d  Ctx,.  int(*xCom
6a70: 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  pare)(void*,int,
6a80: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
6a90: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
6aa0: 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4e    char const *zN
6ab0: 61 6d 65 38 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ame8;.  sqlite3_
6ac0: 76 61 6c 75 65 20 2a 70 54 6d 70 3b 0a 20 20 69  value *pTmp;.  i
6ad0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
6ae0: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
6af0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
6b00: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d  ISUSE;.  }.  pTm
6b10: 70 20 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72  p = sqlite3GetTr
6b20: 61 6e 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29  ansientValue(db)
6b30: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
6b40: 53 65 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c  SetStr(pTmp, -1,
6b50: 20 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55   zName, SQLITE_U
6b60: 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49  TF16NATIVE, SQLI
6b70: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 4e  TE_STATIC);.  zN
6b80: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 56 61  ame8 = sqlite3Va
6b90: 6c 75 65 54 65 78 74 28 70 54 6d 70 2c 20 53 51  lueText(pTmp, SQ
6ba0: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 72 65  LITE_UTF8);.  re
6bb0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 72 65  turn sqlite3_cre
6bc0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
6bd0: 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c 20 70  , zName8, enc, p
6be0: 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 29 3b 0a  Ctx, xCompare);.
6bf0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
6c00: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
6c10: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
6c20: 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
6c30: 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61  uence factory ca
6c40: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
6c50: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
6c60: 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61  ** db. Replace a
6c70: 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ny previously in
6c80: 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f  stalled collatio
6c90: 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f  n sequence facto
6ca0: 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
6cb0: 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65  e3_collation_nee
6cc0: 64 65 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ded(.  sqlite3 *
6cd0: 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f  db, .  void *pCo
6ce0: 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20  llNeededArg, .  
6cf0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
6d00: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
6d10: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
6d20: 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20  onst char*).){. 
6d30: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
6d40: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
6d50: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6d60: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64  _MISUSE;.  }.  d
6d70: 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d  b->xCollNeeded =
6d80: 20 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20   xCollNeeded;.  
6d90: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31  db->xCollNeeded1
6da0: 36 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f  6 = 0;.  db->pCo
6db0: 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43  llNeededArg = pC
6dc0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
6dd0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6de0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
6df0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
6e00: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
6e10: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
6e20: 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62  ce factory callb
6e30: 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61 74  ack with the dat
6e40: 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
6e50: 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20  db. Replace any 
6e60: 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61  previously insta
6e70: 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  lled collation s
6e80: 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e  equence factory.
6e90: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6ea0: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
6eb0: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
6ec0: 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  b, .  void *pCol
6ed0: 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76  lNeededArg, .  v
6ee0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
6ef0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
6f00: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
6f10: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
6f20: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
6f30: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
6f40: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6f50: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
6f60: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20  db->xCollNeeded 
6f70: 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  = 0;.  db->xColl
6f80: 4e 65 65 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c  Needed16 = xColl
6f90: 4e 65 65 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e  Needed16;.  db->
6fa0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d  pCollNeededArg =
6fb0: 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b   pCollNeededArg;
6fc0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
6fd0: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  _OK;.}.#endif /*
6fe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6ff0: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
7000: 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41  QLITE_OMIT_GLOBA
7010: 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a 20 54  LRECOVER./*.** T
7020: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
7030: 63 61 6c 6c 65 64 20 74 6f 20 72 65 63 6f 76 65  called to recove
7040: 72 20 66 72 6f 6d 20 61 20 6d 61 6c 6c 6f 63 20  r from a malloc 
7050: 66 61 69 6c 75 72 65 20 74 68 61 74 20 6f 63 63  failure that occ
7060: 75 72 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 53  ured.** within S
7070: 51 4c 69 74 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  QLite. .**.** Th
7080: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 2a  is function is *
7090: 6e 6f 74 2a 20 74 68 72 65 61 64 73 61 66 65 2e  not* threadsafe.
70a0: 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 66 72   Calling this fr
70b0: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 68 72 65  om within a thre
70c0: 61 64 65 64 0a 2a 2a 20 61 70 70 6c 69 63 61 74  aded.** applicat
70d0: 69 6f 6e 20 77 68 65 6e 20 74 68 72 65 61 64 73  ion when threads
70e0: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20   other than the 
70f0: 63 61 6c 6c 65 72 20 68 61 76 65 20 75 73 65 64  caller have used
7100: 20 53 51 4c 69 74 65 20 69 73 20 0a 2a 2a 20 64   SQLite is .** d
7110: 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 77 69 6c  angerous and wil
7120: 6c 20 61 6c 6d 6f 73 74 20 63 65 72 74 61 69 6e  l almost certain
7130: 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 6d 61 6c  ly result in mal
7140: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e  functions..*/.in
7150: 74 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c  t sqlite3_global
7160: 5f 72 65 63 6f 76 65 72 28 29 7b 0a 20 20 69 6e  _recover(){.  in
7170: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
7180: 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
7190: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
71a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64  {.    sqlite3 *d
71b0: 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  b;.    int i;.  
71c0: 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63    sqlite3_malloc
71d0: 5f 66 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20  _failed = 0;.   
71e0: 20 66 6f 72 28 64 62 3d 70 44 62 4c 69 73 74 3b   for(db=pDbList;
71f0: 20 64 62 3b 20 64 62 3d 64 62 2d 3e 70 4e 65 78   db; db=db->pNex
7200: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
7210: 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
7220: 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
7230: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
7240: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
7250: 20 20 20 20 20 20 20 20 42 74 72 65 65 20 2a 70          Btree *p
7260: 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
7270: 70 42 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28  pBt;.        if(
7280: 20 70 42 74 20 26 26 20 28 72 63 3d 73 71 6c 69   pBt && (rc=sqli
7290: 74 65 33 42 74 72 65 65 52 65 73 65 74 28 70 42  te3BtreeReset(pB
72a0: 74 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  t))!=0 ){.      
72b0: 20 20 20 20 67 6f 74 6f 20 72 65 63 6f 76 65 72      goto recover
72c0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
72d0: 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 64        } .      d
72e0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
72f0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 72 65  1;.    }.  }..re
7300: 63 6f 76 65 72 5f 6f 75 74 3a 0a 20 20 69 66 28  cover_out:.  if(
7310: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
7320: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61  {.    sqlite3_ma
7330: 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 3d 20 31 3b  lloc_failed = 1;
7340: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
7350: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
7360: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
7370: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
7380: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7390: 74 69 6f 6e 20 69 73 20 69 6e 20 61 75 74 6f 63  tion is in autoc
73a0: 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20  ommit.** mode.  
73b0: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 69  Return TRUE if i
73c0: 74 20 69 73 20 61 6e 64 20 46 41 4c 53 45 20 69  t is and FALSE i
73d0: 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63 6f 6d 6d  f not.  Autocomm
73e0: 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a  it mode is on.**
73f0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 75   by default.  Au
7400: 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64 69 73 61  tocommit is disa
7410: 62 6c 65 64 20 62 79 20 61 20 42 45 47 49 4e 20  bled by a BEGIN 
7420: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
7430: 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79 20 74 68  enabled.** by th
7440: 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54 20 6f 72  e next COMMIT or
7450: 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a   ROLLBACK..**.**
7460: 2a 2a 2a 2a 2a 20 54 48 49 53 20 49 53 20 41 4e  ***** THIS IS AN
7470: 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 41 50   EXPERIMENTAL AP
7480: 49 20 41 4e 44 20 49 53 20 53 55 42 4a 45 43 54  I AND IS SUBJECT
7490: 20 54 4f 20 43 48 41 4e 47 45 20 2a 2a 2a 2a 2a   TO CHANGE *****
74a0: 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  *.*/.int sqlite3
74b0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
74c0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
74d0: 72 65 74 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43  return db->autoC
74e0: 6f 6d 6d 69 74 3b 0a 7d 0a 0a 23 69 66 64 65 66  ommit;.}..#ifdef
74f0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
7500: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
7510: 67 20 72 6f 75 74 69 6e 65 20 69 73 20 73 75 62  g routine is sub
7520: 74 69 74 75 74 65 64 20 66 6f 72 20 63 6f 6e 73  tituted for cons
7530: 74 61 6e 74 20 53 51 4c 49 54 45 5f 43 4f 52 52  tant SQLITE_CORR
7540: 55 50 54 20 69 6e 0a 2a 2a 20 64 65 62 75 67 67  UPT in.** debugg
7550: 69 6e 67 20 62 75 69 6c 64 73 2e 20 20 54 68 69  ing builds.  Thi
7560: 73 20 70 72 6f 76 69 64 65 73 20 61 20 77 61 79  s provides a way
7570: 20 74 6f 20 73 65 74 20 61 20 62 72 65 61 6b 70   to set a breakp
7580: 6f 69 6e 74 20 66 6f 72 20 77 68 65 6e 0a 2a 2a  oint for when.**
7590: 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 73 20 66   corruption is f
75a0: 69 72 73 74 20 64 65 74 65 63 74 65 64 2e 0a 2a  irst detected..*
75b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
75c0: 72 75 70 74 28 76 6f 69 64 29 7b 0a 20 20 72 65  rupt(void){.  re
75d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52  turn SQLITE_CORR
75e0: 55 50 54 3b 0a 7d 0a 23 65 6e 64 69 66 0a        UPT;.}.#endif.