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

Artifact 47c6d4918394cf86e38502527ca652ac0602fac1:


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 31 20 32 30 30 37 2f 30 38  ,v 1.381 2007/08
0280: 2f 31 36 20 31 30 3a 30 39 3a 30 33 20 64 61 6e  /16 10:09:03 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 69 6e 74 20 74 69 6d  s[0])).  int tim
2630: 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33  eout = ((sqlite3
2640: 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d   *)ptr)->busyTim
2650: 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61  eout;.  int dela
2660: 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73  y, prior;..  ass
2670: 65 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b  ert( count>=0 );
2680: 0a 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e  .  if( count < N
2690: 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c  DELAY ){.    del
26a0: 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e  ay = delays[coun
26b0: 74 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20  t];.    prior = 
26c0: 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20  totals[count];. 
26d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61   }else{.    dela
26e0: 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41  y = delays[NDELA
26f0: 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  Y-1];.    prior 
2700: 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d  = totals[NDELAY-
2710: 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e  1] + delay*(coun
2720: 74 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20  t-(NDELAY-1));. 
2730: 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b   }.  if( prior +
2740: 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74   delay > timeout
2750: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
2760: 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b  timeout - prior;
2770: 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d  .    if( delay<=
2780: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
2790: 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65  }.  sqlite3OsSle
27a0: 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74  ep(delay);.  ret
27b0: 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69  urn 1;.#else.  i
27c0: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73  nt timeout = ((s
27d0: 71 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62  qlite3 *)ptr)->b
27e0: 75 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66  usyTimeout;.  if
27f0: 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30  ( (count+1)*1000
2800: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
2810: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
2820: 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70    sqlite3OsSleep
2830: 28 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e  (1000);.  return
2840: 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a   1;.#endif.}../*
2850: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 67  .** Invoke the g
2860: 69 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c 65  iven busy handle
2870: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  r..**.** This ro
2880: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20  utine is called 
2890: 77 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f  when an operatio
28a0: 6e 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 20  n failed with a 
28b0: 6c 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73  lock..** If this
28c0: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
28d0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c   non-zero, the l
28e0: 6f 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e 20  ock is retried. 
28f0: 20 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e   If it.** return
2900: 73 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74 69  s 0, the operati
2910: 6f 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20 61  on aborts with a
2920: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  n SQLITE_BUSY er
2930: 72 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ror..*/.int sqli
2940: 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2950: 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2960: 20 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a   *p){.  int rc;.
2970: 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d    if( p==0 || p-
2980: 3e 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e  >xFunc==0 || p->
2990: 6e 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e  nBusy<0 ) return
29a0: 20 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46   0;.  rc = p->xF
29b0: 75 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e  unc(p->pArg, p->
29c0: 6e 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63  nBusy);.  if( rc
29d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42  ==0 ){.    p->nB
29e0: 75 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73  usy = -1;.  }els
29f0: 65 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b  e{.    p->nBusy+
2a00: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  +;.  }.  return 
2a10: 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  rc; .}../*.** Th
2a20: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
2a30: 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  the busy callbac
2a40: 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20  k for an Sqlite 
2a50: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a  database to the.
2a60: 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63  ** given callbac
2a70: 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  k function with 
2a80: 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65  the given argume
2a90: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2aa0: 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28  e3_busy_handler(
2ab0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
2ac0: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76    int (*xBusy)(v
2ad0: 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69  oid*,int),.  voi
2ae0: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28  d *pArg.){.  if(
2af0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2b00: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
2b10: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
2b20: 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62  USE;.  }.  db->b
2b30: 75 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63  usyHandler.xFunc
2b40: 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e   = xBusy;.  db->
2b50: 62 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67  busyHandler.pArg
2b60: 20 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62   = pArg;.  db->b
2b70: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
2b80: 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 53   = 0;.  return S
2b90: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66  QLITE_OK;.}..#if
2ba0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bb0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
2bc0: 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  CK./*.** This ro
2bd0: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
2be0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
2bf0: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
2c00: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
2c10: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
2c20: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
2c30: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
2c40: 74 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  t. The progress 
2c50: 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a  callback will.**
2c60: 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72   be invoked ever
2c70: 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a  y nOps opcodes..
2c80: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
2c90: 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
2ca0: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
2cb0: 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20   .  int nOps,.  
2cc0: 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29  int (*xProgress)
2cd0: 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64  (void*), .  void
2ce0: 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20   *pArg.){.  if( 
2cf0: 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68  !sqlite3SafetyCh
2d00: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69  eck(db) ){.    i
2d10: 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20  f( nOps>0 ){.   
2d20: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
2d30: 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20   = xProgress;.  
2d40: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
2d50: 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20  sOps = nOps;.   
2d60: 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73     db->pProgress
2d70: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20  Arg = pArg;.    
2d80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
2d90: 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a  >xProgress = 0;.
2da0: 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72        db->nProgr
2db0: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
2dc0: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
2dd0: 72 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  rg = 0;.    }.  
2de0: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  }.}.#endif.../*.
2df0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
2e00: 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75  installs a defau
2e10: 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  lt busy handler 
2e20: 74 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74  that waits for t
2e30: 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20  he.** specified 
2e40: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
2e50: 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65  econds before re
2e60: 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e  turning 0..*/.in
2e70: 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  t sqlite3_busy_t
2e80: 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a  imeout(sqlite3 *
2e90: 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69  db, int ms){.  i
2ea0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2eb0: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
2ec0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
2ed0: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28  ISUSE;.  }.  if(
2ee0: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d   ms>0 ){.    db-
2ef0: 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 6d  >busyTimeout = m
2f00: 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  s;.    sqlite3_b
2f10: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
2f20: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
2f30: 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64  yCallback, (void
2f40: 2a 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  *)db);.  }else{.
2f50: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
2f60: 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20  _handler(db, 0, 
2f70: 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
2f80: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
2f90: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
2fa0: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
2fb0: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
2fc0: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
2fd0: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
2fe0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
2ff0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
3000: 69 66 28 20 64 62 20 26 26 20 28 64 62 2d 3e 6d  if( db && (db->m
3010: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
3020: 49 43 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d  IC_OPEN || db->m
3030: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
3040: 49 43 5f 42 55 53 59 29 20 29 7b 0a 20 20 20 20  IC_BUSY) ){.    
3050: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
3060: 70 74 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 7d 0a  pted = 1;.  }.}.
3070: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
3080: 63 74 69 6f 6e 20 69 73 20 65 78 61 63 74 6c 79  ction is exactly
3090: 20 74 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c   the same as sql
30a0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
30b0: 74 69 6f 6e 28 29 2c 20 65 78 63 65 70 74 0a 2a  tion(), except.*
30c0: 2a 20 74 68 61 74 20 69 74 20 69 73 20 64 65 73  * that it is des
30d0: 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c 6c  igned to be call
30e0: 65 64 20 62 79 20 69 6e 74 65 72 6e 61 6c 20 63  ed by internal c
30f0: 6f 64 65 2e 20 54 68 65 20 64 69 66 66 65 72 65  ode. The differe
3100: 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61 74 20 69  nce is.** that i
3110: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
3120: 6c 73 20 69 6e 20 73 71 6c 69 74 65 33 5f 63 72  ls in sqlite3_cr
3130: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 2c  eate_function(),
3140: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 0a 2a   an error code.*
3150: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e  * is returned an
3160: 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c  d the mallocFail
3170: 65 64 20 66 6c 61 67 20 63 6c 65 61 72 65 64 2e  ed flag cleared.
3180: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
3190: 43 72 65 61 74 65 46 75 6e 63 28 0a 20 20 73 71  CreateFunc(.  sq
31a0: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e  lite3 *db,.  con
31b0: 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69  st char *zFuncti
31c0: 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41  onName,.  int nA
31d0: 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20  rg,.  int enc,. 
31e0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
31f0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  ,.  void (*xFunc
3200: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3210: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
3220: 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
3230: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
3240: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
3250: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
3260: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  ,.  void (*xFina
3270: 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  l)(sqlite3_conte
3280: 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65  xt*).){.  FuncDe
3290: 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d  f *p;.  int nNam
32a0: 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e;..  if( sqlite
32b0: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
32c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
32d0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
32e0: 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69 6f  }.  if( zFunctio
32f0: 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20  nName==0 ||.    
3300: 20 20 28 78 46 75 6e 63 20 26 26 20 28 78 46 69    (xFunc && (xFi
3310: 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29 20 7c  nal || xStep)) |
3320: 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63  | .      (!xFunc
3330: 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26 20 21   && (xFinal && !
3340: 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20  xStep)) ||.     
3350: 20 28 21 78 46 75 6e 63 20 26 26 20 28 21 78 46   (!xFunc && (!xF
3360: 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29 29 20  inal && xStep)) 
3370: 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67 3c 2d  ||.      (nArg<-
3380: 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c  1 || nArg>127) |
3390: 7c 0a 20 20 20 20 20 20 28 32 35 35 3c 28 6e 4e  |.      (255<(nN
33a0: 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75  ame = strlen(zFu
33b0: 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b  nctionName))) ){
33c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
33d0: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52  r(db, SQLITE_ERR
33e0: 4f 52 2c 20 22 62 61 64 20 70 61 72 61 6d 65 74  OR, "bad paramet
33f0: 65 72 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ers");.    retur
3400: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
3410: 20 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66 20 53    }.  .#ifndef S
3420: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
3430: 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f  .  /* If SQLITE_
3440: 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69  UTF16 is specifi
3450: 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69  ed as the encodi
3460: 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f  ng type, transfo
3470: 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20  rm this.  ** to 
3480: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54  one of SQLITE_UT
3490: 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f  F16LE or SQLITE_
34a0: 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68  UTF16BE using th
34b0: 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54  e.  ** SQLITE_UT
34c0: 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e  F16NATIVE macro.
34d0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73   SQLITE_UTF16 is
34e0: 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e   not used intern
34f0: 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ally..  **.  ** 
3500: 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69 73  If SQLITE_ANY is
3510: 20 73 70 65 63 69 66 69 65 64 2c 20 61 64 64 20   specified, add 
3520: 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f  three versions o
3530: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20  f the function. 
3540: 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68 20   ** to the hash 
3550: 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  table..  */.  if
3560: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ( enc==SQLITE_UT
3570: 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d  F16 ){.    enc =
3580: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3590: 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  IVE;.  }else if(
35a0: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59   enc==SQLITE_ANY
35b0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a   ){.    int rc;.
35c0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
35d0: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
35e0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
35f0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
3600: 0a 20 20 20 20 20 20 20 20 20 70 55 73 65 72 44  .         pUserD
3610: 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  ata, xFunc, xSte
3620: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20  p, xFinal);.    
3630: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
3640: 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  K ) return rc;. 
3650: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43     rc = sqlite3C
3660: 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46  reateFunc(db, zF
3670: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
3680: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  g, SQLITE_UTF16L
3690: 45 2c 0a 20 20 20 20 20 20 20 20 70 55 73 65 72  E,.        pUser
36a0: 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74  Data, xFunc, xSt
36b0: 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20  ep, xFinal);.   
36c0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
36d0: 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a  OK ) return rc;.
36e0: 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45      enc = SQLITE
36f0: 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65  _UTF16BE;.  }.#e
3700: 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49  lse.  enc = SQLI
3710: 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a  TE_UTF8;.#endif.
3720: 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66    .  /* Check if
3730: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75 6e   an existing fun
3740: 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f  ction is being o
3750: 76 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65 6c  verridden or del
3760: 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a  eted. If so,.  *
3770: 2a 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20  * and there are 
3780: 61 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65 6e  active VMs, then
3790: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
37a0: 55 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74 69  USY. If a functi
37b0: 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67  on.  ** is being
37c0: 20 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c 65   overridden/dele
37d0: 74 65 64 20 62 75 74 20 74 68 65 72 65 20 61 72  ted but there ar
37e0: 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c  e no active VMs,
37f0: 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20   allow the.  ** 
3800: 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e  operation to con
3810: 74 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c 69  tinue but invali
3820: 64 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70  date all precomp
3830: 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  iled statements.
3840: 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69  .  */.  p = sqli
3850: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
3860: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
3870: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
3880: 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  enc, 0);.  if( p
3890: 20 26 26 20 70 2d 3e 69 50 72 65 66 45 6e 63 3d   && p->iPrefEnc=
38a0: 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41 72 67 3d  =enc && p->nArg=
38b0: 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20 69 66 28  =nArg ){.    if(
38c0: 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
38d0: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
38e0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
38f0: 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20  ITE_BUSY, .     
3900: 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65     "Unable to de
3910: 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75 73 65 72  lete/modify user
3920: 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65 20 74 6f  -function due to
3930: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
3940: 74 73 22 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ts");.      asse
3950: 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
3960: 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
3970: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
3980: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
3990: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
39a0: 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
39b0: 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  nts(db);.    }. 
39c0: 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   }..  p = sqlite
39d0: 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62  3FindFunction(db
39e0: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
39f0: 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e   nName, nArg, en
3a00: 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 20 29  c, 1);.  if( p )
3a10: 7b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73 20 3d  {.    p->flags =
3a20: 20 30 3b 0a 20 20 20 20 70 2d 3e 78 46 75 6e 63   0;.    p->xFunc
3a30: 20 3d 20 78 46 75 6e 63 3b 0a 20 20 20 20 70 2d   = xFunc;.    p-
3a40: 3e 78 53 74 65 70 20 3d 20 78 53 74 65 70 3b 0a  >xStep = xStep;.
3a50: 20 20 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65      p->xFinalize
3a60: 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 20 20 70   = xFinal;.    p
3a70: 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55  ->pUserData = pU
3a80: 73 65 72 44 61 74 61 3b 0a 20 20 20 20 70 2d 3e  serData;.    p->
3a90: 6e 41 72 67 20 3d 20 6e 41 72 67 3b 0a 20 20 7d  nArg = nArg;.  }
3aa0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
3ab0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  _OK;.}../*.** Cr
3ac0: 65 61 74 65 20 6e 65 77 20 75 73 65 72 20 66 75  eate new user fu
3ad0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20  nctions..*/.int 
3ae0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3af0: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
3b00: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
3b10: 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e  char *zFunctionN
3b20: 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c  ame,.  int nArg,
3b30: 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f  .  int enc,.  vo
3b40: 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a  id *p,.  void (*
3b50: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
3b60: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
3b70: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
3b80: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
3b90: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
3ba0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
3bb0: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
3bc0: 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f  xFinal)(sqlite3_
3bd0: 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69  context*).){.  i
3be0: 6e 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28  nt rc;.  assert(
3bf0: 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
3c00: 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ed );.  rc = sql
3c10: 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64  ite3CreateFunc(d
3c20: 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  b, zFunctionName
3c30: 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 70 2c 20  , nArg, enc, p, 
3c40: 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  xFunc, xStep, xF
3c50: 69 6e 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e  inal);..  return
3c60: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
3c70: 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e  db, rc);.}..#ifn
3c80: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3c90: 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
3ca0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3cb0: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  n16(.  sqlite3 *
3cc0: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  db,.  const void
3cd0: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3ce0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
3cf0: 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76  nt eTextRep,.  v
3d00: 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28  oid *p,.  void (
3d10: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
3d20: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
3d30: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20  ite3_value**),. 
3d40: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
3d50: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
3d60: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
3d70: 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78  e**),.  void (*x
3d80: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
3d90: 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e  ontext*).){.  in
3da0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46  t rc;.  char *zF
3db0: 75 6e 63 38 3b 0a 20 20 61 73 73 65 72 74 28 20  unc8;.  assert( 
3dc0: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
3dd0: 64 20 29 3b 0a 0a 20 20 7a 46 75 6e 63 38 20 3d  d );..  zFunc8 =
3de0: 20 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38   sqlite3Utf16to8
3df0: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
3e00: 6d 65 2c 20 2d 31 29 3b 0a 20 20 72 63 20 3d 20  me, -1);.  rc = 
3e10: 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
3e20: 63 28 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41  c(db, zFunc8, nA
3e30: 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c  rg, eTextRep, p,
3e40: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
3e50: 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Final);.  sqlite
3e60: 33 5f 66 72 65 65 28 7a 46 75 6e 63 38 29 3b 0a  3_free(zFunc8);.
3e70: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
3e80: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
3e90: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ;.}.#endif.../*.
3ea0: 2a 2a 20 44 65 63 6c 61 72 65 20 74 68 61 74 20  ** Declare that 
3eb0: 61 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62  a function has b
3ec0: 65 65 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62  een overloaded b
3ed0: 79 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  y a virtual tabl
3ee0: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
3ef0: 66 75 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79  function already
3f00: 20 65 78 69 73 74 73 20 61 73 20 61 20 72 65 67   exists as a reg
3f10: 75 6c 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63  ular global func
3f20: 74 69 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  tion, then.** th
3f30: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
3f40: 6e 6f 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66  no-op.  If the f
3f50: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
3f60: 20 65 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65   exist, then cre
3f70: 61 74 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65  ate.** a new one
3f80: 20 74 68 61 74 20 61 6c 77 61 79 73 20 74 68 72   that always thr
3f90: 6f 77 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65  ows a run-time e
3fa0: 72 72 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68  rror.  .**.** Wh
3fb0: 65 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  en virtual table
3fc0: 73 20 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76  s intend to prov
3fd0: 69 64 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65  ide an overloade
3fe0: 64 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79  d function, they
3ff0: 0a 2a 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20  .** should call 
4000: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20  this routine to 
4010: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c  make sure the gl
4020: 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78  obal function ex
4030: 69 73 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61  ists..** A globa
4040: 6c 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20  l function must 
4050: 65 78 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66  exist in order f
4060: 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
4070: 6f 6e 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72  on to work.** pr
4080: 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73  operly..*/.int s
4090: 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f  qlite3_overload_
40a0: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  function(.  sqli
40b0: 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74  te3 *db,.  const
40c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20   char *zName,.  
40d0: 69 6e 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e  int nArg.){.  in
40e0: 74 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e  t nName = strlen
40f0: 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 73  (zName);.  if( s
4100: 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
4110: 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e  on(db, zName, nN
4120: 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54  ame, nArg, SQLIT
4130: 45 5f 55 54 46 38 2c 20 30 29 3d 3d 30 20 29 7b  E_UTF8, 0)==0 ){
4140: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 72 65 61  .    sqlite3Crea
4150: 74 65 46 75 6e 63 28 64 62 2c 20 7a 4e 61 6d 65  teFunc(db, zName
4160: 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55  , nArg, SQLITE_U
4170: 54 46 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  TF8,.           
4180: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 73 71             0, sq
4190: 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
41a0: 74 69 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  tion, 0, 0);.  }
41b0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
41c0: 33 41 70 69 45 78 69 74 28 64 62 2c 20 53 51 4c  3ApiExit(db, SQL
41d0: 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e  ITE_OK);.}..#ifn
41e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
41f0: 54 52 41 43 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69  TRACE./*.** Regi
4200: 73 74 65 72 20 61 20 74 72 61 63 65 20 66 75 6e  ster a trace fun
4210: 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67  ction.  The pArg
4220: 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f   from the previo
4230: 75 73 6c 79 20 72 65 67 69 73 74 65 72 65 64 20  usly registered 
4240: 74 72 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75  trace.** is retu
4250: 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20  rned.  .**.** A 
4260: 4e 55 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74  NULL trace funct
4270: 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  ion means that n
4280: 6f 20 74 72 61 63 69 6e 67 20 69 73 20 65 78 65  o tracing is exe
4290: 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55  cutes.  A non-NU
42a0: 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61  LL.** trace is a
42b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75   pointer to a fu
42c0: 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69  nction that is i
42d0: 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74  nvoked at the st
42e0: 61 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 53  art of each.** S
42f0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  QL statement..*/
4300: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74  .void *sqlite3_t
4310: 72 61 63 65 28 73 71 6c 69 74 65 33 20 2a 64 62  race(sqlite3 *db
4320: 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29  , void (*xTrace)
4330: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
4340: 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29  r*), void *pArg)
4350: 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d  {.  void *pOld =
4360: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a   db->pTraceArg;.
4370: 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78    db->xTrace = x
4380: 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72  Trace;.  db->pTr
4390: 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  aceArg = pArg;. 
43a0: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
43b0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
43c0: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
43d0: 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f  n.  The pArg fro
43e0: 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  m the previously
43f0: 20 72 65 67 69 73 74 65 72 65 64 20 0a 2a 2a 20   registered .** 
4400: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
4410: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a   is returned.  .
4420: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 70 72 6f  **.** A NULL pro
4430: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65  file function me
4440: 61 6e 73 20 74 68 61 74 20 6e 6f 20 70 72 6f 66  ans that no prof
4450: 69 6c 69 6e 67 20 69 73 20 65 78 65 63 75 74 65  iling is execute
4460: 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a  s.  A non-NULL.*
4470: 2a 20 70 72 6f 66 69 6c 65 20 69 73 20 61 20 70  * profile is a p
4480: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
4490: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
44a0: 6f 6b 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63  oked at the conc
44b0: 6c 75 73 69 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63  lusion of.** eac
44c0: 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
44d0: 74 68 61 74 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a  that is run..*/.
44e0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 70 72  void *sqlite3_pr
44f0: 6f 66 69 6c 65 28 0a 20 20 73 71 6c 69 74 65 33  ofile(.  sqlite3
4500: 20 2a 64 62 2c 0a 20 20 76 6f 69 64 20 28 2a 78   *db,.  void (*x
4510: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
4520: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
4530: 65 5f 75 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69  e_uint64),.  voi
4540: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 76 6f 69  d *pArg.){.  voi
4550: 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50  d *pOld = db->pP
4560: 72 6f 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d  rofileArg;.  db-
4570: 3e 78 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f  >xProfile = xPro
4580: 66 69 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f  file;.  db->pPro
4590: 66 69 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a  fileArg = pArg;.
45a0: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
45b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
45c0: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
45d0: 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54  ./*** EXPERIMENT
45e0: 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  AL ***.**.** Reg
45f0: 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e  ister a function
4600: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77   to be invoked w
4610: 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hen a transactio
4620: 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49  n comments..** I
4630: 66 20 74 68 65 20 69 6e 76 6f 6b 65 64 20 66 75  f the invoked fu
4640: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e  nction returns n
4650: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
4660: 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73  e commit becomes
4670: 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a   a.** rollback..
4680: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
4690: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20  _commit_hook(.  
46a0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
46b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74            /* Att
46c0: 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20  ach the hook to 
46d0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
46e0: 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61  .  int (*xCallba
46f0: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20  ck)(void*),  /* 
4700: 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  Function to invo
4710: 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69  ke on each commi
4720: 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  t */.  void *pAr
4730: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
4740: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
4750: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
4760: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
4770: 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67  = db->pCommitArg
4780: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43  ;.  db->xCommitC
4790: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
47a0: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d  ack;.  db->pComm
47b0: 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  itArg = pArg;.  
47c0: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a  return pOld;.}..
47d0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
47e0: 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20   callback to be 
47f0: 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d  invoked each tim
4800: 65 20 61 20 72 6f 77 20 69 73 20 75 70 64 61 74  e a row is updat
4810: 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  ed,.** inserted 
4820: 6f 72 20 64 65 6c 65 74 65 64 20 75 73 69 6e 67  or deleted using
4830: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
4840: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f  onnection..*/.vo
4850: 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 70 64 61  id *sqlite3_upda
4860: 74 65 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  te_hook(.  sqlit
4870: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
4880: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
4890: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
48a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f  database */.  vo
48b0: 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  id (*xCallback)(
48c0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 20 63  void*,int,char c
48d0: 6f 6e 73 74 20 2a 2c 63 68 61 72 20 63 6f 6e 73  onst *,char cons
48e0: 74 20 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  t *,sqlite_int64
48f0: 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20  ),.  void *pArg 
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4910: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
4920: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  e function */.){
4930: 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20  .  void *pRet = 
4940: 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 3b 0a  db->pUpdateArg;.
4950: 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
4960: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
4970: 6b 3b 0a 20 20 64 62 2d 3e 70 55 70 64 61 74 65  k;.  db->pUpdate
4980: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
4990: 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a  turn pRet;.}../*
49a0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63  .** Register a c
49b0: 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e  allback to be in
49c0: 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20  voked each time 
49d0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
49e0: 20 72 6f 6c 6c 65 64 0a 2a 2a 20 62 61 63 6b 20   rolled.** back 
49f0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
4a00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
4a10: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 6f  void *sqlite3_ro
4a20: 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73  llback_hook(.  s
4a30: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
4a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61           /* Atta
4a50: 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74  ch the hook to t
4a60: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
4a70: 20 20 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61    void (*xCallba
4a80: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 2f 2a 20 43  ck)(void*), /* C
4a90: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
4aa0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
4ad0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29  he function */.)
4ae0: 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d  {.  void *pRet =
4af0: 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72   db->pRollbackAr
4b00: 67 3b 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61  g;.  db->xRollba
4b10: 63 6b 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  ckCallback = xCa
4b20: 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52  llback;.  db->pR
4b30: 6f 6c 6c 62 61 63 6b 41 72 67 20 3d 20 70 41 72  ollbackArg = pAr
4b40: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74  g;.  return pRet
4b50: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
4b60: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
4b70: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f  d to create a co
4b80: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61  nnection to a da
4b90: 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20  tabase BTree.** 
4ba0: 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c  driver.  If zFil
4bb0: 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  ename is the nam
4bc0: 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65  e of a file, the
4bd0: 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a  n that file is.*
4be0: 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65  * opened and use
4bf0: 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  d.  If zFilename
4c00: 20 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61   is the magic na
4c10: 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68  me ":memory:" th
4c20: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  en.** the databa
4c30: 73 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  se is stored in 
4c40: 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74  memory (and is t
4c50: 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73  hus forgotten as
4c60: 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20   soon as.** the 
4c70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
4c80: 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65  osed.)  If zFile
4c90: 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65  name is NULL the
4ca0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
4cb0: 2a 20 69 73 20 61 20 22 76 69 72 74 75 61 6c 22  * is a "virtual"
4cc0: 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 74 72   database for tr
4cd0: 61 6e 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79  ansient use only
4ce0: 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20   and is deleted 
4cf0: 61 73 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68  as.** soon as th
4d00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
4d10: 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
4d20: 76 69 72 74 75 61 6c 20 64 61 74 61 62 61 73 65  virtual database
4d30: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
4d40: 20 64 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74   disk file (that
4d50: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
4d60: 79 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65  y.** deleted whe
4d70: 6e 20 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c  n the file is cl
4d80: 6f 73 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62  osed) or it an b
4d90: 65 20 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20  e held entirely 
4da0: 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65  in memory,.** de
4db0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76  pending on the v
4dc0: 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d  alues of the TEM
4dd0: 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d  P_STORE compile-
4de0: 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74  time macro and t
4df0: 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73  he.** db->temp_s
4e00: 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61  tore variable, a
4e10: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
4e20: 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a  following chart:
4e30: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d  .**.**       TEM
4e40: 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e  P_STORE     db->
4e50: 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c  temp_store     L
4e60: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f  ocation of tempo
4e70: 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  rary database.**
4e80: 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d         ---------
4e90: 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -     ----------
4ea0: 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d  ----     -------
4eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ec0: 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20  -------.**      
4ed0: 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
4ee0: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
4ef0: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
4f00: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
4f10: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
4f20: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
4f30: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
4f40: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
4f50: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
4f60: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20  **           1  
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
4f90: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  1              f
4fc0: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
4fd0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
4fe0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
4ff0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
5000: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
5010: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
5020: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
5030: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
5040: 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20 20           any    
5050: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
5060: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  */.int sqlite3Bt
5070: 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f  reeFactory(.  co
5080: 6e 73 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  nst sqlite3 *db,
5090: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20          /* Main 
50a0: 64 61 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70  database when op
50b0: 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77  ening aux otherw
50c0: 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74  ise 0 */.  const
50d0: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
50e0: 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ,    /* Name of 
50f0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
5100: 69 6e 67 20 74 68 65 20 42 54 72 65 65 20 64 61  ing the BTree da
5110: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
5120: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20  omitJournal,    
5130: 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45        /* if TRUE
5140: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75   then do not jou
5150: 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a  rnal this file *
5160: 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20  /.  int nCache, 
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5180: 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20   How many pages 
5190: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
51a0: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70  e */.  Btree **p
51b0: 70 42 74 72 65 65 20 20 20 20 20 20 20 20 20 20  pBtree          
51c0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e   /* Pointer to n
51d0: 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20  ew Btree object 
51e0: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
51f0: 29 7b 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66  ){.  int btree_f
5200: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20  lags = 0;.  int 
5210: 72 63 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28  rc;.  .  assert(
5220: 20 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a   ppBtree != 0);.
5230: 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61    if( omitJourna
5240: 6c 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  l ){.    btree_f
5250: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d  lags |= BTREE_OM
5260: 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a  IT_JOURNAL;.  }.
5270: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
5280: 26 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c  & SQLITE_NoReadl
5290: 6f 63 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ock ){.    btree
52a0: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
52b0: 4e 4f 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d  NO_READLOCK;.  }
52c0: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
52d0: 3d 3d 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f  ==0 ){.#if TEMP_
52e0: 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20  STORE==0.    /* 
52f0: 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65  Do nothing */.#e
5300: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
5310: 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
5320: 42 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45  B.#if TEMP_STORE
5330: 3d 3d 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ==1.    if( db->
5340: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20  temp_store==2 ) 
5350: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
5360: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
5370: 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32  if TEMP_STORE==2
5380: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d  .    if( db->tem
5390: 70 5f 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69  p_store!=1 ) zFi
53a0: 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
53b0: 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  y:";.#endif.#if 
53c0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20  TEMP_STORE==3.  
53d0: 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a    zFilename = ":
53e0: 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66  memory:";.#endif
53f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
5400: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20  E_OMIT_MEMORYDB 
5410: 2a 2f 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  */.  }..  rc = s
5420: 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
5430: 7a 46 69 6c 65 6e 61 6d 65 2c 20 28 73 71 6c 69  zFilename, (sqli
5440: 74 65 33 20 2a 29 64 62 2c 20 70 70 42 74 72 65  te3 *)db, ppBtre
5450: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b  e, btree_flags);
5460: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
5470: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
5480: 74 65 33 42 74 72 65 65 53 65 74 42 75 73 79 48  te3BtreeSetBusyH
5490: 61 6e 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c  andler(*ppBtree,
54a0: 20 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73   (void*)&db->bus
54b0: 79 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73  yHandler);.    s
54c0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
54d0: 63 68 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65  cheSize(*ppBtree
54e0: 2c 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20  , nCache);.  }. 
54f0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
5500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d  *.** Return UTF-
5510: 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73  8 encoded Englis
5520: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
5530: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  nation of the mo
5540: 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72  st recent.** err
5550: 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  or..*/.const cha
5560: 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  r *sqlite3_errms
5570: 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  g(sqlite3 *db){.
5580: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
5590: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
55a0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
55b0: 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e 4f  ErrStr(SQLITE_NO
55c0: 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  MEM);.  }.  asse
55d0: 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
55e0: 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 73  ailed );.  if( s
55f0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
5600: 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72  k(db) || db->err
5610: 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53  Code==SQLITE_MIS
5620: 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72  USE ){.    retur
5630: 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  n sqlite3ErrStr(
5640: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 29 3b 0a  SQLITE_MISUSE);.
5650: 20 20 7d 0a 20 20 7a 20 3d 20 28 63 68 61 72 2a    }.  z = (char*
5660: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
5670: 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  ext(db->pErr);. 
5680: 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
5690: 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72 72 53   z = sqlite3ErrS
56a0: 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 3b  tr(db->errCode);
56b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b  .  }.  return z;
56c0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
56d0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a  TE_OMIT_UTF16./*
56e0: 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 31  .** Return UTF-1
56f0: 36 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73  6 encoded Englis
5700: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
5710: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  nation of the mo
5720: 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72  st recent.** err
5730: 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69  or..*/.const voi
5740: 64 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  d *sqlite3_errms
5750: 67 31 36 28 73 71 6c 69 74 65 33 20 2a 64 62 29  g16(sqlite3 *db)
5760: 7b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 61  {.  /* Because a
5770: 6c 6c 20 74 68 65 20 63 68 61 72 61 63 74 65 72  ll the character
5780: 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  s in the string 
5790: 61 72 65 20 69 6e 20 74 68 65 20 75 6e 69 63 6f  are in the unico
57a0: 64 65 0a 20 20 2a 2a 20 72 61 6e 67 65 20 30 78  de.  ** range 0x
57b0: 30 30 2d 30 78 46 46 2c 20 69 66 20 77 65 20 70  00-0xFF, if we p
57c0: 61 64 20 74 68 65 20 62 69 67 2d 65 6e 64 69 61  ad the big-endia
57d0: 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20 61 20  n string with a 
57e0: 0a 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c  .  ** zero byte,
57f0: 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74   we can obtain t
5800: 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e  he little-endian
5810: 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20 20 2a   string with.  *
5820: 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b 31 5d  * &big_endian[1]
5830: 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  ..  */.  static 
5840: 63 6f 6e 73 74 20 63 68 61 72 20 6f 75 74 4f 66  const char outOf
5850: 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  MemBe[] = {.    
5860: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
5870: 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20  0, 't', 0, ' ', 
5880: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
5890: 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'f', 0, ' ', .  
58a0: 20 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27 65 27    0, 'm', 0, 'e'
58b0: 2c 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27 6f 27  , 0, 'm', 0, 'o'
58c0: 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27  , 0, 'r', 0, 'y'
58d0: 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 20  , 0, 0, 0.  };. 
58e0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
58f0: 61 72 20 6d 69 73 75 73 65 42 65 20 5b 5d 20 3d  ar misuseBe [] =
5900: 20 7b 0a 20 20 20 20 30 2c 20 27 6c 27 2c 20 30   {.    0, 'l', 0
5910: 2c 20 27 69 27 2c 20 30 2c 20 27 62 27 2c 20 30  , 'i', 0, 'b', 0
5920: 2c 20 27 72 27 2c 20 30 2c 20 27 61 27 2c 20 30  , 'r', 0, 'a', 0
5930: 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30  , 'r', 0, 'y', 0
5940: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
5950: 72 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27  r', 0, 'o', 0, '
5960: 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27  u', 0, 't', 0, '
5970: 69 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27  i', 0, 'n', 0, '
5980: 65 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  e', 0, ' ', .   
5990: 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 61 27 2c   0, 'c', 0, 'a',
59a0: 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 6c 27 2c   0, 'l', 0, 'l',
59b0: 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 64 27 2c   0, 'e', 0, 'd',
59c0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
59d0: 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c   'o', 0, 'u', 0,
59e0: 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   't', 0, ' ', . 
59f0: 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66     0, 'o', 0, 'f
5a00: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
5a10: 30 2c 20 27 73 27 2c 20 30 2c 20 27 65 27 2c 20  0, 's', 0, 'e', 
5a20: 30 2c 20 27 71 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'q', 0, 'u', 
5a30: 30 2c 20 27 65 27 2c 20 30 2c 20 27 6e 27 2c 20  0, 'e', 0, 'n', 
5a40: 30 2c 20 27 63 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'c', 0, 'e', 
5a50: 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20  0, 0, 0.  };..  
5a60: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b 0a 20  const void *z;. 
5a70: 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
5a80: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
5a90: 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72  if( !db ){.    r
5aa0: 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26  eturn (void *)(&
5ab0: 6f 75 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54  outOfMemBe[SQLIT
5ac0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53  E_UTF16NATIVE==S
5ad0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a  QLITE_UTF16LE?1:
5ae0: 30 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  0]);.  }.  if( s
5af0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
5b00: 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72  k(db) || db->err
5b10: 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53  Code==SQLITE_MIS
5b20: 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72  USE ){.    retur
5b30: 6e 20 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75  n (void *)(&misu
5b40: 73 65 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31  seBe[SQLITE_UTF1
5b50: 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f  6NATIVE==SQLITE_
5b60: 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20  UTF16LE?1:0]);. 
5b70: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
5b80: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62  _value_text16(db
5b90: 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a  ->pErr);.  if( z
5ba0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
5bb0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62  e3ValueSetStr(db
5bc0: 2c 20 64 62 2d 3e 70 45 72 72 2c 20 2d 31 2c 20  , db->pErr, -1, 
5bd0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64 62  sqlite3ErrStr(db
5be0: 2d 3e 65 72 72 43 6f 64 65 29 2c 0a 20 20 20 20  ->errCode),.    
5bf0: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
5c00: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
5c10: 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  ;.    z = sqlite
5c20: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64  3_value_text16(d
5c30: 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20 20  b->pErr);.  }.  
5c40: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
5c50: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  , 0);.  return z
5c60: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
5c70: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
5c80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
5c90: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
5ca0: 20 65 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65   error code gene
5cb0: 72 61 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69  rated by an SQLi
5cc0: 74 65 20 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e  te routine. If N
5cd0: 55 4c 4c 20 69 73 0a 2a 2a 20 70 61 73 73 65 64  ULL is.** passed
5ce0: 20 74 6f 20 74 68 69 73 20 66 75 6e 63 74 69 6f   to this functio
5cf0: 6e 2c 20 77 65 20 61 73 73 75 6d 65 20 61 20 6d  n, we assume a m
5d00: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64  alloc() failed d
5d10: 75 72 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70  uring sqlite3_op
5d20: 65 6e 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  en()..*/.int sql
5d30: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c  ite3_errcode(sql
5d40: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
5d50: 20 21 64 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c   !db || db->mall
5d60: 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
5d70: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
5d80: 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  MEM;.  }.  if( s
5d90: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
5da0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
5db0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
5dc0: 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  E;.  }.  return 
5dd0: 64 62 2d 3e 65 72 72 43 6f 64 65 20 26 20 64 62  db->errCode & db
5de0: 2d 3e 65 72 72 4d 61 73 6b 3b 0a 7d 0a 0a 2f 2a  ->errMask;.}../*
5df0: 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77  .** Create a new
5e00: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
5e10: 69 6f 6e 20 66 6f 72 20 64 61 74 61 62 61 73 65  ion for database
5e20: 20 22 64 62 22 2e 20 20 54 68 65 20 6e 61 6d 65   "db".  The name
5e30: 20 69 73 20 7a 4e 61 6d 65 0a 2a 2a 20 61 6e 64   is zName.** and
5e40: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 69 73   the encoding is
5e50: 20 65 6e 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   enc..*/.static 
5e60: 69 6e 74 20 63 72 65 61 74 65 43 6f 6c 6c 61 74  int createCollat
5e70: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  ion(.  sqlite3* 
5e80: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
5e90: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
5ea0: 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70   enc, .  void* p
5eb0: 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d  Ctx,.  int(*xCom
5ec0: 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  pare)(void*,int,
5ed0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
5ee0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 2c 0a 20 20  const void*),.  
5ef0: 76 6f 69 64 28 2a 78 44 65 6c 29 28 76 6f 69 64  void(*xDel)(void
5f00: 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65 71 20  *).){.  CollSeq 
5f10: 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20 65 6e  *pColl;.  int en
5f20: 63 32 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  c2;.  .  if( sql
5f30: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
5f40: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
5f50: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
5f60: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 53 51  .  }..  /* If SQ
5f70: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70  LITE_UTF16 is sp
5f80: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65  ecified as the e
5f90: 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72  ncoding type, tr
5fa0: 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a  ansform this.  *
5fb0: 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49  * to one of SQLI
5fc0: 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51  TE_UTF16LE or SQ
5fd0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69  LITE_UTF16BE usi
5fe0: 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49  ng the.  ** SQLI
5ff0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d  TE_UTF16NATIVE m
6000: 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46  acro. SQLITE_UTF
6010: 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  16 is not used i
6020: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a  nternally..  */.
6030: 20 20 65 6e 63 32 20 3d 20 65 6e 63 20 26 20 7e    enc2 = enc & ~
6040: 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49  SQLITE_UTF16_ALI
6050: 47 4e 45 44 3b 0a 20 20 69 66 28 20 65 6e 63 32  GNED;.  if( enc2
6060: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20 29  ==SQLITE_UTF16 )
6070: 7b 0a 20 20 20 20 65 6e 63 32 20 3d 20 53 51 4c  {.    enc2 = SQL
6080: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
6090: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 6e 63  .  }..  if( (enc
60a0: 32 26 7e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  2&~3)!=0 ){.    
60b0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
60c0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2c 20 22   SQLITE_ERROR, "
60d0: 75 6e 6b 6e 6f 77 6e 20 65 6e 63 6f 64 69 6e 67  unknown encoding
60e0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53  ");.    return S
60f0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
6100: 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20  ..  /* Check if 
6110: 74 68 69 73 20 63 61 6c 6c 20 69 73 20 72 65 6d  this call is rem
6120: 6f 76 69 6e 67 20 6f 72 20 72 65 70 6c 61 63 69  oving or replaci
6130: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 63  ng an existing c
6140: 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a 2a 20 73  ollation .  ** s
6150: 65 71 75 65 6e 63 65 2e 20 49 66 20 73 6f 2c 20  equence. If so, 
6160: 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 63  and there are ac
6170: 74 69 76 65 20 56 4d 73 2c 20 72 65 74 75 72 6e  tive VMs, return
6180: 20 62 75 73 79 2e 20 49 66 20 74 68 65 72 65 0a   busy. If there.
6190: 20 20 2a 2a 20 61 72 65 20 6e 6f 20 61 63 74 69    ** are no acti
61a0: 76 65 20 56 4d 73 2c 20 69 6e 76 61 6c 69 64 61  ve VMs, invalida
61b0: 74 65 20 61 6e 79 20 70 72 65 2d 63 6f 6d 70 69  te any pre-compi
61c0: 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  led statements..
61d0: 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20 3d 20 73    */.  pColl = s
61e0: 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
61f0: 71 28 64 62 2c 20 28 75 38 29 65 6e 63 32 2c 20  q(db, (u8)enc2, 
6200: 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e  zName, strlen(zN
6210: 61 6d 65 29 2c 20 30 29 3b 0a 20 20 69 66 28 20  ame), 0);.  if( 
6220: 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c 2d 3e  pColl && pColl->
6230: 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66 28 20  xCmp ){.    if( 
6240: 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
6250: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
6260: 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49  e3Error(db, SQLI
6270: 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20  TE_BUSY, .      
6280: 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c    "Unable to del
6290: 65 74 65 2f 6d 6f 64 69 66 79 20 63 6f 6c 6c 61  ete/modify colla
62a0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 64 75  tion sequence du
62b0: 65 20 74 6f 20 61 63 74 69 76 65 20 73 74 61 74  e to active stat
62c0: 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20 20  ements");.      
62d0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
62e0: 53 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  SY;.    }.    sq
62f0: 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
6300: 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
6310: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 63 6f  );..    /* If co
6320: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
6330: 20 70 43 6f 6c 6c 20 77 61 73 20 63 72 65 61 74   pColl was creat
6340: 65 64 20 64 69 72 65 63 74 6c 79 20 62 79 20 61  ed directly by a
6350: 20 63 61 6c 6c 20 74 6f 0a 20 20 20 20 2a 2a 20   call to.    ** 
6360: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
6370: 6f 6c 6c 61 74 69 6f 6e 2c 20 61 6e 64 20 6e 6f  ollation, and no
6380: 74 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  t generated by s
6390: 79 6e 74 68 43 6f 6c 6c 53 65 71 28 29 2c 0a 20  ynthCollSeq(),. 
63a0: 20 20 20 2a 2a 20 74 68 65 6e 20 61 6e 79 20 63     ** then any c
63b0: 6f 70 69 65 73 20 6d 61 64 65 20 62 79 20 73 79  opies made by sy
63c0: 6e 74 68 43 6f 6c 6c 53 65 71 28 29 20 6e 65 65  nthCollSeq() nee
63d0: 64 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  d to be invalida
63e0: 74 65 64 2e 0a 20 20 20 20 2a 2a 20 41 6c 73 6f  ted..    ** Also
63f0: 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 64 65 73 74  , collation dest
6400: 72 75 63 74 6f 72 20 2d 20 43 6f 6c 6c 53 65 71  ructor - CollSeq
6410: 2e 78 44 65 6c 28 29 20 2d 20 66 75 6e 63 74 69  .xDel() - functi
6420: 6f 6e 20 6d 61 79 20 6e 65 65 64 0a 20 20 20 20  on may need.    
6430: 2a 2a 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  ** to be called.
6440: 0a 20 20 20 20 2a 2f 20 0a 20 20 20 20 69 66 28  .    */ .    if(
6450: 20 28 70 43 6f 6c 6c 2d 3e 65 6e 63 20 26 20 7e   (pColl->enc & ~
6460: 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49  SQLITE_UTF16_ALI
6470: 47 4e 45 44 29 3d 3d 65 6e 63 32 20 29 7b 0a 20  GNED)==enc2 ){. 
6480: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43       CollSeq *aC
6490: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 48 61 73  oll = sqlite3Has
64a0: 68 46 69 6e 64 28 26 64 62 2d 3e 61 43 6f 6c 6c  hFind(&db->aColl
64b0: 53 65 71 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c  Seq, zName, strl
64c0: 65 6e 28 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  en(zName));.    
64d0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 66    int j;.      f
64e0: 6f 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b  or(j=0; j<3; j++
64f0: 29 7b 0a 20 20 20 20 20 20 20 20 43 6f 6c 6c 53  ){.        CollS
6500: 65 71 20 2a 70 20 3d 20 26 61 43 6f 6c 6c 5b 6a  eq *p = &aColl[j
6510: 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ];.        if( p
6520: 2d 3e 65 6e 63 3d 3d 70 43 6f 6c 6c 2d 3e 65 6e  ->enc==pColl->en
6530: 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  c ){.          i
6540: 66 28 20 70 2d 3e 78 44 65 6c 20 29 7b 0a 20 20  f( p->xDel ){.  
6550: 20 20 20 20 20 20 20 20 20 20 70 2d 3e 78 44 65            p->xDe
6560: 6c 28 70 2d 3e 70 55 73 65 72 29 3b 0a 20 20 20  l(p->pUser);.   
6570: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6580: 20 20 20 70 2d 3e 78 43 6d 70 20 3d 20 30 3b 0a     p->xCmp = 0;.
6590: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
65a0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70  }.    }.  }..  p
65b0: 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
65c0: 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75  ndCollSeq(db, (u
65d0: 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73  8)enc2, zName, s
65e0: 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29  trlen(zName), 1)
65f0: 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b  ;.  if( pColl ){
6600: 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70  .    pColl->xCmp
6610: 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20   = xCompare;.   
6620: 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20   pColl->pUser = 
6630: 70 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d  pCtx;.    pColl-
6640: 3e 78 44 65 6c 20 3d 20 78 44 65 6c 3b 0a 20 20  >xDel = xDel;.  
6650: 20 20 70 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 65    pColl->enc = e
6660: 6e 63 32 20 7c 20 28 65 6e 63 20 26 20 53 51 4c  nc2 | (enc & SQL
6670: 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
6680: 44 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  D);.  }.  sqlite
6690: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
66a0: 45 5f 4f 4b 2c 20 30 29 3b 0a 20 20 72 65 74 75  E_OK, 0);.  retu
66b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
66c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
66d0: 74 69 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f  tine does the wo
66e0: 72 6b 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20  rk of opening a 
66f0: 64 61 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61  database on beha
6700: 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33  lf of.** sqlite3
6710: 5f 6f 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69  _open() and sqli
6720: 74 65 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68  te3_open16(). Th
6730: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  e database filen
6740: 61 6d 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20  ame "zFilename" 
6750: 20 0a 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e   .** is UTF-8 en
6760: 63 6f 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  coded..*/.static
6770: 20 69 6e 74 20 6f 70 65 6e 44 61 74 61 62 61 73   int openDatabas
6780: 65 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e(.  const char 
6790: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44  *zFilename, /* D
67a0: 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65  atabase filename
67b0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
67c0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70  /.  sqlite3 **pp
67d0: 44 62 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55  Db         /* OU
67e0: 54 3a 20 52 65 74 75 72 6e 65 64 20 64 61 74 61  T: Returned data
67f0: 62 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 29  base handle */.)
6800: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
6810: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 43 6f 6c  .  int rc;.  Col
6820: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 0a 20 20  lSeq *pColl;..  
6830: 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20  /* Allocate the 
6840: 73 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75  sqlite data stru
6850: 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20  cture */.  db = 
6860: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
6870: 6f 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  o( sizeof(sqlite
6880: 33 29 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d  3) );.  if( db==
6890: 30 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f  0 ) goto opendb_
68a0: 6f 75 74 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61  out;.  db->errMa
68b0: 73 6b 20 3d 20 30 78 66 66 3b 0a 20 20 64 62 2d  sk = 0xff;.  db-
68c0: 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d  >priorNewRowid =
68d0: 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   0;.  db->magic 
68e0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  = SQLITE_MAGIC_B
68f0: 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d  USY;.  db->nDb =
6900: 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20   2;.  db->aDb = 
6910: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20  db->aDbStatic;. 
6920: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
6930: 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67 73  = 1;.  db->flags
6940: 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74   |= SQLITE_Short
6950: 43 6f 6c 4e 61 6d 65 73 0a 23 69 66 20 53 51 4c  ColNames.#if SQL
6960: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
6970: 5f 46 4f 52 4d 41 54 3c 34 0a 20 20 20 20 20 20  _FORMAT<4.      
6980: 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c             | SQL
6990: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
69a0: 74 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  t.#endif.#ifdef 
69b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
69c0: 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20  AD_EXTENSION.   
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20                | 
69e0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
69f0: 73 69 6f 6e 0a 23 65 6e 64 69 66 0a 20 20 20 20  sion.#endif.    
6a00: 20 20 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73    ;.  sqlite3Has
6a10: 68 49 6e 69 74 28 26 64 62 2d 3e 61 46 75 6e 63  hInit(&db->aFunc
6a20: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
6a30: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69  RING, 0);.  sqli
6a40: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
6a50: 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 49 54  >aCollSeq, SQLIT
6a60: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
6a70: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
6a80: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
6a90: 42 4c 45 0a 20 20 73 71 6c 69 74 65 33 48 61 73  BLE.  sqlite3Has
6aa0: 68 49 6e 69 74 28 26 64 62 2d 3e 61 4d 6f 64 75  hInit(&db->aModu
6ab0: 6c 65 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  le, SQLITE_HASH_
6ac0: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 23 65 6e 64  STRING, 0);.#end
6ad0: 69 66 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65  if..  /* Add the
6ae0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
6af0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41  on sequence BINA
6b00: 52 59 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73  RY. BINARY works
6b10: 20 66 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a   for both UTF-8.
6b20: 20 20 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c    ** and UTF-16,
6b30: 20 73 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f   so add a versio
6b40: 6e 20 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76  n for each to av
6b50: 6f 69 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73  oid any unnecess
6b60: 61 72 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73  ary.  ** convers
6b70: 69 6f 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65  ions. The only e
6b80: 72 72 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63  rror that can oc
6b90: 63 75 72 20 68 65 72 65 20 69 73 20 61 20 6d 61  cur here is a ma
6ba0: 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a  lloc() failure..
6bb0: 20 20 2a 2f 0a 20 20 69 66 28 20 63 72 65 61 74    */.  if( creat
6bc0: 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  eCollation(db, "
6bd0: 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f  BINARY", SQLITE_
6be0: 55 54 46 38 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c  UTF8, 0, binColl
6bf0: 46 75 6e 63 2c 20 30 29 20 7c 7c 0a 20 20 20 20  Func, 0) ||.    
6c00: 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f    createCollatio
6c10: 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20  n(db, "BINARY", 
6c20: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
6c30: 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20  0, binCollFunc, 
6c40: 30 29 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61  0) ||.      crea
6c50: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
6c60: 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45  "BINARY", SQLITE
6c70: 5f 55 54 46 31 36 4c 45 2c 20 30 2c 20 62 69 6e  _UTF16LE, 0, bin
6c80: 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 20 7c 7c 0a  CollFunc, 0) ||.
6c90: 20 20 20 20 20 20 28 64 62 2d 3e 70 44 66 6c 74        (db->pDflt
6ca0: 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
6cb0: 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51  ndCollSeq(db, SQ
6cc0: 4c 49 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41  LITE_UTF8, "BINA
6cd0: 52 59 22 2c 20 36 2c 20 30 29 29 3d 3d 30 20 0a  RY", 6, 0))==0 .
6ce0: 20 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28    ){.    assert(
6cf0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
6d00: 64 20 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  d );.    db->mag
6d10: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
6d20: 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f  C_CLOSED;.    go
6d30: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
6d40: 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64   }..  /* Also ad
6d50: 64 20 61 20 55 54 46 2d 38 20 63 61 73 65 2d 69  d a UTF-8 case-i
6d60: 6e 73 65 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61  nsensitive colla
6d70: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a  tion sequence. *
6d80: 2f 0a 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74  /.  createCollat
6d90: 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22  ion(db, "NOCASE"
6da0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
6db0: 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  , nocaseCollatin
6dc0: 67 46 75 6e 63 2c 20 30 29 3b 0a 0a 20 20 2f 2a  gFunc, 0);..  /*
6dd0: 20 53 65 74 20 66 6c 61 67 73 20 6f 6e 20 74 68   Set flags on th
6de0: 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61  e built-in colla
6df0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
6e00: 2f 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c  /.  db->pDfltCol
6e10: 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  l->type = SQLITE
6e20: 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20 20  _COLL_BINARY;.  
6e30: 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  pColl = sqlite3F
6e40: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53  indCollSeq(db, S
6e50: 51 4c 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f 43  QLITE_UTF8, "NOC
6e60: 41 53 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20 69  ASE", 6, 0);.  i
6e70: 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20  f( pColl ){.    
6e80: 70 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51  pColl->type = SQ
6e90: 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45  LITE_COLL_NOCASE
6ea0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e  ;.  }..  /* Open
6eb0: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74   the backend dat
6ec0: 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a  abase driver */.
6ed0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
6ee0: 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a  reeFactory(db, z
6ef0: 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 53 51 4c  Filename, 0, SQL
6f00: 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  ITE_DEFAULT_CACH
6f10: 45 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20 20  E_SIZE,.        
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f30: 20 20 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70     &db->aDb[0].p
6f40: 42 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  Bt);.  if( rc!=S
6f50: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
6f60: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
6f70: 20 72 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d   rc, 0);.    db-
6f80: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
6f90: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20  MAGIC_CLOSED;.  
6fa0: 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75    goto opendb_ou
6fb0: 74 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62  t;.  }.  db->aDb
6fc0: 5b 30 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73 71  [0].pSchema = sq
6fd0: 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 64  lite3SchemaGet(d
6fe0: 62 2c 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  b, db->aDb[0].pB
6ff0: 74 29 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d  t);.  db->aDb[1]
7000: 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74  .pSchema = sqlit
7010: 65 33 53 63 68 65 6d 61 47 65 74 28 64 62 2c 20  e3SchemaGet(db, 
7020: 30 29 3b 0a 0a 0a 20 20 2f 2a 20 54 68 65 20 64  0);...  /* The d
7030: 65 66 61 75 6c 74 20 73 61 66 65 74 79 5f 6c 65  efault safety_le
7040: 76 65 6c 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  vel for the main
7050: 20 64 61 74 61 62 61 73 65 20 69 73 20 27 66 75   database is 'fu
7060: 6c 6c 27 3b 20 66 6f 72 20 74 68 65 20 74 65 6d  ll'; for the tem
7070: 70 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  p.  ** database 
7080: 69 74 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68  it is 'NONE'. Th
7090: 69 73 20 6d 61 74 63 68 65 73 20 74 68 65 20 70  is matches the p
70a0: 61 67 65 72 20 6c 61 79 65 72 20 64 65 66 61 75  ager layer defau
70b0: 6c 74 73 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62  lts.  .  */.  db
70c0: 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d  ->aDb[0].zName =
70d0: 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61   "main";.  db->a
70e0: 44 62 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76  Db[0].safety_lev
70f0: 65 6c 20 3d 20 33 3b 0a 23 69 66 6e 64 65 66 20  el = 3;.#ifndef 
7100: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
7110: 44 42 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e  DB.  db->aDb[1].
7120: 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a  zName = "temp";.
7130: 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 73 61 66    db->aDb[1].saf
7140: 65 74 79 5f 6c 65 76 65 6c 20 3d 20 31 3b 0a 23  ety_level = 1;.#
7150: 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e 6d 61 67  endif..  db->mag
7160: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
7170: 43 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20 64 62  C_OPEN;.  if( db
7180: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
7190: 7b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64  {.    goto opend
71a0: 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  b_out;.  }..  /*
71b0: 20 52 65 67 69 73 74 65 72 20 61 6c 6c 20 62 75   Register all bu
71c0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
71d0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 61 74 74  , but do not att
71e0: 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65  empt to read the
71f0: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73  .  ** database s
7200: 63 68 65 6d 61 20 79 65 74 2e 20 54 68 69 73 20  chema yet. This 
7210: 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69 6c  is delayed until
7220: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
7230: 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a  the database.  *
7240: 2a 20 69 73 20 61 63 63 65 73 73 65 64 2e 0a 20  * is accessed.. 
7250: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 45 72 72   */.  sqlite3Err
7260: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
7270: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 52  , 0);.  sqlite3R
7280: 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
7290: 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 0a 20 20  nctions(db);..  
72a0: 2f 2a 20 4c 6f 61 64 20 61 75 74 6f 6d 61 74 69  /* Load automati
72b0: 63 20 65 78 74 65 6e 73 69 6f 6e 73 20 2d 20 65  c extensions - e
72c0: 78 74 65 6e 73 69 6f 6e 73 20 74 68 61 74 20 68  xtensions that h
72d0: 61 76 65 20 62 65 65 6e 20 72 65 67 69 73 74 65  ave been registe
72e0: 72 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74  red.  ** using t
72f0: 68 65 20 73 71 6c 69 74 65 33 5f 61 75 74 6f 6d  he sqlite3_autom
7300: 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e 28 29  atic_extension()
7310: 20 41 50 49 2e 0a 20 20 2a 2f 0a 20 20 28 76 6f   API..  */.  (vo
7320: 69 64 29 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id)sqlite3AutoLo
7330: 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 64 62 29  adExtensions(db)
7340: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
7350: 65 72 72 63 6f 64 65 28 64 62 29 21 3d 53 51 4c  errcode(db)!=SQL
7360: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
7370: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
7380: 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
7390: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20 20  E_ENABLE_FTS1.  
73a0: 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  if( !db->mallocF
73b0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 65 78 74  ailed ){.    ext
73c0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ern int sqlite3F
73d0: 74 73 31 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  ts1Init(sqlite3*
73e0: 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
73f0: 74 65 33 46 74 73 31 49 6e 69 74 28 64 62 29 3b  te3Fts1Init(db);
7400: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
7410: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7420: 45 5f 46 54 53 32 0a 20 20 69 66 28 20 21 64 62  E_FTS2.  if( !db
7430: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26  ->mallocFailed &
7440: 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rc==SQLITE_OK 
7450: 29 7b 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e  ){.    extern in
7460: 74 20 73 71 6c 69 74 65 33 46 74 73 32 49 6e 69  t sqlite3Fts2Ini
7470: 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
7480: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73   rc = sqlite3Fts
7490: 32 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23  2Init(db);.  }.#
74a0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
74b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 43 55 0a  LITE_ENABLE_ICU.
74c0: 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f    if( !db->mallo
74d0: 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53  cFailed && rc==S
74e0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
74f0: 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
7500: 65 33 49 63 75 49 6e 69 74 28 73 71 6c 69 74 65  e3IcuInit(sqlite
7510: 33 2a 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  3*);.    rc = sq
7520: 6c 69 74 65 33 49 63 75 49 6e 69 74 28 64 62 29  lite3IcuInit(db)
7530: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73  ;.  }.#endif.  s
7540: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
7550: 72 63 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 2d 44  rc, 0);..  /* -D
7560: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c  SQLITE_DEFAULT_L
7570: 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3d 31 20 6d 61  OCKING_MODE=1 ma
7580: 6b 65 73 20 45 58 43 4c 55 53 49 56 45 20 74 68  kes EXCLUSIVE th
7590: 65 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  e default lockin
75a0: 67 0a 20 20 2a 2a 20 6d 6f 64 65 2e 20 20 2d 44  g.  ** mode.  -D
75b0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c  SQLITE_DEFAULT_L
75c0: 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3d 30 20 6d 61  OCKING_MODE=0 ma
75d0: 6b 65 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64 65  ke NORMAL the de
75e0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 0a 20 20  fault locking.  
75f0: 2a 2a 20 6d 6f 64 65 2e 20 20 44 6f 69 6e 67 20  ** mode.  Doing 
7600: 6e 6f 74 68 69 6e 67 20 61 74 20 61 6c 6c 20 61  nothing at all a
7610: 6c 73 6f 20 6d 61 6b 65 73 20 4e 4f 52 4d 41 4c  lso makes NORMAL
7620: 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 20 20   the default..  
7630: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7640: 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47  _DEFAULT_LOCKING
7650: 5f 4d 4f 44 45 0a 20 20 64 62 2d 3e 64 66 6c 74  _MODE.  db->dflt
7660: 4c 6f 63 6b 4d 6f 64 65 20 3d 20 53 51 4c 49 54  LockMode = SQLIT
7670: 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e  E_DEFAULT_LOCKIN
7680: 47 5f 4d 4f 44 45 3b 0a 20 20 73 71 6c 69 74 65  G_MODE;.  sqlite
7690: 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64  3PagerLockingMod
76a0: 65 28 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  e(sqlite3BtreePa
76b0: 67 65 72 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  ger(db->aDb[0].p
76c0: 42 74 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Bt),.           
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
76e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f  QLITE_DEFAULT_LO
76f0: 43 4b 49 4e 47 5f 4d 4f 44 45 29 3b 0a 23 65 6e  CKING_MODE);.#en
7700: 64 69 66 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a  dif..opendb_out:
7710: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f  .  if( SQLITE_NO
7720: 4d 45 4d 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74  MEM==(rc = sqlit
7730: 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 29 20  e3_errcode(db)) 
7740: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
7750: 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62  lose(db);.    db
7760: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70 70 44   = 0;.  }.  *ppD
7770: 62 20 3d 20 64 62 3b 0a 20 20 72 65 74 75 72 6e  b = db;.  return
7780: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
7790: 30 2c 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  0, rc);.}../*.**
77a0: 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61   Open a new data
77b0: 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  base handle..*/.
77c0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
77d0: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
77e0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71  zFilename, .  sq
77f0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b  lite3 **ppDb .){
7800: 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44 61  .  return openDa
7810: 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65  tabase(zFilename
7820: 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 23 69 66 6e  , ppDb);.}..#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7840: 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  UTF16./*.** Open
7850: 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   a new database 
7860: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
7870: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20  qlite3_open16(. 
7880: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69   const void *zFi
7890: 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74  lename, .  sqlit
78a0: 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20 63  e3 **ppDb.){.  c
78b0: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c 65  har const *zFile
78c0: 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c  name8;   /* zFil
78d0: 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e  ename encoded in
78e0: 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20 6f   UTF-8 instead o
78f0: 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 73 71  f UTF-16 */.  sq
7900: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
7910: 6c 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  l;.  int rc = SQ
7920: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 0a 20 20 61  LITE_NOMEM;..  a
7930: 73 73 65 72 74 28 20 7a 46 69 6c 65 6e 61 6d 65  ssert( zFilename
7940: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 70   );.  assert( pp
7950: 44 62 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20  Db );.  *ppDb = 
7960: 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  0;.  pVal = sqli
7970: 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a  te3ValueNew(0);.
7980: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
7990: 74 53 74 72 28 30 2c 20 70 56 61 6c 2c 20 2d 31  tStr(0, pVal, -1
79a0: 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c  , zFilename, SQL
79b0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c  ITE_UTF16NATIVE,
79c0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
79d0: 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20  .  zFilename8 = 
79e0: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
79f0: 28 30 2c 20 70 56 61 6c 2c 20 53 51 4c 49 54 45  (0, pVal, SQLITE
7a00: 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a 46  _UTF8);.  if( zF
7a10: 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20  ilename8 ){.    
7a20: 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73  rc = openDatabas
7a30: 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70  e(zFilename8, pp
7a40: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  Db);.    if( rc=
7a50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a 70  =SQLITE_OK && *p
7a60: 70 44 62 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pDb ){.      rc 
7a70: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a  = sqlite3_exec(*
7a80: 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e  ppDb, "PRAGMA en
7a90: 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36  coding = 'UTF-16
7aa0: 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  '", 0, 0, 0);.  
7ab0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
7ac0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
7ad0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 2a   sqlite3_close(*
7ae0: 70 70 44 62 29 3b 0a 20 20 20 20 20 20 20 20 2a  ppDb);.        *
7af0: 70 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  ppDb = 0;.      
7b00: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  }.    }.  }.  sq
7b10: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
7b20: 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Val);..  return 
7b30: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
7b40: 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  , rc);.}.#endif 
7b50: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7b60: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  TF16 */../*.** T
7b70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
7b80: 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20  tine destroys a 
7b90: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
7ba0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
7bb0: 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  by.** the sqlite
7bc0: 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74  3_compile() rout
7bd0: 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ine. The integer
7be0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20   returned is an 
7bf0: 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65  SQLITE_.** succe
7c00: 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20  ss/failure code 
7c10: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
7c20: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65  he result of exe
7c30: 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75  cuting the virtu
7c40: 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a  al.** machine..*
7c50: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
7c60: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
7c70: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
7c80: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
7c90: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
7ca0: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
7cb0: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
7cc0: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
7cd0: 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  nt sqlite3_final
7ce0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ize(sqlite3_stmt
7cf0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
7d00: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
7d10: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
7d20: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
7d30: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
7d40: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
7d50: 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20  (Vdbe*)pStmt);. 
7d60: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
7d70: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
7d80: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
7d90: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
7da0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
7db0: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
7dc0: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
7dd0: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
7de0: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
7df0: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
7e00: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
7e10: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
7e20: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
7e30: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
7e40: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
7e50: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
7e60: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
7e70: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
7e80: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
7e90: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
7ea0: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
7eb0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
7ec0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
7ed0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
7ee0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
7ef0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
7f00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
7f10: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
7f20: 65 73 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d  eset((Vdbe*)pStm
7f30: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
7f40: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64  dbeMakeReady((Vd
7f50: 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30  be*)pStmt, -1, 0
7f60: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 61 73 73  , 0, 0);.    ass
7f70: 65 72 74 28 20 28 72 63 20 26 20 28 73 71 6c 69  ert( (rc & (sqli
7f80: 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70 53  te3_db_handle(pS
7f90: 74 6d 74 29 2d 3e 65 72 72 4d 61 73 6b 29 29 3d  tmt)->errMask))=
7fa0: 3d 72 63 20 29 3b 0a 20 20 7d 0a 20 20 72 65 74  =rc );.  }.  ret
7fb0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
7fc0: 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20   Register a new 
7fd0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
7fe0: 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ce with the data
7ff0: 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a  base handle db..
8000: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
8010: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
8020: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
8030: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
8040: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
8050: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
8060: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
8070: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8080: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
8090: 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e  t void*).){.  in
80a0: 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20  t rc;.  assert( 
80b0: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
80c0: 64 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65 61  d );.  rc = crea
80d0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
80e0: 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78  zName, enc, pCtx
80f0: 2c 20 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b 0a  , xCompare, 0);.
8100: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
8110: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
8120: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  .}../*.** Regist
8130: 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69  er a new collati
8140: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68  on sequence with
8150: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
8160: 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20  ndle db..*/.int 
8170: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8180: 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20 73  ollation_v2(.  s
8190: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
81a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
81b0: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
81c0: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
81d0: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
81e0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
81f0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
8200: 69 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a 78 44  id*),.  void(*xD
8210: 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  el)(void*).){.  
8220: 69 6e 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74  int rc;.  assert
8230: 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
8240: 6c 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 63 72  led );.  rc = cr
8250: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
8260: 2c 20 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43  , zName, enc, pC
8270: 74 78 2c 20 78 43 6f 6d 70 61 72 65 2c 20 78 44  tx, xCompare, xD
8280: 65 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  el);.  return sq
8290: 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c  lite3ApiExit(db,
82a0: 20 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66   rc);.}..#ifndef
82b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
82c0: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
82d0: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
82e0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
82f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
8300: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
8310: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
8320: 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c  llation16(.  sql
8330: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
8340: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
8350: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
8360: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
8370: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
8380: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
8390: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
83a0: 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  *).){.  int rc =
83b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63 68   SQLITE_OK;.  ch
83c0: 61 72 20 2a 7a 4e 61 6d 65 38 3b 20 0a 20 20 61  ar *zName8; .  a
83d0: 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
83e0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 7a 4e  ocFailed );.  zN
83f0: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 55 74  ame8 = sqlite3Ut
8400: 66 31 36 74 6f 38 28 64 62 2c 20 7a 4e 61 6d 65  f16to8(db, zName
8410: 2c 20 2d 31 29 3b 0a 20 20 69 66 28 20 7a 4e 61  , -1);.  if( zNa
8420: 6d 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  me8 ){.    rc = 
8430: 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
8440: 64 62 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c  db, zName8, enc,
8450: 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 2c   pCtx, xCompare,
8460: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
8470: 5f 66 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a 20  _free(zName8);. 
8480: 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69   }.  return sqli
8490: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
84a0: 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  c);.}.#endif /* 
84b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
84c0: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  6 */../*.** Regi
84d0: 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ster a collation
84e0: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
84f0: 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  y callback with 
8500: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
8510: 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61  dle.** db. Repla
8520: 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c  ce any previousl
8530: 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c  y installed coll
8540: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
8550: 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  actory..*/.int s
8560: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
8570: 5f 6e 65 65 64 65 64 28 0a 20 20 73 71 6c 69 74  _needed(.  sqlit
8580: 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20  e3 *db, .  void 
8590: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c  *pCollNeededArg,
85a0: 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e   .  void(*xCollN
85b0: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
85c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
85d0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a  ep,const char*).
85e0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
85f0: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
8600: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
8610: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
8620: 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64  .  db->xCollNeed
8630: 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64  ed = xCollNeeded
8640: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  ;.  db->xCollNee
8650: 64 65 64 31 36 20 3d 20 30 3b 0a 20 20 64 62 2d  ded16 = 0;.  db-
8660: 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20  >pCollNeededArg 
8670: 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  = pCollNeededArg
8680: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
8690: 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  E_OK;.}..#ifndef
86a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
86b0: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
86c0: 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  r a collation se
86d0: 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63  quence factory c
86e0: 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65  allback with the
86f0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
8700: 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20  .** db. Replace 
8710: 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69  any previously i
8720: 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69  nstalled collati
8730: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
8740: 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ory..*/.int sqli
8750: 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65  te3_collation_ne
8760: 65 64 65 64 31 36 28 0a 20 20 73 71 6c 69 74 65  eded16(.  sqlite
8770: 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a  3 *db, .  void *
8780: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20  pCollNeededArg, 
8790: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
87a0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
87b0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
87c0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
87d0: 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .){.  if( sqlite
87e0: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
87f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
8800: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
8810: 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  }.  db->xCollNee
8820: 64 65 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 78  ded = 0;.  db->x
8830: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 78  CollNeeded16 = x
8840: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b 0a 20 20  CollNeeded16;.  
8850: 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41  db->pCollNeededA
8860: 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64  rg = pCollNeeded
8870: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  Arg;.  return SQ
8880: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69  LITE_OK;.}.#endi
8890: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
88a0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
88b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
88c0: 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a  LOBALRECOVER./*.
88d0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
88e0: 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e 61 63 68   is now an anach
88f0: 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73 65 64 20  ronism. It used 
8900: 74 6f 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  to be used to re
8910: 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a 2a 2a 20  cover from a.** 
8920: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  malloc() failure
8930: 2c 20 62 75 74 20 53 51 4c 69 74 65 20 6e 6f 77  , but SQLite now
8940: 20 64 6f 65 73 20 74 68 69 73 20 61 75 74 6f 6d   does this autom
8950: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74  atically..*/.int
8960: 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
8970: 72 65 63 6f 76 65 72 28 29 7b 0a 20 20 72 65 74  recover(){.  ret
8980: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
8990: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
89a0: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
89b0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
89c0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
89d0: 6e 20 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d  n is in autocomm
89e0: 69 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65 74  it.** mode.  Ret
89f0: 75 72 6e 20 54 52 55 45 20 69 66 20 69 74 20 69  urn TRUE if it i
8a00: 73 20 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e  s and FALSE if n
8a10: 6f 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20  ot.  Autocommit 
8a20: 6d 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62 79  mode is on.** by
8a30: 20 64 65 66 61 75 6c 74 2e 20 20 41 75 74 6f 63   default.  Autoc
8a40: 6f 6d 6d 69 74 20 69 73 20 64 69 73 61 62 6c 65  ommit is disable
8a50: 64 20 62 79 20 61 20 42 45 47 49 4e 20 73 74 61  d by a BEGIN sta
8a60: 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e 61  tement and reena
8a70: 62 6c 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 6e  bled.** by the n
8a80: 65 78 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  ext COMMIT or RO
8a90: 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  LLBACK..**.*****
8aa0: 2a 2a 20 54 48 49 53 20 49 53 20 41 4e 20 45 58  ** THIS IS AN EX
8ab0: 50 45 52 49 4d 45 4e 54 41 4c 20 41 50 49 20 41  PERIMENTAL API A
8ac0: 4e 44 20 49 53 20 53 55 42 4a 45 43 54 20 54 4f  ND IS SUBJECT TO
8ad0: 20 43 48 41 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a   CHANGE ******.*
8ae0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65  /.int sqlite3_ge
8af0: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c  t_autocommit(sql
8b00: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74  ite3 *db){.  ret
8b10: 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  urn db->autoComm
8b20: 69 74 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  it;.}..#ifdef SQ
8b30: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
8b40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
8b50: 6f 75 74 69 6e 65 20 69 73 20 73 75 62 74 69 74  outine is subtit
8b60: 75 74 65 64 20 66 6f 72 20 63 6f 6e 73 74 61 6e  uted for constan
8b70: 74 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  t SQLITE_CORRUPT
8b80: 20 69 6e 0a 2a 2a 20 64 65 62 75 67 67 69 6e 67   in.** debugging
8b90: 20 62 75 69 6c 64 73 2e 20 20 54 68 69 73 20 70   builds.  This p
8ba0: 72 6f 76 69 64 65 73 20 61 20 77 61 79 20 74 6f  rovides a way to
8bb0: 20 73 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e   set a breakpoin
8bc0: 74 20 66 6f 72 20 77 68 65 6e 0a 2a 2a 20 63 6f  t for when.** co
8bd0: 72 72 75 70 74 69 6f 6e 20 69 73 20 66 69 72 73  rruption is firs
8be0: 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2f 0a 69  t detected..*/.i
8bf0: 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
8c00: 74 28 76 6f 69 64 29 7b 0a 20 20 72 65 74 75 72  t(void){.  retur
8c10: 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  n SQLITE_CORRUPT
8c20: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
8c30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8c40: 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
8c50: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20 64 69  .** Enable or di
8c60: 73 61 62 6c 65 20 74 68 65 20 73 68 61 72 65 64  sable the shared
8c70: 20 70 61 67 65 72 20 61 6e 64 20 73 63 68 65 6d   pager and schem
8c80: 61 20 66 65 61 74 75 72 65 73 20 66 6f 72 20 74  a features for t
8c90: 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20 74 68  he.** current th
8ca0: 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  read..**.** This
8cb0: 20 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20   routine should 
8cc0: 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 77  only be called w
8cd0: 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
8ce0: 20 6f 70 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73   open.** databas
8cf0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 2a  e connections..*
8d00: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 6e  /.int sqlite3_en
8d10: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
8d20: 65 28 69 6e 74 20 65 6e 61 62 6c 65 29 7b 0a 20  e(int enable){. 
8d30: 20 54 68 72 65 61 64 44 61 74 61 20 2a 70 54 64   ThreadData *pTd
8d40: 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64   = sqlite3Thread
8d50: 44 61 74 61 28 29 3b 0a 20 20 69 66 28 20 70 54  Data();.  if( pT
8d60: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 49 74 20 69  d ){.    /* It i
8d70: 73 20 6f 6e 6c 79 20 6c 65 67 61 6c 20 74 6f 20  s only legal to 
8d80: 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61  call sqlite3_ena
8d90: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
8da0: 28 29 20 77 68 65 6e 20 74 68 65 72 65 0a 20 20  () when there.  
8db0: 20 20 2a 2a 20 61 72 65 20 6e 6f 20 63 75 72 72    ** are no curr
8dc0: 65 6e 74 6c 79 20 6f 70 65 6e 20 62 2d 74 72 65  ently open b-tre
8dd0: 65 73 20 74 68 61 74 20 77 65 72 65 20 6f 70 65  es that were ope
8de0: 6e 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 69  ned by the calli
8df0: 6e 67 20 74 68 72 65 61 64 2e 0a 20 20 20 20 2a  ng thread..    *
8e00: 2a 20 54 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e  * This condition
8e10: 20 69 73 20 6f 6e 6c 79 20 65 61 73 79 20 74 6f   is only easy to
8e20: 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 73   detect if the s
8e30: 68 61 72 65 64 2d 63 61 63 68 65 20 77 65 72 65  hared-cache were
8e40: 20 0a 20 20 20 20 2a 2a 20 70 72 65 76 69 6f 75   .    ** previou
8e50: 73 6c 79 20 65 6e 61 62 6c 65 64 20 28 61 6e 64  sly enabled (and
8e60: 20 69 73 20 62 65 69 6e 67 20 64 69 73 61 62 6c   is being disabl
8e70: 65 64 29 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ed). .    */.   
8e80: 20 69 66 28 20 70 54 64 2d 3e 70 42 74 72 65 65   if( pTd->pBtree
8e90: 20 26 26 20 21 65 6e 61 62 6c 65 20 29 7b 0a 20   && !enable ){. 
8ea0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 64       assert( pTd
8eb0: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
8ec0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
8ed0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
8ee0: 20 20 20 7d 0a 0a 20 20 20 20 70 54 64 2d 3e 75     }..    pTd->u
8ef0: 73 65 53 68 61 72 65 64 44 61 74 61 20 3d 20 65  seSharedData = e
8f00: 6e 61 62 6c 65 3b 0a 20 20 20 20 2f 2a 20 73 71  nable;.    /* sq
8f10: 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
8f20: 61 64 44 61 74 61 28 29 3b 20 2a 2f 0a 20 20 7d  adData(); */.  }
8f30: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
8f40: 33 41 70 69 45 78 69 74 28 30 2c 20 53 51 4c 49  3ApiExit(0, SQLI
8f50: 54 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66  TE_OK);.}.#endif
8f60: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
8f70: 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f  a convenience ro
8f80: 75 74 69 6e 65 20 74 68 61 74 20 6d 61 6b 65 73  utine that makes
8f90: 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74   sure that all t
8fa0: 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 0a 2a  hread-specific.*
8fb0: 2a 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  * data for this 
8fc0: 74 68 72 65 61 64 20 68 61 73 20 62 65 65 6e 20  thread has been 
8fd0: 64 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a  deallocated..*/.
8fe0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 74 68 72  void sqlite3_thr
8ff0: 65 61 64 5f 63 6c 65 61 6e 75 70 28 76 6f 69 64  ead_cleanup(void
9000: 29 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20  ){.  ThreadData 
9010: 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 4f 73  *pTd = sqlite3Os
9020: 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61  ThreadSpecificDa
9030: 74 61 28 30 29 3b 0a 20 20 69 66 28 20 70 54 64  ta(0);.  if( pTd
9040: 20 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70   ){.    memset(p
9050: 54 64 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70  Td, 0, sizeof(*p
9060: 54 64 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Td));.    sqlite
9070: 33 4f 73 54 68 72 65 61 64 53 70 65 63 69 66 69  3OsThreadSpecifi
9080: 63 44 61 74 61 28 2d 31 29 3b 0a 20 20 7d 0a 7d  cData(-1);.  }.}
9090: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 6d  ../*.** Return m
90a0: 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  eta information 
90b0: 61 62 6f 75 74 20 61 20 73 70 65 63 69 66 69 63  about a specific
90c0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 20 64 61 74   column of a dat
90d0: 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2a 20  abase table..** 
90e0: 53 65 65 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 73  See comment in s
90f0: 71 6c 69 74 65 33 2e 68 20 28 73 71 6c 69 74 65  qlite3.h (sqlite
9100: 2e 68 2e 69 6e 29 20 66 6f 72 20 64 65 74 61 69  .h.in) for detai
9110: 6c 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ls..*/.#ifdef SQ
9120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
9130: 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 69 6e 74 20  MN_METADATA.int 
9140: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
9150: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20  lumn_metadata(. 
9160: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9180: 43 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  Connection handl
9190: 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
91a0: 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 20 20 20 20  r *zDbName,     
91b0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 6e     /* Database n
91c0: 61 6d 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  ame or NULL */. 
91d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
91e0: 62 6c 65 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20  bleName,     /* 
91f0: 54 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  Table name */.  
9200: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
9210: 75 6d 6e 4e 61 6d 65 2c 20 20 20 20 2f 2a 20 43  umnName,    /* C
9220: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 20 20  olumn name */.  
9230: 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44  char const **pzD
9240: 61 74 61 54 79 70 65 2c 20 20 20 20 2f 2a 20 4f  ataType,    /* O
9250: 55 54 50 55 54 3a 20 44 65 63 6c 61 72 65 64 20  UTPUT: Declared 
9260: 64 61 74 61 20 74 79 70 65 20 2a 2f 0a 20 20 63  data type */.  c
9270: 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f  har const **pzCo
9280: 6c 6c 53 65 71 2c 20 20 20 20 20 2f 2a 20 4f 55  llSeq,     /* OU
9290: 54 50 55 54 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20  TPUT: Collation 
92a0: 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 20 2a 2f  sequence name */
92b0: 0a 20 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c  .  int *pNotNull
92c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
92d0: 2a 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69  * OUTPUT: True i
92e0: 66 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  f NOT NULL const
92f0: 72 61 69 6e 74 20 65 78 69 73 74 73 20 2a 2f 0a  raint exists */.
9300: 20 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b    int *pPrimaryK
9310: 65 79 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey,           /*
9320: 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66   OUTPUT: True if
9330: 20 63 6f 6c 75 6d 6e 20 70 61 72 74 20 6f 66 20   column part of 
9340: 50 4b 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 41 75  PK */.  int *pAu
9350: 74 6f 69 6e 63 20 20 20 20 20 20 20 20 20 20 20  toinc           
9360: 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54      /* OUTPUT: T
9370: 72 75 65 20 69 66 20 63 6f 6c 75 6d 73 20 69 73  rue if colums is
9380: 20 61 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20   auto-increment 
9390: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  */.){.  int rc;.
93a0: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
93b0: 3d 20 30 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54  = 0;.  Table *pT
93c0: 61 62 20 3d 20 30 3b 0a 20 20 43 6f 6c 75 6d 6e  ab = 0;.  Column
93d0: 20 2a 70 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e   *pCol = 0;.  in
93e0: 74 20 69 43 6f 6c 3b 0a 0a 20 20 63 68 61 72 20  t iCol;..  char 
93f0: 63 6f 6e 73 74 20 2a 7a 44 61 74 61 54 79 70 65  const *zDataType
9400: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e   = 0;.  char con
9410: 73 74 20 2a 7a 43 6f 6c 6c 53 65 71 20 3d 20 30  st *zCollSeq = 0
9420: 3b 0a 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 20  ;.  int notnull 
9430: 3d 20 30 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61  = 0;.  int prima
9440: 72 79 6b 65 79 20 3d 20 30 3b 0a 20 20 69 6e 74  rykey = 0;.  int
9450: 20 61 75 74 6f 69 6e 63 20 3d 20 30 3b 0a 0a 20   autoinc = 0;.. 
9460: 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 65 20 64   /* Ensure the d
9470: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
9480: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
9490: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
94a0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
94b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
94c0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72  _MISUSE;.  }.  r
94d0: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28  c = sqlite3Init(
94e0: 64 62 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  db, &zErrMsg);. 
94f0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
9500: 72 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 65  rc ){.    goto e
9510: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  rror_out;.  }.. 
9520: 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 74   /* Locate the t
9530: 61 62 6c 65 20 69 6e 20 71 75 65 73 74 69 6f 6e  able in question
9540: 20 2a 2f 0a 20 20 70 54 61 62 20 3d 20 73 71 6c   */.  pTab = sql
9550: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
9560: 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 44  , zTableName, zD
9570: 62 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 21 70  bName);.  if( !p
9580: 54 61 62 20 7c 7c 20 70 54 61 62 2d 3e 70 53 65  Tab || pTab->pSe
9590: 6c 65 63 74 20 29 7b 0a 20 20 20 20 70 54 61 62  lect ){.    pTab
95a0: 20 3d 20 30 3b 0a 20 20 20 20 67 6f 74 6f 20 65   = 0;.    goto e
95b0: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  rror_out;.  }.. 
95c0: 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 63 6f 6c   /* Find the col
95d0: 75 6d 6e 20 66 6f 72 20 77 68 69 63 68 20 69 6e  umn for which in
95e0: 66 6f 20 69 73 20 72 65 71 75 65 73 74 65 64 20  fo is requested 
95f0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
9600: 49 73 52 6f 77 69 64 28 7a 43 6f 6c 75 6d 6e 4e  IsRowid(zColumnN
9610: 61 6d 65 29 20 29 7b 0a 20 20 20 20 69 43 6f 6c  ame) ){.    iCol
9620: 20 3d 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a   = pTab->iPKey;.
9630: 20 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20      if( iCol>=0 
9640: 29 7b 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20  ){.      pCol = 
9650: 26 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c  &pTab->aCol[iCol
9660: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  ];.    }.  }else
9670: 7b 0a 20 20 20 20 66 6f 72 28 69 43 6f 6c 3d 30  {.    for(iCol=0
9680: 3b 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f  ; iCol<pTab->nCo
9690: 6c 3b 20 69 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20  l; iCol++){.    
96a0: 20 20 70 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e    pCol = &pTab->
96b0: 61 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20  aCol[iCol];.    
96c0: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
96d0: 53 74 72 49 43 6d 70 28 70 43 6f 6c 2d 3e 7a 4e  StrICmp(pCol->zN
96e0: 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65  ame, zColumnName
96f0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65  ) ){.        bre
9700: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9710: 7d 0a 20 20 20 20 69 66 28 20 69 43 6f 6c 3d 3d  }.    if( iCol==
9720: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 7b 0a 20 20  pTab->nCol ){.  
9730: 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20      pTab = 0;.  
9740: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
9750: 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
9760: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
9770: 67 20 62 6c 6f 63 6b 20 73 74 6f 72 65 73 20 74  g block stores t
9780: 68 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74  he meta informat
9790: 69 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ion that will be
97a0: 20 72 65 74 75 72 6e 65 64 0a 20 20 2a 2a 20 74   returned.  ** t
97b0: 6f 20 74 68 65 20 63 61 6c 6c 65 72 20 69 6e 20  o the caller in 
97c0: 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 20  local variables 
97d0: 7a 44 61 74 61 54 79 70 65 2c 20 7a 43 6f 6c 6c  zDataType, zColl
97e0: 53 65 71 2c 20 6e 6f 74 6e 75 6c 6c 2c 20 70 72  Seq, notnull, pr
97f0: 69 6d 61 72 79 6b 65 79 0a 20 20 2a 2a 20 61 6e  imarykey.  ** an
9800: 64 20 61 75 74 6f 69 6e 63 2e 20 41 74 20 74 68  d autoinc. At th
9810: 69 73 20 70 6f 69 6e 74 20 74 68 65 72 65 20 61  is point there a
9820: 72 65 20 74 77 6f 20 70 6f 73 73 69 62 69 6c 69  re two possibili
9830: 74 69 65 73 3a 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ties:.  ** .  **
9840: 20 20 20 20 20 31 2e 20 54 68 65 20 73 70 65 63       1. The spec
9850: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ified column nam
9860: 65 20 77 61 73 20 72 6f 77 69 64 22 2c 20 22 6f  e was rowid", "o
9870: 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  id" or "_rowid_"
9880: 20 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 61 6e   .  **        an
9890: 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78  d there is no ex
98a0: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
98b0: 64 20 49 50 4b 20 63 6f 6c 75 6d 6e 2e 20 0a 20  d IPK column. . 
98c0: 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 32 2e 20   **.  **     2. 
98d0: 54 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  The table is not
98e0: 20 61 20 76 69 65 77 20 61 6e 64 20 74 68 65 20   a view and the 
98f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 64 65 6e  column name iden
9900: 74 69 66 69 65 64 20 61 6e 20 0a 20 20 2a 2a 20  tified an .  ** 
9910: 20 20 20 20 20 20 20 65 78 70 6c 69 63 69 74 6c         explicitl
9920: 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d  y declared colum
9930: 6e 2e 20 43 6f 70 79 20 6d 65 74 61 20 69 6e 66  n. Copy meta inf
9940: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 2a 70  ormation from *p
9950: 43 6f 6c 2e 0a 20 20 2a 2f 20 0a 20 20 69 66 28  Col..  */ .  if(
9960: 20 70 43 6f 6c 20 29 7b 0a 20 20 20 20 7a 44 61   pCol ){.    zDa
9970: 74 61 54 79 70 65 20 3d 20 70 43 6f 6c 2d 3e 7a  taType = pCol->z
9980: 54 79 70 65 3b 0a 20 20 20 20 7a 43 6f 6c 6c 53  Type;.    zCollS
9990: 65 71 20 3d 20 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c  eq = pCol->zColl
99a0: 3b 0a 20 20 20 20 6e 6f 74 6e 75 6c 6c 20 3d 20  ;.    notnull = 
99b0: 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31  (pCol->notNull?1
99c0: 3a 30 29 3b 0a 20 20 20 20 70 72 69 6d 61 72 79  :0);.    primary
99d0: 6b 65 79 20 20 3d 20 28 70 43 6f 6c 2d 3e 69 73  key  = (pCol->is
99e0: 50 72 69 6d 4b 65 79 3f 31 3a 30 29 3b 0a 20 20  PrimKey?1:0);.  
99f0: 20 20 61 75 74 6f 69 6e 63 20 3d 20 28 28 70 54    autoinc = ((pT
9a00: 61 62 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20  ab->iPKey==iCol 
9a10: 26 26 20 70 54 61 62 2d 3e 61 75 74 6f 49 6e 63  && pTab->autoInc
9a20: 29 3f 31 3a 30 29 3b 0a 20 20 7d 65 6c 73 65 7b  )?1:0);.  }else{
9a30: 0a 20 20 20 20 7a 44 61 74 61 54 79 70 65 20 3d  .    zDataType =
9a40: 20 22 49 4e 54 45 47 45 52 22 3b 0a 20 20 20 20   "INTEGER";.    
9a50: 70 72 69 6d 61 72 79 6b 65 79 20 3d 20 31 3b 0a  primarykey = 1;.
9a60: 20 20 7d 0a 20 20 69 66 28 20 21 7a 43 6f 6c 6c    }.  if( !zColl
9a70: 53 65 71 20 29 7b 0a 20 20 20 20 7a 43 6f 6c 6c  Seq ){.    zColl
9a80: 53 65 71 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a  Seq = "BINARY";.
9a90: 20 20 7d 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a    }..error_out:.
9aa0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
9ab0: 65 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20  etyOff(db) ){.  
9ac0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
9ad0: 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  SUSE;.  }..  /* 
9ae0: 57 68 65 74 68 65 72 20 74 68 65 20 66 75 6e 63  Whether the func
9af0: 74 69 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65  tion call succee
9b00: 64 65 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73  ded or failed, s
9b10: 65 74 20 74 68 65 20 6f 75 74 70 75 74 20 70 61  et the output pa
9b20: 72 61 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f  rameters.  ** to
9b30: 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20   whatever their 
9b40: 6c 6f 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72  local counterpar
9b50: 74 73 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61  ts contain. If a
9b60: 6e 20 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75  n error did occu
9b70: 72 2c 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73  r,.  ** this has
9b80: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a   the effect of z
9b90: 65 72 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75  eroing all outpu
9ba0: 74 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20  t parameters..  
9bb0: 2a 2f 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54  */.  if( pzDataT
9bc0: 79 70 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70  ype ) *pzDataTyp
9bd0: 65 20 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20  e = zDataType;. 
9be0: 20 69 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29   if( pzCollSeq )
9bf0: 20 2a 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43   *pzCollSeq = zC
9c00: 6f 6c 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e  ollSeq;.  if( pN
9c10: 6f 74 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75  otNull ) *pNotNu
9c20: 6c 6c 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20  ll = notnull;.  
9c30: 69 66 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20  if( pPrimaryKey 
9c40: 29 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d  ) *pPrimaryKey =
9c50: 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69   primarykey;.  i
9c60: 66 28 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70  f( pAutoinc ) *p
9c70: 41 75 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e  Autoinc = autoin
9c80: 63 3b 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45  c;..  if( SQLITE
9c90: 5f 4f 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62  _OK==rc && !pTab
9ca0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
9cb0: 65 74 53 74 72 69 6e 67 28 26 7a 45 72 72 4d 73  etString(&zErrMs
9cc0: 67 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c  g, "no such tabl
9cd0: 65 20 63 6f 6c 75 6d 6e 3a 20 22 2c 20 7a 54 61  e column: ", zTa
9ce0: 62 6c 65 4e 61 6d 65 2c 20 22 2e 22 2c 20 0a 20  bleName, ".", . 
9cf0: 20 20 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61         zColumnNa
9d00: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d  me, 0);.    rc =
9d10: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
9d20: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f   }.  sqlite3Erro
9d30: 72 28 64 62 2c 20 72 63 2c 20 28 7a 45 72 72 4d  r(db, rc, (zErrM
9d40: 73 67 3f 22 25 73 22 3a 30 29 2c 20 7a 45 72 72  sg?"%s":0), zErr
9d50: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
9d60: 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20  free(zErrMsg);. 
9d70: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
9d80: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
9d90: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
9da0: 53 65 74 20 61 6c 6c 20 74 68 65 20 70 61 72 61  Set all the para
9db0: 6d 65 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f  meters in the co
9dc0: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
9dd0: 6d 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f  ment to NULL..*/
9de0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c 65  .int sqlite3_cle
9df0: 61 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69  ar_bindings(sqli
9e00: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
9e10: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  {.  int i;.  int
9e20: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
9e30: 0a 20 20 66 6f 72 28 69 3d 31 3b 20 72 63 3d 3d  .  for(i=1; rc==
9e40: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 3d  SQLITE_OK && i<=
9e50: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9e60: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70 53 74  ameter_count(pSt
9e70: 6d 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72  mt); i++){.    r
9e80: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
9e90: 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b  _null(pStmt, i);
9ea0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
9eb0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6c 65 65 70  ;.}../*.** Sleep
9ec0: 20 66 6f 72 20 61 20 6c 69 74 74 6c 65 20 77 68   for a little wh
9ed0: 69 6c 65 2e 20 20 52 65 74 75 72 6e 20 74 68 65  ile.  Return the
9ee0: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
9ef0: 73 6c 65 70 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  slept..*/.int sq
9f00: 6c 69 74 65 33 5f 73 6c 65 65 70 28 69 6e 74 20  lite3_sleep(int 
9f10: 6d 73 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  ms){.  return sq
9f20: 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 6d 73 29  lite3OsSleep(ms)
9f30: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c  ;.}../*.** Enabl
9f40: 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65  e or disable the
9f50: 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74   extended result
9f60: 20 63 6f 64 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73   codes..*/.int s
9f70: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
9f80: 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 73 71 6c  result_codes(sql
9f90: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6f 6e  ite3 *db, int on
9fa0: 6f 66 66 29 7b 0a 20 20 64 62 2d 3e 65 72 72 4d  off){.  db->errM
9fb0: 61 73 6b 20 3d 20 6f 6e 6f 66 66 20 3f 20 30 78  ask = onoff ? 0x
9fc0: 66 66 66 66 66 66 66 66 20 3a 20 30 78 66 66 3b  ffffffff : 0xff;
9fd0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
9fe0: 5f 4f 4b 3b 0a 7d 0a                             _OK;.}.