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

Artifact e4bfea7b893688b034cb5fd43a8f9d19a0c72c34:


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 38 35 20 32 30 30 37 2f 30 38  ,v 1.385 2007/08
0280: 2f 31 38 20 31 30 3a 35 39 3a 32 30 20 64 61 6e  /18 10:59:20 dan
0290: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
02a0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
02b0: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
02c0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
02d0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
02e0: 2a 2a 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f  ** The version o
02f0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f  f the library.*/
0300: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
0310: 74 65 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20  te3_version[] = 
0320: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a  SQLITE_VERSION;.
0330: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
0340: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76  te3_libversion(v
0350: 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c  oid){ return sql
0360: 69 74 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a  ite3_version; }.
0370: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76  int sqlite3_libv
0380: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f  ersion_number(vo
0390: 69 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49  id){ return SQLI
03a0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
03b0: 52 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  R; }../*.** If t
03c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e  he following fun
03d0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 69 73  ction pointer is
03e0: 20 6e 6f 74 20 4e 55 4c 4c 20 61 6e 64 20 69 66   not NULL and if
03f0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
0400: 45 5f 49 4f 54 52 41 43 45 20 69 73 20 65 6e 61  E_IOTRACE is ena
0410: 62 6c 65 64 2c 20 74 68 65 6e 20 6d 65 73 73 61  bled, then messa
0420: 67 65 73 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ges describing.*
0430: 2a 20 49 2f 4f 20 61 63 74 69 76 65 20 61 72 65  * I/O active are
0440: 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 74   written using t
0450: 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
0460: 68 65 73 65 20 6d 65 73 73 61 67 65 73 0a 2a 2a  hese messages.**
0470: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 66 6f   are intended fo
0480: 72 20 64 65 62 75 67 67 69 6e 67 20 61 63 74 69  r debugging acti
0490: 76 69 74 79 20 6f 6e 6c 79 2e 0a 2a 2f 0a 76 6f  vity only..*/.vo
04a0: 69 64 20 28 2a 73 71 6c 69 74 65 33 5f 69 6f 5f  id (*sqlite3_io_
04b0: 74 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  trace)(const cha
04c0: 72 2a 2c 20 2e 2e 2e 29 20 3d 20 30 3b 0a 0a 2f  r*, ...) = 0;../
04d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c  *.** If the foll
04e0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
04f0: 69 61 62 6c 65 20 70 6f 69 6e 74 73 20 74 6f 20  iable points to 
0500: 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
0510: 73 20 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66  s the.** name of
0520: 20 61 20 64 69 72 65 63 74 6f 72 79 2c 20 74 68   a directory, th
0530: 65 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72  en that director
0540: 79 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  y will be used t
0550: 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
0560: 72 61 72 79 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a  rary files..**.*
0570: 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 22  * See also the "
0580: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
0590: 65 5f 64 69 72 65 63 74 6f 72 79 22 20 53 51 4c  e_directory" SQL
05a0: 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 63 68 61   command..*/.cha
05b0: 72 20 2a 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  r *sqlite3_temp_
05c0: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 0a  directory = 0;..
05d0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
05e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
05f0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e 61  ting function na
0600: 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77 68 69  med "BINARY" whi
0610: 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20  ch is always.** 
0620: 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74  available..*/.st
0630: 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c 6c  atic int binColl
0640: 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  Func(.  void *No
0650: 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65  tUsed,.  int nKe
0660: 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y1, const void *
0670: 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65  pKey1,.  int nKe
0680: 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y2, const void *
0690: 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72  pKey2.){.  int r
06a0: 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79  c, n;.  n = nKey
06b0: 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20  1<nKey2 ? nKey1 
06c0: 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d 20  : nKey2;.  rc = 
06d0: 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70 4b  memcmp(pKey1, pK
06e0: 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20 72  ey2, n);.  if( r
06f0: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  c==0 ){.    rc =
0700: 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b 0a   nKey1 - nKey2;.
0710: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
0720: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68 65  .}../*.** Anothe
0730: 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61  r built-in colla
0740: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20 4e  ting sequence: N
0750: 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  OCASE. .**.** Th
0760: 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  is collating seq
0770: 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64 65  uence is intende
0780: 64 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  d to be used for
0790: 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64 61   "case independa
07a0: 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  nt.** comparison
07b0: 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f 77  ". SQLite's know
07c0: 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72 20 61  ledge of upper a
07d0: 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65 71  nd lower case eq
07e0: 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78 74  uivalents.** ext
07f0: 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68 65  ends only to the
0800: 20 32 36 20 63 68 61 72 61 63 74 65 72 73 20 75   26 characters u
0810: 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c 69  sed in the Engli
0820: 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a 0a  sh language..**.
0830: 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e 74  ** At the moment
0840: 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61   there is only a
0850: 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e 74   UTF-8 implement
0860: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
0870: 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c 61   int nocaseColla
0880: 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69 64  tingFunc(.  void
0890: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74   *NotUsed,.  int
08a0: 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f   nKey1, const vo
08b0: 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74  id *pKey1,.  int
08c0: 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f   nKey2, const vo
08d0: 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69  id *pKey2.){.  i
08e0: 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53 74  nt r = sqlite3St
08f0: 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28 63  rNICmp(.      (c
0900: 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65 79  onst char *)pKey
0910: 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  1, (const char *
0920: 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3c 6e  )pKey2, (nKey1<n
0930: 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79  Key2)?nKey1:nKey
0940: 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20 29  2);.  if( 0==r )
0950: 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31 2d  {.    r = nKey1-
0960: 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74  nKey2;.  }.  ret
0970: 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn r;.}../*.** 
0980: 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49 44  Return the ROWID
0990: 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
09a0: 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 73 71  ent insert.*/.sq
09b0: 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69 74  lite_int64 sqlit
09c0: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
09d0: 6f 77 69 64 28 73 71 6c 69 74 65 33 20 2a 64 62  owid(sqlite3 *db
09e0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
09f0: 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a  lastRowid;.}../*
0a00: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
0a10: 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73  umber of changes
0a20: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
0a30: 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  ent call to sqli
0a40: 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69  te3_exec()..*/.i
0a50: 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  nt sqlite3_chang
0a60: 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  es(sqlite3 *db){
0a70: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 43  .  return db->nC
0a80: 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  hange;.}../*.** 
0a90: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
0aa0: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 73 69 6e  r of changes sin
0ab0: 63 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ce the database 
0ac0: 68 61 6e 64 6c 65 20 77 61 73 20 6f 70 65 6e 65  handle was opene
0ad0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
0ae0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
0af0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
0b00: 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74 61  return db->nTota
0b10: 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  lChange;.}../*.*
0b20: 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74  * Close an exist
0b30: 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62  ing SQLite datab
0b40: 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ase.*/.int sqlit
0b50: 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 33  e3_close(sqlite3
0b60: 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65   *db){.  HashEle
0b70: 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 0a  m *i;.  int j;..
0b80: 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20    if( !db ){.   
0b90: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
0ba0: 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  K;.  }.  if( sql
0bb0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
0bc0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
0bd0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
0be0: 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
0bf0: 49 54 45 5f 53 53 45 0a 20 20 7b 0a 20 20 20 20  ITE_SSE.  {.    
0c00: 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c 69  extern void sqli
0c10: 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28 73 71  te3SseCleanup(sq
0c20: 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 73 71 6c  lite3*);.    sql
0c30: 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28 64  ite3SseCleanup(d
0c40: 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 0a  b);.  }.#endif .
0c50: 0a 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49  .  sqlite3ResetI
0c60: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
0c70: 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 61  , 0);..  /* If a
0c80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
0c90: 6f 70 65 6e 2c 20 74 68 65 20 52 65 73 65 74 49  open, the ResetI
0ca0: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 29 20  nternalSchema() 
0cb0: 63 61 6c 6c 20 61 62 6f 76 65 0a 20 20 2a 2a 20  call above.  ** 
0cc0: 77 69 6c 6c 20 6e 6f 74 20 68 61 76 65 20 63 61  will not have ca
0cd0: 6c 6c 65 64 20 74 68 65 20 78 44 69 73 63 6f 6e  lled the xDiscon
0ce0: 6e 65 63 74 28 29 20 6d 65 74 68 6f 64 20 6f 6e  nect() method on
0cf0: 20 61 6e 79 20 76 69 72 74 75 61 6c 0a 20 20 2a   any virtual.  *
0d00: 2a 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  * tables in the 
0d10: 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
0d20: 72 61 79 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ray. The followi
0d30: 6e 67 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ng sqlite3VtabRo
0d40: 6c 6c 62 61 63 6b 28 29 0a 20 20 2a 2a 20 63 61  llback().  ** ca
0d50: 6c 6c 20 77 69 6c 6c 20 64 6f 20 73 6f 2e 20 57  ll will do so. W
0d60: 65 20 6e 65 65 64 20 74 6f 20 64 6f 20 74 68 69  e need to do thi
0d70: 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 68 65  s before the che
0d80: 63 6b 20 66 6f 72 20 61 63 74 69 76 65 0a 20 20  ck for active.  
0d90: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
0da0: 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20  s below, as the 
0db0: 76 2d 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  v-table implemen
0dc0: 74 61 74 69 6f 6e 20 6d 61 79 20 62 65 20 73 74  tation may be st
0dd0: 6f 72 69 6e 67 0a 20 20 2a 2a 20 73 6f 6d 65 20  oring.  ** some 
0de0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
0df0: 6e 74 73 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  nts internally..
0e00: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 74    */.  sqlite3Vt
0e10: 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b 0a  abRollback(db);.
0e20: 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 61  .  /* If there a
0e30: 72 65 20 61 6e 79 20 6f 75 74 73 74 61 6e 64 69  re any outstandi
0e40: 6e 67 20 56 4d 73 2c 20 72 65 74 75 72 6e 20 53  ng VMs, return S
0e50: 51 4c 49 54 45 5f 42 55 53 59 2e 20 2a 2f 0a 20  QLITE_BUSY. */. 
0e60: 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65 20 29   if( db->pVdbe )
0e70: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
0e80: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55  or(db, SQLITE_BU
0e90: 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55 6e  SY, .        "Un
0ea0: 61 62 6c 65 20 74 6f 20 63 6c 6f 73 65 20 64 75  able to close du
0eb0: 65 20 74 6f 20 75 6e 66 69 6e 61 6c 69 73 65 64  e to unfinalised
0ec0: 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20   statements");. 
0ed0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0ee0: 5f 42 55 53 59 3b 0a 20 20 7d 0a 20 20 61 73 73  _BUSY;.  }.  ass
0ef0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 53 61 66  ert( !sqlite3Saf
0f00: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 3b 0a  etyCheck(db) );.
0f10: 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 64 62  .  /* FIX ME: db
0f20: 2d 3e 6d 61 67 69 63 20 6d 61 79 20 62 65 20 73  ->magic may be s
0f30: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47  et to SQLITE_MAG
0f40: 49 43 5f 43 4c 4f 53 45 44 20 69 66 20 74 68 65  IC_CLOSED if the
0f50: 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63   database.  ** c
0f60: 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64 20  annot be opened 
0f70: 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2e  for some reason.
0f80: 20 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65   So this routine
0f90: 20 6e 65 65 64 73 20 74 6f 20 72 75 6e 20 69 6e   needs to run in
0fa0: 0a 20 20 2a 2a 20 74 68 61 74 20 63 61 73 65 2e  .  ** that case.
0fb0: 20 42 75 74 20 6d 61 79 62 65 20 74 68 65 72 65   But maybe there
0fc0: 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 65 78   should be an ex
0fd0: 74 72 61 20 6d 61 67 69 63 20 76 61 6c 75 65 20  tra magic value 
0fe0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 22 66 61  for the.  ** "fa
0ff0: 69 6c 65 64 20 74 6f 20 6f 70 65 6e 22 20 73 74  iled to open" st
1000: 61 74 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ate..  **.  ** T
1010: 4f 44 4f 3a 20 43 6f 76 65 72 61 67 65 20 74 65  ODO: Coverage te
1020: 73 74 73 20 64 6f 20 6e 6f 74 20 74 65 73 74 20  sts do not test 
1030: 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 74  the case where t
1040: 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73  his condition is
1050: 0a 20 20 2a 2a 20 74 72 75 65 2e 20 49 74 27 73  .  ** true. It's
1060: 20 68 61 72 64 20 74 6f 20 73 65 65 20 68 6f 77   hard to see how
1070: 20 74 6f 20 63 61 75 73 65 20 69 74 20 77 69 74   to cause it wit
1080: 68 6f 75 74 20 6d 65 73 73 69 6e 67 20 77 69 74  hout messing wit
1090: 68 20 74 68 72 65 61 64 73 2e 0a 20 20 2a 2f 0a  h threads..  */.
10a0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21    if( db->magic!
10b0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  =SQLITE_MAGIC_CL
10c0: 4f 53 45 44 20 26 26 20 73 71 6c 69 74 65 33 53  OSED && sqlite3S
10d0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
10e0: 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49     /* printf("DI
10f0: 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b  D NOT CLOSE\n");
1100: 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b   fflush(stdout);
1110: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53   */.    return S
1120: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1130: 0a 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64  ..  for(j=0; j<d
1140: 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20  b->nDb; j++){.  
1150: 20 20 73 74 72 75 63 74 20 44 62 20 2a 70 44 62    struct Db *pDb
1160: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a   = &db->aDb[j];.
1170: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1180: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1190: 33 42 74 72 65 65 43 6c 6f 73 65 28 70 44 62 2d  3BtreeClose(pDb-
11a0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 70 44 62  >pBt);.      pDb
11b0: 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 20  ->pBt = 0;.     
11c0: 20 69 66 28 20 6a 21 3d 31 20 29 7b 0a 20 20 20   if( j!=1 ){.   
11d0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
11e0: 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  a = 0;.      }. 
11f0: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
1200: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
1210: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
1220: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c  assert( db->nDb<
1230: 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =2 );.  assert( 
1240: 64 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62  db->aDb==db->aDb
1250: 53 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28  Static );.  for(
1260: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
1270: 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69  t(&db->aFunc); i
1280: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
1290: 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63  xt(i)){.    Func
12a0: 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65  Def *pFunc, *pNe
12b0: 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e  xt;.    for(pFun
12c0: 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71  c = (FuncDef*)sq
12d0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
12e0: 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e   pFunc; pFunc=pN
12f0: 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  ext){.      pNex
1300: 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74  t = pFunc->pNext
1310: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
1320: 66 72 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20  free(pFunc);.   
1330: 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d   }.  }..  for(i=
1340: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
1350: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
1360: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
1370: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c  ext(i)){.    Col
1380: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
1390: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
13a0: 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20  ashData(i);.    
13b0: 2f 2a 20 49 6e 76 6f 6b 65 20 61 6e 79 20 64 65  /* Invoke any de
13c0: 73 74 72 75 63 74 6f 72 73 20 72 65 67 69 73 74  structors regist
13d0: 65 72 65 64 20 66 6f 72 20 63 6f 6c 6c 61 74 69  ered for collati
13e0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 72  on sequence user
13f0: 20 64 61 74 61 2e 20 2a 2f 0a 20 20 20 20 66 6f   data. */.    fo
1400: 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b 29  r(j=0; j<3; j++)
1410: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c  {.      if( pCol
1420: 6c 5b 6a 5d 2e 78 44 65 6c 20 29 7b 0a 20 20 20  l[j].xDel ){.   
1430: 20 20 20 20 20 70 43 6f 6c 6c 5b 6a 5d 2e 78 44       pColl[j].xD
1440: 65 6c 28 70 43 6f 6c 6c 5b 6a 5d 2e 70 55 73 65  el(pColl[j].pUse
1450: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1460: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  }.    sqlite3_fr
1470: 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  ee(pColl);.  }. 
1480: 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61   sqlite3HashClea
1490: 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  r(&db->aCollSeq)
14a0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
14b0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
14c0: 4c 45 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  LE.  for(i=sqlit
14d0: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
14e0: 61 4d 6f 64 75 6c 65 29 3b 20 69 3b 20 69 3d 73  aModule); i; i=s
14f0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
1500: 29 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20 2a 70  ){.    Module *p
1510: 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20 2a 29  Mod = (Module *)
1520: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
1530: 29 3b 0a 20 20 20 20 69 66 28 20 70 4d 6f 64 2d  );.    if( pMod-
1540: 3e 78 44 65 73 74 72 6f 79 20 29 7b 0a 20 20 20  >xDestroy ){.   
1550: 20 20 20 70 4d 6f 64 2d 3e 78 44 65 73 74 72 6f     pMod->xDestro
1560: 79 28 70 4d 6f 64 2d 3e 70 41 75 78 29 3b 0a 20  y(pMod->pAux);. 
1570: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
1580: 5f 66 72 65 65 28 70 4d 6f 64 29 3b 0a 20 20 7d  _free(pMod);.  }
1590: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
15a0: 65 61 72 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65  ear(&db->aModule
15b0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 73 71 6c  );.#endif..  sql
15c0: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
15d0: 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c  b->aFunc);.  sql
15e0: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
15f0: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20  LITE_OK, 0); /* 
1600: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
1610: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
1620: 69 6e 67 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64  ings. */.  if( d
1630: 62 2d 3e 70 45 72 72 20 29 7b 0a 20 20 20 20 73  b->pErr ){.    s
1640: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
1650: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20  db->pErr);.  }. 
1660: 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
1670: 65 6e 73 69 6f 6e 73 28 64 62 29 3b 0a 0a 20 20  ensions(db);..  
1680: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
1690: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
16a0: 0a 20 20 2f 2a 20 54 68 65 20 74 65 6d 70 2d 64  .  /* The temp-d
16b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
16c0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 64 69 66 66  s allocated diff
16d0: 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 74 68 65  erently from the
16e0: 20 6f 74 68 65 72 20 73 63 68 65 6d 61 0a 20 20   other schema.  
16f0: 2a 2a 20 6f 62 6a 65 63 74 73 20 28 75 73 69 6e  ** objects (usin
1700: 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  g sqliteMalloc()
1710: 20 64 69 72 65 63 74 6c 79 2c 20 69 6e 73 74 65   directly, inste
1720: 61 64 20 6f 66 20 73 71 6c 69 74 65 33 42 74 72  ad of sqlite3Btr
1730: 65 65 53 63 68 65 6d 61 28 29 29 2e 0a 20 20 2a  eeSchema())..  *
1740: 2a 20 53 6f 20 69 74 20 6e 65 65 64 73 20 74 6f  * So it needs to
1750: 20 62 65 20 66 72 65 65 64 20 68 65 72 65 2e 20   be freed here. 
1760: 54 6f 64 6f 3a 20 57 68 79 20 6e 6f 74 20 72 6f  Todo: Why not ro
1770: 6c 6c 20 74 68 65 20 74 65 6d 70 20 73 63 68 65  ll the temp sche
1780: 6d 61 20 69 6e 74 6f 0a 20 20 2a 2a 20 74 68 65  ma into.  ** the
1790: 20 73 61 6d 65 20 73 71 6c 69 74 65 4d 61 6c 6c   same sqliteMall
17a0: 6f 63 28 29 20 61 73 20 74 68 65 20 6f 6e 65 20  oc() as the one 
17b0: 74 68 61 74 20 61 6c 6c 6f 63 61 74 65 73 20 74  that allocates t
17c0: 68 65 20 64 61 74 61 62 61 73 65 20 0a 20 20 2a  he database .  *
17d0: 2a 20 73 74 72 75 63 74 75 72 65 3f 0a 20 20 2a  * structure?.  *
17e0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  /.  sqlite3_free
17f0: 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68  (db->aDb[1].pSch
1800: 65 6d 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ema);.  sqlite3_
1810: 66 72 65 65 28 64 62 29 3b 0a 20 20 2f 2a 20 73  free(db);.  /* s
1820: 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72  qlite3ReleaseThr
1830: 65 61 64 44 61 74 61 28 29 3b 20 2a 2f 0a 20 20  eadData(); */.  
1840: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1850: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62  ;.}../*.** Rollb
1860: 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65  ack all database
1870: 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20   files..*/.void 
1880: 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1890: 6c 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  ll(sqlite3 *db){
18a0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
18b0: 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 66  inTrans = 0;.  f
18c0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
18d0: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  b; i++){.    if(
18e0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20   db->aDb[i].pBt 
18f0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
1900: 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
1910: 6e 73 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  ns(db->aDb[i].pB
1920: 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  t) ){.        in
1930: 54 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20 20  Trans = 1;.     
1940: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
1950: 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62  BtreeRollback(db
1960: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20  ->aDb[i].pBt);. 
1970: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e       db->aDb[i].
1980: 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20  inTrans = 0;.   
1990: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
19a0: 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29  VtabRollback(db)
19b0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  ;.  if( db->flag
19c0: 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
19d0: 68 61 6e 67 65 73 20 29 7b 0a 20 20 20 20 73 71  hanges ){.    sq
19e0: 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
19f0: 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1a00: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  );.    sqlite3Re
1a10: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
1a20: 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  a(db, 0);.  }.. 
1a30: 20 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73 20 62   /* If one has b
1a40: 65 65 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c 20  een configured, 
1a50: 69 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62  invoke the rollb
1a60: 61 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63  ack-hook callbac
1a70: 6b 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  k */.  if( db->x
1a80: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
1a90: 20 26 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20   && (inTrans || 
1aa0: 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29  !db->autoCommit)
1ab0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c   ){.    db->xRol
1ac0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62  lbackCallback(db
1ad0: 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b  ->pRollbackArg);
1ae0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  .  }.}../*.** Re
1af0: 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74  turn a static st
1b00: 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72 69  ring that descri
1b10: 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20  bes the kind of 
1b20: 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64 20  error specified 
1b30: 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65  in the.** argume
1b40: 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  nt..*/.const cha
1b50: 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
1b60: 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73  (int rc){.  cons
1b70: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69  t char *z;.  swi
1b80: 74 63 68 28 20 72 63 20 26 20 30 78 66 66 20 29  tch( rc & 0xff )
1b90: 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
1ba0: 45 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73 65 20  E_ROW:.    case 
1bb0: 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20  SQLITE_DONE:.   
1bc0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a   case SQLITE_OK:
1bd0: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f           z = "no
1be0: 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  t an error";    
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1c10: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52   case SQLITE_ERR
1c20: 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51  OR:      z = "SQ
1c30: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
1c40: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
1c50: 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  e";   break;.   
1c60: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52   case SQLITE_PER
1c70: 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63  M:       z = "ac
1c80: 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20  cess permission 
1c90: 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20  denied";        
1ca0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1cb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f   case SQLITE_ABO
1cc0: 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61  RT:      z = "ca
1cd0: 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64  llback requested
1ce0: 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20   query abort";  
1cf0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1d00: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
1d10: 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  Y:       z = "da
1d20: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
1d30: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
1d40: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1d50: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43   case SQLITE_LOC
1d60: 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  KED:     z = "da
1d70: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
1d80: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
1d90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1da0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d   case SQLITE_NOM
1db0: 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75  EM:      z = "ou
1dc0: 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20  t of memory";   
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1df0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
1e00: 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74  DONLY:   z = "at
1e10: 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
1e20: 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61   readonly databa
1e30: 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  se";  break;.   
1e40: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
1e50: 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e  ERRUPT:  z = "in
1e60: 74 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20  terrupted";     
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1e90: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
1ea0: 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69  RR:      z = "di
1eb0: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20  sk I/O error";  
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ee0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52   case SQLITE_COR
1ef0: 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61  RUPT:    z = "da
1f00: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
1f10: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b  e is malformed";
1f20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1f30: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c   case SQLITE_FUL
1f40: 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  L:       z = "da
1f50: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69  tabase or disk i
1f60: 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20  s full";        
1f70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1f80: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
1f90: 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e  TOPEN:   z = "un
1fa0: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
1fb0: 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20  abase file";    
1fc0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1fd0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50   case SQLITE_EMP
1fe0: 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61  TY:      z = "ta
1ff0: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
2000: 64 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20  data";          
2010: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2020: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48   case SQLITE_SCH
2030: 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  EMA:     z = "da
2040: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
2050: 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20  s changed";     
2060: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2070: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f   case SQLITE_TOO
2080: 42 49 47 3a 20 20 20 20 20 7a 20 3d 20 22 53 74  BIG:     z = "St
2090: 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 65 78 63  ring or BLOB exc
20a0: 65 65 64 65 64 20 73 69 7a 65 20 6c 69 6d 69 74  eeded size limit
20b0: 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ";    break;.   
20c0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
20d0: 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f  STRAINT: z = "co
20e0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
20f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2100: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2110: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
2120: 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61  MATCH:   z = "da
2130: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
2140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2150: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2160: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
2170: 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69  USE:     z = "li
2180: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
2190: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
21a0: 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  ence";break;.   
21b0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c   case SQLITE_NOL
21c0: 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65  FS:      z = "ke
21d0: 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65  rnel lacks large
21e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20   file support"; 
21f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2200: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54   case SQLITE_AUT
2210: 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75  H:       z = "au
2220: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69  thorization deni
2230: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
2240: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2250: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52   case SQLITE_FOR
2260: 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75  MAT:     z = "au
2270: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2280: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20   format error"; 
2290: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
22a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e   case SQLITE_RAN
22b0: 47 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69  GE:      z = "bi
22c0: 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64  nd or column ind
22d0: 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 22  ex out of range"
22e0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
22f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
2300: 41 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69  ADB:     z = "fi
2310: 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20  le is encrypted 
2320: 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  or is not a data
2330: 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  base";break;.   
2340: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
2350: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e           z = "un
2360: 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20  known error";   
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2380: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d        break;.  }
2390: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
23a0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
23b0: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  ne implements a 
23c0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68  busy callback th
23d0: 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72  at sleeps and tr
23e0: 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74  ies.** again unt
23f0: 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c  il a timeout val
2400: 75 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20  ue is reached.  
2410: 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  The timeout valu
2420: 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  e is.** an integ
2430: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c  er number of mil
2440: 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64  liseconds passed
2450: 20 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74   in as the first
2460: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  .** argument..*/
2470: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
2480: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
2490: 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74  lback(. void *pt
24a0: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
24b0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
24c0: 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20  nection */. int 
24d0: 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20  count           
24e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24f0: 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61  f times table ha
2500: 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29  s been busy */.)
2510: 7b 0a 23 69 66 20 4f 53 5f 57 49 4e 20 7c 7c 20  {.#if OS_WIN || 
2520: 28 64 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53  (defined(HAVE_US
2530: 4c 45 45 50 29 20 26 26 20 48 41 56 45 5f 55 53  LEEP) && HAVE_US
2540: 4c 45 45 50 29 0a 20 20 73 74 61 74 69 63 20 63  LEEP).  static c
2550: 6f 6e 73 74 20 75 38 20 64 65 6c 61 79 73 5b 5d  onst u8 delays[]
2560: 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20   =.     { 1, 2, 
2570: 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32  5, 10, 15, 20, 2
2580: 35 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c  5, 25,  25,  50,
2590: 20 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73    50, 100 };.  s
25a0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 74  tatic const u8 t
25b0: 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  otals[] =.     {
25c0: 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38   0, 1, 3,  8, 18
25d0: 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30  , 33, 53, 78, 10
25e0: 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38  3, 128, 178, 228
25f0: 20 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45   };.# define NDE
2600: 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61  LAY (sizeof(dela
2610: 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79  ys)/sizeof(delay
2620: 73 5b 30 5d 29 29 0a 20 20 73 71 6c 69 74 65 33  s[0])).  sqlite3
2630: 20 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 33 20   *db = (sqlite3 
2640: 2a 29 70 74 72 3b 0a 20 20 69 6e 74 20 74 69 6d  *)ptr;.  int tim
2650: 65 6f 75 74 20 3d 20 64 62 2d 3e 62 75 73 79 54  eout = db->busyT
2660: 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65  imeout;.  int de
2670: 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61  lay, prior;..  a
2680: 73 73 65 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20  ssert( count>=0 
2690: 29 3b 0a 20 20 69 66 28 20 63 6f 75 6e 74 20 3c  );.  if( count <
26a0: 20 4e 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64   NDELAY ){.    d
26b0: 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f  elay = delays[co
26c0: 75 6e 74 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  unt];.    prior 
26d0: 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b  = totals[count];
26e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65  .  }else{.    de
26f0: 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45  lay = delays[NDE
2700: 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f  LAY-1];.    prio
2710: 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41  r = totals[NDELA
2720: 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f  Y-1] + delay*(co
2730: 75 6e 74 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b  unt-(NDELAY-1));
2740: 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72  .  }.  if( prior
2750: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
2760: 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  ut ){.    delay 
2770: 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f  = timeout - prio
2780: 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  r;.    if( delay
2790: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
27a0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53    }.  sqlite3OsS
27b0: 6c 65 65 70 28 64 62 2d 3e 70 56 66 73 2c 20 64  leep(db->pVfs, d
27c0: 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20  elay);.  return 
27d0: 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74  1;.#else.  int t
27e0: 69 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74  imeout = ((sqlit
27f0: 65 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54  e3 *)ptr)->busyT
2800: 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63  imeout;.  if( (c
2810: 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74  ount+1)*1000 > t
2820: 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65  imeout ){.    re
2830: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71  turn 0;.  }.  sq
2840: 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30 30  lite3OsSleep(100
2850: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a  0);.  return 1;.
2860: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  #endif.}../*.** 
2870: 49 6e 76 6f 6b 65 20 74 68 65 20 67 69 76 65 6e  Invoke the given
2880: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 2e 0a 2a   busy handler..*
2890: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
28a0: 65 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e  e is called when
28b0: 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 66 61   an operation fa
28c0: 69 6c 65 64 20 77 69 74 68 20 61 20 6c 6f 63 6b  iled with a lock
28d0: 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20 72 6f 75  ..** If this rou
28e0: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 6e 6f 6e  tine returns non
28f0: 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f 63 6b 20  -zero, the lock 
2900: 69 73 20 72 65 74 72 69 65 64 2e 20 20 49 66 20  is retried.  If 
2910: 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 30 2c  it.** returns 0,
2920: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
2930: 62 6f 72 74 73 20 77 69 74 68 20 61 6e 20 53 51  borts with an SQ
2940: 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 2e  LITE_BUSY error.
2950: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  .*/.int sqlite3I
2960: 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2970: 28 42 75 73 79 48 61 6e 64 6c 65 72 20 2a 70 29  (BusyHandler *p)
2980: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
2990: 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e 78 46 75  ( p==0 || p->xFu
29a0: 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 42 75 73  nc==0 || p->nBus
29b0: 79 3c 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  y<0 ) return 0;.
29c0: 20 20 72 63 20 3d 20 70 2d 3e 78 46 75 6e 63 28    rc = p->xFunc(
29d0: 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e 42 75 73  p->pArg, p->nBus
29e0: 79 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20  y);.  if( rc==0 
29f0: 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 20  ){.    p->nBusy 
2a00: 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
2a10: 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b 3b 0a 20     p->nBusy++;. 
2a20: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 20   }.  return rc; 
2a30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
2a40: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
2a50: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f  busy callback fo
2a60: 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61  r an Sqlite data
2a70: 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67  base to the.** g
2a80: 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  iven callback fu
2a90: 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20  nction with the 
2aa0: 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a  given argument..
2ab0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62  */.int sqlite3_b
2ac0: 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73  usy_handler(.  s
2ad0: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e  qlite3 *db,.  in
2ae0: 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64 2a  t (*xBusy)(void*
2af0: 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70  ,int),.  void *p
2b00: 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c  Arg.){.  if( sql
2b10: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
2b20: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
2b30: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
2b40: 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75 73 79 48  .  }.  db->busyH
2b50: 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78  andler.xFunc = x
2b60: 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79  Busy;.  db->busy
2b70: 48 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d 20 70  Handler.pArg = p
2b80: 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  Arg;.  db->busyH
2b90: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
2ba0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
2bb0: 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  E_OK;.}..#ifndef
2bc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
2bd0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f  GRESS_CALLBACK./
2be0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2bf0: 65 20 73 65 74 73 20 74 68 65 20 70 72 6f 67 72  e sets the progr
2c00: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ess callback for
2c10: 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62   an Sqlite datab
2c20: 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69  ase to the.** gi
2c30: 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ven callback fun
2c40: 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67  ction with the g
2c50: 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54  iven argument. T
2c60: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
2c70: 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  back will.** be 
2c80: 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f  invoked every nO
2c90: 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76  ps opcodes..*/.v
2ca0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f 67  oid sqlite3_prog
2cb0: 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20  ress_handler(.  
2cc0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
2cd0: 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20  int nOps,.  int 
2ce0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
2cf0: 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41  d*), .  void *pA
2d00: 72 67 0a 29 7b 0a 20 20 69 66 28 20 21 73 71 6c  rg.){.  if( !sql
2d10: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
2d20: 64 62 29 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  db) ){.    if( n
2d30: 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 64  Ops>0 ){.      d
2d40: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 78  b->xProgress = x
2d50: 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 20 20  Progress;.      
2d60: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
2d70: 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 20 20 64   = nOps;.      d
2d80: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20  b->pProgressArg 
2d90: 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d 65 6c 73  = pArg;.    }els
2da0: 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72  e{.      db->xPr
2db0: 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 20 20  ogress = 0;.    
2dc0: 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f    db->nProgressO
2dd0: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 62  ps = 0;.      db
2de0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d  ->pProgressArg =
2df0: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   0;.    }.  }.}.
2e00: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
2e10: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
2e20: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
2e30: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
2e40: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
2e50: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
2e60: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
2e70: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
2e80: 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ing 0..*/.int sq
2e90: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
2ea0: 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ut(sqlite3 *db, 
2eb0: 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 73  int ms){.  if( s
2ec0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
2ed0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
2ee0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
2ef0: 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6d 73 3e  E;.  }.  if( ms>
2f00: 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 62 75 73  0 ){.    db->bus
2f10: 79 54 69 6d 65 6f 75 74 20 3d 20 6d 73 3b 0a 20  yTimeout = ms;. 
2f20: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
2f30: 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69  handler(db, sqli
2f40: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
2f50: 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 64 62  lback, (void*)db
2f60: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2f70: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e  sqlite3_busy_han
2f80: 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a  dler(db, 0, 0);.
2f90: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
2fa0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
2fb0: 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69   Cause any pendi
2fc0: 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20  ng operation to 
2fd0: 73 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c  stop at its earl
2fe0: 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79  iest opportunity
2ff0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3000: 33 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69  3_interrupt(sqli
3010: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20  te3 *db){.  if( 
3020: 64 62 20 26 26 20 28 64 62 2d 3e 6d 61 67 69 63  db && (db->magic
3030: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  ==SQLITE_MAGIC_O
3040: 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69 63  PEN || db->magic
3050: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
3060: 55 53 59 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e  USY) ){.    db->
3070: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
3080: 20 3d 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a   = 1;.  }.}.../*
3090: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
30a0: 6e 20 69 73 20 65 78 61 63 74 6c 79 20 74 68 65  n is exactly the
30b0: 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65 33   same as sqlite3
30c0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
30d0: 28 29 2c 20 65 78 63 65 70 74 0a 2a 2a 20 74 68  (), except.** th
30e0: 61 74 20 69 74 20 69 73 20 64 65 73 69 67 6e 65  at it is designe
30f0: 64 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 62  d to be called b
3100: 79 20 69 6e 74 65 72 6e 61 6c 20 63 6f 64 65 2e  y internal code.
3110: 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
3120: 69 73 0a 2a 2a 20 74 68 61 74 20 69 66 20 61 20  is.** that if a 
3130: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 20 69  malloc() fails i
3140: 6e 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  n sqlite3_create
3150: 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e 20  _function(), an 
3160: 65 72 72 6f 72 20 63 6f 64 65 0a 2a 2a 20 69 73  error code.** is
3170: 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
3180: 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66  e mallocFailed f
3190: 6c 61 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2f  lag cleared. .*/
31a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
31b0: 74 65 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65  teFunc(.  sqlite
31c0: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63  3 *db,.  const c
31d0: 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  har *zFunctionNa
31e0: 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  me,.  int nArg,.
31f0: 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69    int enc,.  voi
3200: 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20  d *pUserData,.  
3210: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
3220: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
3230: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
3240: 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78   **),.  void (*x
3250: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
3260: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
3270: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
3280: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73  void (*xFinal)(s
3290: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
32a0: 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70  .){.  FuncDef *p
32b0: 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 0a  ;.  int nName;..
32c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
32d0: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
32e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
32f0: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
3300: 69 66 28 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  if( zFunctionNam
3310: 65 3d 3d 30 20 7c 7c 0a 20 20 20 20 20 20 28 78  e==0 ||.      (x
3320: 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20  Func && (xFinal 
3330: 7c 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a 20  || xStep)) || . 
3340: 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20       (!xFunc && 
3350: 28 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74 65  (xFinal && !xSte
3360: 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21 78  p)) ||.      (!x
3370: 46 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61 6c  Func && (!xFinal
3380: 20 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a 20   && xStep)) ||. 
3390: 20 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c 7c       (nArg<-1 ||
33a0: 20 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20 20   nArg>127) ||.  
33b0: 20 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65 20      (255<(nName 
33c0: 3d 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69  = strlen(zFuncti
33d0: 6f 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20 20  onName))) ){.   
33e0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
33f0: 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2c 20  , SQLITE_ERROR, 
3400: 22 62 61 64 20 70 61 72 61 6d 65 74 65 72 73 22  "bad parameters"
3410: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  );.    return SQ
3420: 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
3430: 20 20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54    .#ifndef SQLIT
3440: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f  E_OMIT_UTF16.  /
3450: 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31  * If SQLITE_UTF1
3460: 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  6 is specified a
3470: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74  s the encoding t
3480: 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74  ype, transform t
3490: 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20  his.  ** to one 
34a0: 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  of SQLITE_UTF16L
34b0: 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31  E or SQLITE_UTF1
34c0: 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20  6BE using the.  
34d0: 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ** SQLITE_UTF16N
34e0: 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c  ATIVE macro. SQL
34f0: 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74  ITE_UTF16 is not
3500: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
3510: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 53  ..  **.  ** If S
3520: 51 4c 49 54 45 5f 41 4e 59 20 69 73 20 73 70 65  QLITE_ANY is spe
3530: 63 69 66 69 65 64 2c 20 61 64 64 20 74 68 72 65  cified, add thre
3540: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  e versions of th
3550: 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20  e function.  ** 
3560: 74 6f 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  to the hash tabl
3570: 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 6e  e..  */.  if( en
3580: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20  c==SQLITE_UTF16 
3590: 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c  ){.    enc = SQL
35a0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
35b0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 6e 63  .  }else if( enc
35c0: 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b 0a  ==SQLITE_ANY ){.
35d0: 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20      int rc;.    
35e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65 61  rc = sqlite3Crea
35f0: 74 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e 63  teFunc(db, zFunc
3600: 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  tionName, nArg, 
3610: 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20 20  SQLITE_UTF8,.   
3620: 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c        pUserData,
3630: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
3640: 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28 20  Final);.    if( 
3650: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
3660: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 72  return rc;.    r
3670: 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65 61 74  c = sqlite3Creat
3680: 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e 63 74  eFunc(db, zFunct
3690: 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53  ionName, nArg, S
36a0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 0a 20  QLITE_UTF16LE,. 
36b0: 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61         pUserData
36c0: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
36d0: 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28  xFinal);.    if(
36e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
36f0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
3700: 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
3710: 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c 73 65 0a  16BE;.  }.#else.
3720: 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55    enc = SQLITE_U
3730: 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20  TF8;.#endif.  . 
3740: 20 2f 2a 20 43 68 65 63 6b 20 69 66 20 61 6e 20   /* Check if an 
3750: 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f  existing functio
3760: 6e 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72 72  n is being overr
3770: 69 64 64 65 6e 20 6f 72 20 64 65 6c 65 74 65 64  idden or deleted
3780: 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a 20 61 6e  . If so,.  ** an
3790: 64 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  d there are acti
37a0: 76 65 20 56 4d 73 2c 20 74 68 65 6e 20 72 65 74  ve VMs, then ret
37b0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
37c0: 20 49 66 20 61 20 66 75 6e 63 74 69 6f 6e 0a 20   If a function. 
37d0: 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 6f 76 65   ** is being ove
37e0: 72 72 69 64 64 65 6e 2f 64 65 6c 65 74 65 64 20  rridden/deleted 
37f0: 62 75 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f  but there are no
3800: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 61 6c 6c   active VMs, all
3810: 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f 70 65 72  ow the.  ** oper
3820: 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74 69 6e 75  ation to continu
3830: 65 20 62 75 74 20 69 6e 76 61 6c 69 64 61 74 65  e but invalidate
3840: 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69 6c 65 64   all precompiled
3850: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a   statements..  *
3860: 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46  /.  p = sqlite3F
3870: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20  indFunction(db, 
3880: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
3890: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c  Name, nArg, enc,
38a0: 20 30 29 3b 0a 20 20 69 66 28 20 70 20 26 26 20   0);.  if( p && 
38b0: 70 2d 3e 69 50 72 65 66 45 6e 63 3d 3d 65 6e 63  p->iPrefEnc==enc
38c0: 20 26 26 20 70 2d 3e 6e 41 72 67 3d 3d 6e 41 72   && p->nArg==nAr
38d0: 67 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  g ){.    if( db-
38e0: 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 20 29  >activeVdbeCnt )
38f0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
3900: 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f  rror(db, SQLITE_
3910: 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22  BUSY, .        "
3920: 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65  Unable to delete
3930: 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d 66 75 6e  /modify user-fun
3940: 63 74 69 6f 6e 20 64 75 65 20 74 6f 20 61 63 74  ction due to act
3950: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29  ive statements")
3960: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3970: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
3980: 64 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  d );.      retur
3990: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
39a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
39b0: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
39c0: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
39d0: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  db);.    }.  }..
39e0: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e    p = sqlite3Fin
39f0: 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46  dFunction(db, zF
3a00: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61  unctionName, nNa
3a10: 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 31  me, nArg, enc, 1
3a20: 29 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  );.  if( p ){.  
3a30: 20 20 70 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a    p->flags = 0;.
3a40: 20 20 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78      p->xFunc = x
3a50: 46 75 6e 63 3b 0a 20 20 20 20 70 2d 3e 78 53 74  Func;.    p->xSt
3a60: 65 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 20 20  ep = xStep;.    
3a70: 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78  p->xFinalize = x
3a80: 46 69 6e 61 6c 3b 0a 20 20 20 20 70 2d 3e 70 55  Final;.    p->pU
3a90: 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44  serData = pUserD
3aa0: 61 74 61 3b 0a 20 20 20 20 70 2d 3e 6e 41 72 67  ata;.    p->nArg
3ab0: 20 3d 20 6e 41 72 67 3b 0a 20 20 7d 0a 20 20 72   = nArg;.  }.  r
3ac0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
3ad0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65  .}../*.** Create
3ae0: 20 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69   new user functi
3af0: 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ons..*/.int sqli
3b00: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3b10: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ion(.  sqlite3 *
3b20: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db,.  const char
3b30: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3b40: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
3b50: 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a  nt enc,.  void *
3b60: 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  p,.  void (*xFun
3b70: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
3b80: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
3b90: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
3ba0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
3bb0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3bc0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3bd0: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
3be0: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
3bf0: 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72  ext*).){.  int r
3c00: 63 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62  c;.  assert( !db
3c10: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
3c20: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
3c30: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
3c40: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
3c50: 72 67 2c 20 65 6e 63 2c 20 70 2c 20 78 46 75 6e  rg, enc, p, xFun
3c60: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
3c70: 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  );..  return sql
3c80: 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20  ite3ApiExit(db, 
3c90: 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  rc);.}..#ifndef 
3ca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
3cb0: 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  6.int sqlite3_cr
3cc0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
3cd0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
3ce0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46    const void *zF
3cf0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69  unctionName,.  i
3d00: 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65  nt nArg,.  int e
3d10: 54 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64 20  TextRep,.  void 
3d20: 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75  *p,.  void (*xFu
3d30: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
3d40: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
3d50: 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69  _value**),.  voi
3d60: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
3d70: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3d80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
3d90: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  ,.  void (*xFina
3da0: 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  l)(sqlite3_conte
3db0: 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63  xt*).){.  int rc
3dc0: 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e 63 38  ;.  char *zFunc8
3dd0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62 2d  ;.  assert( !db-
3de0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
3df0: 0a 0a 20 20 7a 46 75 6e 63 38 20 3d 20 73 71 6c  ..  zFunc8 = sql
3e00: 69 74 65 33 55 74 66 31 36 74 6f 38 28 64 62 2c  ite3Utf16to8(db,
3e10: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
3e20: 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  -1);.  rc = sqli
3e30: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
3e40: 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20  , zFunc8, nArg, 
3e50: 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78 46 75  eTextRep, p, xFu
3e60: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
3e70: 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  l);.  sqlite3_fr
3e80: 65 65 28 7a 46 75 6e 63 38 29 3b 0a 0a 20 20 72  ee(zFunc8);..  r
3e90: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69  eturn sqlite3Api
3ea0: 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a  Exit(db, rc);.}.
3eb0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 44  #endif.../*.** D
3ec0: 65 63 6c 61 72 65 20 74 68 61 74 20 61 20 66 75  eclare that a fu
3ed0: 6e 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  nction has been 
3ee0: 6f 76 65 72 6c 6f 61 64 65 64 20 62 79 20 61 20  overloaded by a 
3ef0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
3f00: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 75 6e 63  *.** If the func
3f10: 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 65 78 69  tion already exi
3f20: 73 74 73 20 61 73 20 61 20 72 65 67 75 6c 61 72  sts as a regular
3f30: 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e   global function
3f40: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 72  , then.** this r
3f50: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
3f60: 70 2e 20 20 49 66 20 74 68 65 20 66 75 6e 63 74  p.  If the funct
3f70: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ion does not exi
3f80: 73 74 2c 20 74 68 65 6e 20 63 72 65 61 74 65 0a  st, then create.
3f90: 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20 74 68 61  ** a new one tha
3fa0: 74 20 61 6c 77 61 79 73 20 74 68 72 6f 77 73 20  t always throws 
3fb0: 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72  a run-time error
3fc0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 76  .  .**.** When v
3fd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 69 6e  irtual tables in
3fe0: 74 65 6e 64 20 74 6f 20 70 72 6f 76 69 64 65 20  tend to provide 
3ff0: 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 66 75  an overloaded fu
4000: 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a 2a 2a 20  nction, they.** 
4010: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69 73  should call this
4020: 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6b 65   routine to make
4030: 20 73 75 72 65 20 74 68 65 20 67 6c 6f 62 61 6c   sure the global
4040: 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73 74 73   function exists
4050: 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c 20 66 75  ..** A global fu
4060: 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65 78 69 73  nction must exis
4070: 74 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 6e  t in order for n
4080: 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 74  ame resolution t
4090: 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f 70 65 72  o work.** proper
40a0: 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ly..*/.int sqlit
40b0: 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63  e3_overload_func
40c0: 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20  tion(.  sqlite3 
40d0: 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db,.  const cha
40e0: 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  r *zName,.  int 
40f0: 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74 20 6e 4e  nArg.){.  int nN
4100: 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e 61  ame = strlen(zNa
4110: 6d 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  me);.  if( sqlit
4120: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
4130: 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c  b, zName, nName,
4140: 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54   nArg, SQLITE_UT
4150: 46 38 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20  F8, 0)==0 ){.   
4160: 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
4170: 6e 63 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41  nc(db, zName, nA
4180: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
4190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41a0: 20 20 20 20 20 20 20 30 2c 20 73 71 6c 69 74 65         0, sqlite
41b0: 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
41c0: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  , 0, 0);.  }.  r
41d0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69  eturn sqlite3Api
41e0: 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  Exit(db, SQLITE_
41f0: 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  OK);.}..#ifndef 
4200: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
4210: 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  E./*.** Register
4220: 20 61 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f   a trace functio
4230: 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f  n.  The pArg fro
4240: 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  m the previously
4250: 20 72 65 67 69 73 74 65 72 65 64 20 74 72 61 63   registered trac
4260: 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  e.** is returned
4270: 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  .  .**.** A NULL
4280: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
4290: 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72  means that no tr
42a0: 61 63 69 6e 67 20 69 73 20 65 78 65 63 75 74 65  acing is execute
42b0: 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a  s.  A non-NULL.*
42c0: 2a 20 74 72 61 63 65 20 69 73 20 61 20 70 6f 69  * trace is a poi
42d0: 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69  nter to a functi
42e0: 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b  on that is invok
42f0: 65 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20  ed at the start 
4300: 6f 66 20 65 61 63 68 0a 2a 2a 20 53 51 4c 20 73  of each.** SQL s
4310: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69  tatement..*/.voi
4320: 64 20 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65  d *sqlite3_trace
4330: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f  (sqlite3 *db, vo
4340: 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69  id (*xTrace)(voi
4350: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c  d*,const char*),
4360: 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20   void *pArg){.  
4370: 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d  void *pOld = db-
4380: 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62  >pTraceArg;.  db
4390: 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72 61 63  ->xTrace = xTrac
43a0: 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41  e;.  db->pTraceA
43b0: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74  rg = pArg;.  ret
43c0: 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a  urn pOld;.}./*.*
43d0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 70 72 6f  * Register a pro
43e0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  file function.  
43f0: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
4400: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
4410: 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66  istered .** prof
4420: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ile function is 
4430: 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a  returned.  .**.*
4440: 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65  * A NULL profile
4450: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
4460: 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e  that no profilin
4470: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
4480: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72  A non-NULL.** pr
4490: 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74  ofile is a point
44a0: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
44b0: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
44c0: 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69   at the conclusi
44d0: 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51  on of.** each SQ
44e0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
44f0: 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64   is run..*/.void
4500: 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c   *sqlite3_profil
4510: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
4520: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  ,.  void (*xProf
4530: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
4540: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69   char*,sqlite_ui
4550: 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70  nt64),.  void *p
4560: 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70  Arg.){.  void *p
4570: 4f 6c 64 20 3d 20 64 62 2d 3e 70 50 72 6f 66 69  Old = db->pProfi
4580: 6c 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 50 72  leArg;.  db->xPr
4590: 6f 66 69 6c 65 20 3d 20 78 50 72 6f 66 69 6c 65  ofile = xProfile
45a0: 3b 0a 20 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65  ;.  db->pProfile
45b0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
45c0: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e  turn pOld;.}.#en
45d0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
45e0: 49 54 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a  IT_TRACE */../**
45f0: 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a  * EXPERIMENTAL *
4600: 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  **.**.** Registe
4610: 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  r a function to 
4620: 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20  be invoked when 
4630: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
4640: 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 74 68  mments..** If th
4650: 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74 69  e invoked functi
4660: 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  on returns non-z
4670: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ero, then the co
4680: 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a  mmit becomes a.*
4690: 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76  * rollback..*/.v
46a0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d  oid *sqlite3_com
46b0: 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69  mit_hook(.  sqli
46c0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
46d0: 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20        /* Attach 
46e0: 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73  the hook to this
46f0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69   database */.  i
4700: 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  nt (*xCallback)(
4710: 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63  void*),  /* Func
4720: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f  tion to invoke o
4730: 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f  n each commit */
4740: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4760: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
4770: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
4780: 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62   void *pOld = db
4790: 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20  ->pCommitArg;.  
47a0: 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  db->xCommitCallb
47b0: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
47c0: 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72  .  db->pCommitAr
47d0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
47e0: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn pOld;.}../*.*
47f0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61 6c  * Register a cal
4800: 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f  lback to be invo
4810: 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20  ked each time a 
4820: 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a  row is updated,.
4830: 2a 2a 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64  ** inserted or d
4840: 65 6c 65 74 65 64 20 75 73 69 6e 67 20 74 68 69  eleted using thi
4850: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
4860: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
4870: 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
4880: 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ook(.  sqlite3 *
4890: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
48a0: 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68   /* Attach the h
48b0: 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61  ook to this data
48c0: 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  base */.  void (
48d0: 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
48e0: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
48f0: 20 2a 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a 2c   *,char const *,
4900: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 2c 0a 20  sqlite_int64),. 
4910: 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20   void *pArg     
4920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
4930: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75  gument to the fu
4940: 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76  nction */.){.  v
4950: 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e  oid *pRet = db->
4960: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 64 62  pUpdateArg;.  db
4970: 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
4980: 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20  k = xCallback;. 
4990: 20 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 20   db->pUpdateArg 
49a0: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
49b0: 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   pRet;.}../*.** 
49c0: 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62  Register a callb
49d0: 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ack to be invoke
49e0: 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72  d each time a tr
49f0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c  ansaction is rol
4a00: 6c 65 64 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74  led.** back by t
4a10: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
4a20: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64  nection..*/.void
4a30: 20 2a 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61   *sqlite3_rollba
4a40: 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  ck_hook(.  sqlit
4a50: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
4a60: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
4a70: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
4a80: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f  database */.  vo
4a90: 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  id (*xCallback)(
4aa0: 76 6f 69 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62  void*), /* Callb
4ab0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ack function */.
4ac0: 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20    void *pArg    
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
4ae0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66  rgument to the f
4af0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20  unction */.){.  
4b00: 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d  void *pRet = db-
4b10: 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a 20  >pRollbackArg;. 
4b20: 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61   db->xRollbackCa
4b30: 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61  llback = xCallba
4b40: 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c 62  ck;.  db->pRollb
4b50: 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  ackArg = pArg;. 
4b60: 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a   return pRet;.}.
4b70: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4b80: 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  ine is called to
4b90: 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63   create a connec
4ba0: 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61  tion to a databa
4bb0: 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76  se BTree.** driv
4bc0: 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  er.  If zFilenam
4bd0: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
4be0: 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68   a file, then th
4bf0: 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70  at file is.** op
4c00: 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20  ened and used.  
4c10: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
4c20: 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22  the magic name "
4c30: 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a  :memory:" then.*
4c40: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  * the database i
4c50: 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f  s stored in memo
4c60: 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73 20  ry (and is thus 
4c70: 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f  forgotten as soo
4c80: 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e  n as.** the conn
4c90: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
4ca0: 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  .)  If zFilename
4cb0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
4cc0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73  e database.** is
4cd0: 20 61 20 22 76 69 72 74 75 61 6c 22 20 64 61 74   a "virtual" dat
4ce0: 61 62 61 73 65 20 66 6f 72 20 74 72 61 6e 73 69  abase for transi
4cf0: 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64  ent use only and
4d00: 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 0a 2a   is deleted as.*
4d10: 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f  * soon as the co
4d20: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
4d30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69 72 74  ed..**.** A virt
4d40: 75 61 6c 20 64 61 74 61 62 61 73 65 20 63 61 6e  ual database can
4d50: 20 62 65 20 65 69 74 68 65 72 20 61 20 64 69 73   be either a dis
4d60: 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69 73 20  k file (that is 
4d70: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
4d80: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68   deleted when th
4d90: 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64  e file is closed
4da0: 29 20 6f 72 20 69 74 20 61 6e 20 62 65 20 68 65  ) or it an be he
4db0: 6c 64 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d  ld entirely in m
4dc0: 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64  emory,.** depend
4dd0: 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  ing on the value
4de0: 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54  s of the TEMP_ST
4df0: 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ORE compile-time
4e00: 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a   macro and the.*
4e10: 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  * db->temp_store
4e20: 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72   variable, accor
4e30: 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ding to the foll
4e40: 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a  owing chart:.**.
4e50: 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54  **       TEMP_ST
4e60: 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70  ORE     db->temp
4e70: 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74  _store     Locat
4e80: 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ion of temporary
4e90: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20   database.**    
4ea0: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20     ----------   
4eb0: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
4ec0: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d       -----------
4ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ee0: 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ---.**          
4ef0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
4f00: 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20   any            
4f10: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
4f20: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
4f30: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
4f40: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
4f50: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
4f60: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
4f70: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
4f80: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
4f90: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
4fa0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
4fb0: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
4fd0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
4fe0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20                2 
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
5010: 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ory.**          
5020: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
5030: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
5040: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
5050: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
5060: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
5070: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69       memory.*/.i
5080: 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46  nt sqlite3BtreeF
5090: 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20  actory(.  const 
50a0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
50b0: 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61      /* Main data
50c0: 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e  base when openin
50d0: 67 20 61 75 78 20 6f 74 68 65 72 77 69 73 65 20  g aux otherwise 
50e0: 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  0 */.  const cha
50f0: 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20  r *zFilename,   
5100: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
5110: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
5120: 74 68 65 20 42 54 72 65 65 20 64 61 74 61 62 61  the BTree databa
5130: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74  se */.  int omit
5140: 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20  Journal,        
5150: 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65    /* if TRUE the
5160: 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c  n do not journal
5170: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
5180: 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20  int nCache,     
5190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
51a0: 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74   many pages in t
51b0: 68 65 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f  he page cache */
51c0: 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72  .  Btree **ppBtr
51d0: 65 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ee           /* 
51e0: 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42  Pointer to new B
51f0: 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74  tree object writ
5200: 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
5210: 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73   int btree_flags
5220: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   = 0;.  int rc;.
5230: 20 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42    .  assert( ppB
5240: 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66  tree != 0);.  if
5250: 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b  ( omitJournal ){
5260: 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73  .    btree_flags
5270: 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a   |= BTREE_OMIT_J
5280: 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66  OURNAL;.  }.  if
5290: 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
52a0: 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20  LITE_NoReadlock 
52b0: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
52c0: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f 5f 52  gs |= BTREE_NO_R
52d0: 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69  EADLOCK;.  }.  i
52e0: 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20  f( zFilename==0 
52f0: 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52  ){.#if TEMP_STOR
5300: 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e  E==0.    /* Do n
5310: 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  othing */.#endif
5320: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5330: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69  OMIT_MEMORYDB.#i
5340: 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a  f TEMP_STORE==1.
5350: 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70      if( db->temp
5360: 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c  _store==2 ) zFil
5370: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
5380: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54  :";.#endif.#if T
5390: 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20  EMP_STORE==2.   
53a0: 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74   if( db->temp_st
53b0: 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61  ore!=1 ) zFilena
53c0: 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b  me = ":memory:";
53d0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50  .#endif.#if TEMP
53e0: 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46  _STORE==3.    zF
53f0: 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f  ilename = ":memo
5400: 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  ry:";.#endif.#en
5410: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5420: 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20  IT_MEMORYDB */. 
5430: 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
5440: 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c  e3BtreeOpen(zFil
5450: 65 6e 61 6d 65 2c 20 28 73 71 6c 69 74 65 33 20  ename, (sqlite3 
5460: 2a 29 64 62 2c 20 70 70 42 74 72 65 65 2c 20 62  *)db, ppBtree, b
5470: 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69  tree_flags);.  i
5480: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
5490: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
54a0: 74 72 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c  treeSetBusyHandl
54b0: 65 72 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f  er(*ppBtree, (vo
54c0: 69 64 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e  id*)&db->busyHan
54d0: 64 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  dler);.    sqlit
54e0: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
54f0: 69 7a 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43  ize(*ppBtree, nC
5500: 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ache);.  }.  ret
5510: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
5520: 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e   Return UTF-8 en
5530: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
5540: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
5550: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
5560: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
5570: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
5580: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71  qlite3_errmsg(sq
5590: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
55a0: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  nst char *z;.  i
55b0: 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65  f( !db ){.    re
55c0: 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53  turn sqlite3ErrS
55d0: 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29  tr(SQLITE_NOMEM)
55e0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
55f0: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
5600: 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  d );.  if( sqlit
5610: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
5620: 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65  ) || db->errCode
5630: 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  ==SQLITE_MISUSE 
5640: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
5650: 6c 69 74 65 33 45 72 72 53 74 72 28 53 51 4c 49  lite3ErrStr(SQLI
5660: 54 45 5f 4d 49 53 55 53 45 29 3b 0a 20 20 7d 0a  TE_MISUSE);.  }.
5670: 20 20 7a 20 3d 20 28 63 68 61 72 2a 29 73 71 6c    z = (char*)sql
5680: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
5690: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28  db->pErr);.  if(
56a0: 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 20 3d   z==0 ){.    z =
56b0: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
56c0: 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20 20 7d  b->errCode);.  }
56d0: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
56e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
56f0: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
5700: 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e  Return UTF-16 en
5710: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
5720: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
5730: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
5740: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
5750: 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  */.const void *s
5760: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
5770: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
5780: 2f 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74  /* Because all t
5790: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
57a0: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
57b0: 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  in the unicode. 
57c0: 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d 30   ** range 0x00-0
57d0: 78 46 46 2c 20 69 66 20 77 65 20 70 61 64 20 74  xFF, if we pad t
57e0: 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 74  he big-endian st
57f0: 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20 2a  ring with a .  *
5800: 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20 77 65 20  * zero byte, we 
5810: 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65 20 6c  can obtain the l
5820: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 74 72  ittle-endian str
5830: 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20 26 62  ing with.  ** &b
5840: 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20  ig_endian[1]..  
5850: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  */.  static cons
5860: 74 20 63 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42  t char outOfMemB
5870: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27  e[] = {.    0, '
5880: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
5890: 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  t', 0, ' ', .   
58a0: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c   0, 'o', 0, 'f',
58b0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
58c0: 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'm', 0, 'e', 0,
58d0: 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'm', 0, 'o', 0,
58e0: 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c   'r', 0, 'y', 0,
58f0: 20 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61   0, 0.  };.  sta
5900: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6d  tic const char m
5910: 69 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b 0a 20  isuseBe [] = {. 
5920: 20 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 69     0, 'l', 0, 'i
5930: 27 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20 27 72  ', 0, 'b', 0, 'r
5940: 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 72  ', 0, 'a', 0, 'r
5950: 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 27 20  ', 0, 'y', 0, ' 
5960: 27 2c 20 0a 20 20 20 20 30 2c 20 27 72 27 2c 20  ', .    0, 'r', 
5970: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
5980: 30 2c 20 27 74 27 2c 20 30 2c 20 27 69 27 2c 20  0, 't', 0, 'i', 
5990: 30 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'n', 0, 'e', 
59a0: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
59b0: 27 63 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20  'c', 0, 'a', 0, 
59c0: 27 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20  'l', 0, 'l', 0, 
59d0: 27 65 27 2c 20 30 2c 20 27 64 27 2c 20 30 2c 20  'e', 0, 'd', 0, 
59e0: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27  ' ', .    0, 'o'
59f0: 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27  , 0, 'u', 0, 't'
5a00: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30  , 0, ' ', .    0
5a10: 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30  , 'o', 0, 'f', 0
5a20: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
5a30: 73 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  s', 0, 'e', 0, '
5a40: 71 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  q', 0, 'u', 0, '
5a50: 65 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27  e', 0, 'n', 0, '
5a60: 63 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 30  c', 0, 'e', 0, 0
5a70: 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73  , 0.  };..  cons
5a80: 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 61 73 73  t void *z;.  ass
5a90: 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
5aa0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20  Failed );.  if( 
5ab0: 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74 75 72  !db ){.    retur
5ac0: 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f  n (void *)(&outO
5ad0: 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54  fMemBe[SQLITE_UT
5ae0: 46 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54  F16NATIVE==SQLIT
5af0: 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b  E_UTF16LE?1:0]);
5b00: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
5b10: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
5b20: 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65  ) || db->errCode
5b30: 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  ==SQLITE_MISUSE 
5b40: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76  ){.    return (v
5b50: 6f 69 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65  oid *)(&misuseBe
5b60: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54  [SQLITE_UTF16NAT
5b70: 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  IVE==SQLITE_UTF1
5b80: 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20  6LE?1:0]);.  }. 
5b90: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
5ba0: 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45  ue_text16(db->pE
5bb0: 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  rr);.  if( z==0 
5bc0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  ){.    sqlite3Va
5bd0: 6c 75 65 53 65 74 53 74 72 28 64 62 2c 20 64 62  lueSetStr(db, db
5be0: 2d 3e 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69  ->pErr, -1, sqli
5bf0: 74 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72  te3ErrStr(db->er
5c00: 72 43 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20  rCode),.        
5c10: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
5c20: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
5c30: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    z = sqlite3_va
5c40: 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70  lue_text16(db->p
5c50: 45 72 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Err);.  }.  sqli
5c60: 74 65 33 41 70 69 45 78 69 74 28 30 2c 20 30 29  te3ApiExit(0, 0)
5c70: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  ;.  return z;.}.
5c80: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
5c90: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
5ca0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
5cb0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   most recent err
5cc0: 6f 72 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65  or code generate
5cd0: 64 20 62 79 20 61 6e 20 53 51 4c 69 74 65 20 72  d by an SQLite r
5ce0: 6f 75 74 69 6e 65 2e 20 49 66 20 4e 55 4c 4c 20  outine. If NULL 
5cf0: 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 74 6f 20  is.** passed to 
5d00: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20 77  this function, w
5d10: 65 20 61 73 73 75 6d 65 20 61 20 6d 61 6c 6c 6f  e assume a mallo
5d20: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
5d30: 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  g sqlite3_open()
5d40: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5d50: 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33  _errcode(sqlite3
5d60: 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62   *db){.  if( !db
5d70: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
5d80: 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75  iled ){.    retu
5d90: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
5da0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
5db0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
5dc0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
5dd0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
5de0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e   }.  return db->
5df0: 65 72 72 43 6f 64 65 20 26 20 64 62 2d 3e 65 72  errCode & db->er
5e00: 72 4d 61 73 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rMask;.}../*.** 
5e10: 43 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c  Create a new col
5e20: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
5e30: 66 6f 72 20 64 61 74 61 62 61 73 65 20 22 64 62  for database "db
5e40: 22 2e 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20  ".  The name is 
5e50: 7a 4e 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65  zName.** and the
5e60: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63   encoding is enc
5e70: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
5e80: 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
5e90: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
5ea0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5eb0: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
5ec0: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
5ed0: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
5ee0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
5ef0: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
5f00: 74 20 76 6f 69 64 2a 29 2c 0a 20 20 76 6f 69 64  t void*),.  void
5f10: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29  (*xDel)(void*).)
5f20: 7b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  {.  CollSeq *pCo
5f30: 6c 6c 3b 0a 20 20 69 6e 74 20 65 6e 63 32 3b 0a  ll;.  int enc2;.
5f40: 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33    .  if( sqlite3
5f50: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5f60: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5f70: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5f80: 0a 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45  ..  /* If SQLITE
5f90: 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66  _UTF16 is specif
5fa0: 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64  ied as the encod
5fb0: 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66  ing type, transf
5fc0: 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f  orm this.  ** to
5fd0: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55   one of SQLITE_U
5fe0: 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45  TF16LE or SQLITE
5ff0: 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74  _UTF16BE using t
6000: 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55  he.  ** SQLITE_U
6010: 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f  TF16NATIVE macro
6020: 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  . SQLITE_UTF16 i
6030: 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72  s not used inter
6040: 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 65 6e  nally..  */.  en
6050: 63 32 20 3d 20 65 6e 63 20 26 20 7e 53 51 4c 49  c2 = enc & ~SQLI
6060: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
6070: 3b 0a 20 20 69 66 28 20 65 6e 63 32 3d 3d 53 51  ;.  if( enc2==SQ
6080: 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20  LITE_UTF16 ){.  
6090: 20 20 65 6e 63 32 20 3d 20 53 51 4c 49 54 45 5f    enc2 = SQLITE_
60a0: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d  UTF16NATIVE;.  }
60b0: 0a 0a 20 20 69 66 28 20 28 65 6e 63 32 26 7e 33  ..  if( (enc2&~3
60c0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )!=0 ){.    sqli
60d0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
60e0: 49 54 45 5f 45 52 52 4f 52 2c 20 22 75 6e 6b 6e  ITE_ERROR, "unkn
60f0: 6f 77 6e 20 65 6e 63 6f 64 69 6e 67 22 29 3b 0a  own encoding");.
6100: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6110: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  E_ERROR;.  }..  
6120: 2f 2a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  /* Check if this
6130: 20 63 61 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e   call is removin
6140: 67 20 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 61  g or replacing a
6150: 6e 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61  n existing colla
6160: 74 69 6f 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65  tion .  ** seque
6170: 6e 63 65 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20  nce. If so, and 
6180: 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
6190: 20 56 4d 73 2c 20 72 65 74 75 72 6e 20 62 75 73   VMs, return bus
61a0: 79 2e 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a  y. If there.  **
61b0: 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56   are no active V
61c0: 4d 73 2c 20 69 6e 76 61 6c 69 64 61 74 65 20 61  Ms, invalidate a
61d0: 6e 79 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20  ny pre-compiled 
61e0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f  statements..  */
61f0: 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  .  pColl = sqlit
6200: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
6210: 2c 20 28 75 38 29 65 6e 63 32 2c 20 7a 4e 61 6d  , (u8)enc2, zNam
6220: 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29  e, strlen(zName)
6230: 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c  , 0);.  if( pCol
6240: 6c 20 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70  l && pColl->xCmp
6250: 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
6260: 61 63 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b  activeVdbeCnt ){
6270: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
6280: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  ror(db, SQLITE_B
6290: 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55  USY, .        "U
62a0: 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f  nable to delete/
62b0: 6d 6f 64 69 66 79 20 63 6f 6c 6c 61 74 69 6f 6e  modify collation
62c0: 20 73 65 71 75 65 6e 63 65 20 64 75 65 20 74 6f   sequence due to
62d0: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
62e0: 74 73 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ts");.      retu
62f0: 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a  rn SQLITE_BUSY;.
6300: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
6310: 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
6320: 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 0a  tatements(db);..
6330: 20 20 20 20 2f 2a 20 49 66 20 63 6f 6c 6c 61 74      /* If collat
6340: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 70 43 6f  ion sequence pCo
6350: 6c 6c 20 77 61 73 20 63 72 65 61 74 65 64 20 64  ll was created d
6360: 69 72 65 63 74 6c 79 20 62 79 20 61 20 63 61 6c  irectly by a cal
6370: 6c 20 74 6f 0a 20 20 20 20 2a 2a 20 73 71 6c 69  l to.    ** sqli
6380: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
6390: 74 69 6f 6e 2c 20 61 6e 64 20 6e 6f 74 20 67 65  tion, and not ge
63a0: 6e 65 72 61 74 65 64 20 62 79 20 73 79 6e 74 68  nerated by synth
63b0: 43 6f 6c 6c 53 65 71 28 29 2c 0a 20 20 20 20 2a  CollSeq(),.    *
63c0: 2a 20 74 68 65 6e 20 61 6e 79 20 63 6f 70 69 65  * then any copie
63d0: 73 20 6d 61 64 65 20 62 79 20 73 79 6e 74 68 43  s made by synthC
63e0: 6f 6c 6c 53 65 71 28 29 20 6e 65 65 64 20 74 6f  ollSeq() need to
63f0: 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 2e   be invalidated.
6400: 0a 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 63 6f  .    ** Also, co
6410: 6c 6c 61 74 69 6f 6e 20 64 65 73 74 72 75 63 74  llation destruct
6420: 6f 72 20 2d 20 43 6f 6c 6c 53 65 71 2e 78 44 65  or - CollSeq.xDe
6430: 6c 28 29 20 2d 20 66 75 6e 63 74 69 6f 6e 20 6d  l() - function m
6440: 61 79 20 6e 65 65 64 0a 20 20 20 20 2a 2a 20 74  ay need.    ** t
6450: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 0a 20 20 20  o be called..   
6460: 20 2a 2f 20 0a 20 20 20 20 69 66 28 20 28 70 43   */ .    if( (pC
6470: 6f 6c 6c 2d 3e 65 6e 63 20 26 20 7e 53 51 4c 49  oll->enc & ~SQLI
6480: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
6490: 29 3d 3d 65 6e 63 32 20 29 7b 0a 20 20 20 20 20  )==enc2 ){.     
64a0: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 20   CollSeq *aColl 
64b0: 3d 20 73 71 6c 69 74 65 33 48 61 73 68 46 69 6e  = sqlite3HashFin
64c0: 64 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c  d(&db->aCollSeq,
64d0: 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a   zName, strlen(z
64e0: 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 69 6e  Name));.      in
64f0: 74 20 6a 3b 0a 20 20 20 20 20 20 66 6f 72 28 6a  t j;.      for(j
6500: 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20  =0; j<3; j++){. 
6510: 20 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a         CollSeq *
6520: 70 20 3d 20 26 61 43 6f 6c 6c 5b 6a 5d 3b 0a 20  p = &aColl[j];. 
6530: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 65 6e         if( p->en
6540: 63 3d 3d 70 43 6f 6c 6c 2d 3e 65 6e 63 20 29 7b  c==pColl->enc ){
6550: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
6560: 2d 3e 78 44 65 6c 20 29 7b 0a 20 20 20 20 20 20  ->xDel ){.      
6570: 20 20 20 20 20 20 70 2d 3e 78 44 65 6c 28 70 2d        p->xDel(p-
6580: 3e 70 55 73 65 72 29 3b 0a 20 20 20 20 20 20 20  >pUser);.       
6590: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70     }.          p
65a0: 2d 3e 78 43 6d 70 20 3d 20 30 3b 0a 20 20 20 20  ->xCmp = 0;.    
65b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
65c0: 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 43 6f 6c 6c    }.  }..  pColl
65d0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
65e0: 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e  llSeq(db, (u8)en
65f0: 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  c2, zName, strle
6600: 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20  n(zName), 1);.  
6610: 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20  if( pColl ){.   
6620: 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78   pColl->xCmp = x
6630: 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70 43 6f  Compare;.    pCo
6640: 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43 74 78  ll->pUser = pCtx
6650: 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 44 65  ;.    pColl->xDe
6660: 6c 20 3d 20 78 44 65 6c 3b 0a 20 20 20 20 70 43  l = xDel;.    pC
6670: 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 65 6e 63 32 20  oll->enc = enc2 
6680: 7c 20 28 65 6e 63 20 26 20 53 51 4c 49 54 45 5f  | (enc & SQLITE_
6690: 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 29 3b 0a  UTF16_ALIGNED);.
66a0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72    }.  sqlite3Err
66b0: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
66c0: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  , 0);.  return S
66d0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  QLITE_OK;.}.../*
66e0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
66f0: 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f   does the work o
6700: 66 20 6f 70 65 6e 69 6e 67 20 61 20 64 61 74 61  f opening a data
6710: 62 61 73 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f  base on behalf o
6720: 66 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65  f.** sqlite3_ope
6730: 6e 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  n() and sqlite3_
6740: 6f 70 65 6e 31 36 28 29 2e 20 54 68 65 20 64 61  open16(). The da
6750: 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20  tabase filename 
6760: 22 7a 46 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a  "zFilename"  .**
6770: 20 69 73 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   is UTF-8 encode
6780: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
6790: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20   openDatabase(. 
67a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
67b0: 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62  lename, /* Datab
67c0: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46  ase filename UTF
67d0: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
67e0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 20  sqlite3 **ppDb  
67f0: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52         /* OUT: R
6800: 65 74 75 72 6e 65 64 20 64 61 74 61 62 61 73 65  eturned database
6810: 20 68 61 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20   handle */.){.  
6820: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
6830: 6e 74 20 72 63 3b 0a 20 20 43 6f 6c 6c 53 65 71  nt rc;.  CollSeq
6840: 20 2a 70 43 6f 6c 6c 3b 0a 0a 20 20 2f 2a 20 41   *pColl;..  /* A
6850: 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69  llocate the sqli
6860: 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72  te data structur
6870: 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69  e */.  db = sqli
6880: 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 20 73  te3MallocZero( s
6890: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20 29  izeof(sqlite3) )
68a0: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20  ;.  if( db==0 ) 
68b0: 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b  goto opendb_out;
68c0: 0a 20 20 64 62 2d 3e 70 56 66 73 20 3d 20 73 71  .  db->pVfs = sq
68d0: 6c 69 74 65 33 5f 66 69 6e 64 5f 76 66 73 28 30  lite3_find_vfs(0
68e0: 29 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61 73 6b  );.  db->errMask
68f0: 20 3d 20 30 78 66 66 3b 0a 20 20 64 62 2d 3e 70   = 0xff;.  db->p
6900: 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20 30  riorNewRowid = 0
6910: 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  ;.  db->magic = 
6920: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
6930: 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20 32  Y;.  db->nDb = 2
6940: 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64 62  ;.  db->aDb = db
6950: 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20 64  ->aDbStatic;.  d
6960: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
6970: 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  1;.  db->flags |
6980: 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  = SQLITE_ShortCo
6990: 6c 4e 61 6d 65 73 0a 23 69 66 20 53 51 4c 49 54  lNames.#if SQLIT
69a0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
69b0: 4f 52 4d 41 54 3c 34 0a 20 20 20 20 20 20 20 20  ORMAT<4.        
69c0: 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54           | SQLIT
69d0: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 0a  E_LegacyFileFmt.
69e0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
69f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44  LITE_ENABLE_LOAD
6a00: 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 20  _EXTENSION.     
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51              | SQ
6a20: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
6a30: 6f 6e 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  on.#endif.      
6a40: 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49  ;.  sqlite3HashI
6a50: 6e 69 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20  nit(&db->aFunc, 
6a60: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
6a70: 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  NG, 0);.  sqlite
6a80: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
6a90: 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 49 54 45 5f  CollSeq, SQLITE_
6aa0: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
6ab0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6ac0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
6ad0: 45 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49  E.  sqlite3HashI
6ae0: 6e 69 74 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65  nit(&db->aModule
6af0: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
6b00: 52 49 4e 47 2c 20 30 29 3b 0a 23 65 6e 64 69 66  RING, 0);.#endif
6b10: 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64  ..  /* Add the d
6b20: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6b30: 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59   sequence BINARY
6b40: 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66  . BINARY works f
6b50: 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20  or both UTF-8.  
6b60: 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73  ** and UTF-16, s
6b70: 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20  o add a version 
6b80: 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69  for each to avoi
6b90: 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72  d any unnecessar
6ba0: 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  y.  ** conversio
6bb0: 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72  ns. The only err
6bc0: 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75  or that can occu
6bd0: 72 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c  r here is a mall
6be0: 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20  oc() failure..  
6bf0: 2a 2f 0a 20 20 69 66 28 20 63 72 65 61 74 65 43  */.  if( createC
6c00: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49  ollation(db, "BI
6c10: 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54  NARY", SQLITE_UT
6c20: 46 38 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75  F8, 0, binCollFu
6c30: 6e 63 2c 20 30 29 20 7c 7c 0a 20 20 20 20 20 20  nc, 0) ||.      
6c40: 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
6c50: 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51  db, "BINARY", SQ
6c60: 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 30 2c  LITE_UTF16BE, 0,
6c70: 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20 30 29   binCollFunc, 0)
6c80: 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61 74 65   ||.      create
6c90: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42  Collation(db, "B
6ca0: 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55  INARY", SQLITE_U
6cb0: 54 46 31 36 4c 45 2c 20 30 2c 20 62 69 6e 43 6f  TF16LE, 0, binCo
6cc0: 6c 6c 46 75 6e 63 2c 20 30 29 20 7c 7c 0a 20 20  llFunc, 0) ||.  
6cd0: 20 20 20 20 28 64 62 2d 3e 70 44 66 6c 74 43 6f      (db->pDfltCo
6ce0: 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ll = sqlite3Find
6cf0: 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c 49  CollSeq(db, SQLI
6d00: 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41 52 59  TE_UTF8, "BINARY
6d10: 22 2c 20 36 2c 20 30 29 29 3d 3d 30 20 0a 20 20  ", 6, 0))==0 .  
6d20: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
6d30: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
6d40: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  );.    db->magic
6d50: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
6d60: 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f  CLOSED;.    goto
6d70: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
6d80: 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20  ..  /* Also add 
6d90: 61 20 55 54 46 2d 38 20 63 61 73 65 2d 69 6e 73  a UTF-8 case-ins
6da0: 65 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61 74 69  ensitive collati
6db0: 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a  on sequence. */.
6dc0: 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f    createCollatio
6dd0: 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c 20  n(db, "NOCASE", 
6de0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
6df0: 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46  nocaseCollatingF
6e00: 75 6e 63 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 53  unc, 0);..  /* S
6e10: 65 74 20 66 6c 61 67 73 20 6f 6e 20 74 68 65 20  et flags on the 
6e20: 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69  built-in collati
6e30: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
6e40: 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 2d    db->pDfltColl-
6e50: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 43  >type = SQLITE_C
6e60: 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20 20 70 43  OLL_BINARY;.  pC
6e70: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
6e80: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c  dCollSeq(db, SQL
6e90: 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f 43 41 53  ITE_UTF8, "NOCAS
6ea0: 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20 69 66 28  E", 6, 0);.  if(
6eb0: 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70 43   pColl ){.    pC
6ec0: 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  oll->type = SQLI
6ed0: 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45 3b 0a  TE_COLL_NOCASE;.
6ee0: 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20 74    }..  /* Open t
6ef0: 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62  he backend datab
6f00: 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20  ase driver */.  
6f10: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
6f20: 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46 69  eFactory(db, zFi
6f30: 6c 65 6e 61 6d 65 2c 20 30 2c 20 53 51 4c 49 54  lename, 0, SQLIT
6f40: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
6f50: 53 49 5a 45 2c 0a 20 20 20 20 20 20 20 20 20 20  SIZE,.          
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74   &db->aDb[0].pBt
6f80: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
6f90: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
6fa0: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
6fb0: 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  c, 0);.    db->m
6fc0: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
6fd0: 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20  GIC_CLOSED;.    
6fe0: 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b  goto opendb_out;
6ff0: 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 30  .  }.  db->aDb[0
7000: 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c 69  ].pSchema = sqli
7010: 74 65 33 53 63 68 65 6d 61 47 65 74 28 64 62 2c  te3SchemaGet(db,
7020: 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29   db->aDb[0].pBt)
7030: 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ;.  db->aDb[1].p
7040: 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33  Schema = sqlite3
7050: 53 63 68 65 6d 61 47 65 74 28 64 62 2c 20 30 29  SchemaGet(db, 0)
7060: 3b 0a 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65 66  ;...  /* The def
7070: 61 75 6c 74 20 73 61 66 65 74 79 5f 6c 65 76 65  ault safety_leve
7080: 6c 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  l for the main d
7090: 61 74 61 62 61 73 65 20 69 73 20 27 66 75 6c 6c  atabase is 'full
70a0: 27 3b 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a  '; for the temp.
70b0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74    ** database it
70c0: 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73   is 'NONE'. This
70d0: 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67   matches the pag
70e0: 65 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74  er layer default
70f0: 73 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e  s.  .  */.  db->
7100: 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22  aDb[0].zName = "
7110: 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62  main";.  db->aDb
7120: 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c  [0].safety_level
7130: 20 3d 20 33 3b 0a 23 69 66 6e 64 65 66 20 53 51   = 3;.#ifndef SQ
7140: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
7150: 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e  .  db->aDb[1].zN
7160: 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a 20 20  ame = "temp";.  
7170: 64 62 2d 3e 61 44 62 5b 31 5d 2e 73 61 66 65 74  db->aDb[1].safet
7180: 79 5f 6c 65 76 65 6c 20 3d 20 31 3b 0a 23 65 6e  y_level = 1;.#en
7190: 64 69 66 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63  dif..  db->magic
71a0: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
71b0: 4f 50 45 4e 3b 0a 20 20 69 66 28 20 64 62 2d 3e  OPEN;.  if( db->
71c0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
71d0: 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
71e0: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  out;.  }..  /* R
71f0: 65 67 69 73 74 65 72 20 61 6c 6c 20 62 75 69 6c  egister all buil
7200: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20  t-in functions, 
7210: 62 75 74 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d  but do not attem
7220: 70 74 20 74 6f 20 72 65 61 64 20 74 68 65 0a 20  pt to read the. 
7230: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68   ** database sch
7240: 65 6d 61 20 79 65 74 2e 20 54 68 69 73 20 69 73  ema yet. This is
7250: 20 64 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 74   delayed until t
7260: 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
7270: 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  e database.  ** 
7280: 69 73 20 61 63 63 65 73 73 65 64 2e 0a 20 20 2a  is accessed..  *
7290: 2f 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  /.  sqlite3Error
72a0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  (db, SQLITE_OK, 
72b0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 52 65 67  0);.  sqlite3Reg
72c0: 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
72d0: 74 69 6f 6e 73 28 64 62 29 3b 0a 0a 20 20 2f 2a  tions(db);..  /*
72e0: 20 4c 6f 61 64 20 61 75 74 6f 6d 61 74 69 63 20   Load automatic 
72f0: 65 78 74 65 6e 73 69 6f 6e 73 20 2d 20 65 78 74  extensions - ext
7300: 65 6e 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76  ensions that hav
7310: 65 20 62 65 65 6e 20 72 65 67 69 73 74 65 72 65  e been registere
7320: 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74 68 65  d.  ** using the
7330: 20 73 71 6c 69 74 65 33 5f 61 75 74 6f 6d 61 74   sqlite3_automat
7340: 69 63 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 41  ic_extension() A
7350: 50 49 2e 0a 20 20 2a 2f 0a 20 20 28 76 6f 69 64  PI..  */.  (void
7360: 29 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64  )sqlite3AutoLoad
7370: 45 78 74 65 6e 73 69 6f 6e 73 28 64 62 29 3b 0a  Extensions(db);.
7380: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 65 72    if( sqlite3_er
7390: 72 63 6f 64 65 28 64 62 29 21 3d 53 51 4c 49 54  rcode(db)!=SQLIT
73a0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f  E_OK ){.    goto
73b0: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
73c0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
73d0: 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20 20 69 66  ENABLE_FTS1.  if
73e0: 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
73f0: 6c 65 64 20 29 7b 0a 20 20 20 20 65 78 74 65 72  led ){.    exter
7400: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 46 74 73  n int sqlite3Fts
7410: 31 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  1Init(sqlite3*);
7420: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
7430: 33 46 74 73 31 49 6e 69 74 28 64 62 29 3b 0a 20  3Fts1Init(db);. 
7440: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65   }.#endif..#ifde
7450: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7460: 46 54 53 32 0a 20 20 69 66 28 20 21 64 62 2d 3e  FTS2.  if( !db->
7470: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20  mallocFailed && 
7480: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
7490: 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20  .    extern int 
74a0: 73 71 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28  sqlite3Fts2Init(
74b0: 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 72  sqlite3*);.    r
74c0: 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73 32 49  c = sqlite3Fts2I
74d0: 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e  nit(db);.  }.#en
74e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
74f0: 54 45 5f 45 4e 41 42 4c 45 5f 49 43 55 0a 20 20  TE_ENABLE_ICU.  
7500: 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  if( !db->mallocF
7510: 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51 4c  ailed && rc==SQL
7520: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 65 78  ITE_OK ){.    ex
7530: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
7540: 49 63 75 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  IcuInit(sqlite3*
7550: 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
7560: 74 65 33 49 63 75 49 6e 69 74 28 64 62 29 3b 0a  te3IcuInit(db);.
7570: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
7580: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
7590: 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 2d 44 53 51  , 0);..  /* -DSQ
75a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43  LITE_DEFAULT_LOC
75b0: 4b 49 4e 47 5f 4d 4f 44 45 3d 31 20 6d 61 6b 65  KING_MODE=1 make
75c0: 73 20 45 58 43 4c 55 53 49 56 45 20 74 68 65 20  s EXCLUSIVE the 
75d0: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 0a  default locking.
75e0: 20 20 2a 2a 20 6d 6f 64 65 2e 20 20 2d 44 53 51    ** mode.  -DSQ
75f0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43  LITE_DEFAULT_LOC
7600: 4b 49 4e 47 5f 4d 4f 44 45 3d 30 20 6d 61 6b 65  KING_MODE=0 make
7610: 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64 65 66 61   NORMAL the defa
7620: 75 6c 74 20 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a  ult locking.  **
7630: 20 6d 6f 64 65 2e 20 20 44 6f 69 6e 67 20 6e 6f   mode.  Doing no
7640: 74 68 69 6e 67 20 61 74 20 61 6c 6c 20 61 6c 73  thing at all als
7650: 6f 20 6d 61 6b 65 73 20 4e 4f 52 4d 41 4c 20 74  o makes NORMAL t
7660: 68 65 20 64 65 66 61 75 6c 74 2e 0a 20 20 2a 2f  he default..  */
7670: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
7680: 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d  EFAULT_LOCKING_M
7690: 4f 44 45 0a 20 20 64 62 2d 3e 64 66 6c 74 4c 6f  ODE.  db->dfltLo
76a0: 63 6b 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f  ckMode = SQLITE_
76b0: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
76c0: 4d 4f 44 45 3b 0a 20 20 73 71 6c 69 74 65 33 50  MODE;.  sqlite3P
76d0: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
76e0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
76f0: 72 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74  r(db->aDb[0].pBt
7700: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7720: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b  ITE_DEFAULT_LOCK
7730: 49 4e 47 5f 4d 4f 44 45 29 3b 0a 23 65 6e 64 69  ING_MODE);.#endi
7740: 66 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20  f..opendb_out:. 
7750: 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45   if( SQLITE_NOME
7760: 4d 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  M==(rc = sqlite3
7770: 5f 65 72 72 63 6f 64 65 28 64 62 29 29 20 29 7b  _errcode(db)) ){
7780: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
7790: 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62 20 3d  se(db);.    db =
77a0: 20 30 3b 0a 20 20 7d 0a 20 20 2a 70 70 44 62 20   0;.  }.  *ppDb 
77b0: 3d 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20 73  = db;.  return s
77c0: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30 2c  qlite3ApiExit(0,
77d0: 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f   rc);.}../*.** O
77e0: 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61  pen a new databa
77f0: 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  se handle..*/.in
7800: 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a  t sqlite3_open(.
7810: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
7820: 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69  ilename, .  sqli
7830: 74 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20  te3 **ppDb .){. 
7840: 20 72 65 74 75 72 6e 20 6f 70 65 6e 44 61 74 61   return openData
7850: 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  base(zFilename, 
7860: 70 70 44 62 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65  ppDb);.}..#ifnde
7870: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7880: 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  F16./*.** Open a
7890: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68 61   new database ha
78a0: 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ndle..*/.int sql
78b0: 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20 20 63  ite3_open16(.  c
78c0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
78d0: 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33  name, .  sqlite3
78e0: 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20 63 68 61   **ppDb.){.  cha
78f0: 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c 65 6e 61  r const *zFilena
7900: 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c 65 6e  me8;   /* zFilen
7910: 61 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e 20 55  ame encoded in U
7920: 54 46 2d 38 20 69 6e 73 74 65 61 64 20 6f 66 20  TF-8 instead of 
7930: 55 54 46 2d 31 36 20 2a 2f 0a 20 20 73 71 6c 69  UTF-16 */.  sqli
7940: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
7950: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
7960: 54 45 5f 4e 4f 4d 45 4d 3b 0a 0a 20 20 61 73 73  TE_NOMEM;..  ass
7970: 65 72 74 28 20 7a 46 69 6c 65 6e 61 6d 65 20 29  ert( zFilename )
7980: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 70 44 62  ;.  assert( ppDb
7990: 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b   );.  *ppDb = 0;
79a0: 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65  .  pVal = sqlite
79b0: 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20 20  3ValueNew(0);.  
79c0: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
79d0: 74 72 28 30 2c 20 70 56 61 6c 2c 20 2d 31 2c 20  tr(0, pVal, -1, 
79e0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54  zFilename, SQLIT
79f0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53  E_UTF16NATIVE, S
7a00: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7a10: 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71   zFilename8 = sq
7a20: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 30  lite3ValueText(0
7a30: 2c 20 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  , pVal, SQLITE_U
7a40: 54 46 38 29 3b 0a 20 20 69 66 28 20 7a 46 69 6c  TF8);.  if( zFil
7a50: 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 63  ename8 ){.    rc
7a60: 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28   = openDatabase(
7a70: 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62  zFilename8, ppDb
7a80: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
7a90: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a 70 70 44  QLITE_OK && *ppD
7aa0: 62 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  b ){.      rc = 
7ab0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a 70 70  sqlite3_exec(*pp
7ac0: 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e 63 6f  Db, "PRAGMA enco
7ad0: 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36 27 22  ding = 'UTF-16'"
7ae0: 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
7af0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
7b00: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7b10: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 2a 70 70  qlite3_close(*pp
7b20: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 2a 70 70  Db);.        *pp
7b30: 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  Db = 0;.      }.
7b40: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
7b50: 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61  te3ValueFree(pVa
7b60: 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71  l);..  return sq
7b70: 6c 69 74 65 33 41 70 69 45 78 69 74 28 30 2c 20  lite3ApiExit(0, 
7b80: 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  rc);.}.#endif /*
7b90: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7ba0: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  16 */../*.** The
7bb0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69   following routi
7bc0: 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20 76 69  ne destroys a vi
7bd0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68  rtual machine th
7be0: 61 74 20 69 73 20 63 72 65 61 74 65 64 20 62 79  at is created by
7bf0: 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f  .** the sqlite3_
7c00: 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e  compile() routin
7c10: 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 72  e. The integer r
7c20: 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51  eturned is an SQ
7c30: 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73  LITE_.** success
7c40: 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68  /failure code th
7c50: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
7c60: 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75   result of execu
7c70: 74 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c  ting the virtual
7c80: 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a  .** machine..**.
7c90: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
7ca0: 73 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63  sets the error c
7cb0: 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72  ode and string r
7cc0: 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71  eturned by.** sq
7cd0: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c  lite3_errcode(),
7ce0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
7cf0: 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72  ) and sqlite3_er
7d00: 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74  rmsg16()..*/.int
7d10: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
7d20: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
7d30: 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63  pStmt){.  int rc
7d40: 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30  ;.  if( pStmt==0
7d50: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
7d60: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b  ITE_OK;.  }else{
7d70: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
7d80: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56  3VdbeFinalize((V
7d90: 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 7d  dbe*)pStmt);.  }
7da0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
7db0: 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65  ./*.** Terminate
7dc0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65   the current exe
7dd0: 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  cution of an SQL
7de0: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
7df0: 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20  eset it.** back 
7e00: 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20  to its starting 
7e10: 73 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74  state so that it
7e20: 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20   can be reused. 
7e30: 41 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66  A success code f
7e40: 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72  rom.** the prior
7e50: 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65   execution is re
7e60: 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  turned..**.** Th
7e70: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
7e80: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  the error code a
7e90: 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  nd string return
7ea0: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
7eb0: 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69  _errcode(), sqli
7ec0: 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64  te3_errmsg() and
7ed0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31   sqlite3_errmsg1
7ee0: 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  6()..*/.int sqli
7ef0: 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65  te3_reset(sqlite
7f00: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
7f10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
7f20: 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20  pStmt==0 ){.    
7f30: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
7f40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
7f50: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73  = sqlite3VdbeRes
7f60: 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29  et((Vdbe*)pStmt)
7f70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7f80: 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64 62 65  eMakeReady((Vdbe
7f90: 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30 2c 20  *)pStmt, -1, 0, 
7fa0: 30 2c 20 30 29 3b 0a 20 20 20 20 61 73 73 65 72  0, 0);.    asser
7fb0: 74 28 20 28 72 63 20 26 20 28 73 71 6c 69 74 65  t( (rc & (sqlite
7fc0: 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70 53 74 6d  3_db_handle(pStm
7fd0: 74 29 2d 3e 65 72 72 4d 61 73 6b 29 29 3d 3d 72  t)->errMask))==r
7fe0: 63 20 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  c );.  }.  retur
7ff0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
8000: 65 67 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f  egister a new co
8010: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
8020: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
8030: 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f  se handle db..*/
8040: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65  .int sqlite3_cre
8050: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20  ate_collation(. 
8060: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
8070: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
8080: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
8090: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
80a0: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
80b0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
80c0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
80d0: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74 20  void*).){.  int 
80e0: 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64  rc;.  assert( !d
80f0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
8100: 29 3b 0a 20 20 72 63 20 3d 20 63 72 65 61 74 65  );.  rc = create
8110: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e  Collation(db, zN
8120: 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20  ame, enc, pCtx, 
8130: 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b 0a 20 20  xCompare, 0);.  
8140: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
8150: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d  iExit(db, rc);.}
8160: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
8170: 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e   a new collation
8180: 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20 74   sequence with t
8190: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
81a0: 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71  le db..*/.int sq
81b0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
81c0: 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20 73 71 6c  lation_v2(.  sql
81d0: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
81e0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
81f0: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
8200: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
8210: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
8220: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
8230: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
8240: 2a 29 2c 0a 20 20 76 6f 69 64 28 2a 78 44 65 6c  *),.  void(*xDel
8250: 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e  )(void*).){.  in
8260: 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20  t rc;.  assert( 
8270: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
8280: 64 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65 61  d );.  rc = crea
8290: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
82a0: 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78  zName, enc, pCtx
82b0: 2c 20 78 43 6f 6d 70 61 72 65 2c 20 78 44 65 6c  , xCompare, xDel
82c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  );.  return sqli
82d0: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
82e0: 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  c);.}..#ifndef S
82f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
8300: 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
8310: 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20  a new collation 
8320: 73 65 71 75 65 6e 63 65 20 77 69 74 68 20 74 68  sequence with th
8330: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
8340: 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  e db..*/.int sql
8350: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
8360: 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74  ation16(.  sqlit
8370: 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3* db, .  const
8380: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20   char *zName, . 
8390: 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69   int enc, .  voi
83a0: 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a  d* pCtx,.  int(*
83b0: 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c  xCompare)(void*,
83c0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  int,const void*,
83d0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  int,const void*)
83e0: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53  .){.  int rc = S
83f0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63 68 61 72  QLITE_OK;.  char
8400: 20 2a 7a 4e 61 6d 65 38 3b 20 0a 20 20 61 73 73   *zName8; .  ass
8410: 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
8420: 46 61 69 6c 65 64 20 29 3b 0a 20 20 7a 4e 61 6d  Failed );.  zNam
8430: 65 38 20 3d 20 73 71 6c 69 74 65 33 55 74 66 31  e8 = sqlite3Utf1
8440: 36 74 6f 38 28 64 62 2c 20 7a 4e 61 6d 65 2c 20  6to8(db, zName, 
8450: 2d 31 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  -1);.  if( zName
8460: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 63 72  8 ){.    rc = cr
8470: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
8480: 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c 20 70  , zName8, enc, p
8490: 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 2c 20 30  Ctx, xCompare, 0
84a0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
84b0: 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a 20 20 7d  ree(zName8);.  }
84c0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
84d0: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
84e0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
84f0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
8500: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  */../*.** Regist
8510: 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  er a collation s
8520: 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20  equence factory 
8530: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
8540: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
8550: 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65  e.** db. Replace
8560: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20   any previously 
8570: 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74  installed collat
8580: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
8590: 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  tory..*/.int sql
85a0: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
85b0: 65 65 64 65 64 28 0a 20 20 73 71 6c 69 74 65 33  eeded(.  sqlite3
85c0: 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70   *db, .  void *p
85d0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a  CollNeededArg, .
85e0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
85f0: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
8600: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
8610: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b  ,const char*).){
8620: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
8630: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
8640: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8650: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
8660: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
8670: 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a   = xCollNeeded;.
8680: 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65    db->xCollNeede
8690: 64 31 36 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70  d16 = 0;.  db->p
86a0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20  CollNeededArg = 
86b0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
86c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
86d0: 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  OK;.}..#ifndef S
86e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
86f0: 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
8700: 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
8710: 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c  ence factory cal
8720: 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64  lback with the d
8730: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
8740: 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e  * db. Replace an
8750: 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  y previously ins
8760: 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  talled collation
8770: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
8780: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
8790: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
87a0: 65 64 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20  ed16(.  sqlite3 
87b0: 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43  *db, .  void *pC
87c0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20  ollNeededArg, . 
87d0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
87e0: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
87f0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
8800: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29  p,const void*).)
8810: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  {.  if( sqlite3S
8820: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29  afetyCheck(db) )
8830: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
8840: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
8850: 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65    db->xCollNeede
8860: 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f  d = 0;.  db->xCo
8870: 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 78 43 6f  llNeeded16 = xCo
8880: 6c 6c 4e 65 65 64 65 64 31 36 3b 0a 20 20 64 62  llNeeded16;.  db
8890: 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  ->pCollNeededArg
88a0: 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72   = pCollNeededAr
88b0: 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  g;.  return SQLI
88c0: 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
88d0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
88e0: 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  TF16 */..#ifndef
88f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
8900: 42 41 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a  BALRECOVER./*.**
8910: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
8920: 73 20 6e 6f 77 20 61 6e 20 61 6e 61 63 68 72 6f  s now an anachro
8930: 6e 69 73 6d 2e 20 49 74 20 75 73 65 64 20 74 6f  nism. It used to
8940: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f   be used to reco
8950: 76 65 72 20 66 72 6f 6d 20 61 0a 2a 2a 20 6d 61  ver from a.** ma
8960: 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 2c 20  lloc() failure, 
8970: 62 75 74 20 53 51 4c 69 74 65 20 6e 6f 77 20 64  but SQLite now d
8980: 6f 65 73 20 74 68 69 73 20 61 75 74 6f 6d 61 74  oes this automat
8990: 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73  ically..*/.int s
89a0: 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
89b0: 63 6f 76 65 72 28 29 7b 0a 20 20 72 65 74 75 72  cover(){.  retur
89c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
89d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  endif../*.** Tes
89e0: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
89f0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
8a00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
8a10: 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  is in autocommit
8a20: 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65 74 75 72  .** mode.  Retur
8a30: 6e 20 54 52 55 45 20 69 66 20 69 74 20 69 73 20  n TRUE if it is 
8a40: 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e 6f 74  and FALSE if not
8a50: 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  .  Autocommit mo
8a60: 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62 79 20 64  de is on.** by d
8a70: 65 66 61 75 6c 74 2e 20 20 41 75 74 6f 63 6f 6d  efault.  Autocom
8a80: 6d 69 74 20 69 73 20 64 69 73 61 62 6c 65 64 20  mit is disabled 
8a90: 62 79 20 61 20 42 45 47 49 4e 20 73 74 61 74 65  by a BEGIN state
8aa0: 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e 61 62 6c  ment and reenabl
8ab0: 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 6e 65 78  ed.** by the nex
8ac0: 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t COMMIT or ROLL
8ad0: 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a  BACK..**.*******
8ae0: 20 54 48 49 53 20 49 53 20 41 4e 20 45 58 50 45   THIS IS AN EXPE
8af0: 52 49 4d 45 4e 54 41 4c 20 41 50 49 20 41 4e 44  RIMENTAL API AND
8b00: 20 49 53 20 53 55 42 4a 45 43 54 20 54 4f 20 43   IS SUBJECT TO C
8b10: 48 41 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a 2f 0a  HANGE ******.*/.
8b20: 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  int sqlite3_get_
8b30: 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c 69 74  autocommit(sqlit
8b40: 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72  e3 *db){.  retur
8b50: 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  n db->autoCommit
8b60: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
8b70: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  TE_DEBUG./*.** T
8b80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
8b90: 74 69 6e 65 20 69 73 20 73 75 62 74 69 74 75 74  tine is subtitut
8ba0: 65 64 20 66 6f 72 20 63 6f 6e 73 74 61 6e 74 20  ed for constant 
8bb0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 69  SQLITE_CORRUPT i
8bc0: 6e 0a 2a 2a 20 64 65 62 75 67 67 69 6e 67 20 62  n.** debugging b
8bd0: 75 69 6c 64 73 2e 20 20 54 68 69 73 20 70 72 6f  uilds.  This pro
8be0: 76 69 64 65 73 20 61 20 77 61 79 20 74 6f 20 73  vides a way to s
8bf0: 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e 74 20  et a breakpoint 
8c00: 66 6f 72 20 77 68 65 6e 0a 2a 2a 20 63 6f 72 72  for when.** corr
8c10: 75 70 74 69 6f 6e 20 69 73 20 66 69 72 73 74 20  uption is first 
8c20: 64 65 74 65 63 74 65 64 2e 0a 2a 2f 0a 69 6e 74  detected..*/.int
8c30: 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 28   sqlite3Corrupt(
8c40: 76 6f 69 64 29 7b 0a 20 20 72 65 74 75 72 6e 20  void){.  return 
8c50: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3b 0a  SQLITE_CORRUPT;.
8c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
8c70: 54 68 69 73 20 69 73 20 61 20 63 6f 6e 76 65 6e  This is a conven
8c80: 69 65 6e 63 65 20 72 6f 75 74 69 6e 65 20 74 68  ience routine th
8c90: 61 74 20 6d 61 6b 65 73 20 73 75 72 65 20 74 68  at makes sure th
8ca0: 61 74 20 61 6c 6c 20 74 68 72 65 61 64 2d 73 70  at all thread-sp
8cb0: 65 63 69 66 69 63 0a 2a 2a 20 64 61 74 61 20 66  ecific.** data f
8cc0: 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 20 68  or this thread h
8cd0: 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61  as been dealloca
8ce0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 69 74  ted..**.** SQLit
8cf0: 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 75 73 65 73  e no longer uses
8d00: 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69 63   thread-specific
8d10: 20 64 61 74 61 20 73 6f 20 74 68 69 73 20 72 6f   data so this ro
8d20: 75 74 69 6e 65 20 69 73 20 6e 6f 77 20 61 0a 2a  utine is now a.*
8d30: 2a 20 6e 6f 2d 6f 70 2e 20 20 49 74 20 69 73 20  * no-op.  It is 
8d40: 72 65 74 61 69 6e 65 64 20 66 6f 72 20 68 69 73  retained for his
8d50: 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62  torical compatib
8d60: 69 6c 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ility..*/.void s
8d70: 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
8d80: 65 61 6e 75 70 28 76 6f 69 64 29 7b 0a 7d 0a 0a  eanup(void){.}..
8d90: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 6d 65 74  /*.** Return met
8da0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  a information ab
8db0: 6f 75 74 20 61 20 73 70 65 63 69 66 69 63 20 63  out a specific c
8dc0: 6f 6c 75 6d 6e 20 6f 66 20 61 20 64 61 74 61 62  olumn of a datab
8dd0: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 53 65  ase table..** Se
8de0: 65 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 73 71 6c  e comment in sql
8df0: 69 74 65 33 2e 68 20 28 73 71 6c 69 74 65 2e 68  ite3.h (sqlite.h
8e00: 2e 69 6e 29 20 66 6f 72 20 64 65 74 61 69 6c 73  .in) for details
8e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
8e20: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
8e30: 5f 4d 45 54 41 44 41 54 41 0a 69 6e 74 20 73 71  _METADATA.int sq
8e40: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
8e50: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 73  mn_metadata(.  s
8e60: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
8e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
8e80: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
8e90: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
8ea0: 2a 7a 44 62 4e 61 6d 65 2c 20 20 20 20 20 20 20  *zDbName,       
8eb0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 6e 61 6d   /* Database nam
8ec0: 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  e or NULL */.  c
8ed0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c  onst char *zTabl
8ee0: 65 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 54 61  eName,     /* Ta
8ef0: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 6f  ble name */.  co
8f00: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d  nst char *zColum
8f10: 6e 4e 61 6d 65 2c 20 20 20 20 2f 2a 20 43 6f 6c  nName,    /* Col
8f20: 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 68  umn name */.  ch
8f30: 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44 61 74  ar const **pzDat
8f40: 61 54 79 70 65 2c 20 20 20 20 2f 2a 20 4f 55 54  aType,    /* OUT
8f50: 50 55 54 3a 20 44 65 63 6c 61 72 65 64 20 64 61  PUT: Declared da
8f60: 74 61 20 74 79 70 65 20 2a 2f 0a 20 20 63 68 61  ta type */.  cha
8f70: 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c  r const **pzColl
8f80: 53 65 71 2c 20 20 20 20 20 2f 2a 20 4f 55 54 50  Seq,     /* OUTP
8f90: 55 54 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20 73 65  UT: Collation se
8fa0: 71 75 65 6e 63 65 20 6e 61 6d 65 20 2a 2f 0a 20  quence name */. 
8fb0: 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c 20   int *pNotNull, 
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8fd0: 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66 20  OUTPUT: True if 
8fe0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
8ff0: 69 6e 74 20 65 78 69 73 74 73 20 2a 2f 0a 20 20  int exists */.  
9000: 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65 79  int *pPrimaryKey
9010: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ,           /* O
9020: 55 54 50 55 54 3a 20 54 72 75 65 20 69 66 20 63  UTPUT: True if c
9030: 6f 6c 75 6d 6e 20 70 61 72 74 20 6f 66 20 50 4b  olumn part of PK
9040: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 41 75 74 6f   */.  int *pAuto
9050: 69 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  inc             
9060: 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72 75    /* OUTPUT: Tru
9070: 65 20 69 66 20 63 6f 6c 75 6d 73 20 69 73 20 61  e if colums is a
9080: 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  uto-increment */
9090: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
90a0: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
90b0: 30 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  0;.  Table *pTab
90c0: 20 3d 20 30 3b 0a 20 20 43 6f 6c 75 6d 6e 20 2a   = 0;.  Column *
90d0: 70 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20  pCol = 0;.  int 
90e0: 69 43 6f 6c 3b 0a 0a 20 20 63 68 61 72 20 63 6f  iCol;..  char co
90f0: 6e 73 74 20 2a 7a 44 61 74 61 54 79 70 65 20 3d  nst *zDataType =
9100: 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74   0;.  char const
9110: 20 2a 7a 43 6f 6c 6c 53 65 71 20 3d 20 30 3b 0a   *zCollSeq = 0;.
9120: 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 20 3d 20    int notnull = 
9130: 30 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72 79  0;.  int primary
9140: 6b 65 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 61  key = 0;.  int a
9150: 75 74 6f 69 6e 63 20 3d 20 30 3b 0a 0a 20 20 2f  utoinc = 0;..  /
9160: 2a 20 45 6e 73 75 72 65 20 74 68 65 20 64 61 74  * Ensure the dat
9170: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
9180: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
9190: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
91a0: 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
91b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
91c0: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72 63 20  ISUSE;.  }.  rc 
91d0: 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64 62  = sqlite3Init(db
91e0: 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69  , &zErrMsg);.  i
91f0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63  f( SQLITE_OK!=rc
9200: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72   ){.    goto err
9210: 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  or_out;.  }..  /
9220: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 74 61 62  * Locate the tab
9230: 6c 65 20 69 6e 20 71 75 65 73 74 69 6f 6e 20 2a  le in question *
9240: 2f 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74  /.  pTab = sqlit
9250: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
9260: 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e  zTableName, zDbN
9270: 61 6d 65 29 3b 0a 20 20 69 66 28 20 21 70 54 61  ame);.  if( !pTa
9280: 62 20 7c 7c 20 70 54 61 62 2d 3e 70 53 65 6c 65  b || pTab->pSele
9290: 63 74 20 29 7b 0a 20 20 20 20 70 54 61 62 20 3d  ct ){.    pTab =
92a0: 20 30 3b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72   0;.    goto err
92b0: 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  or_out;.  }..  /
92c0: 2a 20 46 69 6e 64 20 74 68 65 20 63 6f 6c 75 6d  * Find the colum
92d0: 6e 20 66 6f 72 20 77 68 69 63 68 20 69 6e 66 6f  n for which info
92e0: 20 69 73 20 72 65 71 75 65 73 74 65 64 20 2a 2f   is requested */
92f0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73  .  if( sqlite3Is
9300: 52 6f 77 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d  Rowid(zColumnNam
9310: 65 29 20 29 7b 0a 20 20 20 20 69 43 6f 6c 20 3d  e) ){.    iCol =
9320: 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20 20   pTab->iPKey;.  
9330: 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 29 7b    if( iCol>=0 ){
9340: 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26 70  .      pCol = &p
9350: 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b  Tab->aCol[iCol];
9360: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
9370: 20 20 20 20 66 6f 72 28 69 43 6f 6c 3d 30 3b 20      for(iCol=0; 
9380: 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  iCol<pTab->nCol;
9390: 20 69 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20   iCol++){.      
93a0: 70 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61 43  pCol = &pTab->aC
93b0: 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 20 20  ol[iCol];.      
93c0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
93d0: 72 49 43 6d 70 28 70 43 6f 6c 2d 3e 7a 4e 61 6d  rICmp(pCol->zNam
93e0: 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20  e, zColumnName) 
93f0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
9400: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9410: 20 20 20 20 69 66 28 20 69 43 6f 6c 3d 3d 70 54      if( iCol==pT
9420: 61 62 2d 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20 20  ab->nCol ){.    
9430: 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20    pTab = 0;.    
9440: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
9450: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
9460: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
9470: 62 6c 6f 63 6b 20 73 74 6f 72 65 73 20 74 68 65  block stores the
9480: 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f   meta informatio
9490: 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 72  n that will be r
94a0: 65 74 75 72 6e 65 64 0a 20 20 2a 2a 20 74 6f 20  eturned.  ** to 
94b0: 74 68 65 20 63 61 6c 6c 65 72 20 69 6e 20 6c 6f  the caller in lo
94c0: 63 61 6c 20 76 61 72 69 61 62 6c 65 73 20 7a 44  cal variables zD
94d0: 61 74 61 54 79 70 65 2c 20 7a 43 6f 6c 6c 53 65  ataType, zCollSe
94e0: 71 2c 20 6e 6f 74 6e 75 6c 6c 2c 20 70 72 69 6d  q, notnull, prim
94f0: 61 72 79 6b 65 79 0a 20 20 2a 2a 20 61 6e 64 20  arykey.  ** and 
9500: 61 75 74 6f 69 6e 63 2e 20 41 74 20 74 68 69 73  autoinc. At this
9510: 20 70 6f 69 6e 74 20 74 68 65 72 65 20 61 72 65   point there are
9520: 20 74 77 6f 20 70 6f 73 73 69 62 69 6c 69 74 69   two possibiliti
9530: 65 73 3a 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 20  es:.  ** .  **  
9540: 20 20 20 31 2e 20 54 68 65 20 73 70 65 63 69 66     1. The specif
9550: 69 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ied column name 
9560: 77 61 73 20 72 6f 77 69 64 22 2c 20 22 6f 69 64  was rowid", "oid
9570: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 0a  " or "_rowid_" .
9580: 20 20 2a 2a 20 20 20 20 20 20 20 20 61 6e 64 20    **        and 
9590: 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70 6c  there is no expl
95a0: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
95b0: 49 50 4b 20 63 6f 6c 75 6d 6e 2e 20 0a 20 20 2a  IPK column. .  *
95c0: 2a 0a 20 20 2a 2a 20 20 20 20 20 32 2e 20 54 68  *.  **     2. Th
95d0: 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61  e table is not a
95e0: 20 76 69 65 77 20 61 6e 64 20 74 68 65 20 63 6f   view and the co
95f0: 6c 75 6d 6e 20 6e 61 6d 65 20 69 64 65 6e 74 69  lumn name identi
9600: 66 69 65 64 20 61 6e 20 0a 20 20 2a 2a 20 20 20  fied an .  **   
9610: 20 20 20 20 20 65 78 70 6c 69 63 69 74 6c 79 20       explicitly 
9620: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 2e  declared column.
9630: 20 43 6f 70 79 20 6d 65 74 61 20 69 6e 66 6f 72   Copy meta infor
9640: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 2a 70 43 6f  mation from *pCo
9650: 6c 2e 0a 20 20 2a 2f 20 0a 20 20 69 66 28 20 70  l..  */ .  if( p
9660: 43 6f 6c 20 29 7b 0a 20 20 20 20 7a 44 61 74 61  Col ){.    zData
9670: 54 79 70 65 20 3d 20 70 43 6f 6c 2d 3e 7a 54 79  Type = pCol->zTy
9680: 70 65 3b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71  pe;.    zCollSeq
9690: 20 3d 20 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b 0a   = pCol->zColl;.
96a0: 20 20 20 20 6e 6f 74 6e 75 6c 6c 20 3d 20 28 70      notnull = (p
96b0: 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a 30  Col->notNull?1:0
96c0: 29 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65  );.    primaryke
96d0: 79 20 20 3d 20 28 70 43 6f 6c 2d 3e 69 73 50 72  y  = (pCol->isPr
96e0: 69 6d 4b 65 79 3f 31 3a 30 29 3b 0a 20 20 20 20  imKey?1:0);.    
96f0: 61 75 74 6f 69 6e 63 20 3d 20 28 28 70 54 61 62  autoinc = ((pTab
9700: 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20 26 26  ->iPKey==iCol &&
9710: 20 70 54 61 62 2d 3e 61 75 74 6f 49 6e 63 29 3f   pTab->autoInc)?
9720: 31 3a 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  1:0);.  }else{. 
9730: 20 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20 22     zDataType = "
9740: 49 4e 54 45 47 45 52 22 3b 0a 20 20 20 20 70 72  INTEGER";.    pr
9750: 69 6d 61 72 79 6b 65 79 20 3d 20 31 3b 0a 20 20  imarykey = 1;.  
9760: 7d 0a 20 20 69 66 28 20 21 7a 43 6f 6c 6c 53 65  }.  if( !zCollSe
9770: 71 20 29 7b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65  q ){.    zCollSe
9780: 71 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a 20 20  q = "BINARY";.  
9790: 7d 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  }..error_out:.  
97a0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
97b0: 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20  yOff(db) ){.    
97c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55  rc = SQLITE_MISU
97d0: 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 57 68  SE;.  }..  /* Wh
97e0: 65 74 68 65 72 20 74 68 65 20 66 75 6e 63 74 69  ether the functi
97f0: 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65 64 65  on call succeede
9800: 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73 65 74  d or failed, set
9810: 20 74 68 65 20 6f 75 74 70 75 74 20 70 61 72 61   the output para
9820: 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f 20 77  meters.  ** to w
9830: 68 61 74 65 76 65 72 20 74 68 65 69 72 20 6c 6f  hatever their lo
9840: 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72 74 73  cal counterparts
9850: 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61 6e 20   contain. If an 
9860: 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75 72 2c  error did occur,
9870: 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73 20 74  .  ** this has t
9880: 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a 65 72  he effect of zer
9890: 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75 74 20  oing all output 
98a0: 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20 2a 2f  parameters..  */
98b0: 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54 79 70  .  if( pzDataTyp
98c0: 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70 65 20  e ) *pzDataType 
98d0: 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20 20 69  = zDataType;.  i
98e0: 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29 20 2a  f( pzCollSeq ) *
98f0: 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f 6c  pzCollSeq = zCol
9900: 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e 6f 74  lSeq;.  if( pNot
9910: 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c 6c  Null ) *pNotNull
9920: 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 66   = notnull;.  if
9930: 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20 29 20  ( pPrimaryKey ) 
9940: 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d 20 70  *pPrimaryKey = p
9950: 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 66 28  rimarykey;.  if(
9960: 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70 41 75   pAutoinc ) *pAu
9970: 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e 63 3b  toinc = autoinc;
9980: 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ..  if( SQLITE_O
9990: 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62 20 29  K==rc && !pTab )
99a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
99b0: 53 74 72 69 6e 67 28 26 7a 45 72 72 4d 73 67 2c  String(&zErrMsg,
99c0: 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 20   "no such table 
99d0: 63 6f 6c 75 6d 6e 3a 20 22 2c 20 7a 54 61 62 6c  column: ", zTabl
99e0: 65 4e 61 6d 65 2c 20 22 2e 22 2c 20 0a 20 20 20  eName, ".", .   
99f0: 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65       zColumnName
9a00: 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  , 0);.    rc = S
9a10: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
9a20: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
9a30: 64 62 2c 20 72 63 2c 20 28 7a 45 72 72 4d 73 67  db, rc, (zErrMsg
9a40: 3f 22 25 73 22 3a 30 29 2c 20 7a 45 72 72 4d 73  ?"%s":0), zErrMs
9a50: 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  g);.  sqlite3_fr
9a60: 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72  ee(zErrMsg);.  r
9a70: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69  eturn sqlite3Api
9a80: 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a  Exit(db, rc);.}.
9a90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 65  #endif../*.** Se
9aa0: 74 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65  t all the parame
9ab0: 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 70  ters in the comp
9ac0: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
9ad0: 6e 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69  nt to NULL..*/.i
9ae0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  nt sqlite3_clear
9af0: 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  _bindings(sqlite
9b00: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
9b10: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72    int i;.  int r
9b20: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
9b30: 20 66 6f 72 28 69 3d 31 3b 20 72 63 3d 3d 53 51   for(i=1; rc==SQ
9b40: 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 3d 73 71  LITE_OK && i<=sq
9b50: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
9b60: 65 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74  eter_count(pStmt
9b70: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 63 20  ); i++){.    rc 
9b80: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
9b90: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20  ull(pStmt, i);. 
9ba0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
9bb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6c 65 65 70 20 66  }../*.** Sleep f
9bc0: 6f 72 20 61 20 6c 69 74 74 6c 65 20 77 68 69 6c  or a little whil
9bd0: 65 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 61  e.  Return the a
9be0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 73 6c  mount of time sl
9bf0: 65 70 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ept..*/.int sqli
9c00: 74 65 33 5f 73 6c 65 65 70 28 69 6e 74 20 6d 73  te3_sleep(int ms
9c10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  ){.  sqlite3_vfs
9c20: 20 2a 70 56 66 73 3b 0a 20 20 70 56 66 73 20 3d   *pVfs;.  pVfs =
9c30: 20 73 71 6c 69 74 65 33 5f 66 69 6e 64 5f 76 66   sqlite3_find_vf
9c40: 73 28 30 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  s(0);..  /* This
9c50: 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20   function works 
9c60: 69 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2c  in milliseconds,
9c70: 20 62 75 74 20 74 68 65 20 75 6e 64 65 72 6c 79   but the underly
9c80: 69 6e 67 20 4f 73 53 6c 65 65 70 28 29 20 0a 20  ing OsSleep() . 
9c90: 20 2a 2a 20 41 50 49 20 75 73 65 73 20 6d 69 63   ** API uses mic
9ca0: 72 6f 73 65 63 6f 6e 64 73 2e 20 48 65 6e 63 65  roseconds. Hence
9cb0: 20 74 68 65 20 31 30 30 30 27 73 2e 0a 20 20 2a   the 1000's..  *
9cc0: 2f 0a 20 20 72 65 74 75 72 6e 20 28 73 71 6c 69  /.  return (sqli
9cd0: 74 65 33 4f 73 53 6c 65 65 70 28 70 56 66 73 2c  te3OsSleep(pVfs,
9ce0: 20 31 30 30 30 2a 6d 73 29 2f 31 30 30 30 29 3b   1000*ms)/1000);
9cf0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65  .}../*.** Enable
9d00: 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20   or disable the 
9d10: 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  extended result 
9d20: 63 6f 64 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  codes..*/.int sq
9d30: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
9d40: 65 73 75 6c 74 5f 63 6f 64 65 73 28 73 71 6c 69  esult_codes(sqli
9d50: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6f 6e 6f  te3 *db, int ono
9d60: 66 66 29 7b 0a 20 20 64 62 2d 3e 65 72 72 4d 61  ff){.  db->errMa
9d70: 73 6b 20 3d 20 6f 6e 6f 66 66 20 3f 20 30 78 66  sk = onoff ? 0xf
9d80: 66 66 66 66 66 66 66 20 3a 20 30 78 66 66 3b 0a  fffffff : 0xff;.
9d90: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9da0: 4f 4b 3b 0a 7d 0a                                OK;.}.