/ Hex Artifact Content
Login

Artifact e6eb036c3580ba9116fedfe4a8b58ed63d5abb37:


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 37 30 20 32 30 30 37 2f 30 34  ,v 1.370 2007/04
0280: 2f 31 38 20 31 34 3a 32 34 3a 33 33 20 64 61 6e  /18 14:24:33 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 46 72  ;.      sqliteFr
1320: 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d  ee(pFunc);.    }
1330: 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d 73 71  .  }..  for(i=sq
1340: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
1350: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b  b->aCollSeq); i;
1360: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
1370: 74 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53  t(i)){.    CollS
1380: 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c  eq *pColl = (Col
1390: 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73  lSeq *)sqliteHas
13a0: 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 73 71  hData(i);.    sq
13b0: 6c 69 74 65 46 72 65 65 28 70 43 6f 6c 6c 29 3b  liteFree(pColl);
13c0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61  .  }.  sqlite3Ha
13d0: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 43 6f  shClear(&db->aCo
13e0: 6c 6c 53 65 71 29 3b 0a 23 69 66 6e 64 65 66 20  llSeq);.#ifndef 
13f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1400: 55 41 4c 54 41 42 4c 45 0a 20 20 66 6f 72 28 69  UALTABLE.  for(i
1410: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
1420: 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20  (&db->aModule); 
1430: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
1440: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 4d 6f 64  ext(i)){.    Mod
1450: 75 6c 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64  ule *pMod = (Mod
1460: 75 6c 65 20 2a 29 73 71 6c 69 74 65 48 61 73 68  ule *)sqliteHash
1470: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 73 71 6c  Data(i);.    sql
1480: 69 74 65 46 72 65 65 28 70 4d 6f 64 29 3b 0a 20  iteFree(pMod);. 
1490: 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68   }.  sqlite3Hash
14a0: 43 6c 65 61 72 28 26 64 62 2d 3e 61 4d 6f 64 75  Clear(&db->aModu
14b0: 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 73  le);.#endif..  s
14c0: 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28  qlite3HashClear(
14d0: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73  &db->aFunc);.  s
14e0: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
14f0: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f  SQLITE_OK, 0); /
1500: 2a 20 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e  * Deallocates an
1510: 79 20 63 61 63 68 65 64 20 65 72 72 6f 72 20 73  y cached error s
1520: 74 72 69 6e 67 73 2e 20 2a 2f 0a 20 20 69 66 28  trings. */.  if(
1530: 20 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20 20 20   db->pErr ){.   
1540: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
1550: 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d  e(db->pErr);.  }
1560: 0a 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  .  sqlite3CloseE
1570: 78 74 65 6e 73 69 6f 6e 73 28 64 62 29 3b 0a 0a  xtensions(db);..
1580: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
1590: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
15a0: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 74 65 6d 70  ;..  /* The temp
15b0: 2d 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  -database schema
15c0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 64 69   is allocated di
15d0: 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 74  fferently from t
15e0: 68 65 20 6f 74 68 65 72 20 73 63 68 65 6d 61 0a  he other schema.
15f0: 20 20 2a 2a 20 6f 62 6a 65 63 74 73 20 28 75 73    ** objects (us
1600: 69 6e 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  ing sqliteMalloc
1610: 28 29 20 64 69 72 65 63 74 6c 79 2c 20 69 6e 73  () directly, ins
1620: 74 65 61 64 20 6f 66 20 73 71 6c 69 74 65 33 42  tead of sqlite3B
1630: 74 72 65 65 53 63 68 65 6d 61 28 29 29 2e 0a 20  treeSchema()).. 
1640: 20 2a 2a 20 53 6f 20 69 74 20 6e 65 65 64 73 20   ** So it needs 
1650: 74 6f 20 62 65 20 66 72 65 65 64 20 68 65 72 65  to be freed here
1660: 2e 20 54 6f 64 6f 3a 20 57 68 79 20 6e 6f 74 20  . Todo: Why not 
1670: 72 6f 6c 6c 20 74 68 65 20 74 65 6d 70 20 73 63  roll the temp sc
1680: 68 65 6d 61 20 69 6e 74 6f 0a 20 20 2a 2a 20 74  hema into.  ** t
1690: 68 65 20 73 61 6d 65 20 73 71 6c 69 74 65 4d 61  he same sqliteMa
16a0: 6c 6c 6f 63 28 29 20 61 73 20 74 68 65 20 6f 6e  lloc() as the on
16b0: 65 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 65 73  e that allocates
16c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 20   the database . 
16d0: 20 2a 2a 20 73 74 72 75 63 74 75 72 65 3f 0a 20   ** structure?. 
16e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 46 72 65 65   */.  sqliteFree
16f0: 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68  (db->aDb[1].pSch
1700: 65 6d 61 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  ema);.  sqliteFr
1710: 65 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ee(db);.  sqlite
1720: 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61  3ReleaseThreadDa
1730: 74 61 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  ta();.  return S
1740: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
1750: 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20  ** Rollback all 
1760: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
1770: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  */.void sqlite3R
1780: 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
1790: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  e3 *db){.  int i
17a0: 3b 0a 20 20 69 6e 74 20 69 6e 54 72 61 6e 73 20  ;.  int inTrans 
17b0: 3d 20 30 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  = 0;.  for(i=0; 
17c0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
17d0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
17e0: 5b 69 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20  [i].pBt ){.     
17f0: 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
1800: 65 49 73 49 6e 54 72 61 6e 73 28 64 62 2d 3e 61  eIsInTrans(db->a
1810: 44 62 5b 69 5d 2e 70 42 74 29 20 29 7b 0a 20 20  Db[i].pBt) ){.  
1820: 20 20 20 20 20 20 69 6e 54 72 61 6e 73 20 3d 20        inTrans = 
1830: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1840: 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 6c   sqlite3BtreeRol
1850: 6c 62 61 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d  lback(db->aDb[i]
1860: 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 64 62 2d  .pBt);.      db-
1870: 3e 61 44 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20  >aDb[i].inTrans 
1880: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
1890: 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
18a0: 62 61 63 6b 28 64 62 29 3b 0a 20 20 69 66 28 20  back(db);.  if( 
18b0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
18c0: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 29  _InternChanges )
18d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
18e0: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
18f0: 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20  (db, 0);.  }..  
1900: 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73 20 62 65  /* If one has be
1910: 65 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 69  en configured, i
1920: 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62 61  nvoke the rollba
1930: 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b  ck-hook callback
1940: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 52   */.  if( db->xR
1950: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
1960: 26 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20 21  && (inTrans || !
1970: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29 20  db->autoCommit) 
1980: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c 6c  ){.    db->xRoll
1990: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62 2d  backCallback(db-
19a0: 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b 0a  >pRollbackArg);.
19b0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74    }.}../*.** Ret
19c0: 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74 72  urn a static str
19d0: 69 6e 67 20 74 68 61 74 20 64 65 73 63 72 69 62  ing that describ
19e0: 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65  es the kind of e
19f0: 72 72 6f 72 20 73 70 65 63 69 66 69 65 64 20 69  rror specified i
1a00: 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e  n the.** argumen
1a10: 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  t..*/.const char
1a20: 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
1a30: 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74  int rc){.  const
1a40: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74   char *z;.  swit
1a50: 63 68 28 20 72 63 20 26 20 30 78 66 66 20 29 7b  ch( rc & 0xff ){
1a60: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1a70: 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73 65 20 53  _ROW:.    case S
1a80: 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20  QLITE_DONE:.    
1a90: 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
1aa0: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74          z = "not
1ab0: 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20   an error";     
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ae0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
1af0: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c  R:      z = "SQL
1b00: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
1b10: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
1b20: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
1b30: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d  case SQLITE_PERM
1b40: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63  :       z = "acc
1b50: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
1b60: 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20  enied";         
1b70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b80: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  case SQLITE_ABOR
1b90: 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c  T:      z = "cal
1ba0: 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20  lback requested 
1bb0: 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20  query abort";   
1bc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1bd0: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
1be0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1bf0: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22  abase is locked"
1c00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1c20: 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  case SQLITE_LOCK
1c30: 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  ED:     z = "dat
1c40: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
1c50: 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20  ocked";         
1c60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1c70: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
1c80: 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74  M:      z = "out
1c90: 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20   of memory";    
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1cc0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
1cd0: 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74  ONLY:   z = "att
1ce0: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
1cf0: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
1d00: 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  e";  break;.    
1d10: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
1d20: 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74  RRUPT:  z = "int
1d30: 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20 20  errupted";      
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d60: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
1d70: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73  R:      z = "dis
1d80: 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20  k I/O error";   
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1db0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  case SQLITE_CORR
1dc0: 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74  UPT:    z = "dat
1dd0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
1de0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20   is malformed"; 
1df0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e00: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
1e10: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1e20: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73  abase or disk is
1e30: 20 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20   full";         
1e40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e50: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
1e60: 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61  OPEN:   z = "una
1e70: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
1e80: 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20  base file";     
1e90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ea0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
1eb0: 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62  Y:      z = "tab
1ec0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  le contains no d
1ed0: 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20 20  ata";           
1ee0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ef0: 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45  case SQLITE_SCHE
1f00: 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  MA:     z = "dat
1f10: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1f20: 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20   changed";      
1f30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1f40: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
1f50: 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e  TRAINT: z = "con
1f60: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b  straint failed";
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1f90: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
1fa0: 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74  ATCH:   z = "dat
1fb0: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b  atype mismatch";
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1fe0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  case SQLITE_MISU
1ff0: 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62  SE:     z = "lib
2000: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
2010: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
2020: 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  nce";break;.    
2030: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46  case SQLITE_NOLF
2040: 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72  S:      z = "ker
2050: 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20  nel lacks large 
2060: 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20  file support";  
2070: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2080: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
2090: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74  :       z = "aut
20a0: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
20b0: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
20c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
20d0: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d  case SQLITE_FORM
20e0: 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78  AT:     z = "aux
20f0: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2100: 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20  format error";  
2110: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2120: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
2130: 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e  E:      z = "bin
2140: 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  d or column inde
2150: 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b  x out of range";
2160: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2170: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41  case SQLITE_NOTA
2180: 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c  DB:     z = "fil
2190: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
21a0: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
21b0: 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  ase";break;.    
21c0: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
21d0: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b          z = "unk
21e0: 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  nown error";    
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
2210: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
2220: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2230: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
2240: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
2250: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
2260: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
2270: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
2280: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
2290: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
22a0: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
22b0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
22c0: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
22d0: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
22e0: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
22f0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
2300: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
2310: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72  back(. void *ptr
2320: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2330: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
2340: 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63  ection */. int c
2350: 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  ount            
2360: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2370: 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73   times table has
2380: 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b   been busy */.){
2390: 0a 23 69 66 20 4f 53 5f 57 49 4e 20 7c 7c 20 28  .#if OS_WIN || (
23a0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c  defined(HAVE_USL
23b0: 45 45 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c  EEP) && HAVE_USL
23c0: 45 45 50 29 0a 20 20 73 74 61 74 69 63 20 63 6f  EEP).  static co
23d0: 6e 73 74 20 75 38 20 64 65 6c 61 79 73 5b 5d 20  nst u8 delays[] 
23e0: 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35  =.     { 1, 2, 5
23f0: 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35  , 10, 15, 20, 25
2400: 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20  , 25,  25,  50, 
2410: 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73 74   50, 100 };.  st
2420: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 74 6f  atic const u8 to
2430: 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20  tals[] =.     { 
2440: 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c  0, 1, 3,  8, 18,
2450: 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33   33, 53, 78, 103
2460: 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38 20  , 128, 178, 228 
2470: 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c  };.# define NDEL
2480: 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79  AY (sizeof(delay
2490: 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73  s)/sizeof(delays
24a0: 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d 65  [0])).  int time
24b0: 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20  out = ((sqlite3 
24c0: 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65  *)ptr)->busyTime
24d0: 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79  out;.  int delay
24e0: 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65  , prior;..  asse
24f0: 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a  rt( count>=0 );.
2500: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44    if( count < ND
2510: 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61  ELAY ){.    dela
2520: 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74  y = delays[count
2530: 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74  ];.    prior = t
2540: 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20  otals[count];.  
2550: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79  }else{.    delay
2560: 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59   = delays[NDELAY
2570: 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d  -1];.    prior =
2580: 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31   totals[NDELAY-1
2590: 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74  ] + delay*(count
25a0: 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20  -(NDELAY-1));.  
25b0: 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20  }.  if( prior + 
25c0: 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20  delay > timeout 
25d0: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74  ){.    delay = t
25e0: 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a  imeout - prior;.
25f0: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30      if( delay<=0
2600: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d   ) return 0;.  }
2610: 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65  .  sqlite3OsSlee
2620: 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75  p(delay);.  retu
2630: 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e  rn 1;.#else.  in
2640: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71  t timeout = ((sq
2650: 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75  lite3 *)ptr)->bu
2660: 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28  syTimeout;.  if(
2670: 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20   (count+1)*1000 
2680: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
2690: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
26a0: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
26b0: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
26c0: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
26d0: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 67 69  ** Invoke the gi
26e0: 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ven busy handler
26f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
2700: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 77  tine is called w
2710: 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  hen an operation
2720: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 20 6c   failed with a l
2730: 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20  ock..** If this 
2740: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
2750: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f  non-zero, the lo
2760: 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e 20 20  ck is retried.  
2770: 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73  If it.** returns
2780: 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f   0, the operatio
2790: 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 6e  n aborts with an
27a0: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
27b0: 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  or..*/.int sqlit
27c0: 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
27d0: 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 20  ler(BusyHandler 
27e0: 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *p){.  int rc;. 
27f0: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e   if( p==0 || p->
2800: 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e  xFunc==0 || p->n
2810: 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20  Busy<0 ) return 
2820: 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75  0;.  rc = p->xFu
2830: 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e  nc(p->pArg, p->n
2840: 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d  Busy);.  if( rc=
2850: 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75  =0 ){.    p->nBu
2860: 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  sy = -1;.  }else
2870: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b  {.    p->nBusy++
2880: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
2890: 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  c; .}../*.** Thi
28a0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
28b0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
28c0: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
28d0: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
28e0: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
28f0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
2900: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
2910: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2920: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  3_busy_handler(.
2930: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
2940: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
2950: 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64  id*,int),.  void
2960: 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20   *pArg.){.  if( 
2970: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2980: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
2990: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
29a0: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75  SE;.  }.  db->bu
29b0: 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20  syHandler.xFunc 
29c0: 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62  = xBusy;.  db->b
29d0: 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20  usyHandler.pArg 
29e0: 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75  = pArg;.  db->bu
29f0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
2a00: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  = 0;.  return SQ
2a10: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
2a20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a30: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
2a40: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  K./*.** This rou
2a50: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72  tine sets the pr
2a60: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
2a70: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
2a80: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
2a90: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
2aa0: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
2ab0: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
2ac0: 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  . The progress c
2ad0: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20  allback will.** 
2ae0: 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79  be invoked every
2af0: 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a   nOps opcodes..*
2b00: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70  /.void sqlite3_p
2b10: 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
2b20: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
2b30: 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69  .  int nOps,.  i
2b40: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
2b50: 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20  void*), .  void 
2b60: 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21  *pArg.){.  if( !
2b70: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2b80: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66  ck(db) ){.    if
2b90: 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20  ( nOps>0 ){.    
2ba0: 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20    db->xProgress 
2bb0: 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20  = xProgress;.   
2bc0: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
2bd0: 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20  Ops = nOps;.    
2be0: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
2bf0: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d  rg = pArg;.    }
2c00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2c10: 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20  xProgress = 0;. 
2c20: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
2c30: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
2c40: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
2c50: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  g = 0;.    }.  }
2c60: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
2c70: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
2c80: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
2c90: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
2ca0: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
2cb0: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
2cc0: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
2cd0: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
2ce0: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74  urning 0..*/.int
2cf0: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
2d00: 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64  meout(sqlite3 *d
2d10: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
2d20: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
2d30: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
2d40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
2d50: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  SUSE;.  }.  if( 
2d60: 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ms>0 ){.    db->
2d70: 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 6d 73  busyTimeout = ms
2d80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75  ;.    sqlite3_bu
2d90: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73  sy_handler(db, s
2da0: 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79  qliteDefaultBusy
2db0: 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a  Callback, (void*
2dc0: 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )db);.  }else{. 
2dd0: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
2de0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30  handler(db, 0, 0
2df0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2e00: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
2e10: 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65  .** Cause any pe
2e20: 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20  nding operation 
2e30: 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20 65  to stop at its e
2e40: 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e  arliest opportun
2e50: 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ity..*/.void sql
2e60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 73  ite3_interrupt(s
2e70: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
2e80: 66 28 20 64 62 20 26 26 20 28 64 62 2d 3e 6d 61  f( db && (db->ma
2e90: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
2ea0: 43 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61  C_OPEN || db->ma
2eb0: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
2ec0: 43 5f 42 55 53 59 29 20 29 7b 0a 20 20 20 20 64  C_BUSY) ){.    d
2ed0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
2ee0: 74 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 7d 0a 0a  ted = 1;.  }.}..
2ef0: 2f 2a 0a 2a 2a 20 4d 65 6d 6f 72 79 20 61 6c 6c  /*.** Memory all
2f00: 6f 63 61 74 69 6f 6e 20 72 6f 75 74 69 6e 65 73  ocation routines
2f10: 20 74 68 61 74 20 75 73 65 20 53 51 4c 69 74 65   that use SQLite
2f20: 73 20 69 6e 74 65 72 6e 61 6c 20 6d 65 6d 6f 72  s internal memor
2f30: 79 0a 2a 2a 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  y.** memory allo
2f40: 63 61 74 6f 72 2e 20 20 44 65 70 65 6e 64 69 6e  cator.  Dependin
2f50: 67 20 6f 6e 20 68 6f 77 20 53 51 4c 69 74 65 20  g on how SQLite 
2f60: 69 73 20 63 6f 6d 70 69 6c 65 64 2c 20 74 68 65  is compiled, the
2f70: 0a 2a 2a 20 69 6e 74 65 72 6e 61 6c 20 6d 65 6d  .** internal mem
2f80: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 6d 69  ory allocator mi
2f90: 67 68 74 20 62 65 20 6a 75 73 74 20 61 6e 20 61  ght be just an a
2fa0: 6c 69 61 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  lias for the.** 
2fb0: 73 79 73 74 65 6d 20 64 65 66 61 75 6c 74 20 6d  system default m
2fc0: 61 6c 6c 6f 63 2f 72 65 61 6c 6c 6f 63 2f 66 72  alloc/realloc/fr
2fd0: 65 65 2e 20 20 4f 72 20 74 68 65 20 62 75 69 6c  ee.  Or the buil
2fe0: 74 2d 69 6e 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  t-in allocator.*
2ff0: 2a 20 6d 69 67 68 74 20 64 6f 20 65 78 74 72 61  * might do extra
3000: 20 73 74 75 66 66 20 6c 69 6b 65 20 70 75 74 20   stuff like put 
3010: 73 65 6e 74 69 6e 61 6c 73 20 61 72 6f 75 6e 64  sentinals around
3020: 20 62 75 66 66 65 72 73 20 74 6f 20 0a 2a 2a 20   buffers to .** 
3030: 63 68 65 63 6b 20 66 6f 72 20 6f 76 65 72 72 75  check for overru
3040: 6e 73 20 6f 72 20 6c 6f 6f 6b 20 66 6f 72 20 6d  ns or look for m
3050: 65 6d 6f 72 79 20 6c 65 61 6b 73 2e 0a 2a 2a 0a  emory leaks..**.
3060: 2a 2a 20 55 73 65 20 73 71 6c 69 74 65 33 5f 66  ** Use sqlite3_f
3070: 72 65 65 28 29 20 74 6f 20 66 72 65 65 20 6d 65  ree() to free me
3080: 6d 6f 72 79 20 72 65 74 75 72 6e 65 64 20 62 79  mory returned by
3090: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
30a0: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ()..*/.void sqli
30b0: 74 65 33 5f 66 72 65 65 28 76 6f 69 64 20 2a 70  te3_free(void *p
30c0: 29 7b 20 69 66 28 20 70 20 29 20 73 71 6c 69 74  ){ if( p ) sqlit
30d0: 65 33 4f 73 46 72 65 65 28 70 29 3b 20 7d 0a 76  e3OsFree(p); }.v
30e0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 6d 61 6c  oid *sqlite3_mal
30f0: 6c 6f 63 28 69 6e 74 20 6e 42 79 74 65 29 7b 20  loc(int nByte){ 
3100: 72 65 74 75 72 6e 20 6e 42 79 74 65 3e 30 20 3f  return nByte>0 ?
3110: 20 73 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63   sqlite3OsMalloc
3120: 28 6e 42 79 74 65 29 20 3a 20 30 3b 20 7d 0a 76  (nByte) : 0; }.v
3130: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 65 61  oid *sqlite3_rea
3140: 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 4f 6c 64 2c  lloc(void *pOld,
3150: 20 69 6e 74 20 6e 42 79 74 65 29 7b 20 0a 20 20   int nByte){ .  
3160: 69 66 28 20 70 4f 6c 64 20 29 7b 0a 20 20 20 20  if( pOld ){.    
3170: 69 66 28 20 6e 42 79 74 65 3e 30 20 29 7b 0a 20  if( nByte>0 ){. 
3180: 20 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69       return sqli
3190: 74 65 33 4f 73 52 65 61 6c 6c 6f 63 28 70 4f 6c  te3OsRealloc(pOl
31a0: 64 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 7d  d, nByte);.    }
31b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
31c0: 74 65 33 4f 73 46 72 65 65 28 70 4f 6c 64 29 3b  te3OsFree(pOld);
31d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
31e0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
31f0: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
3200: 65 33 5f 6d 61 6c 6c 6f 63 28 6e 42 79 74 65 29  e3_malloc(nByte)
3210: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  ;.  }.}../*.** T
3220: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
3230: 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
3240: 20 61 73 20 73 71 6c 69 74 65 33 5f 63 72 65 61   as sqlite3_crea
3250: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 65  te_function(), e
3260: 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 74  xcept.** that it
3270: 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
3280: 62 65 20 63 61 6c 6c 65 64 20 62 79 20 69 6e 74  be called by int
3290: 65 72 6e 61 6c 20 63 6f 64 65 2e 20 54 68 65 20  ernal code. The 
32a0: 64 69 66 66 65 72 65 6e 63 65 20 69 73 0a 2a 2a  difference is.**
32b0: 20 74 68 61 74 20 69 66 20 61 20 6d 61 6c 6c 6f   that if a mallo
32c0: 63 28 29 20 66 61 69 6c 73 20 69 6e 20 73 71 6c  c() fails in sql
32d0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
32e0: 74 69 6f 6e 28 29 2c 20 61 6e 20 65 72 72 6f 72  tion(), an error
32f0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 72 65 74 75   code.** is retu
3300: 72 6e 65 64 20 61 6e 64 20 74 68 65 20 6d 61 6c  rned and the mal
3310: 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 63  locFailed flag c
3320: 6c 65 61 72 65 64 2e 20 0a 2a 2f 0a 69 6e 74 20  leared. .*/.int 
3330: 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
3340: 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c(.  sqlite3 *db
3350: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
3360: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20  zFunctionName,. 
3370: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74   int nArg,.  int
3380: 20 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 55   enc,.  void *pU
3390: 73 65 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20  serData,.  void 
33a0: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
33b0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
33c0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
33d0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
33e0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
33f0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
3400: 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
3410: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
3420: 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20  3_context*).){. 
3430: 20 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69   FuncDef *p;.  i
3440: 6e 74 20 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28  nt nName;..  if(
3450: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
3460: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
3470: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
3480: 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  USE;.  }.  if( z
3490: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20  FunctionName==0 
34a0: 7c 7c 0a 20 20 20 20 20 20 28 78 46 75 6e 63 20  ||.      (xFunc 
34b0: 26 26 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78 53  && (xFinal || xS
34c0: 74 65 70 29 29 20 7c 7c 20 0a 20 20 20 20 20 20  tep)) || .      
34d0: 28 21 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e  (!xFunc && (xFin
34e0: 61 6c 20 26 26 20 21 78 53 74 65 70 29 29 20 7c  al && !xStep)) |
34f0: 7c 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63 20  |.      (!xFunc 
3500: 26 26 20 28 21 78 46 69 6e 61 6c 20 26 26 20 78  && (!xFinal && x
3510: 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20  Step)) ||.      
3520: 28 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67  (nArg<-1 || nArg
3530: 3e 31 32 37 29 20 7c 7c 0a 20 20 20 20 20 20 28  >127) ||.      (
3540: 32 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74 72  255<(nName = str
3550: 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  len(zFunctionNam
3560: 65 29 29 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  e))) ){.    sqli
3570: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
3580: 49 54 45 5f 45 52 52 4f 52 2c 20 22 62 61 64 20  ITE_ERROR, "bad 
3590: 70 61 72 61 6d 65 74 65 72 73 22 29 3b 0a 20 20  parameters");.  
35a0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
35b0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 23 69  ERROR;.  }.  .#i
35c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
35d0: 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 49 66 20  T_UTF16.  /* If 
35e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
35f0: 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
3600: 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20   encoding type, 
3610: 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20  transform this. 
3620: 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51   ** to one of SQ
3630: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
3640: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75  SQLITE_UTF16BE u
3650: 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51  sing the.  ** SQ
3660: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3670: 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55   macro. SQLITE_U
3680: 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64  TF16 is not used
3690: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a   internally..  *
36a0: 2a 0a 20 20 2a 2a 20 49 66 20 53 51 4c 49 54 45  *.  ** If SQLITE
36b0: 5f 41 4e 59 20 69 73 20 73 70 65 63 69 66 69 65  _ANY is specifie
36c0: 64 2c 20 61 64 64 20 74 68 72 65 65 20 76 65 72  d, add three ver
36d0: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 66 75 6e  sions of the fun
36e0: 63 74 69 6f 6e 0a 20 20 2a 2a 20 74 6f 20 74 68  ction.  ** to th
36f0: 65 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 20 20  e hash table..  
3700: 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51  */.  if( enc==SQ
3710: 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20  LITE_UTF16 ){.  
3720: 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55    enc = SQLITE_U
3730: 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 65  TF16NATIVE;.  }e
3740: 6c 73 65 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c  lse if( enc==SQL
3750: 49 54 45 5f 41 4e 59 20 29 7b 0a 20 20 20 20 69  ITE_ANY ){.    i
3760: 6e 74 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20  nt rc;.    rc = 
3770: 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
3780: 63 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e  c(db, zFunctionN
3790: 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54  ame, nArg, SQLIT
37a0: 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 20 20  E_UTF8,.        
37b0: 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e   pUserData, xFun
37c0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
37d0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
37e0: 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72  QLITE_OK ) retur
37f0: 6e 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20 73  n rc;.    rc = s
3800: 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
3810: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
3820: 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45  me, nArg, SQLITE
3830: 5f 55 54 46 31 36 4c 45 2c 0a 20 20 20 20 20 20  _UTF16LE,.      
3840: 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75    pUserData, xFu
3850: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
3860: 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  l);.    if( rc!=
3870: 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75  SQLITE_OK ) retu
3880: 72 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63 20 3d  rn rc;.    enc =
3890: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3b   SQLITE_UTF16BE;
38a0: 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 65 6e 63  .  }.#else.  enc
38b0: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
38c0: 23 65 6e 64 69 66 0a 20 20 0a 20 20 2f 2a 20 43  #endif.  .  /* C
38d0: 68 65 63 6b 20 69 66 20 61 6e 20 65 78 69 73 74  heck if an exist
38e0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
38f0: 62 65 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e  being overridden
3900: 20 6f 72 20 64 65 6c 65 74 65 64 2e 20 49 66 20   or deleted. If 
3910: 73 6f 2c 0a 20 20 2a 2a 20 61 6e 64 20 74 68 65  so,.  ** and the
3920: 72 65 20 61 72 65 20 61 63 74 69 76 65 20 56 4d  re are active VM
3930: 73 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 53  s, then return S
3940: 51 4c 49 54 45 5f 42 55 53 59 2e 20 49 66 20 61  QLITE_BUSY. If a
3950: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20 69   function.  ** i
3960: 73 20 62 65 69 6e 67 20 6f 76 65 72 72 69 64 64  s being overridd
3970: 65 6e 2f 64 65 6c 65 74 65 64 20 62 75 74 20 74  en/deleted but t
3980: 68 65 72 65 20 61 72 65 20 6e 6f 20 61 63 74 69  here are no acti
3990: 76 65 20 56 4d 73 2c 20 61 6c 6c 6f 77 20 74 68  ve VMs, allow th
39a0: 65 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  e.  ** operation
39b0: 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 62 75 74   to continue but
39c0: 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   invalidate all 
39d0: 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
39e0: 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70  ements..  */.  p
39f0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75   = sqlite3FindFu
3a00: 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63  nction(db, zFunc
3a10: 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c  tionName, nName,
3a20: 20 6e 41 72 67 2c 20 65 6e 63 2c 20 30 29 3b 0a   nArg, enc, 0);.
3a30: 20 20 69 66 28 20 70 20 26 26 20 70 2d 3e 69 50    if( p && p->iP
3a40: 72 65 66 45 6e 63 3d 3d 65 6e 63 20 26 26 20 70  refEnc==enc && p
3a50: 2d 3e 6e 41 72 67 3d 3d 6e 41 72 67 20 29 7b 0a  ->nArg==nArg ){.
3a60: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69      if( db->acti
3a70: 76 65 56 64 62 65 43 6e 74 20 29 7b 0a 20 20 20  veVdbeCnt ){.   
3a80: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
3a90: 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c  db, SQLITE_BUSY,
3aa0: 20 0a 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c   .        "Unabl
3ab0: 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69  e to delete/modi
3ac0: 66 79 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  fy user-function
3ad0: 20 64 75 65 20 74 6f 20 61 63 74 69 76 65 20 73   due to active s
3ae0: 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20  tatements");.   
3af0: 20 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69     assert( !sqli
3b00: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
3b10: 29 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ) );.      retur
3b20: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
3b30: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b40: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
3b50: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
3b60: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  db);.    }.  }..
3b70: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e    p = sqlite3Fin
3b80: 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46  dFunction(db, zF
3b90: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61  unctionName, nNa
3ba0: 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 31  me, nArg, enc, 1
3bb0: 29 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  );.  if( p ){.  
3bc0: 20 20 70 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a    p->flags = 0;.
3bd0: 20 20 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78      p->xFunc = x
3be0: 46 75 6e 63 3b 0a 20 20 20 20 70 2d 3e 78 53 74  Func;.    p->xSt
3bf0: 65 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 20 20  ep = xStep;.    
3c00: 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78  p->xFinalize = x
3c10: 46 69 6e 61 6c 3b 0a 20 20 20 20 70 2d 3e 70 55  Final;.    p->pU
3c20: 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44  serData = pUserD
3c30: 61 74 61 3b 0a 20 20 20 20 70 2d 3e 6e 41 72 67  ata;.    p->nArg
3c40: 20 3d 20 6e 41 72 67 3b 0a 20 20 7d 0a 20 20 72   = nArg;.  }.  r
3c50: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
3c60: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65  .}../*.** Create
3c70: 20 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69   new user functi
3c80: 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ons..*/.int sqli
3c90: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3ca0: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ion(.  sqlite3 *
3cb0: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db,.  const char
3cc0: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3cd0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
3ce0: 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a  nt enc,.  void *
3cf0: 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  p,.  void (*xFun
3d00: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
3d10: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
3d20: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
3d30: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
3d40: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3d50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3d60: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
3d70: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
3d80: 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72  ext*).){.  int r
3d90: 63 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  c;.  assert( !sq
3da0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
3db0: 64 28 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  d() );.  rc = sq
3dc0: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
3dd0: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
3de0: 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 70 2c  e, nArg, enc, p,
3df0: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
3e00: 46 69 6e 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72  Final);..  retur
3e10: 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  n sqlite3ApiExit
3e20: 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69 66  (db, rc);.}..#if
3e30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3e40: 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
3e50: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
3e60: 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20  on16(.  sqlite3 
3e70: 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69  *db,.  const voi
3e80: 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  d *zFunctionName
3e90: 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20  ,.  int nArg,.  
3ea0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20  int eTextRep,.  
3eb0: 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20  void *p,.  void 
3ec0: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
3ed0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
3ee0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a  lite3_value**),.
3ef0: 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28    void (*xStep)(
3f00: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
3f10: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
3f20: 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ue**),.  void (*
3f30: 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f  xFinal)(sqlite3_
3f40: 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69  context*).){.  i
3f50: 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
3f60: 46 75 6e 63 38 3b 0a 20 20 61 73 73 65 72 74 28  Func8;.  assert(
3f70: 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46   !sqlite3MallocF
3f80: 61 69 6c 65 64 28 29 20 29 3b 0a 0a 20 20 7a 46  ailed() );..  zF
3f90: 75 6e 63 38 20 3d 20 73 71 6c 69 74 65 33 75 74  unc8 = sqlite3ut
3fa0: 66 31 36 74 6f 38 28 7a 46 75 6e 63 74 69 6f 6e  f16to8(zFunction
3fb0: 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 72 63 20  Name, -1);.  rc 
3fc0: 3d 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  = sqlite3CreateF
3fd0: 75 6e 63 28 64 62 2c 20 7a 46 75 6e 63 38 2c 20  unc(db, zFunc8, 
3fe0: 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20  nArg, eTextRep, 
3ff0: 70 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  p, xFunc, xStep,
4000: 20 78 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69   xFinal);.  sqli
4010: 74 65 46 72 65 65 28 7a 46 75 6e 63 38 29 3b 0a  teFree(zFunc8);.
4020: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
4030: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
4040: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ;.}.#endif.../*.
4050: 2a 2a 20 44 65 63 6c 61 72 65 20 74 68 61 74 20  ** Declare that 
4060: 61 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62  a function has b
4070: 65 65 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62  een overloaded b
4080: 79 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  y a virtual tabl
4090: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
40a0: 66 75 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79  function already
40b0: 20 65 78 69 73 74 73 20 61 73 20 61 20 72 65 67   exists as a reg
40c0: 75 6c 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63  ular global func
40d0: 74 69 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  tion, then.** th
40e0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
40f0: 6e 6f 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66  no-op.  If the f
4100: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
4110: 20 65 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65   exist, then cre
4120: 61 74 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65  ate.** a new one
4130: 20 74 68 61 74 20 61 6c 77 61 79 73 20 74 68 72   that always thr
4140: 6f 77 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65  ows a run-time e
4150: 72 72 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68  rror.  .**.** Wh
4160: 65 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  en virtual table
4170: 73 20 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76  s intend to prov
4180: 69 64 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65  ide an overloade
4190: 64 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79  d function, they
41a0: 0a 2a 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20  .** should call 
41b0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20  this routine to 
41c0: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c  make sure the gl
41d0: 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78  obal function ex
41e0: 69 73 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61  ists..** A globa
41f0: 6c 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20  l function must 
4200: 65 78 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66  exist in order f
4210: 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
4220: 6f 6e 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72  on to work.** pr
4230: 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73  operly..*/.int s
4240: 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f  qlite3_overload_
4250: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  function(.  sqli
4260: 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74  te3 *db,.  const
4270: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20   char *zName,.  
4280: 69 6e 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e  int nArg.){.  in
4290: 74 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e  t nName = strlen
42a0: 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 73  (zName);.  if( s
42b0: 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
42c0: 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e  on(db, zName, nN
42d0: 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54  ame, nArg, SQLIT
42e0: 45 5f 55 54 46 38 2c 20 30 29 3d 3d 30 20 29 7b  E_UTF8, 0)==0 ){
42f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 72 65 61  .    sqlite3Crea
4300: 74 65 46 75 6e 63 28 64 62 2c 20 7a 4e 61 6d 65  teFunc(db, zName
4310: 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55  , nArg, SQLITE_U
4320: 54 46 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  TF8,.           
4330: 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 73 71             0, sq
4340: 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
4350: 74 69 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  tion, 0, 0);.  }
4360: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
4370: 33 41 70 69 45 78 69 74 28 64 62 2c 20 53 51 4c  3ApiExit(db, SQL
4380: 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e  ITE_OK);.}..#ifn
4390: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
43a0: 54 52 41 43 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69  TRACE./*.** Regi
43b0: 73 74 65 72 20 61 20 74 72 61 63 65 20 66 75 6e  ster a trace fun
43c0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67  ction.  The pArg
43d0: 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f   from the previo
43e0: 75 73 6c 79 20 72 65 67 69 73 74 65 72 65 64 20  usly registered 
43f0: 74 72 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75  trace.** is retu
4400: 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20  rned.  .**.** A 
4410: 4e 55 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74  NULL trace funct
4420: 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  ion means that n
4430: 6f 20 74 72 61 63 69 6e 67 20 69 73 20 65 78 65  o tracing is exe
4440: 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55  cutes.  A non-NU
4450: 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61  LL.** trace is a
4460: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75   pointer to a fu
4470: 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69  nction that is i
4480: 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74  nvoked at the st
4490: 61 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 53  art of each.** S
44a0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  QL statement..*/
44b0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74  .void *sqlite3_t
44c0: 72 61 63 65 28 73 71 6c 69 74 65 33 20 2a 64 62  race(sqlite3 *db
44d0: 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29  , void (*xTrace)
44e0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
44f0: 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29  r*), void *pArg)
4500: 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d  {.  void *pOld =
4510: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a   db->pTraceArg;.
4520: 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78    db->xTrace = x
4530: 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72  Trace;.  db->pTr
4540: 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  aceArg = pArg;. 
4550: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
4560: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
4570: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
4580: 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f  n.  The pArg fro
4590: 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  m the previously
45a0: 20 72 65 67 69 73 74 65 72 65 64 20 0a 2a 2a 20   registered .** 
45b0: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
45c0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a   is returned.  .
45d0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 70 72 6f  **.** A NULL pro
45e0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65  file function me
45f0: 61 6e 73 20 74 68 61 74 20 6e 6f 20 70 72 6f 66  ans that no prof
4600: 69 6c 69 6e 67 20 69 73 20 65 78 65 63 75 74 65  iling is execute
4610: 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a  s.  A non-NULL.*
4620: 2a 20 70 72 6f 66 69 6c 65 20 69 73 20 61 20 70  * profile is a p
4630: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
4640: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
4650: 6f 6b 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63  oked at the conc
4660: 6c 75 73 69 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63  lusion of.** eac
4670: 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
4680: 74 68 61 74 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a  that is run..*/.
4690: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 70 72  void *sqlite3_pr
46a0: 6f 66 69 6c 65 28 0a 20 20 73 71 6c 69 74 65 33  ofile(.  sqlite3
46b0: 20 2a 64 62 2c 0a 20 20 76 6f 69 64 20 28 2a 78   *db,.  void (*x
46c0: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
46d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
46e0: 65 5f 75 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69  e_uint64),.  voi
46f0: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 76 6f 69  d *pArg.){.  voi
4700: 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50  d *pOld = db->pP
4710: 72 6f 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d  rofileArg;.  db-
4720: 3e 78 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f  >xProfile = xPro
4730: 66 69 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f  file;.  db->pPro
4740: 66 69 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a  fileArg = pArg;.
4750: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
4760: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
4770: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
4780: 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54  ./*** EXPERIMENT
4790: 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  AL ***.**.** Reg
47a0: 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e  ister a function
47b0: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77   to be invoked w
47c0: 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hen a transactio
47d0: 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49  n comments..** I
47e0: 66 20 74 68 65 20 69 6e 76 6f 6b 65 64 20 66 75  f the invoked fu
47f0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e  nction returns n
4800: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
4810: 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73  e commit becomes
4820: 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a   a.** rollback..
4830: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
4840: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20  _commit_hook(.  
4850: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
4860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74            /* Att
4870: 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20  ach the hook to 
4880: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
4890: 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61  .  int (*xCallba
48a0: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20  ck)(void*),  /* 
48b0: 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  Function to invo
48c0: 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69  ke on each commi
48d0: 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  t */.  void *pAr
48e0: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
48f0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
4900: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
4910: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
4920: 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67  = db->pCommitArg
4930: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43  ;.  db->xCommitC
4940: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
4950: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d  ack;.  db->pComm
4960: 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  itArg = pArg;.  
4970: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a  return pOld;.}..
4980: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
4990: 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20   callback to be 
49a0: 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d  invoked each tim
49b0: 65 20 61 20 72 6f 77 20 69 73 20 75 70 64 61 74  e a row is updat
49c0: 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  ed,.** inserted 
49d0: 6f 72 20 64 65 6c 65 74 65 64 20 75 73 69 6e 67  or deleted using
49e0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
49f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f  onnection..*/.vo
4a00: 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 70 64 61  id *sqlite3_upda
4a10: 74 65 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  te_hook(.  sqlit
4a20: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
4a30: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
4a40: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
4a50: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f  database */.  vo
4a60: 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  id (*xCallback)(
4a70: 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 20 63  void*,int,char c
4a80: 6f 6e 73 74 20 2a 2c 63 68 61 72 20 63 6f 6e 73  onst *,char cons
4a90: 74 20 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  t *,sqlite_int64
4aa0: 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20  ),.  void *pArg 
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4ac0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
4ad0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  e function */.){
4ae0: 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20  .  void *pRet = 
4af0: 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 3b 0a  db->pUpdateArg;.
4b00: 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
4b10: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
4b20: 6b 3b 0a 20 20 64 62 2d 3e 70 55 70 64 61 74 65  k;.  db->pUpdate
4b30: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
4b40: 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a  turn pRet;.}../*
4b50: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63  .** Register a c
4b60: 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e  allback to be in
4b70: 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20  voked each time 
4b80: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
4b90: 20 72 6f 6c 6c 65 64 0a 2a 2a 20 62 61 63 6b 20   rolled.** back 
4ba0: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
4bb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
4bc0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 6f  void *sqlite3_ro
4bd0: 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73  llback_hook(.  s
4be0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
4bf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61           /* Atta
4c00: 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74  ch the hook to t
4c10: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
4c20: 20 20 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61    void (*xCallba
4c30: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 2f 2a 20 43  ck)(void*), /* C
4c40: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
4c50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c70: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
4c80: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29  he function */.)
4c90: 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d  {.  void *pRet =
4ca0: 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72   db->pRollbackAr
4cb0: 67 3b 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61  g;.  db->xRollba
4cc0: 63 6b 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  ckCallback = xCa
4cd0: 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52  llback;.  db->pR
4ce0: 6f 6c 6c 62 61 63 6b 41 72 67 20 3d 20 70 41 72  ollbackArg = pAr
4cf0: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74  g;.  return pRet
4d00: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
4d10: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
4d20: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f  d to create a co
4d30: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61  nnection to a da
4d40: 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20  tabase BTree.** 
4d50: 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c  driver.  If zFil
4d60: 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  ename is the nam
4d70: 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65  e of a file, the
4d80: 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a  n that file is.*
4d90: 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65  * opened and use
4da0: 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  d.  If zFilename
4db0: 20 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61   is the magic na
4dc0: 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68  me ":memory:" th
4dd0: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  en.** the databa
4de0: 73 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  se is stored in 
4df0: 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74  memory (and is t
4e00: 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73  hus forgotten as
4e10: 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20   soon as.** the 
4e20: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
4e30: 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65  osed.)  If zFile
4e40: 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65  name is NULL the
4e50: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
4e60: 2a 20 69 73 20 61 20 22 76 69 72 74 75 61 6c 22  * is a "virtual"
4e70: 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 74 72   database for tr
4e80: 61 6e 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79  ansient use only
4e90: 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20   and is deleted 
4ea0: 61 73 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68  as.** soon as th
4eb0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
4ec0: 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
4ed0: 76 69 72 74 75 61 6c 20 64 61 74 61 62 61 73 65  virtual database
4ee0: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
4ef0: 20 64 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74   disk file (that
4f00: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
4f10: 79 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65  y.** deleted whe
4f20: 6e 20 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c  n the file is cl
4f30: 6f 73 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62  osed) or it an b
4f40: 65 20 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20  e held entirely 
4f50: 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65  in memory,.** de
4f60: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76  pending on the v
4f70: 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d  alues of the TEM
4f80: 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d  P_STORE compile-
4f90: 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74  time macro and t
4fa0: 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73  he.** db->temp_s
4fb0: 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61  tore variable, a
4fc0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
4fd0: 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a  following chart:
4fe0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d  .**.**       TEM
4ff0: 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e  P_STORE     db->
5000: 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c  temp_store     L
5010: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f  ocation of tempo
5020: 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  rary database.**
5030: 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d         ---------
5040: 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -     ----------
5050: 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d  ----     -------
5060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5070: 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20  -------.**      
5080: 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
5090: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
50a0: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
50b0: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
50c0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
50d0: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
50e0: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
50f0: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
5100: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
5110: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20  **           1  
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
5140: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5160: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  1              f
5170: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
5180: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
5190: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
51a0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
51b0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
51c0: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
51d0: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
51e0: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
51f0: 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20 20           any    
5200: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
5210: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  */.int sqlite3Bt
5220: 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f  reeFactory(.  co
5230: 6e 73 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  nst sqlite3 *db,
5240: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20          /* Main 
5250: 64 61 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70  database when op
5260: 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77  ening aux otherw
5270: 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74  ise 0 */.  const
5280: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
5290: 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ,    /* Name of 
52a0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
52b0: 69 6e 67 20 74 68 65 20 42 54 72 65 65 20 64 61  ing the BTree da
52c0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
52d0: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20  omitJournal,    
52e0: 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45        /* if TRUE
52f0: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75   then do not jou
5300: 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a  rnal this file *
5310: 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20  /.  int nCache, 
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5330: 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20   How many pages 
5340: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
5350: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70  e */.  Btree **p
5360: 70 42 74 72 65 65 20 20 20 20 20 20 20 20 20 20  pBtree          
5370: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e   /* Pointer to n
5380: 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20  ew Btree object 
5390: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
53a0: 29 7b 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66  ){.  int btree_f
53b0: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20  lags = 0;.  int 
53c0: 72 63 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28  rc;.  .  assert(
53d0: 20 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a   ppBtree != 0);.
53e0: 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61    if( omitJourna
53f0: 6c 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  l ){.    btree_f
5400: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d  lags |= BTREE_OM
5410: 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a  IT_JOURNAL;.  }.
5420: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
5430: 26 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c  & SQLITE_NoReadl
5440: 6f 63 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ock ){.    btree
5450: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
5460: 4e 4f 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d  NO_READLOCK;.  }
5470: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
5480: 3d 3d 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f  ==0 ){.#if TEMP_
5490: 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20  STORE==0.    /* 
54a0: 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65  Do nothing */.#e
54b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
54c0: 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
54d0: 42 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45  B.#if TEMP_STORE
54e0: 3d 3d 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ==1.    if( db->
54f0: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20  temp_store==2 ) 
5500: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
5510: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
5520: 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32  if TEMP_STORE==2
5530: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d  .    if( db->tem
5540: 70 5f 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69  p_store!=1 ) zFi
5550: 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
5560: 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  y:";.#endif.#if 
5570: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20  TEMP_STORE==3.  
5580: 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a    zFilename = ":
5590: 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66  memory:";.#endif
55a0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
55b0: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20  E_OMIT_MEMORYDB 
55c0: 2a 2f 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  */.  }..  rc = s
55d0: 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
55e0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 28 73 71 6c 69  zFilename, (sqli
55f0: 74 65 33 20 2a 29 64 62 2c 20 70 70 42 74 72 65  te3 *)db, ppBtre
5600: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b  e, btree_flags);
5610: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
5620: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
5630: 74 65 33 42 74 72 65 65 53 65 74 42 75 73 79 48  te3BtreeSetBusyH
5640: 61 6e 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c  andler(*ppBtree,
5650: 20 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73   (void*)&db->bus
5660: 79 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73  yHandler);.    s
5670: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
5680: 63 68 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65  cheSize(*ppBtree
5690: 2c 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20  , nCache);.  }. 
56a0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
56b0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d  *.** Return UTF-
56c0: 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73  8 encoded Englis
56d0: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
56e0: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  nation of the mo
56f0: 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72  st recent.** err
5700: 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  or..*/.const cha
5710: 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  r *sqlite3_errms
5720: 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  g(sqlite3 *db){.
5730: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
5740: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
5750: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
5760: 29 20 29 3b 0a 20 20 69 66 28 20 21 64 62 20 29  ) );.  if( !db )
5770: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c  {.    return sql
5780: 69 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54  ite3ErrStr(SQLIT
5790: 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20  E_NOMEM);.  }.  
57a0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
57b0: 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62  yCheck(db) || db
57c0: 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54  ->errCode==SQLIT
57d0: 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20  E_MISUSE ){.    
57e0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72  return sqlite3Er
57f0: 72 53 74 72 28 53 51 4c 49 54 45 5f 4d 49 53 55  rStr(SQLITE_MISU
5800: 53 45 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 28  SE);.  }.  z = (
5810: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
5820: 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45 72  lue_text(db->pEr
5830: 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29  r);.  if( z==0 )
5840: 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
5850: 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43  3ErrStr(db->errC
5860: 6f 64 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ode);.  }.  retu
5870: 72 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  rn z;.}..#ifndef
5880: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
5890: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  16./*.** Return 
58a0: 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 45  UTF-16 encoded E
58b0: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
58c0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74  explanation of t
58d0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
58e0: 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73  * error..*/.cons
58f0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
5900: 65 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65 33  errmsg16(sqlite3
5910: 20 2a 64 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61   *db){.  /* Beca
5920: 75 73 65 20 61 6c 6c 20 74 68 65 20 63 68 61 72  use all the char
5930: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74  acters in the st
5940: 72 69 6e 67 20 61 72 65 20 69 6e 20 74 68 65 20  ring are in the 
5950: 75 6e 69 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e  unicode.  ** ran
5960: 67 65 20 30 78 30 30 2d 30 78 46 46 2c 20 69 66  ge 0x00-0xFF, if
5970: 20 77 65 20 70 61 64 20 74 68 65 20 62 69 67 2d   we pad the big-
5980: 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69  endian string wi
5990: 74 68 20 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20  th a .  ** zero 
59a0: 62 79 74 65 2c 20 77 65 20 63 61 6e 20 6f 62 74  byte, we can obt
59b0: 61 69 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d 65  ain the little-e
59c0: 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74  ndian string wit
59d0: 68 0a 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69  h.  ** &big_endi
59e0: 61 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74  an[1]..  */.  st
59f0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
5a00: 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b  outOfMemBe[] = {
5a10: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
5a20: 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20  'u', 0, 't', 0, 
5a30: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27  ' ', .    0, 'o'
5a40: 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27  , 0, 'f', 0, ' '
5a50: 2c 20 0a 20 20 20 20 30 2c 20 27 6d 27 2c 20 30  , .    0, 'm', 0
5a60: 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30  , 'e', 0, 'm', 0
5a70: 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'o', 0, 'r', 0
5a80: 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20  , 'y', 0, 0, 0. 
5a90: 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   };.  static con
5aa0: 73 74 20 63 68 61 72 20 6d 69 73 75 73 65 42 65  st char misuseBe
5ab0: 20 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27   [] = {.    0, '
5ac0: 6c 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27  l', 0, 'i', 0, '
5ad0: 62 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27  b', 0, 'r', 0, '
5ae0: 61 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27  a', 0, 'r', 0, '
5af0: 79 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  y', 0, ' ', .   
5b00: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c   0, 'r', 0, 'o',
5b10: 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c   0, 'u', 0, 't',
5b20: 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c   0, 'i', 0, 'n',
5b30: 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 20 27 2c   0, 'e', 0, ' ',
5b40: 20 0a 20 20 20 20 30 2c 20 27 63 27 2c 20 30 2c   .    0, 'c', 0,
5b50: 20 27 61 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c   'a', 0, 'l', 0,
5b60: 20 27 6c 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'l', 0, 'e', 0,
5b70: 20 27 64 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   'd', 0, ' ', . 
5b80: 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75     0, 'o', 0, 'u
5b90: 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20  ', 0, 't', 0, ' 
5ba0: 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20  ', .    0, 'o', 
5bb0: 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20  0, 'f', 0, ' ', 
5bc0: 0a 20 20 20 20 30 2c 20 27 73 27 2c 20 30 2c 20  .    0, 's', 0, 
5bd0: 27 65 27 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20  'e', 0, 'q', 0, 
5be0: 27 75 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  'u', 0, 'e', 0, 
5bf0: 27 6e 27 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20  'n', 0, 'c', 0, 
5c00: 27 65 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d  'e', 0, 0, 0.  }
5c10: 3b 0a 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  ;..  const void 
5c20: 2a 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  *z;.  assert( !s
5c30: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c  qlite3MallocFail
5c40: 65 64 28 29 20 29 3b 0a 20 20 69 66 28 20 21 64  ed() );.  if( !d
5c50: 62 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  b ){.    return 
5c60: 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66 4d  (void *)(&outOfM
5c70: 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31  emBe[SQLITE_UTF1
5c80: 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f  6NATIVE==SQLITE_
5c90: 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20  UTF16LE?1:0]);. 
5ca0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
5cb0: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5cc0: 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d  || db->errCode==
5cd0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b  SQLITE_MISUSE ){
5ce0: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69  .    return (voi
5cf0: 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b 53  d *)(&misuseBe[S
5d00: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5d10: 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E==SQLITE_UTF16L
5d20: 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a  E?1:0]);.  }.  z
5d30: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5d40: 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72  _text16(db->pErr
5d50: 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  );.  if( z==0 ){
5d60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
5d70: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
5d80: 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72 72  , -1, sqlite3Err
5d90: 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29  Str(db->errCode)
5da0: 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,.         SQLIT
5db0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
5dc0: 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d 20  TATIC);.    z = 
5dd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
5de0: 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a  xt16(db->pErr);.
5df0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 41 70 69    }.  sqlite3Api
5e00: 45 78 69 74 28 30 2c 20 30 29 3b 0a 20 20 72 65  Exit(0, 0);.  re
5e10: 74 75 72 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66  turn z;.}.#endif
5e20: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
5e30: 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  UTF16 */../*.** 
5e40: 52 65 74 75 72 6e 20 74 68 65 20 6d 6f 73 74 20  Return the most 
5e50: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
5e60: 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 61  e generated by a
5e70: 6e 20 53 51 4c 69 74 65 20 72 6f 75 74 69 6e 65  n SQLite routine
5e80: 2e 20 49 66 20 4e 55 4c 4c 20 69 73 0a 2a 2a 20  . If NULL is.** 
5e90: 70 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 66  passed to this f
5ea0: 75 6e 63 74 69 6f 6e 2c 20 77 65 20 61 73 73 75  unction, we assu
5eb0: 6d 65 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  me a malloc() fa
5ec0: 69 6c 65 64 20 64 75 72 69 6e 67 20 73 71 6c 69  iled during sqli
5ed0: 74 65 33 5f 6f 70 65 6e 28 29 2e 0a 2a 2f 0a 69  te3_open()..*/.i
5ee0: 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nt sqlite3_errco
5ef0: 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  de(sqlite3 *db){
5f00: 0a 20 20 69 66 28 20 21 64 62 20 7c 7c 20 73 71  .  if( !db || sq
5f10: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
5f20: 64 28 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  d() ){.    retur
5f30: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
5f40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
5f50: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
5f60: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
5f70: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
5f80: 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 65  }.  return db->e
5f90: 72 72 43 6f 64 65 20 26 20 64 62 2d 3e 65 72 72  rrCode & db->err
5fa0: 4d 61 73 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  Mask;.}../*.** C
5fb0: 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c  reate a new coll
5fc0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66  ating function f
5fd0: 6f 72 20 64 61 74 61 62 61 73 65 20 22 64 62 22  or database "db"
5fe0: 2e 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20 7a  .  The name is z
5ff0: 4e 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  Name.** and the 
6000: 65 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e  encoding is enc.
6010: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
6020: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a  reateCollation(.
6030: 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a    sqlite3* db, .
6040: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
6050: 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c  ame, .  int enc,
6060: 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a   .  void* pCtx,.
6070: 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29    int(*xCompare)
6080: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
6090: 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74   void*,int,const
60a0: 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c   void*).){.  Col
60b0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69  lSeq *pColl;.  i
60c0: 6e 74 20 65 6e 63 32 3b 0a 20 20 0a 20 20 69 66  nt enc2;.  .  if
60d0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
60e0: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
60f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
6100: 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  SUSE;.  }..  /* 
6110: 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  If SQLITE_UTF16 
6120: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
6130: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70  the encoding typ
6140: 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69  e, transform thi
6150: 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66  s.  ** to one of
6160: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
6170: 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  or SQLITE_UTF16B
6180: 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a  E using the.  **
6190: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
61a0: 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54  IVE macro. SQLIT
61b0: 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75  E_UTF16 is not u
61c0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  sed internally..
61d0: 20 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20 65 6e    */.  enc2 = en
61e0: 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31  c & ~SQLITE_UTF1
61f0: 36 5f 41 4c 49 47 4e 45 44 3b 0a 20 20 69 66 28  6_ALIGNED;.  if(
6200: 20 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54   enc2==SQLITE_UT
6210: 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 32 20  F16 ){.    enc2 
6220: 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  = SQLITE_UTF16NA
6230: 54 49 56 45 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  TIVE;.  }..  if(
6240: 20 28 65 6e 63 32 26 7e 33 29 21 3d 30 20 29 7b   (enc2&~3)!=0 ){
6250: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
6260: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52  r(db, SQLITE_ERR
6270: 4f 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 65 6e 63  OR, "unknown enc
6280: 6f 64 69 6e 67 22 29 3b 0a 20 20 20 20 72 65 74  oding");.    ret
6290: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
62a0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63  ;.  }..  /* Chec
62b0: 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 20 69  k if this call i
62c0: 73 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65  s removing or re
62d0: 70 6c 61 63 69 6e 67 20 61 6e 20 65 78 69 73 74  placing an exist
62e0: 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20  ing collation . 
62f0: 20 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20 49 66   ** sequence. If
6300: 20 73 6f 2c 20 61 6e 64 20 74 68 65 72 65 20 61   so, and there a
6310: 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 72  re active VMs, r
6320: 65 74 75 72 6e 20 62 75 73 79 2e 20 49 66 20 74  eturn busy. If t
6330: 68 65 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f  here.  ** are no
6340: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 69 6e 76   active VMs, inv
6350: 61 6c 69 64 61 74 65 20 61 6e 79 20 70 72 65 2d  alidate any pre-
6360: 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
6370: 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c  nts..  */.  pCol
6380: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
6390: 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65  ollSeq(db, (u8)e
63a0: 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c  nc2, zName, strl
63b0: 65 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20  en(zName), 0);. 
63c0: 20 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70 43   if( pColl && pC
63d0: 6f 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20  oll->xCmp ){.   
63e0: 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56   if( db->activeV
63f0: 64 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20  dbeCnt ){.      
6400: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
6410: 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20   SQLITE_BUSY, . 
6420: 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74         "Unable t
6430: 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20  o delete/modify 
6440: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
6450: 63 65 20 64 75 65 20 74 6f 20 61 63 74 69 76 65  ce due to active
6460: 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20   statements");. 
6470: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
6480: 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20  TE_BUSY;.    }. 
6490: 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
64a0: 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
64b0: 74 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70  ts(db);.  }..  p
64c0: 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
64d0: 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75  ndCollSeq(db, (u
64e0: 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73  8)enc2, zName, s
64f0: 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29  trlen(zName), 1)
6500: 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b  ;.  if( pColl ){
6510: 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70  .    pColl->xCmp
6520: 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20   = xCompare;.   
6530: 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20   pColl->pUser = 
6540: 70 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d  pCtx;.    pColl-
6550: 3e 65 6e 63 20 3d 20 65 6e 63 32 20 7c 20 28 65  >enc = enc2 | (e
6560: 6e 63 20 26 20 53 51 4c 49 54 45 5f 55 54 46 31  nc & SQLITE_UTF1
6570: 36 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20 7d 0a  6_ALIGNED);.  }.
6580: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
6590: 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29  b, SQLITE_OK, 0)
65a0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
65b0: 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  E_OK;.}.../*.** 
65c0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  This routine doe
65d0: 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70  s the work of op
65e0: 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  ening a database
65f0: 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a   on behalf of.**
6600: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20   sqlite3_open() 
6610: 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  and sqlite3_open
6620: 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61  16(). The databa
6630: 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69  se filename "zFi
6640: 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20  lename"  .** is 
6650: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a  UTF-8 encoded..*
6660: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65  /.static int ope
6670: 6e 44 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e  nDatabase(.  con
6680: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
6690: 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20  me, /* Database 
66a0: 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65  filename UTF-8 e
66b0: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69  ncoded */.  sqli
66c0: 74 65 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20  te3 **ppDb      
66d0: 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72     /* OUT: Retur
66e0: 6e 65 64 20 64 61 74 61 62 61 73 65 20 68 61 6e  ned database han
66f0: 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  dle */.){.  sqli
6700: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
6710: 63 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  c;.  CollSeq *pC
6720: 6f 6c 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  oll;..  assert( 
6730: 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61  !sqlite3MallocFa
6740: 69 6c 65 64 28 29 20 29 3b 0a 0a 20 20 2f 2a 20  iled() );..  /* 
6750: 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c  Allocate the sql
6760: 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75  ite data structu
6770: 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c  re */.  db = sql
6780: 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f  iteMalloc( sizeo
6790: 66 28 73 71 6c 69 74 65 33 29 20 29 3b 0a 20 20  f(sqlite3) );.  
67a0: 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f  if( db==0 ) goto
67b0: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64   opendb_out;.  d
67c0: 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 30 78 66  b->errMask = 0xf
67d0: 66 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65  f;.  db->priorNe
67e0: 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62  wRowid = 0;.  db
67f0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
6800: 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64  _MAGIC_BUSY;.  d
6810: 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62  b->nDb = 2;.  db
6820: 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53  ->aDb = db->aDbS
6830: 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 61 75 74  tatic;.  db->aut
6840: 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 64  oCommit = 1;.  d
6850: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
6860: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
6870: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
6880: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 3c  ULT_FILE_FORMAT<
6890: 34 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  4.              
68a0: 20 20 20 7c 20 53 51 4c 49 54 45 5f 4c 65 67 61     | SQLITE_Lega
68b0: 63 79 46 69 6c 65 46 6d 74 0a 23 65 6e 64 69 66  cyFileFmt.#endif
68c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
68d0: 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e  NABLE_LOAD_EXTEN
68e0: 53 49 4f 4e 0a 20 20 20 20 20 20 20 20 20 20 20  SION.           
68f0: 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 4c        | SQLITE_L
6900: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 0a 23 65 6e  oadExtension.#en
6910: 64 69 66 0a 20 20 20 20 20 20 3b 0a 20 20 73 71  dif.      ;.  sq
6920: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
6930: 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45  b->aFunc, SQLITE
6940: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
6950: 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49  ;.  sqlite3HashI
6960: 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  nit(&db->aCollSe
6970: 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  q, SQLITE_HASH_S
6980: 54 52 49 4e 47 2c 20 30 29 3b 0a 23 69 66 6e 64  TRING, 0);.#ifnd
6990: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
69a0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 73 71  IRTUALTABLE.  sq
69b0: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
69c0: 62 2d 3e 61 4d 6f 64 75 6c 65 2c 20 53 51 4c 49  b->aModule, SQLI
69d0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
69e0: 30 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  0);.#endif..  /*
69f0: 20 41 64 64 20 74 68 65 20 64 65 66 61 75 6c 74   Add the default
6a00: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
6a10: 6e 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41  nce BINARY. BINA
6a20: 52 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  RY works for bot
6a30: 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64  h UTF-8.  ** and
6a40: 20 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20   UTF-16, so add 
6a50: 61 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61  a version for ea
6a60: 63 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20  ch to avoid any 
6a70: 75 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a  unnecessary.  **
6a80: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68   conversions. Th
6a90: 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61  e only error tha
6aa0: 74 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65  t can occur here
6ab0: 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   is a malloc() f
6ac0: 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 69  ailure..  */.  i
6ad0: 66 28 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69  f( createCollati
6ae0: 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c  on(db, "BINARY",
6af0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
6b00: 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c   binCollFunc) ||
6b10: 0a 20 20 20 20 20 20 63 72 65 61 74 65 43 6f 6c  .      createCol
6b20: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  lation(db, "BINA
6b30: 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  RY", SQLITE_UTF1
6b40: 36 42 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46  6BE, 0, binCollF
6b50: 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 63 72  unc) ||.      cr
6b60: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
6b70: 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49  , "BINARY", SQLI
6b80: 54 45 5f 55 54 46 31 36 4c 45 2c 20 30 2c 20 62  TE_UTF16LE, 0, b
6b90: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
6ba0: 20 20 20 20 20 28 64 62 2d 3e 70 44 66 6c 74 43       (db->pDfltC
6bb0: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
6bc0: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c  dCollSeq(db, SQL
6bd0: 49 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41 52  ITE_UTF8, "BINAR
6be0: 59 22 2c 20 36 2c 20 30 29 29 3d 3d 30 20 0a 20  Y", 6, 0))==0 . 
6bf0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6c00: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
6c10: 6c 65 64 28 29 20 29 3b 0a 20 20 20 20 64 62 2d  led() );.    db-
6c20: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
6c30: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20  MAGIC_CLOSED;.  
6c40: 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75    goto opendb_ou
6c50: 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73  t;.  }..  /* Als
6c60: 6f 20 61 64 64 20 61 20 55 54 46 2d 38 20 63 61  o add a UTF-8 ca
6c70: 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 63  se-insensitive c
6c80: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
6c90: 65 2e 20 2a 2f 0a 20 20 63 72 65 61 74 65 43 6f  e. */.  createCo
6ca0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43  llation(db, "NOC
6cb0: 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ASE", SQLITE_UTF
6cc0: 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c  8, 0, nocaseColl
6cd0: 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20 20 2f  atingFunc);..  /
6ce0: 2a 20 53 65 74 20 66 6c 61 67 73 20 6f 6e 20 74  * Set flags on t
6cf0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  he built-in coll
6d00: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
6d10: 2a 2f 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f  */.  db->pDfltCo
6d20: 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  ll->type = SQLIT
6d30: 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20  E_COLL_BINARY;. 
6d40: 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33   pColl = sqlite3
6d50: 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20  FindCollSeq(db, 
6d60: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f  SQLITE_UTF8, "NO
6d70: 43 41 53 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20  CASE", 6, 0);.  
6d80: 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20  if( pColl ){.   
6d90: 20 70 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53   pColl->type = S
6da0: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53  QLITE_COLL_NOCAS
6db0: 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65  E;.  }..  /* Ope
6dc0: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61  n the backend da
6dd0: 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f  tabase driver */
6de0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
6df0: 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
6e00: 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41  zFilename, 0, MA
6e10: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44  X_PAGES, &db->aD
6e20: 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28  b[0].pBt);.  if(
6e30: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
6e40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
6e50: 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20  or(db, rc, 0);. 
6e60: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
6e70: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
6e80: 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  ED;.    goto ope
6e90: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64  ndb_out;.  }.  d
6ea0: 62 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  b->aDb[0].pSchem
6eb0: 61 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65 6d  a = sqlite3Schem
6ec0: 61 47 65 74 28 64 62 2d 3e 61 44 62 5b 30 5d 2e  aGet(db->aDb[0].
6ed0: 70 42 74 29 3b 0a 20 20 64 62 2d 3e 61 44 62 5b  pBt);.  db->aDb[
6ee0: 31 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c  1].pSchema = sql
6ef0: 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 30 29  ite3SchemaGet(0)
6f00: 3b 0a 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65 66  ;...  /* The def
6f10: 61 75 6c 74 20 73 61 66 65 74 79 5f 6c 65 76 65  ault safety_leve
6f20: 6c 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  l for the main d
6f30: 61 74 61 62 61 73 65 20 69 73 20 27 66 75 6c 6c  atabase is 'full
6f40: 27 3b 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a  '; for the temp.
6f50: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74    ** database it
6f60: 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73   is 'NONE'. This
6f70: 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67   matches the pag
6f80: 65 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74  er layer default
6f90: 73 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e  s.  .  */.  db->
6fa0: 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22  aDb[0].zName = "
6fb0: 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62  main";.  db->aDb
6fc0: 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c  [0].safety_level
6fd0: 20 3d 20 33 3b 0a 23 69 66 6e 64 65 66 20 53 51   = 3;.#ifndef SQ
6fe0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
6ff0: 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e  .  db->aDb[1].zN
7000: 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a 20 20  ame = "temp";.  
7010: 64 62 2d 3e 61 44 62 5b 31 5d 2e 73 61 66 65 74  db->aDb[1].safet
7020: 79 5f 6c 65 76 65 6c 20 3d 20 31 3b 0a 23 65 6e  y_level = 1;.#en
7030: 64 69 66 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74  dif..  /* Regist
7040: 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20  er all built-in 
7050: 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20 64  functions, but d
7060: 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  o not attempt to
7070: 20 72 65 61 64 20 74 68 65 0a 20 20 2a 2a 20 64   read the.  ** d
7080: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 79  atabase schema y
7090: 65 74 2e 20 54 68 69 73 20 69 73 20 64 65 6c 61  et. This is dela
70a0: 79 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69  yed until the fi
70b0: 72 73 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  rst time the dat
70c0: 61 62 61 73 65 0a 20 20 2a 2a 20 69 73 20 61 63  abase.  ** is ac
70d0: 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  cessed..  */.  i
70e0: 66 28 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  f( !sqlite3Mallo
70f0: 63 46 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20  cFailed() ){.   
7100: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
7110: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
7120: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69  .    sqlite3Regi
7130: 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
7140: 69 6f 6e 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20  ions(db);.  }.  
7150: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
7160: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 0a  TE_MAGIC_OPEN;..
7170: 20 20 2f 2a 20 4c 6f 61 64 20 61 75 74 6f 6d 61    /* Load automa
7180: 74 69 63 20 65 78 74 65 6e 73 69 6f 6e 73 20 2d  tic extensions -
7190: 20 65 78 74 65 6e 73 69 6f 6e 73 20 74 68 61 74   extensions that
71a0: 20 68 61 76 65 20 62 65 65 6e 20 72 65 67 69 73   have been regis
71b0: 74 65 72 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  tered.  ** using
71c0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 61 75 74   the sqlite3_aut
71d0: 6f 6d 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e  omatic_extension
71e0: 28 29 20 41 50 49 2e 0a 20 20 2a 2f 0a 20 20 28  () API..  */.  (
71f0: 76 6f 69 64 29 73 71 6c 69 74 65 33 41 75 74 6f  void)sqlite3Auto
7200: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 64  LoadExtensions(d
7210: 62 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  b);..#ifdef SQLI
7220: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20  TE_ENABLE_FTS1. 
7230: 20 7b 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e   {.    extern in
7240: 74 20 73 71 6c 69 74 65 33 46 74 73 31 49 6e 69  t sqlite3Fts1Ini
7250: 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
7260: 20 73 71 6c 69 74 65 33 46 74 73 31 49 6e 69 74   sqlite3Fts1Init
7270: 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  (db);.  }.#endif
7280: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
7290: 45 4e 41 42 4c 45 5f 46 54 53 32 0a 20 20 7b 0a  ENABLE_FTS2.  {.
72a0: 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73      extern int s
72b0: 71 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28 73  qlite3Fts2Init(s
72c0: 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 73 71  qlite3*);.    sq
72d0: 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28 64 62  lite3Fts2Init(db
72e0: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
72f0: 20 2f 2a 20 2d 44 53 51 4c 49 54 45 5f 44 45 46   /* -DSQLITE_DEF
7300: 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44  AULT_LOCKING_MOD
7310: 45 3d 31 20 6d 61 6b 65 73 20 45 58 43 4c 55 53  E=1 makes EXCLUS
7320: 49 56 45 20 74 68 65 20 64 65 66 61 75 6c 74 20  IVE the default 
7330: 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64  locking.  ** mod
7340: 65 2e 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46  e.  -DSQLITE_DEF
7350: 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44  AULT_LOCKING_MOD
7360: 45 3d 30 20 6d 61 6b 65 20 4e 4f 52 4d 41 4c 20  E=0 make NORMAL 
7370: 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b  the default lock
7380: 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64 65 2e 20 20  ing.  ** mode.  
7390: 44 6f 69 6e 67 20 6e 6f 74 68 69 6e 67 20 61 74  Doing nothing at
73a0: 20 61 6c 6c 20 61 6c 73 6f 20 6d 61 6b 65 73 20   all also makes 
73b0: 4e 4f 52 4d 41 4c 20 74 68 65 20 64 65 66 61 75  NORMAL the defau
73c0: 6c 74 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  lt..  */.#ifdef 
73d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c  SQLITE_DEFAULT_L
73e0: 4f 43 4b 49 4e 47 5f 4d 4f 44 45 0a 20 20 64 62  OCKING_MODE.  db
73f0: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d  ->dfltLockMode =
7400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7410: 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3b 0a 20 20  LOCKING_MODE;.  
7420: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
7430: 69 6e 67 4d 6f 64 65 28 73 71 6c 69 74 65 33 42  ingMode(sqlite3B
7440: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
7450: 62 5b 30 5d 2e 70 42 74 29 2c 0a 20 20 20 20 20  b[0].pBt),.     
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7470: 20 20 20 20 20 53 51 4c 49 54 45 5f 44 45 46 41       SQLITE_DEFA
7480: 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  ULT_LOCKING_MODE
7490: 29 3b 0a 23 65 6e 64 69 66 0a 0a 6f 70 65 6e 64  );.#endif..opend
74a0: 62 5f 6f 75 74 3a 0a 20 20 69 66 28 20 53 51 4c  b_out:.  if( SQL
74b0: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 28 72 63 20 3d  ITE_NOMEM==(rc =
74c0: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
74d0: 28 64 62 29 29 20 29 7b 0a 20 20 20 20 73 71 6c  (db)) ){.    sql
74e0: 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a  ite3_close(db);.
74f0: 20 20 20 20 64 62 20 3d 20 30 3b 0a 20 20 7d 0a      db = 0;.  }.
7500: 20 20 2a 70 70 44 62 20 3d 20 64 62 3b 0a 20 20    *ppDb = db;.  
7510: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
7520: 69 45 78 69 74 28 30 2c 20 72 63 29 3b 0a 7d 0a  iExit(0, rc);.}.
7530: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
7540: 77 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  w database handl
7550: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
7560: 33 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e 73 74 20  3_open(.  const 
7570: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
7580: 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70   .  sqlite3 **pp
7590: 44 62 20 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  Db .){.  return 
75a0: 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69  openDatabase(zFi
75b0: 6c 65 6e 61 6d 65 2c 20 70 70 44 62 29 3b 0a 7d  lename, ppDb);.}
75c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
75d0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
75e0: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
75f0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
7600: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
7610: 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69  n16(.  const voi
7620: 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20  d *zFilename, . 
7630: 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 0a   sqlite3 **ppDb.
7640: 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  ){.  char const 
7650: 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20 2f  *zFilename8;   /
7660: 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63 6f  * zFilename enco
7670: 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e 73  ded in UTF-8 ins
7680: 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20 2a  tead of UTF-16 *
7690: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
76a0: 49 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65  ITE_OK;.  sqlite
76b0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a  3_value *pVal;..
76c0: 20 20 61 73 73 65 72 74 28 20 7a 46 69 6c 65 6e    assert( zFilen
76d0: 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
76e0: 20 70 70 44 62 20 29 3b 0a 20 20 2a 70 70 44 62   ppDb );.  *ppDb
76f0: 20 3d 20 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73   = 0;.  pVal = s
7700: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
7710: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
7720: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
7730: 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49   zFilename, SQLI
7740: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
7750: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7760: 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73    zFilename8 = s
7770: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
7780: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
7790: 38 29 3b 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e  8);.  if( zFilen
77a0: 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  ame8 ){.    rc =
77b0: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46   openDatabase(zF
77c0: 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b  ilename8, ppDb);
77d0: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
77e0: 49 54 45 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20  ITE_OK && *ppDb 
77f0: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
7800: 6c 69 74 65 33 5f 65 78 65 63 28 2a 70 70 44 62  lite3_exec(*ppDb
7810: 2c 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  , "PRAGMA encodi
7820: 6e 67 20 3d 20 27 55 54 46 2d 31 36 27 22 2c 20  ng = 'UTF-16'", 
7830: 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
7840: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
7850: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
7860: 69 74 65 33 5f 63 6c 6f 73 65 28 2a 70 70 44 62  ite3_close(*ppDb
7870: 29 3b 0a 20 20 20 20 20 20 20 20 2a 70 70 44 62  );.        *ppDb
7880: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
7890: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
78a0: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
78b0: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
78c0: 74 65 33 41 70 69 45 78 69 74 28 30 2c 20 72 63  te3ApiExit(0, rc
78d0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
78e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
78f0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
7900: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
7910: 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74   destroys a virt
7920: 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74  ual machine that
7930: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
7940: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  * the sqlite3_co
7950: 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e  mpile() routine.
7960: 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74   The integer ret
7970: 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49  urned is an SQLI
7980: 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66  TE_.** success/f
7990: 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74  ailure code that
79a0: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72   describes the r
79b0: 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69  esult of executi
79c0: 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ng the virtual.*
79d0: 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a  * machine..**.**
79e0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
79f0: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
7a00: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
7a10: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
7a20: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
7a30: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
7a40: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
7a50: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
7a60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
7a70: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7a80: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  tmt){.  int rc;.
7a90: 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29    if( pStmt==0 )
7aa0: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
7ab0: 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  E_OK;.  }else{. 
7ac0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
7ad0: 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62  dbeFinalize((Vdb
7ae0: 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20  e*)pStmt);.  }. 
7af0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
7b00: 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74  *.** Terminate t
7b10: 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75  he current execu
7b20: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73  tion of an SQL s
7b30: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73  tatement and res
7b40: 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f  et it.** back to
7b50: 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74   its starting st
7b60: 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ate so that it c
7b70: 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41 20  an be reused. A 
7b80: 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f  success code fro
7b90: 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65  m.** the prior e
7ba0: 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75  xecution is retu
7bb0: 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rned..**.** This
7bc0: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
7bd0: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  e error code and
7be0: 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
7bf0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65   by.** sqlite3_e
7c00: 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65  rrcode(), sqlite
7c10: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
7c20: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
7c30: 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
7c40: 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f  3_reset(sqlite3_
7c50: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
7c60: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53  int rc;.  if( pS
7c70: 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  tmt==0 ){.    rc
7c80: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
7c90: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
7ca0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 65 74  sqlite3VdbeReset
7cb0: 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a  ((Vdbe*)pStmt);.
7cc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7cd0: 61 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a 29  akeReady((Vdbe*)
7ce0: 70 53 74 6d 74 2c 20 2d 31 2c 20 30 2c 20 30 2c  pStmt, -1, 0, 0,
7cf0: 20 30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28   0);.    assert(
7d00: 20 28 72 63 20 26 20 28 73 71 6c 69 74 65 33 5f   (rc & (sqlite3_
7d10: 64 62 5f 68 61 6e 64 6c 65 28 70 53 74 6d 74 29  db_handle(pStmt)
7d20: 2d 3e 65 72 72 4d 61 73 6b 29 29 3d 3d 72 63 20  ->errMask))==rc 
7d30: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
7d40: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  rc;.}../*.** Reg
7d50: 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c  ister a new coll
7d60: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
7d70: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
7d80: 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
7d90: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
7da0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73  e_collation(.  s
7db0: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
7dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
7dd0: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
7de0: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
7df0: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
7e00: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
7e10: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
7e20: 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63  id*).){.  int rc
7e30: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
7e40: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
7e50: 28 29 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65  () );.  rc = cre
7e60: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  ateCollation(db,
7e70: 20 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74   zName, enc, pCt
7e80: 78 2c 20 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20  x, xCompare);.  
7e90: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
7ea0: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d  iExit(db, rc);.}
7eb0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7ec0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
7ed0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77  * Register a new
7ee0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
7ef0: 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74  nce with the dat
7f00: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e  abase handle db.
7f10: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
7f20: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
7f30: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  16(.  sqlite3* d
7f40: 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  b, .  const char
7f50: 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20   *zName, .  int 
7f60: 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
7f70: 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
7f80: 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
7f90: 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
7fa0: 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
7fb0: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
7fc0: 5f 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  _OK;.  char *zNa
7fd0: 6d 65 38 3b 20 0a 20 20 61 73 73 65 72 74 28 20  me8; .  assert( 
7fe0: 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61  !sqlite3MallocFa
7ff0: 69 6c 65 64 28 29 20 29 3b 0a 20 20 7a 4e 61 6d  iled() );.  zNam
8000: 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  e8 = sqlite3utf1
8010: 36 74 6f 38 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b  6to8(zName, -1);
8020: 0a 20 20 69 66 28 20 7a 4e 61 6d 65 38 20 29 7b  .  if( zName8 ){
8030: 0a 20 20 20 20 72 63 20 3d 20 63 72 65 61 74 65  .    rc = create
8040: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e  Collation(db, zN
8050: 61 6d 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c  ame8, enc, pCtx,
8060: 20 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20 20 20   xCompare);.    
8070: 73 71 6c 69 74 65 46 72 65 65 28 7a 4e 61 6d 65  sqliteFree(zName
8080: 38 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  8);.  }.  return
8090: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
80a0: 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69  db, rc);.}.#endi
80b0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
80c0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _UTF16 */../*.**
80d0: 20 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c   Register a coll
80e0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
80f0: 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20  actory callback 
8100: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
8110: 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20  e handle.** db. 
8120: 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76  Replace any prev
8130: 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64  iously installed
8140: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
8150: 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a  nce factory..*/.
8160: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  int sqlite3_coll
8170: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20  ation_needed(.  
8180: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
8190: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
81a0: 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78  dArg, .  void(*x
81b0: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
81c0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
81d0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
81e0: 61 72 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73 71  ar*).){.  if( sq
81f0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
8200: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
8210: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
8220: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c  ;.  }.  db->xCol
8230: 6c 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e  lNeeded = xCollN
8240: 65 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f  eeded;.  db->xCo
8250: 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 30 3b 0a  llNeeded16 = 0;.
8260: 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65    db->pCollNeede
8270: 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64  dArg = pCollNeed
8280: 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20  edArg;.  return 
8290: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
82a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
82b0: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65  T_UTF16./*.** Re
82c0: 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69  gister a collati
82d0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
82e0: 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ory callback wit
82f0: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
8300: 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70  andle.** db. Rep
8310: 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75  lace any previou
8320: 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f  sly installed co
8330: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
8340: 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74   factory..*/.int
8350: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
8360: 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73  on_needed16(.  s
8370: 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76  qlite3 *db, .  v
8380: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
8390: 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43  Arg, .  void(*xC
83a0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
83b0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
83c0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
83d0: 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73  oid*).){.  if( s
83e0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
83f0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
8400: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
8410: 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f  E;.  }.  db->xCo
8420: 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20  llNeeded = 0;.  
8430: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31  db->xCollNeeded1
8440: 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31  6 = xCollNeeded1
8450: 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65  6;.  db->pCollNe
8460: 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e  ededArg = pCollN
8470: 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75  eededArg;.  retu
8480: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
8490: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
84a0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
84b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
84c0: 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
84d0: 52 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  R./*.** This fun
84e0: 63 74 69 6f 6e 20 69 73 20 6e 6f 77 20 61 6e 20  ction is now an 
84f0: 61 6e 61 63 68 72 6f 6e 69 73 6d 2e 20 49 74 20  anachronism. It 
8500: 75 73 65 64 20 74 6f 20 62 65 20 75 73 65 64 20  used to be used 
8510: 74 6f 20 72 65 63 6f 76 65 72 20 66 72 6f 6d 20  to recover from 
8520: 61 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 66 61  a.** malloc() fa
8530: 69 6c 75 72 65 2c 20 62 75 74 20 53 51 4c 69 74  ilure, but SQLit
8540: 65 20 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20  e now does this 
8550: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
8560: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 6c  /.int sqlite3_gl
8570: 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 7b 0a  obal_recover(){.
8580: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8590: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
85a0: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
85b0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
85c0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
85d0: 65 63 74 69 6f 6e 20 69 73 20 69 6e 20 61 75 74  ection is in aut
85e0: 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65 2e  ocommit.** mode.
85f0: 20 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66    Return TRUE if
8600: 20 69 74 20 69 73 20 61 6e 64 20 46 41 4c 53 45   it is and FALSE
8610: 20 69 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63 6f   if not.  Autoco
8620: 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e 0a  mmit mode is on.
8630: 2a 2a 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ** by default.  
8640: 41 75 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64 69  Autocommit is di
8650: 73 61 62 6c 65 64 20 62 79 20 61 20 42 45 47 49  sabled by a BEGI
8660: 4e 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  N statement and 
8670: 72 65 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79 20  reenabled.** by 
8680: 74 68 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54 20  the next COMMIT 
8690: 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a  or ROLLBACK..**.
86a0: 2a 2a 2a 2a 2a 2a 2a 20 54 48 49 53 20 49 53 20  ******* THIS IS 
86b0: 41 4e 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20  AN EXPERIMENTAL 
86c0: 41 50 49 20 41 4e 44 20 49 53 20 53 55 42 4a 45  API AND IS SUBJE
86d0: 43 54 20 54 4f 20 43 48 41 4e 47 45 20 2a 2a 2a  CT TO CHANGE ***
86e0: 2a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ***.*/.int sqlit
86f0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
8700: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
8710: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 61 75 74    return db->aut
8720: 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a 23 69 66 64  oCommit;.}..#ifd
8730: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8740: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8750: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 73  ing routine is s
8760: 75 62 74 69 74 75 74 65 64 20 66 6f 72 20 63 6f  ubtituted for co
8770: 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 43 4f  nstant SQLITE_CO
8780: 52 52 55 50 54 20 69 6e 0a 2a 2a 20 64 65 62 75  RRUPT in.** debu
8790: 67 67 69 6e 67 20 62 75 69 6c 64 73 2e 20 20 54  gging builds.  T
87a0: 68 69 73 20 70 72 6f 76 69 64 65 73 20 61 20 77  his provides a w
87b0: 61 79 20 74 6f 20 73 65 74 20 61 20 62 72 65 61  ay to set a brea
87c0: 6b 70 6f 69 6e 74 20 66 6f 72 20 77 68 65 6e 0a  kpoint for when.
87d0: 2a 2a 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 73  ** corruption is
87e0: 20 66 69 72 73 74 20 64 65 74 65 63 74 65 64 2e   first detected.
87f0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
8800: 6f 72 72 75 70 74 28 76 6f 69 64 29 7b 0a 20 20  orrupt(void){.  
8810: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f  return SQLITE_CO
8820: 52 52 55 50 54 3b 0a 7d 0a 23 65 6e 64 69 66 0a  RRUPT;.}.#endif.
8830: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8840: 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
8850: 48 45 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  HE./*.** Enable 
8860: 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20 73  or disable the s
8870: 68 61 72 65 64 20 70 61 67 65 72 20 61 6e 64 20  hared pager and 
8880: 73 63 68 65 6d 61 20 66 65 61 74 75 72 65 73 20  schema features 
8890: 66 6f 72 20 74 68 65 0a 2a 2a 20 63 75 72 72 65  for the.** curre
88a0: 6e 74 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a  nt thread..**.**
88b0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68   This routine sh
88c0: 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 63 61 6c  ould only be cal
88d0: 6c 65 64 20 77 68 65 6e 20 74 68 65 72 65 20 61  led when there a
88e0: 72 65 20 6e 6f 20 6f 70 65 6e 0a 2a 2a 20 64 61  re no open.** da
88f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8900: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
8910: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
8920: 5f 63 61 63 68 65 28 69 6e 74 20 65 6e 61 62 6c  _cache(int enabl
8930: 65 29 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61  e){.  ThreadData
8940: 20 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54   *pTd = sqlite3T
8950: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 69  hreadData();.  i
8960: 66 28 20 70 54 64 20 29 7b 0a 20 20 20 20 2f 2a  f( pTd ){.    /*
8970: 20 49 74 20 69 73 20 6f 6e 6c 79 20 6c 65 67 61   It is only lega
8980: 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65  l to call sqlite
8990: 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
89a0: 63 61 63 68 65 28 29 20 77 68 65 6e 20 74 68 65  cache() when the
89b0: 72 65 0a 20 20 20 20 2a 2a 20 61 72 65 20 6e 6f  re.    ** are no
89c0: 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
89d0: 62 2d 74 72 65 65 73 20 74 68 61 74 20 77 65 72  b-trees that wer
89e0: 65 20 6f 70 65 6e 65 64 20 62 79 20 74 68 65 20  e opened by the 
89f0: 63 61 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a  calling thread..
8a00: 20 20 20 20 2a 2a 20 54 68 69 73 20 63 6f 6e 64      ** This cond
8a10: 69 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 61  ition is only ea
8a20: 73 79 20 74 6f 20 64 65 74 65 63 74 20 69 66 20  sy to detect if 
8a30: 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
8a40: 20 77 65 72 65 20 0a 20 20 20 20 2a 2a 20 70 72   were .    ** pr
8a50: 65 76 69 6f 75 73 6c 79 20 65 6e 61 62 6c 65 64  eviously enabled
8a60: 20 28 61 6e 64 20 69 73 20 62 65 69 6e 67 20 64   (and is being d
8a70: 69 73 61 62 6c 65 64 29 2e 20 0a 20 20 20 20 2a  isabled). .    *
8a80: 2f 0a 20 20 20 20 69 66 28 20 70 54 64 2d 3e 70  /.    if( pTd->p
8a90: 42 74 72 65 65 20 26 26 20 21 65 6e 61 62 6c 65  Btree && !enable
8aa0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
8ab0: 28 20 70 54 64 2d 3e 75 73 65 53 68 61 72 65 64  ( pTd->useShared
8ac0: 44 61 74 61 20 29 3b 0a 20 20 20 20 20 20 72 65  Data );.      re
8ad0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
8ae0: 53 45 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  SE;.    }..    p
8af0: 54 64 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  Td->useSharedDat
8b00: 61 20 3d 20 65 6e 61 62 6c 65 3b 0a 20 20 20 20  a = enable;.    
8b10: 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68  sqlite3ReleaseTh
8b20: 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 7d 0a  readData();.  }.
8b30: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
8b40: 41 70 69 45 78 69 74 28 30 2c 20 53 51 4c 49 54  ApiExit(0, SQLIT
8b50: 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  E_OK);.}.#endif.
8b60: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
8b70: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75   convenience rou
8b80: 74 69 6e 65 20 74 68 61 74 20 6d 61 6b 65 73 20  tine that makes 
8b90: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68  sure that all th
8ba0: 72 65 61 64 2d 73 70 65 63 69 66 69 63 0a 2a 2a  read-specific.**
8bb0: 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 74   data for this t
8bc0: 68 72 65 61 64 20 68 61 73 20 62 65 65 6e 20 64  hread has been d
8bd0: 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a 76  eallocated..*/.v
8be0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 74 68 72 65  oid sqlite3_thre
8bf0: 61 64 5f 63 6c 65 61 6e 75 70 28 76 6f 69 64 29  ad_cleanup(void)
8c00: 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20 2a  {.  ThreadData *
8c10: 70 54 64 20 3d 20 73 71 6c 69 74 65 33 4f 73 54  pTd = sqlite3OsT
8c20: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74  hreadSpecificDat
8c30: 61 28 30 29 3b 0a 20 20 69 66 28 20 70 54 64 20  a(0);.  if( pTd 
8c40: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 54  ){.    memset(pT
8c50: 64 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 54  d, 0, sizeof(*pT
8c60: 64 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  d));.    sqlite3
8c70: 4f 73 54 68 72 65 61 64 53 70 65 63 69 66 69 63  OsThreadSpecific
8c80: 44 61 74 61 28 2d 31 29 3b 0a 20 20 7d 0a 7d 0a  Data(-1);.  }.}.
8c90: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 6d 65  ./*.** Return me
8ca0: 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ta information a
8cb0: 62 6f 75 74 20 61 20 73 70 65 63 69 66 69 63 20  bout a specific 
8cc0: 63 6f 6c 75 6d 6e 20 6f 66 20 61 20 64 61 74 61  column of a data
8cd0: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 53  base table..** S
8ce0: 65 65 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 73 71  ee comment in sq
8cf0: 6c 69 74 65 33 2e 68 20 28 73 71 6c 69 74 65 2e  lite3.h (sqlite.
8d00: 68 2e 69 6e 29 20 66 6f 72 20 64 65 74 61 69 6c  h.in) for detail
8d10: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
8d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
8d30: 4e 5f 4d 45 54 41 44 41 54 41 0a 69 6e 74 20 73  N_METADATA.int s
8d40: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
8d50: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20  umn_metadata(.  
8d60: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
8d80: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
8d90: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
8da0: 20 2a 7a 44 62 4e 61 6d 65 2c 20 20 20 20 20 20   *zDbName,      
8db0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 6e 61    /* Database na
8dc0: 6d 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  me or NULL */.  
8dd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
8de0: 6c 65 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 54  leName,     /* T
8df0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 63  able name */.  c
8e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75  onst char *zColu
8e10: 6d 6e 4e 61 6d 65 2c 20 20 20 20 2f 2a 20 43 6f  mnName,    /* Co
8e20: 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 20 20 63  lumn name */.  c
8e30: 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44 61  har const **pzDa
8e40: 74 61 54 79 70 65 2c 20 20 20 20 2f 2a 20 4f 55  taType,    /* OU
8e50: 54 50 55 54 3a 20 44 65 63 6c 61 72 65 64 20 64  TPUT: Declared d
8e60: 61 74 61 20 74 79 70 65 20 2a 2f 0a 20 20 63 68  ata type */.  ch
8e70: 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c  ar const **pzCol
8e80: 6c 53 65 71 2c 20 20 20 20 20 2f 2a 20 4f 55 54  lSeq,     /* OUT
8e90: 50 55 54 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20 73  PUT: Collation s
8ea0: 65 71 75 65 6e 63 65 20 6e 61 6d 65 20 2a 2f 0a  equence name */.
8eb0: 20 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c    int *pNotNull,
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ed0: 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66   OUTPUT: True if
8ee0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
8ef0: 61 69 6e 74 20 65 78 69 73 74 73 20 2a 2f 0a 20  aint exists */. 
8f00: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
8f10: 79 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y,           /* 
8f20: 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66 20  OUTPUT: True if 
8f30: 63 6f 6c 75 6d 6e 20 70 61 72 74 20 6f 66 20 50  column part of P
8f40: 4b 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 41 75 74  K */.  int *pAut
8f50: 6f 69 6e 63 20 20 20 20 20 20 20 20 20 20 20 20  oinc            
8f60: 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72     /* OUTPUT: Tr
8f70: 75 65 20 69 66 20 63 6f 6c 75 6d 73 20 69 73 20  ue if colums is 
8f80: 61 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 2a  auto-increment *
8f90: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
8fa0: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
8fb0: 20 30 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   0;.  Table *pTa
8fc0: 62 20 3d 20 30 3b 0a 20 20 43 6f 6c 75 6d 6e 20  b = 0;.  Column 
8fd0: 2a 70 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e 74  *pCol = 0;.  int
8fe0: 20 69 43 6f 6c 3b 0a 0a 20 20 63 68 61 72 20 63   iCol;..  char c
8ff0: 6f 6e 73 74 20 2a 7a 44 61 74 61 54 79 70 65 20  onst *zDataType 
9000: 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73  = 0;.  char cons
9010: 74 20 2a 7a 43 6f 6c 6c 53 65 71 20 3d 20 30 3b  t *zCollSeq = 0;
9020: 0a 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 20 3d  .  int notnull =
9030: 20 30 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72   0;.  int primar
9040: 79 6b 65 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20  ykey = 0;.  int 
9050: 61 75 74 6f 69 6e 63 20 3d 20 30 3b 0a 0a 20 20  autoinc = 0;..  
9060: 2f 2a 20 45 6e 73 75 72 65 20 74 68 65 20 64 61  /* Ensure the da
9070: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
9080: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
9090: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
90a0: 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
90b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
90c0: 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72 63  MISUSE;.  }.  rc
90d0: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
90e0: 62 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  b, &zErrMsg);.  
90f0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72  if( SQLITE_OK!=r
9100: 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 65 72  c ){.    goto er
9110: 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ror_out;.  }..  
9120: 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 74 61  /* Locate the ta
9130: 62 6c 65 20 69 6e 20 71 75 65 73 74 69 6f 6e 20  ble in question 
9140: 2a 2f 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69  */.  pTab = sqli
9150: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
9160: 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 44 62   zTableName, zDb
9170: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 21 70 54  Name);.  if( !pT
9180: 61 62 20 7c 7c 20 70 54 61 62 2d 3e 70 53 65 6c  ab || pTab->pSel
9190: 65 63 74 20 29 7b 0a 20 20 20 20 70 54 61 62 20  ect ){.    pTab 
91a0: 3d 20 30 3b 0a 20 20 20 20 67 6f 74 6f 20 65 72  = 0;.    goto er
91b0: 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ror_out;.  }..  
91c0: 2f 2a 20 46 69 6e 64 20 74 68 65 20 63 6f 6c 75  /* Find the colu
91d0: 6d 6e 20 66 6f 72 20 77 68 69 63 68 20 69 6e 66  mn for which inf
91e0: 6f 20 69 73 20 72 65 71 75 65 73 74 65 64 20 2a  o is requested *
91f0: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  /.  if( sqlite3I
9200: 73 52 6f 77 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61  sRowid(zColumnNa
9210: 6d 65 29 20 29 7b 0a 20 20 20 20 69 43 6f 6c 20  me) ){.    iCol 
9220: 3d 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20  = pTab->iPKey;. 
9230: 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 29     if( iCol>=0 )
9240: 7b 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26  {.      pCol = &
9250: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
9260: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
9270: 0a 20 20 20 20 66 6f 72 28 69 43 6f 6c 3d 30 3b  .    for(iCol=0;
9280: 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iCol<pTab->nCol
9290: 3b 20 69 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  ; iCol++){.     
92a0: 20 70 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61   pCol = &pTab->a
92b0: 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 20  Col[iCol];.     
92c0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
92d0: 74 72 49 43 6d 70 28 70 43 6f 6c 2d 3e 7a 4e 61  trICmp(pCol->zNa
92e0: 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29  me, zColumnName)
92f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61   ){.        brea
9300: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9310: 0a 20 20 20 20 69 66 28 20 69 43 6f 6c 3d 3d 70  .    if( iCol==p
9320: 54 61 62 2d 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20  Tab->nCol ){.   
9330: 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
9340: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75     goto error_ou
9350: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
9360: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
9370: 20 62 6c 6f 63 6b 20 73 74 6f 72 65 73 20 74 68   block stores th
9380: 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  e meta informati
9390: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  on that will be 
93a0: 72 65 74 75 72 6e 65 64 0a 20 20 2a 2a 20 74 6f  returned.  ** to
93b0: 20 74 68 65 20 63 61 6c 6c 65 72 20 69 6e 20 6c   the caller in l
93c0: 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 20 7a  ocal variables z
93d0: 44 61 74 61 54 79 70 65 2c 20 7a 43 6f 6c 6c 53  DataType, zCollS
93e0: 65 71 2c 20 6e 6f 74 6e 75 6c 6c 2c 20 70 72 69  eq, notnull, pri
93f0: 6d 61 72 79 6b 65 79 0a 20 20 2a 2a 20 61 6e 64  marykey.  ** and
9400: 20 61 75 74 6f 69 6e 63 2e 20 41 74 20 74 68 69   autoinc. At thi
9410: 73 20 70 6f 69 6e 74 20 74 68 65 72 65 20 61 72  s point there ar
9420: 65 20 74 77 6f 20 70 6f 73 73 69 62 69 6c 69 74  e two possibilit
9430: 69 65 73 3a 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ies:.  ** .  ** 
9440: 20 20 20 20 31 2e 20 54 68 65 20 73 70 65 63 69      1. The speci
9450: 66 69 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  fied column name
9460: 20 77 61 73 20 72 6f 77 69 64 22 2c 20 22 6f 69   was rowid", "oi
9470: 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20  d" or "_rowid_" 
9480: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 61 6e 64  .  **        and
9490: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70   there is no exp
94a0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
94b0: 20 49 50 4b 20 63 6f 6c 75 6d 6e 2e 20 0a 20 20   IPK column. .  
94c0: 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 32 2e 20 54  **.  **     2. T
94d0: 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
94e0: 61 20 76 69 65 77 20 61 6e 64 20 74 68 65 20 63  a view and the c
94f0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 64 65 6e 74  olumn name ident
9500: 69 66 69 65 64 20 61 6e 20 0a 20 20 2a 2a 20 20  ified an .  **  
9510: 20 20 20 20 20 20 65 78 70 6c 69 63 69 74 6c 79        explicitly
9520: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
9530: 2e 20 43 6f 70 79 20 6d 65 74 61 20 69 6e 66 6f  . Copy meta info
9540: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 2a 70 43  rmation from *pC
9550: 6f 6c 2e 0a 20 20 2a 2f 20 0a 20 20 69 66 28 20  ol..  */ .  if( 
9560: 70 43 6f 6c 20 29 7b 0a 20 20 20 20 7a 44 61 74  pCol ){.    zDat
9570: 61 54 79 70 65 20 3d 20 70 43 6f 6c 2d 3e 7a 54  aType = pCol->zT
9580: 79 70 65 3b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65  ype;.    zCollSe
9590: 71 20 3d 20 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b  q = pCol->zColl;
95a0: 0a 20 20 20 20 6e 6f 74 6e 75 6c 6c 20 3d 20 28  .    notnull = (
95b0: 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a  pCol->notNull?1:
95c0: 30 29 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b  0);.    primaryk
95d0: 65 79 20 20 3d 20 28 70 43 6f 6c 2d 3e 69 73 50  ey  = (pCol->isP
95e0: 72 69 6d 4b 65 79 3f 31 3a 30 29 3b 0a 20 20 20  rimKey?1:0);.   
95f0: 20 61 75 74 6f 69 6e 63 20 3d 20 28 28 70 54 61   autoinc = ((pTa
9600: 62 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20 26  b->iPKey==iCol &
9610: 26 20 70 54 61 62 2d 3e 61 75 74 6f 49 6e 63 29  & pTab->autoInc)
9620: 3f 31 3a 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ?1:0);.  }else{.
9630: 20 20 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20      zDataType = 
9640: 22 49 4e 54 45 47 45 52 22 3b 0a 20 20 20 20 70  "INTEGER";.    p
9650: 72 69 6d 61 72 79 6b 65 79 20 3d 20 31 3b 0a 20  rimarykey = 1;. 
9660: 20 7d 0a 20 20 69 66 28 20 21 7a 43 6f 6c 6c 53   }.  if( !zCollS
9670: 65 71 20 29 7b 0a 20 20 20 20 7a 43 6f 6c 6c 53  eq ){.    zCollS
9680: 65 71 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a 20  eq = "BINARY";. 
9690: 20 7d 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20   }..error_out:. 
96a0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
96b0: 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20  tyOff(db) ){.   
96c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
96d0: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 57  USE;.  }..  /* W
96e0: 68 65 74 68 65 72 20 74 68 65 20 66 75 6e 63 74  hether the funct
96f0: 69 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65 64  ion call succeed
9700: 65 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73 65  ed or failed, se
9710: 74 20 74 68 65 20 6f 75 74 70 75 74 20 70 61 72  t the output par
9720: 61 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f 20  ameters.  ** to 
9730: 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 6c  whatever their l
9740: 6f 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72 74  ocal counterpart
9750: 73 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61 6e  s contain. If an
9760: 20 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75 72   error did occur
9770: 2c 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73 20  ,.  ** this has 
9780: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a 65  the effect of ze
9790: 72 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75 74  roing all output
97a0: 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20 2a   parameters..  *
97b0: 2f 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54 79  /.  if( pzDataTy
97c0: 70 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70 65  pe ) *pzDataType
97d0: 20 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20 20   = zDataType;.  
97e0: 69 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29 20  if( pzCollSeq ) 
97f0: 2a 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f  *pzCollSeq = zCo
9800: 6c 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e 6f  llSeq;.  if( pNo
9810: 74 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c  tNull ) *pNotNul
9820: 6c 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69  l = notnull;.  i
9830: 66 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20 29  f( pPrimaryKey )
9840: 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d 20   *pPrimaryKey = 
9850: 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 66  primarykey;.  if
9860: 28 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70 41  ( pAutoinc ) *pA
9870: 75 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e 63  utoinc = autoinc
9880: 3b 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  ;..  if( SQLITE_
9890: 4f 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62 20  OK==rc && !pTab 
98a0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
98b0: 74 53 74 72 69 6e 67 28 26 7a 45 72 72 4d 73 67  tString(&zErrMsg
98c0: 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  , "no such table
98d0: 20 63 6f 6c 75 6d 6e 3a 20 22 2c 20 7a 54 61 62   column: ", zTab
98e0: 6c 65 4e 61 6d 65 2c 20 22 2e 22 2c 20 0a 20 20  leName, ".", .  
98f0: 20 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61 6d        zColumnNam
9900: 65 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  e, 0);.    rc = 
9910: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
9920: 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  }.  sqlite3Error
9930: 28 64 62 2c 20 72 63 2c 20 28 7a 45 72 72 4d 73  (db, rc, (zErrMs
9940: 67 3f 22 25 73 22 3a 30 29 2c 20 7a 45 72 72 4d  g?"%s":0), zErrM
9950: 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  sg);.  sqliteFre
9960: 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  e(zErrMsg);.  re
9970: 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45  turn sqlite3ApiE
9980: 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23  xit(db, rc);.}.#
9990: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  endif../*.** Set
99a0: 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65 74   all the paramet
99b0: 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  ers in the compi
99c0: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
99d0: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e  t to NULL..*/.in
99e0: 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  t sqlite3_clear_
99f0: 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  bindings(sqlite3
9a00: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
9a10: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72 63   int i;.  int rc
9a20: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
9a30: 66 6f 72 28 69 3d 31 3b 20 72 63 3d 3d 53 51 4c  for(i=1; rc==SQL
9a40: 49 54 45 5f 4f 4b 20 26 26 20 69 3c 3d 73 71 6c  ITE_OK && i<=sql
9a50: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
9a60: 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
9a70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 63 20 3d  ; i++){.    rc =
9a80: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
9a90: 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  ll(pStmt, i);.  
9aa0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
9ab0: 0a 0a 2f 2a 0a 2a 2a 20 53 6c 65 65 70 20 66 6f  ../*.** Sleep fo
9ac0: 72 20 61 20 6c 69 74 74 6c 65 20 77 68 69 6c 65  r a little while
9ad0: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 6d  .  Return the am
9ae0: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 73 6c 65  ount of time sle
9af0: 70 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pt..*/.int sqlit
9b00: 65 33 5f 73 6c 65 65 70 28 69 6e 74 20 6d 73 29  e3_sleep(int ms)
9b10: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
9b20: 65 33 4f 73 53 6c 65 65 70 28 6d 73 29 3b 0a 7d  e3OsSleep(ms);.}
9b30: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f  ../*.** Enable o
9b40: 72 20 64 69 73 61 62 6c 65 20 74 68 65 20 65 78  r disable the ex
9b50: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
9b60: 64 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  des..*/.int sqli
9b70: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
9b80: 75 6c 74 5f 63 6f 64 65 73 28 73 71 6c 69 74 65  ult_codes(sqlite
9b90: 33 20 2a 64 62 2c 20 69 6e 74 20 6f 6e 6f 66 66  3 *db, int onoff
9ba0: 29 7b 0a 20 20 64 62 2d 3e 65 72 72 4d 61 73 6b  ){.  db->errMask
9bb0: 20 3d 20 6f 6e 6f 66 66 20 3f 20 30 78 66 66 66   = onoff ? 0xfff
9bc0: 66 66 66 66 66 20 3a 20 30 78 66 66 3b 0a 20 20  fffff : 0xff;.  
9bd0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9be0: 3b 0a 7d 0a                                      ;.}.