/ Hex Artifact Content
Login

Artifact 928d93cfd5d72be3a619ee908182c9432151a99e:


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 34 30 20 32 30 30 36 2f 30 35  ,v 1.340 2006/05
0280: 2f 32 34 20 31 32 3a 34 33 3a 32 37 20 64 72 68  /24 12:43:27 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h>../*.** The f
02e0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
02f0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
0300: 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42 49  by the SQLITE_BI
0310: 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20 53  GENDIAN and.** S
0320: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
0330: 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63 6f  AN macros..*/.co
0340: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
0350: 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ne = 1;../*.** T
0360: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
0370: 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e  e library.*/.con
0380: 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f  st char sqlite3_
0390: 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49  version[] = SQLI
03a0: 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 63 6f 6e 73  TE_VERSION;.cons
03b0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
03c0: 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69 64 29  libversion(void)
03d0: 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33  { return sqlite3
03e0: 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 69 6e 74 20  _version; }.int 
03f0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
0400: 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69 64 29 7b  on_number(void){
0410: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 56   return SQLITE_V
0420: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3b 20 7d  ERSION_NUMBER; }
0430: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
0440: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
0450: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e  ating function n
0460: 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77 68  amed "BINARY" wh
0470: 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a  ich is always.**
0480: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73   available..*/.s
0490: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c  tatic int binCol
04a0: 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  lFunc(.  void *N
04b0: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
04c0: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
04d0: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
04e0: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
04f0: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
0500: 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
0510: 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
0520: 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d   : nKey2;.  rc =
0530: 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
0540: 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
0550: 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
0560: 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
0570: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
0580: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68  ;.}../*.** Anoth
0590: 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  er built-in coll
05a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20  ating sequence: 
05b0: 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54  NOCASE. .**.** T
05c0: 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  his collating se
05d0: 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64  quence is intend
05e0: 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ed to be used fo
05f0: 72 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64  r "case independ
0600: 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  ant.** compariso
0610: 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f  n". SQLite's kno
0620: 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72 20  wledge of upper 
0630: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65  and lower case e
0640: 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78  quivalents.** ex
0650: 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68  tends only to th
0660: 65 20 32 36 20 63 68 61 72 61 63 74 65 72 73 20  e 26 characters 
0670: 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c  used in the Engl
0680: 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a  ish language..**
0690: 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e  .** At the momen
06a0: 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  t there is only 
06b0: 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e  a UTF-8 implemen
06c0: 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  tation..*/.stati
06d0: 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c  c int nocaseColl
06e0: 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69  atingFunc(.  voi
06f0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e  d *NotUsed,.  in
0700: 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76  t nKey1, const v
0710: 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e  oid *pKey1,.  in
0720: 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76  t nKey2, const v
0730: 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20  oid *pKey2.){.  
0740: 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53  int r = sqlite3S
0750: 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28  trNICmp(.      (
0760: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65  const char *)pKe
0770: 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20  y1, (const char 
0780: 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3c  *)pKey2, (nKey1<
0790: 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65  nKey2)?nKey1:nKe
07a0: 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20  y2);.  if( 0==r 
07b0: 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31  ){.    r = nKey1
07c0: 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65  -nKey2;.  }.  re
07d0: 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn r;.}../*.**
07e0: 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49   Return the ROWI
07f0: 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  D of the most re
0800: 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 73  cent insert.*/.s
0810: 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69  qlite_int64 sqli
0820: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
0830: 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20 2a 64  rowid(sqlite3 *d
0840: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
0850: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f  >lastRowid;.}../
0860: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
0870: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
0880: 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s in the most re
0890: 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c  cent call to sql
08a0: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
08b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  int sqlite3_chan
08c0: 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ges(sqlite3 *db)
08d0: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
08e0: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
08f0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
0900: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 73 69  er of changes si
0910: 6e 63 65 20 74 68 65 20 64 61 74 61 62 61 73 65  nce the database
0920: 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70 65 6e   handle was open
0930: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
0940: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
0950: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
0960: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74   return db->nTot
0970: 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  alChange;.}../*.
0980: 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73  ** Close an exis
0990: 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61  ting SQLite data
09a0: 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  base.*/.int sqli
09b0: 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65  te3_close(sqlite
09c0: 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  3 *db){.  HashEl
09d0: 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a  em *i;.  int j;.
09e0: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
09f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0a00: 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OK;.  }.  if( sq
0a10: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
0a20: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
0a30: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
0a40: 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
0a50: 4c 49 54 45 5f 53 53 45 0a 20 20 7b 0a 20 20 20  LITE_SSE.  {.   
0a60: 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c   extern void sql
0a70: 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28 73  ite3SseCleanup(s
0a80: 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 73 71  qlite3*);.    sq
0a90: 6c 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28  lite3SseCleanup(
0aa0: 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  db);.  }.#endif 
0ab0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
0ac0: 61 72 65 20 61 6e 79 20 6f 75 74 73 74 61 6e 64  are any outstand
0ad0: 69 6e 67 20 56 4d 73 2c 20 72 65 74 75 72 6e 20  ing VMs, return 
0ae0: 53 51 4c 49 54 45 5f 42 55 53 59 2e 20 2a 2f 0a  SQLITE_BUSY. */.
0af0: 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65 20    if( db->pVdbe 
0b00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
0b10: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  ror(db, SQLITE_B
0b20: 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55  USY, .        "U
0b30: 6e 61 62 6c 65 20 74 6f 20 63 6c 6f 73 65 20 64  nable to close d
0b40: 75 65 20 74 6f 20 75 6e 66 69 6e 61 6c 69 73 65  ue to unfinalise
0b50: 64 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a  d statements");.
0b60: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0b70: 45 5f 42 55 53 59 3b 0a 20 20 7d 0a 20 20 61 73  E_BUSY;.  }.  as
0b80: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 53 61  sert( !sqlite3Sa
0b90: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 3b  fetyCheck(db) );
0ba0: 0a 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 64  ..  /* FIX ME: d
0bb0: 62 2d 3e 6d 61 67 69 63 20 6d 61 79 20 62 65 20  b->magic may be 
0bc0: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41  set to SQLITE_MA
0bd0: 47 49 43 5f 43 4c 4f 53 45 44 20 69 66 20 74 68  GIC_CLOSED if th
0be0: 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  e database.  ** 
0bf0: 63 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64  cannot be opened
0c00: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
0c10: 2e 20 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e  . So this routin
0c20: 65 20 6e 65 65 64 73 20 74 6f 20 72 75 6e 20 69  e needs to run i
0c30: 6e 0a 20 20 2a 2a 20 74 68 61 74 20 63 61 73 65  n.  ** that case
0c40: 2e 20 42 75 74 20 6d 61 79 62 65 20 74 68 65 72  . But maybe ther
0c50: 65 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 65  e should be an e
0c60: 78 74 72 61 20 6d 61 67 69 63 20 76 61 6c 75 65  xtra magic value
0c70: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 22 66   for the.  ** "f
0c80: 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 22 20 73  ailed to open" s
0c90: 74 61 74 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  tate..  */.  if(
0ca0: 20 64 62 2d 3e 6d 61 67 69 63 21 3d 53 51 4c 49   db->magic!=SQLI
0cb0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
0cc0: 26 26 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  && sqlite3Safety
0cd0: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 2f 2a  On(db) ){.    /*
0ce0: 20 70 72 69 6e 74 66 28 22 44 49 44 20 4e 4f 54   printf("DID NOT
0cf0: 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66 6c 75   CLOSE\n"); fflu
0d00: 73 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f 0a 20  sh(stdout); */. 
0d10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0d20: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 66  _ERROR;.  }..  f
0d30: 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44  or(j=0; j<db->nD
0d40: 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72  b; j++){.    str
0d50: 75 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64  uct Db *pDb = &d
0d60: 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69  b->aDb[j];.    i
0d70: 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20  f( pDb->pBt ){. 
0d80: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
0d90: 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29  eClose(pDb->pBt)
0da0: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74  ;.      pDb->pBt
0db0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20   = 0;.      if( 
0dc0: 6a 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  j!=1 ){.        
0dd0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 20 3d 20 30  pDb->pSchema = 0
0de0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
0df0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65 73    }.  sqlite3Res
0e00: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
0e10: 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  (db, 0);.  asser
0e20: 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b  t( db->nDb<=2 );
0e30: 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
0e40: 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74 69  Db==db->aDbStati
0e50: 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c  c );.  for(i=sql
0e60: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
0e70: 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73  ->aFunc); i; i=s
0e80: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
0e90: 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  ){.    FuncDef *
0ea0: 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20  pFunc, *pNext;. 
0eb0: 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20 28     for(pFunc = (
0ec0: 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48  FuncDef*)sqliteH
0ed0: 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75 6e  ashData(i); pFun
0ee0: 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b  c; pFunc=pNext){
0ef0: 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20 70  .      pNext = p
0f00: 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  Func->pNext;.   
0f10: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 46     sqliteFree(pF
0f20: 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  unc);.    }.  }.
0f30: 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48  .  for(i=sqliteH
0f40: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43  ashFirst(&db->aC
0f50: 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73 71  ollSeq); i; i=sq
0f60: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29  liteHashNext(i))
0f70: 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70  {.    CollSeq *p
0f80: 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20  Coll = (CollSeq 
0f90: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
0fa0: 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46  (i);.    sqliteF
0fb0: 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  ree(pColl);.  }.
0fc0: 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65    sqlite3HashCle
0fd0: 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  ar(&db->aCollSeq
0fe0: 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 48 61 73  );..  sqlite3Has
0ff0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
1000: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  c);.  sqlite3Err
1010: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
1020: 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63  , 0); /* Dealloc
1030: 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20  ates any cached 
1040: 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a  error strings. *
1050: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72  /.  if( db->pErr
1060: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1070: 61 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72  alueFree(db->pEr
1080: 72 29 3b 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e 6d  r);.  }..  db->m
1090: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
10a0: 47 49 43 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a  GIC_ERROR;..  /*
10b0: 20 54 68 65 20 74 65 6d 70 2d 64 61 74 61 62 61   The temp-databa
10c0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 61 6c 6c  se schema is all
10d0: 6f 63 61 74 65 64 20 64 69 66 66 65 72 65 6e 74  ocated different
10e0: 6c 79 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  ly from the othe
10f0: 72 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 6f 62  r schema.  ** ob
1100: 6a 65 63 74 73 20 28 75 73 69 6e 67 20 73 71 6c  jects (using sql
1110: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 64 69 72 65  iteMalloc() dire
1120: 63 74 6c 79 2c 20 69 6e 73 74 65 61 64 20 6f 66  ctly, instead of
1130: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 63 68   sqlite3BtreeSch
1140: 65 6d 61 28 29 29 2e 0a 20 20 2a 2a 20 53 6f 20  ema())..  ** So 
1150: 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  it needs to be f
1160: 72 65 65 64 20 68 65 72 65 2e 20 54 6f 64 6f 3a  reed here. Todo:
1170: 20 57 68 79 20 6e 6f 74 20 72 6f 6c 6c 20 74 68   Why not roll th
1180: 65 20 74 65 6d 70 20 73 63 68 65 6d 61 20 69 6e  e temp schema in
1190: 74 6f 0a 20 20 2a 2a 20 74 68 65 20 73 61 6d 65  to.  ** the same
11a0: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20   sqliteMalloc() 
11b0: 61 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20  as the one that 
11c0: 61 6c 6c 6f 63 61 74 65 73 20 74 68 65 20 64 61  allocates the da
11d0: 74 61 62 61 73 65 20 0a 20 20 2a 2a 20 73 74 72  tabase .  ** str
11e0: 75 63 74 75 72 65 3f 0a 20 20 2a 2f 0a 20 20 73  ucture?.  */.  s
11f0: 71 6c 69 74 65 46 72 65 65 28 64 62 2d 3e 61 44  qliteFree(db->aD
1200: 62 5b 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20  b[1].pSchema);. 
1210: 20 73 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b   sqliteFree(db);
1220: 0a 20 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  .  sqlite3Releas
1230: 65 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20  eThreadData();. 
1240: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1250: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c  K;.}../*.** Roll
1260: 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73  back all databas
1270: 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64  e files..*/.void
1280: 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1290: 41 6c 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 29  All(sqlite3 *db)
12a0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  {.  int i;.  int
12b0: 20 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20   inTrans = 0;.  
12c0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
12d0: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  Db; i++){.    if
12e0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
12f0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
1300: 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
1310: 61 6e 73 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ans(db->aDb[i].p
1320: 42 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Bt) ){.        i
1330: 6e 54 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20  nTrans = 1;.    
1340: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
1350: 33 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64  3BtreeRollback(d
1360: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a  b->aDb[i].pBt);.
1370: 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d        db->aDb[i]
1380: 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20  .inTrans = 0;.  
1390: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 62    }.  }.  if( db
13a0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49  ->flags&SQLITE_I
13b0: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 29 7b 0a  nternChanges ){.
13c0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
13d0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
13e0: 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  b, 0);.  }..  /*
13f0: 20 49 66 20 6f 6e 65 20 68 61 73 20 62 65 65 6e   If one has been
1400: 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 69 6e 76   configured, inv
1410: 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  oke the rollback
1420: 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b 20 2a  -hook callback *
1430: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 52 6f 6c  /.  if( db->xRol
1440: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 26 26  lbackCallback &&
1450: 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20 21 64 62   (inTrans || !db
1460: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29 20 29 7b  ->autoCommit) ){
1470: 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61  .    db->xRollba
1480: 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  ckCallback(db->p
1490: 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b 0a 20 20  RollbackArg);.  
14a0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
14b0: 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  n a static strin
14c0: 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  g that describes
14d0: 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72   the kind of err
14e0: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
14f0: 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  the.** argument.
1500: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
1510: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
1520: 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63  t rc){.  const c
1530: 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68  har *z;.  switch
1540: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
1550: 20 53 51 4c 49 54 45 5f 52 4f 57 3a 0a 20 20 20   SQLITE_ROW:.   
1560: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e   case SQLITE_DON
1570: 45 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  E:.    case SQLI
1580: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
1590: 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72   = "not an error
15a0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
15c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
15d0: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a  TE_ERROR:      z
15e0: 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72   = "SQL logic er
15f0: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
1600: 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61  atabase";   brea
1610: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1620: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
1630: 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69   = "access permi
1640: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ssion denied";  
1650: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1660: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1670: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
1680: 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71   = "callback req
1690: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
16a0: 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  rt";        brea
16b0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
16c0: 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a  TE_BUSY:       z
16d0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
16e0: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1700: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1710: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
1720: 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62   = "database tab
1730: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20  le is locked";  
1740: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1750: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1760: 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a  TE_NOMEM:      z
1770: 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   = "out of memor
1780: 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y";             
1790: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
17a0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
17b0: 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a  TE_READONLY:   z
17c0: 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77   = "attempt to w
17d0: 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20  rite a readonly 
17e0: 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61  database";  brea
17f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1800: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
1810: 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22   = "interrupted"
1820: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1830: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1840: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1850: 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a  TE_IOERR:      z
1860: 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72   = "disk I/O err
1870: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
1880: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1890: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
18a0: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
18b0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73   = "database dis
18c0: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
18d0: 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61  rmed";      brea
18e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
18f0: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
1900: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6f 72 20   = "database or 
1910: 64 69 73 6b 20 69 73 20 66 75 6c 6c 22 3b 20 20  disk is full";  
1920: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1930: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1940: 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a  TE_CANTOPEN:   z
1950: 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70   = "unable to op
1960: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
1970: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
1980: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1990: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
19a0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63   = "database loc
19b0: 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61  king protocol fa
19c0: 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61  ilure";     brea
19d0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
19e0: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
19f0: 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69   = "table contai
1a00: 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20  ns no data";    
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1a20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a30: 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a  TE_SCHEMA:     z
1a40: 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68   = "database sch
1a50: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
1a60: 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;           brea
1a70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a80: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
1a90: 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66   = "constraint f
1aa0: 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20  ailed";         
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1ac0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1ad0: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a  TE_MISMATCH:   z
1ae0: 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   = "datatype mis
1af0: 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20  match";         
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1b10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1b20: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
1b30: 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74   = "library rout
1b40: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
1b50: 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61  f sequence";brea
1b60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1b70: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
1b80: 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73   = "kernel lacks
1b90: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
1ba0: 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61  ort";       brea
1bb0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1bc0: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a  TE_AUTH:       z
1bd0: 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f   = "authorizatio
1be0: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1c00: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1c10: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
1c20: 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61   = "auxiliary da
1c30: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
1c40: 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61  ror";       brea
1c50: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1c60: 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a  TE_RANGE:      z
1c70: 20 3d 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75   = "bind or colu
1c80: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
1c90: 72 61 6e 67 65 22 3b 20 20 20 20 20 62 72 65 61  range";     brea
1ca0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1cb0: 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a  TE_NOTADB:     z
1cc0: 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72   = "file is encr
1cd0: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
1ce0: 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61  a database";brea
1cf0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
1d10: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f   = "unknown erro
1d20: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1d40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1d50: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
1d60: 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65   routine impleme
1d70: 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62  nts a busy callb
1d80: 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20  ack that sleeps 
1d90: 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61  and tries.** aga
1da0: 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f  in until a timeo
1db0: 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63  ut value is reac
1dc0: 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75  hed.  The timeou
1dd0: 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e  t value is.** an
1de0: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
1df0: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
1e00: 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
1e10: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
1e20: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
1e30: 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  t sqliteDefaultB
1e40: 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f  usyCallback(. vo
1e50: 69 64 20 2a 70 74 72 2c 20 20 20 20 20 20 20 20  id *ptr,        
1e60: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1e70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
1e80: 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20  . int count     
1e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ea0: 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61  mber of times ta
1eb0: 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62 75 73  ble has been bus
1ec0: 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 4f 53 5f 57  y */.){.#if OS_W
1ed0: 49 4e 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 48  IN || (defined(H
1ee0: 41 56 45 5f 55 53 4c 45 45 50 29 20 26 26 20 48  AVE_USLEEP) && H
1ef0: 41 56 45 5f 55 53 4c 45 45 50 29 0a 20 20 73 74  AVE_USLEEP).  st
1f00: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 64 65  atic const u8 de
1f10: 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20  lays[] =.     { 
1f20: 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20 31 35 2c  1, 2, 5, 10, 15,
1f30: 20 32 30 2c 20 32 35 2c 20 32 35 2c 20 20 32 35   20, 25, 25,  25
1f40: 2c 20 20 35 30 2c 20 20 35 30 2c 20 31 30 30 20  ,  50,  50, 100 
1f50: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
1f60: 74 20 75 38 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a  t u8 totals[] =.
1f70: 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33 2c 20       { 0, 1, 3, 
1f80: 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33 2c 20   8, 18, 33, 53, 
1f90: 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20 31 37  78, 103, 128, 17
1fa0: 38 2c 20 32 32 38 20 7d 3b 0a 23 20 64 65 66 69  8, 228 };.# defi
1fb0: 6e 65 20 4e 44 45 4c 41 59 20 28 73 69 7a 65 6f  ne NDELAY (sizeo
1fc0: 66 28 64 65 6c 61 79 73 29 2f 73 69 7a 65 6f 66  f(delays)/sizeof
1fd0: 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a 20 20 69  (delays[0])).  i
1fe0: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73  nt timeout = ((s
1ff0: 71 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62  qlite3 *)ptr)->b
2000: 75 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e  usyTimeout;.  in
2010: 74 20 64 65 6c 61 79 2c 20 70 72 69 6f 72 3b 0a  t delay, prior;.
2020: 0a 20 20 61 73 73 65 72 74 28 20 63 6f 75 6e 74  .  assert( count
2030: 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 63 6f 75  >=0 );.  if( cou
2040: 6e 74 20 3c 20 4e 44 45 4c 41 59 20 29 7b 0a 20  nt < NDELAY ){. 
2050: 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79     delay = delay
2060: 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 20 20 70 72  s[count];.    pr
2070: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63 6f 75  ior = totals[cou
2080: 6e 74 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt];.  }else{.  
2090: 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73    delay = delays
20a0: 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a 20 20 20 20  [NDELAY-1];.    
20b0: 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 4e  prior = totals[N
20c0: 44 45 4c 41 59 2d 31 5d 20 2b 20 64 65 6c 61 79  DELAY-1] + delay
20d0: 2a 28 63 6f 75 6e 74 2d 28 4e 44 45 4c 41 59 2d  *(count-(NDELAY-
20e0: 31 29 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  1));.  }.  if( p
20f0: 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e 20 74  rior + delay > t
2100: 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 64 65  imeout ){.    de
2110: 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20 2d 20  lay = timeout - 
2120: 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28 20 64  prior;.    if( d
2130: 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75 72 6e  elay<=0 ) return
2140: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
2150: 33 4f 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b  3OsSleep(delay);
2160: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c  .  return 1;.#el
2170: 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  se.  int timeout
2180: 20 3d 20 28 28 73 71 6c 69 74 65 33 20 2a 29 70   = ((sqlite3 *)p
2190: 74 72 29 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74  tr)->busyTimeout
21a0: 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31  ;.  if( (count+1
21b0: 29 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74  )*1000 > timeout
21c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
21d0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f  ;.  }.  sqlite3O
21e0: 73 53 6c 65 65 70 28 31 30 30 30 29 3b 0a 20 20  sSleep(1000);.  
21f0: 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66  return 1;.#endif
2200: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  .}../*.** Invoke
2210: 20 74 68 65 20 67 69 76 65 6e 20 62 75 73 79 20   the given busy 
2220: 68 61 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  handler..**.** T
2230: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
2240: 61 6c 6c 65 64 20 77 68 65 6e 20 61 6e 20 6f 70  alled when an op
2250: 65 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 77  eration failed w
2260: 69 74 68 20 61 20 6c 6f 63 6b 2e 0a 2a 2a 20 49  ith a lock..** I
2270: 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  f this routine r
2280: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
2290: 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 72 65 74   the lock is ret
22a0: 72 69 65 64 2e 20 20 49 66 20 69 74 0a 2a 2a 20  ried.  If it.** 
22b0: 72 65 74 75 72 6e 73 20 30 2c 20 74 68 65 20 6f  returns 0, the o
22c0: 70 65 72 61 74 69 6f 6e 20 61 62 6f 72 74 73 20  peration aborts 
22d0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 42  with an SQLITE_B
22e0: 55 53 59 20 65 72 72 6f 72 2e 0a 2a 2f 0a 69 6e  USY error..*/.in
22f0: 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2300: 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2310: 61 6e 64 6c 65 72 20 2a 70 29 7b 0a 20 20 69 6e  andler *p){.  in
2320: 74 20 72 63 3b 0a 20 20 69 66 28 20 70 3d 3d 30  t rc;.  if( p==0
2330: 20 7c 7c 20 70 2d 3e 78 46 75 6e 63 3d 3d 30 20   || p->xFunc==0 
2340: 7c 7c 20 70 2d 3e 6e 42 75 73 79 3c 30 20 29 20  || p->nBusy<0 ) 
2350: 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 63 20 3d  return 0;.  rc =
2360: 20 70 2d 3e 78 46 75 6e 63 28 70 2d 3e 70 41 72   p->xFunc(p->pAr
2370: 67 2c 20 70 2d 3e 6e 42 75 73 79 29 3b 0a 20 20  g, p->nBusy);.  
2380: 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20  if( rc==0 ){.   
2390: 20 70 2d 3e 6e 42 75 73 79 20 3d 20 2d 31 3b 0a   p->nBusy = -1;.
23a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
23b0: 6e 42 75 73 79 2b 2b 3b 0a 20 20 7d 0a 20 20 72  nBusy++;.  }.  r
23c0: 65 74 75 72 6e 20 72 63 3b 20 0a 7d 0a 0a 2f 2a  eturn rc; .}../*
23d0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
23e0: 20 73 65 74 73 20 74 68 65 20 62 75 73 79 20 63   sets the busy c
23f0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53  allback for an S
2400: 71 6c 69 74 65 20 64 61 74 61 62 61 73 65 20 74  qlite database t
2410: 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63  o the.** given c
2420: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
2430: 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20   with the given 
2440: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74  argument..*/.int
2450: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61   sqlite3_busy_ha
2460: 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 33  ndler(.  sqlite3
2470: 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78 42   *db,.  int (*xB
2480: 75 73 79 29 28 76 6f 69 64 2a 2c 69 6e 74 29 2c  usy)(void*,int),
2490: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b  .  void *pArg.){
24a0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
24b0: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
24c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
24d0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
24e0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
24f0: 2e 78 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a  .xFunc = xBusy;.
2500: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
2510: 72 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  r.pArg = pArg;. 
2520: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
2530: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 65  .nBusy = 0;.  re
2540: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
2550: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2560: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
2570: 43 41 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54  CALLBACK./*.** T
2580: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
2590: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
25a0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71  llback for an Sq
25b0: 6c 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f  lite database to
25c0: 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61   the.** given ca
25d0: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
25e0: 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61  with the given a
25f0: 72 67 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f  rgument. The pro
2600: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
2610: 69 6c 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65  ill.** be invoke
2620: 64 20 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63  d every nOps opc
2630: 6f 64 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  odes..*/.void sq
2640: 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68  lite3_progress_h
2650: 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65  andler(.  sqlite
2660: 33 20 2a 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f  3 *db, .  int nO
2670: 70 73 2c 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ps,.  int (*xPro
2680: 67 72 65 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a  gress)(void*), .
2690: 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a    void *pArg.){.
26a0: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
26b0: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
26c0: 0a 20 20 20 20 69 66 28 20 6e 4f 70 73 3e 30 20  .    if( nOps>0 
26d0: 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72  ){.      db->xPr
26e0: 6f 67 72 65 73 73 20 3d 20 78 50 72 6f 67 72 65  ogress = xProgre
26f0: 73 73 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50  ss;.      db->nP
2700: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70  rogressOps = nOp
2710: 73 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70 50 72  s;.      db->pPr
2720: 6f 67 72 65 73 73 41 72 67 20 3d 20 70 41 72 67  ogressArg = pArg
2730: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2740: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
2750: 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 62 2d 3e   = 0;.      db->
2760: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
2770: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70 50 72 6f  ;.      db->pPro
2780: 67 72 65 73 73 41 72 67 20 3d 20 30 3b 0a 20 20  gressArg = 0;.  
2790: 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66    }.  }.}.#endif
27a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  .../*.** This ro
27b0: 75 74 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61  utine installs a
27c0: 20 64 65 66 61 75 6c 74 20 62 75 73 79 20 68 61   default busy ha
27d0: 6e 64 6c 65 72 20 74 68 61 74 20 77 61 69 74 73  ndler that waits
27e0: 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63   for the.** spec
27f0: 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ified number of 
2800: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66  milliseconds bef
2810: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e  ore returning 0.
2820: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2830: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c  busy_timeout(sql
2840: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6d 73  ite3 *db, int ms
2850: 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b  ){.  if( ms>0 ){
2860: 0a 20 20 20 20 64 62 2d 3e 62 75 73 79 54 69 6d  .    db->busyTim
2870: 65 6f 75 74 20 3d 20 6d 73 3b 0a 20 20 20 20 73  eout = ms;.    s
2880: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
2890: 6c 65 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65  ler(db, sqliteDe
28a0: 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63  faultBusyCallbac
28b0: 6b 2c 20 28 76 6f 69 64 2a 29 64 62 29 3b 0a 20  k, (void*)db);. 
28c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
28d0: 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  te3_busy_handler
28e0: 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  (db, 0, 0);.  }.
28f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2900: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 75  OK;.}../*.** Cau
2910: 73 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 6f  se any pending o
2920: 70 65 72 61 74 69 6f 6e 20 74 6f 20 73 74 6f 70  peration to stop
2930: 20 61 74 20 69 74 73 20 65 61 72 6c 69 65 73 74   at its earliest
2940: 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e 0a 2a 2f   opportunity..*/
2950: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 69 6e  .void sqlite3_in
2960: 74 65 72 72 75 70 74 28 73 71 6c 69 74 65 33 20  terrupt(sqlite3 
2970: 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 73 71 6c  *db){.  if( !sql
2980: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
2990: 64 62 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66  db) ){.    db->f
29a0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
29b0: 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 7d 0a  nterrupt;.  }.}.
29c0: 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73  ./*.** Windows s
29d0: 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61  ystems should ca
29e0: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
29f0: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74  to free memory t
2a00: 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  hat.** is return
2a10: 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65  ed in the in the
2a20: 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65   errmsg paramete
2a30: 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70 65  r of sqlite3_ope
2a40: 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69  n() when.** SQLi
2a50: 74 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f  te is a DLL.  Fo
2a60: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69  r some reason, i
2a70: 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  t does not work 
2a80: 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a  to call free().*
2a90: 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a  * directly..**.*
2aa0: 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e  * Note that we n
2ab0: 65 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65  eed to call free
2ac0: 28 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65  () not sqliteFre
2ad0: 65 28 29 20 68 65 72 65 2e 0a 2a 2f 0a 76 6f 69  e() here..*/.voi
2ae0: 64 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 63  d sqlite3_free(c
2af0: 68 61 72 20 2a 70 29 7b 20 66 72 65 65 28 70 29  har *p){ free(p)
2b00: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ; }../*.** This 
2b10: 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 78 61 63  function is exac
2b20: 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73 20  tly the same as 
2b30: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
2b40: 75 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63 65 70  unction(), excep
2b50: 74 0a 2a 2a 20 74 68 61 74 20 69 74 20 69 73 20  t.** that it is 
2b60: 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63  designed to be c
2b70: 61 6c 6c 65 64 20 62 79 20 69 6e 74 65 72 6e 61  alled by interna
2b80: 6c 20 63 6f 64 65 2e 20 54 68 65 20 64 69 66 66  l code. The diff
2b90: 65 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61  erence is.** tha
2ba0: 74 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  t if a malloc() 
2bb0: 66 61 69 6c 73 20 69 6e 20 73 71 6c 69 74 65 33  fails in sqlite3
2bc0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
2bd0: 28 29 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  (), an error cod
2be0: 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  e.** is returned
2bf0: 20 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46   and the mallocF
2c00: 61 69 6c 65 64 20 66 6c 61 67 20 63 6c 65 61 72  ailed flag clear
2c10: 65 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ed. .*/.int sqli
2c20: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 0a 20  te3CreateFunc(. 
2c30: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
2c40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e  const char *zFun
2c50: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
2c60: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63   nArg,.  int enc
2c70: 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ,.  void *pUserD
2c80: 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ata,.  void (*xF
2c90: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
2ca0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2cb0: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2cc0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
2cd0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2ce0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2cf0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
2d00: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
2d10: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e  ntext*).){.  Fun
2d20: 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e  cDef *p;.  int n
2d30: 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c  Name;..  if( sql
2d40: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
2d50: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
2d60: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
2d70: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63  .  }.  if( zFunc
2d80: 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20  tionName==0 ||. 
2d90: 20 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28       (xFunc && (
2da0: 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29  xFinal || xStep)
2db0: 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46  ) || .      (!xF
2dc0: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
2dd0: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
2de0: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
2df0: 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70  !xFinal && xStep
2e00: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72  )) ||.      (nAr
2e10: 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37  g<-1 || nArg>127
2e20: 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c  ) ||.      (255<
2e30: 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28  (nName = strlen(
2e40: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29  zFunctionName)))
2e50: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
2e60: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
2e70: 0a 20 20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .  .#ifndef SQLI
2e80: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
2e90: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46  /* If SQLITE_UTF
2ea0: 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20  16 is specified 
2eb0: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  as the encoding 
2ec0: 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20  type, transform 
2ed0: 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65  this.  ** to one
2ee0: 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   of SQLITE_UTF16
2ef0: 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46  LE or SQLITE_UTF
2f00: 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20  16BE using the. 
2f10: 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   ** SQLITE_UTF16
2f20: 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51  NATIVE macro. SQ
2f30: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f  LITE_UTF16 is no
2f40: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
2f50: 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20  y..  **.  ** If 
2f60: 53 51 4c 49 54 45 5f 41 4e 59 20 69 73 20 73 70  SQLITE_ANY is sp
2f70: 65 63 69 66 69 65 64 2c 20 61 64 64 20 74 68 72  ecified, add thr
2f80: 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ee versions of t
2f90: 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a  he function.  **
2fa0: 20 74 6f 20 74 68 65 20 68 61 73 68 20 74 61 62   to the hash tab
2fb0: 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  le..  */.  if( e
2fc0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2fd0: 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51   ){.    enc = SQ
2fe0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
2ff0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 6e  ;.  }else if( en
3000: 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b  c==SQLITE_ANY ){
3010: 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20  .    int rc;.   
3020: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65   rc = sqlite3Cre
3030: 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e  ateFunc(db, zFun
3040: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  ctionName, nArg,
3050: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20   SQLITE_UTF8,.  
3060: 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61         pUserData
3070: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
3080: 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28  xFinal);.    if(
3090: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
30a0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
30b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65 61  rc = sqlite3Crea
30c0: 74 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e 63  teFunc(db, zFunc
30d0: 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  tionName, nArg, 
30e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 0a  SQLITE_UTF16LE,.
30f0: 20 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74          pUserDat
3100: 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  a, xFunc, xStep,
3110: 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66   xFinal);.    if
3120: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
3130: 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
3140: 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54   enc = SQLITE_UT
3150: 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c 73 65  F16BE;.  }.#else
3160: 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  .  enc = SQLITE_
3170: 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20 20 0a  UTF8;.#endif.  .
3180: 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20 61 6e    /* Check if an
3190: 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69   existing functi
31a0: 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72  on is being over
31b0: 72 69 64 64 65 6e 20 6f 72 20 64 65 6c 65 74 65  ridden or delete
31c0: 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a 20 61  d. If so,.  ** a
31d0: 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 63 74  nd there are act
31e0: 69 76 65 20 56 4d 73 2c 20 74 68 65 6e 20 72 65  ive VMs, then re
31f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
3200: 2e 20 49 66 20 61 20 66 75 6e 63 74 69 6f 6e 0a  . If a function.
3210: 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 6f 76    ** is being ov
3220: 65 72 72 69 64 64 65 6e 2f 64 65 6c 65 74 65 64  erridden/deleted
3230: 20 62 75 74 20 74 68 65 72 65 20 61 72 65 20 6e   but there are n
3240: 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20 61 6c  o active VMs, al
3250: 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f 70 65  low the.  ** ope
3260: 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74 69 6e  ration to contin
3270: 75 65 20 62 75 74 20 69 6e 76 61 6c 69 64 61 74  ue but invalidat
3280: 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69 6c 65  e all precompile
3290: 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  d statements..  
32a0: 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33  */.  p = sqlite3
32b0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FindFunction(db,
32c0: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
32d0: 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63  nName, nArg, enc
32e0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 20 26 26  , 0);.  if( p &&
32f0: 20 70 2d 3e 69 50 72 65 66 45 6e 63 3d 3d 65 6e   p->iPrefEnc==en
3300: 63 20 26 26 20 70 2d 3e 6e 41 72 67 3d 3d 6e 41  c && p->nArg==nA
3310: 72 67 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  rg ){.    if( db
3320: 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 20  ->activeVdbeCnt 
3330: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
3340: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
3350: 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20  _BUSY, .        
3360: 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  "Unable to delet
3370: 65 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d 66 75  e/modify user-fu
3380: 6e 63 74 69 6f 6e 20 64 75 65 20 74 6f 20 61 63  nction due to ac
3390: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 22  tive statements"
33a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
33b0: 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46   !sqlite3MallocF
33c0: 61 69 6c 65 64 28 29 20 29 3b 0a 20 20 20 20 20  ailed() );.     
33d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
33e0: 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
33f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
3400: 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
3410: 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 7d  ments(db);.    }
3420: 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69  .  }..  p = sqli
3430: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
3440: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
3450: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
3460: 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  enc, 1);.  if( p
3470: 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73   ){.    p->flags
3480: 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 78 46 75   = 0;.    p->xFu
3490: 6e 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 20 20  nc = xFunc;.    
34a0: 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74 65 70  p->xStep = xStep
34b0: 3b 0a 20 20 20 20 70 2d 3e 78 46 69 6e 61 6c 69  ;.    p->xFinali
34c0: 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 20  ze = xFinal;.   
34d0: 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20   p->pUserData = 
34e0: 70 55 73 65 72 44 61 74 61 3b 0a 20 20 7d 0a 20  pUserData;.  }. 
34f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3500: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61  K;.}../*.** Crea
3510: 74 65 20 6e 65 77 20 75 73 65 72 20 66 75 6e 63  te new user func
3520: 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  tions..*/.int sq
3530: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
3540: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ction(.  sqlite3
3550: 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68   *db,.  const ch
3560: 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ar *zFunctionNam
3570: 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  e,.  int nArg,. 
3580: 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69 64   int enc,.  void
3590: 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46   *p,.  void (*xF
35a0: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
35b0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
35c0: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
35d0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
35e0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
35f0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
3600: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
3610: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
3620: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74  ntext*).){.  int
3630: 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20 21   rc;.  assert( !
3640: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
3650: 6c 65 64 28 29 20 29 3b 0a 20 20 72 63 20 3d 20  led() );.  rc = 
3660: 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
3670: 63 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e  c(db, zFunctionN
3680: 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20  ame, nArg, enc, 
3690: 70 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  p, xFunc, xStep,
36a0: 20 78 46 69 6e 61 6c 29 3b 0a 0a 20 20 72 65 74   xFinal);..  ret
36b0: 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78  urn sqlite3ApiEx
36c0: 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23  it(db, rc);.}..#
36d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36e0: 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
36f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
3700: 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65  tion16(.  sqlite
3710: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76  3 *db,.  const v
3720: 6f 69 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  oid *zFunctionNa
3730: 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  me,.  int nArg,.
3740: 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a    int eTextRep,.
3750: 20 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69    void *p,.  voi
3760: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
3770: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3780: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
3790: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  ,.  void (*xStep
37a0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
37b0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
37c0: 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  alue**),.  void 
37d0: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
37e0: 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20  3_context*).){. 
37f0: 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
3800: 2a 7a 46 75 6e 63 38 3b 0a 20 20 61 73 73 65 72  *zFunc8;.  asser
3810: 74 28 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  t( !sqlite3Mallo
3820: 63 46 61 69 6c 65 64 28 29 20 29 3b 0a 0a 20 20  cFailed() );..  
3830: 7a 46 75 6e 63 38 20 3d 20 73 71 6c 69 74 65 33  zFunc8 = sqlite3
3840: 75 74 66 31 36 74 6f 38 28 7a 46 75 6e 63 74 69  utf16to8(zFuncti
3850: 6f 6e 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 72  onName, -1);.  r
3860: 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65 61 74  c = sqlite3Creat
3870: 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e 63 38  eFunc(db, zFunc8
3880: 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70  , nArg, eTextRep
3890: 2c 20 70 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  , p, xFunc, xSte
38a0: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 73 71  p, xFinal);.  sq
38b0: 6c 69 74 65 46 72 65 65 28 7a 46 75 6e 63 38 29  liteFree(zFunc8)
38c0: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
38d0: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
38e0: 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  c);.}.#endif..#i
38f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
3900: 54 5f 54 52 41 43 45 0a 2f 2a 0a 2a 2a 20 52 65  T_TRACE./*.** Re
3910: 67 69 73 74 65 72 20 61 20 74 72 61 63 65 20 66  gister a trace f
3920: 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41  unction.  The pA
3930: 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76  rg from the prev
3940: 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72 65  iously registere
3950: 64 20 74 72 61 63 65 0a 2a 2a 20 69 73 20 72 65  d trace.** is re
3960: 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20  turned.  .**.** 
3970: 41 20 4e 55 4c 4c 20 74 72 61 63 65 20 66 75 6e  A NULL trace fun
3980: 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74  ction means that
3990: 20 6e 6f 20 74 72 61 63 69 6e 67 20 69 73 20 65   no tracing is e
39a0: 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d  xecutes.  A non-
39b0: 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73  NULL.** trace is
39c0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
39d0: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73  function that is
39e0: 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20   invoked at the 
39f0: 73 74 61 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a  start of each.**
3a00: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
3a10: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
3a20: 5f 74 72 61 63 65 28 73 71 6c 69 74 65 33 20 2a  _trace(sqlite3 *
3a30: 64 62 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63  db, void (*xTrac
3a40: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
3a50: 68 61 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72  har*), void *pAr
3a60: 67 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64  g){.  void *pOld
3a70: 20 3d 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67   = db->pTraceArg
3a80: 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d  ;.  db->xTrace =
3a90: 20 78 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70   xTrace;.  db->p
3aa0: 54 72 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b  TraceArg = pArg;
3ab0: 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a  .  return pOld;.
3ac0: 7d 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  }./*.** Register
3ad0: 20 61 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74   a profile funct
3ae0: 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66  ion.  The pArg f
3af0: 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73  rom the previous
3b00: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 0a 2a  ly registered .*
3b10: 2a 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  * profile functi
3b20: 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  on is returned. 
3b30: 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 70   .**.** A NULL p
3b40: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
3b50: 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 70 72  means that no pr
3b60: 6f 66 69 6c 69 6e 67 20 69 73 20 65 78 65 63 75  ofiling is execu
3b70: 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c  tes.  A non-NULL
3b80: 0a 2a 2a 20 70 72 6f 66 69 6c 65 20 69 73 20 61  .** profile is a
3b90: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75   pointer to a fu
3ba0: 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69  nction that is i
3bb0: 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20 63 6f  nvoked at the co
3bc0: 6e 63 6c 75 73 69 6f 6e 20 6f 66 0a 2a 2a 20 65  nclusion of.** e
3bd0: 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
3be0: 74 20 74 68 61 74 20 69 73 20 72 75 6e 2e 0a 2a  t that is run..*
3bf0: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
3c00: 70 72 6f 66 69 6c 65 28 0a 20 20 73 71 6c 69 74  profile(.  sqlit
3c10: 65 33 20 2a 64 62 2c 0a 20 20 76 6f 69 64 20 28  e3 *db,.  void (
3c20: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
3c30: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
3c40: 69 74 65 5f 75 69 6e 74 36 34 29 2c 0a 20 20 76  ite_uint64),.  v
3c50: 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 76  oid *pArg.){.  v
3c60: 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e  oid *pOld = db->
3c70: 70 50 72 6f 66 69 6c 65 41 72 67 3b 0a 20 20 64  pProfileArg;.  d
3c80: 62 2d 3e 78 50 72 6f 66 69 6c 65 20 3d 20 78 50  b->xProfile = xP
3c90: 72 6f 66 69 6c 65 3b 0a 20 20 64 62 2d 3e 70 50  rofile;.  db->pP
3ca0: 72 6f 66 69 6c 65 41 72 67 20 3d 20 70 41 72 67  rofileArg = pArg
3cb0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b  ;.  return pOld;
3cc0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
3cd0: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a  ITE_OMIT_TRACE *
3ce0: 2f 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45  /../*** EXPERIME
3cf0: 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52  NTAL ***.**.** R
3d00: 65 67 69 73 74 65 72 20 61 20 66 75 6e 63 74 69  egister a functi
3d10: 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
3d20: 20 77 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74   when a transact
3d30: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a  ion comments..**
3d40: 20 49 66 20 74 68 65 20 69 6e 76 6f 6b 65 64 20   If the invoked 
3d50: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
3d60: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
3d70: 74 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d  the commit becom
3d80: 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b  es a.** rollback
3d90: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
3da0: 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a  e3_commit_hook(.
3db0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
3dd0: 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74  ttach the hook t
3de0: 6f 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  o this database 
3df0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c  */.  int (*xCall
3e00: 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f  back)(void*),  /
3e10: 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e  * Function to in
3e20: 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d  voke on each com
3e30: 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  mit */.  void *p
3e40: 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Arg             
3e50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
3e60: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  o the function *
3e70: 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c  /.){.  void *pOl
3e80: 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41  d = db->pCommitA
3e90: 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69  rg;.  db->xCommi
3ea0: 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  tCallback = xCal
3eb0: 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f  lback;.  db->pCo
3ec0: 6d 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a  mmitArg = pArg;.
3ed0: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
3ee0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
3ef0: 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62   a callback to b
3f00: 65 20 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74  e invoked each t
3f10: 69 6d 65 20 61 20 72 6f 77 20 69 73 20 75 70 64  ime a row is upd
3f20: 61 74 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74 65  ated,.** inserte
3f30: 64 20 6f 72 20 64 65 6c 65 74 65 64 20 75 73 69  d or deleted usi
3f40: 6e 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65  ng this database
3f50: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
3f60: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 70  void *sqlite3_up
3f70: 64 61 74 65 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  date_hook(.  sql
3f80: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
3f90: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
3fa0: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
3fb0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
3fc0: 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b  void (*xCallback
3fd0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72  )(void*,int,char
3fe0: 20 63 6f 6e 73 74 20 2a 2c 63 68 61 72 20 63 6f   const *,char co
3ff0: 6e 73 74 20 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  nst *,sqlite_int
4000: 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  64),.  void *pAr
4010: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
4020: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
4030: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
4040: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 20  ){.  void *pRet 
4050: 3d 20 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  = db->pUpdateArg
4060: 3b 0a 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43  ;.  db->xUpdateC
4070: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
4080: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 55 70 64 61  ack;.  db->pUpda
4090: 74 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  teArg = pArg;.  
40a0: 72 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a  return pRet;.}..
40b0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
40c0: 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20   callback to be 
40d0: 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d  invoked each tim
40e0: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e a transaction 
40f0: 69 73 20 72 6f 6c 6c 65 64 0a 2a 2a 20 62 61 63  is rolled.** bac
4100: 6b 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  k by this databa
4110: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
4120: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
4130: 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 0a 20  rollback_hook(. 
4140: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
4150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74             /* At
4160: 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f  tach the hook to
4170: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
4180: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 43 61 6c 6c  /.  void (*xCall
4190: 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 2f 2a  back)(void*), /*
41a0: 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   Callback functi
41b0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
41c0: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
41d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
41e0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
41f0: 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74  .){.  void *pRet
4200: 20 3d 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b   = db->pRollback
4210: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c  Arg;.  db->xRoll
4220: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 3d 20 78  backCallback = x
4230: 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e  Callback;.  db->
4240: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 20 3d 20 70  pRollbackArg = p
4250: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 52  Arg;.  return pR
4260: 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  et;.}../*.** Thi
4270: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
4280: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
4290: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
42a0: 64 61 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a  database BTree.*
42b0: 2a 20 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46  * driver.  If zF
42c0: 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e  ilename is the n
42d0: 61 6d 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74  ame of a file, t
42e0: 68 65 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73  hen that file is
42f0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75  .** opened and u
4300: 73 65 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61  sed.  If zFilena
4310: 6d 65 20 69 73 20 74 68 65 20 6d 61 67 69 63 20  me is the magic 
4320: 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  name ":memory:" 
4330: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  then.** the data
4340: 62 61 73 65 20 69 73 20 73 74 6f 72 65 64 20 69  base is stored i
4350: 6e 20 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73  n memory (and is
4360: 20 74 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20   thus forgotten 
4370: 61 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68  as soon as.** th
4380: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
4390: 63 6c 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69  closed.)  If zFi
43a0: 6c 65 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74  lename is NULL t
43b0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
43c0: 0a 2a 2a 20 69 73 20 61 20 22 76 69 72 74 75 61  .** is a "virtua
43d0: 6c 22 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  l" database for 
43e0: 74 72 61 6e 73 69 65 6e 74 20 75 73 65 20 6f 6e  transient use on
43f0: 6c 79 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65  ly and is delete
4400: 64 20 61 73 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20  d as.** soon as 
4410: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  the connection i
4420: 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
4430: 41 20 76 69 72 74 75 61 6c 20 64 61 74 61 62 61  A virtual databa
4440: 73 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  se can be either
4450: 20 61 20 64 69 73 6b 20 66 69 6c 65 20 28 74 68   a disk file (th
4460: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
4470: 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77  lly.** deleted w
4480: 68 65 6e 20 74 68 65 20 66 69 6c 65 20 69 73 20  hen the file is 
4490: 63 6c 6f 73 65 64 29 20 6f 72 20 69 74 20 61 6e  closed) or it an
44a0: 20 62 65 20 68 65 6c 64 20 65 6e 74 69 72 65 6c   be held entirel
44b0: 79 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20  y in memory,.** 
44c0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
44d0: 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54   values of the T
44e0: 45 4d 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c  EMP_STORE compil
44f0: 65 2d 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64  e-time macro and
4500: 20 74 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70   the.** db->temp
4510: 5f 73 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c  _store variable,
4520: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
4530: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72  e following char
4540: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54  t:.**.**       T
4550: 45 4d 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62  EMP_STORE     db
4560: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20  ->temp_store    
4570: 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d   Location of tem
4580: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 0a  porary database.
4590: 2a 2a 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d  **       -------
45a0: 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  ---     --------
45b0: 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d  ------     -----
45c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20  ---------.**    
45e0: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
45f0: 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20         any      
4600: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
4610: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
4620: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
4630: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
4640: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
4650: 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20              2   
4660: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72             memor
4670: 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31  y.**           1
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  0              f
46a0: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
46b0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
46c0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
46d0: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
46e0: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
46f0: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
4700: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
4710: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
4720: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20          0       
4730: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
4740: 20 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20             3    
4750: 20 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20             any  
4760: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72             memor
4770: 79 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  y.*/.int sqlite3
4780: 42 74 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20  BtreeFactory(.  
4790: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 20 2a 64  const sqlite3 *d
47a0: 62 2c 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 69  b,        /* Mai
47b0: 6e 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 20  n database when 
47c0: 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65  opening aux othe
47d0: 72 77 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e  rwise 0 */.  con
47e0: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
47f0: 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  me,    /* Name o
4800: 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61  f the file conta
4810: 69 6e 69 6e 67 20 74 68 65 20 42 54 72 65 65 20  ining the BTree 
4820: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e  database */.  in
4830: 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20  t omitJournal,  
4840: 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52          /* if TR
4850: 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  UE then do not j
4860: 6f 75 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65  ournal this file
4870: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65   */.  int nCache
4880: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
4890: 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65  /* How many page
48a0: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
48b0: 63 68 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  che */.  Btree *
48c0: 2a 70 70 42 74 72 65 65 20 20 20 20 20 20 20 20  *ppBtree        
48d0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
48e0: 20 6e 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63   new Btree objec
48f0: 74 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  t written here *
4900: 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74 72 65 65  /.){.  int btree
4910: 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e  _flags = 0;.  in
4920: 74 20 72 63 3b 0a 20 20 0a 20 20 61 73 73 65 72  t rc;.  .  asser
4930: 74 28 20 70 70 42 74 72 65 65 20 21 3d 20 30 29  t( ppBtree != 0)
4940: 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72  ;.  if( omitJour
4950: 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74 72 65 65  nal ){.    btree
4960: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
4970: 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20  OMIT_JOURNAL;.  
4980: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  }.  if( db->flag
4990: 73 20 26 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61  s & SQLITE_NoRea
49a0: 64 6c 6f 63 6b 20 29 7b 0a 20 20 20 20 62 74 72  dlock ){.    btr
49b0: 65 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45  ee_flags |= BTRE
49c0: 45 5f 4e 4f 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20  E_NO_READLOCK;. 
49d0: 20 7d 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61   }.  if( zFilena
49e0: 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 20 54 45 4d  me==0 ){.#if TEM
49f0: 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 2f  P_STORE==0.    /
4a00: 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a  * Do nothing */.
4a10: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4a20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52  QLITE_OMIT_MEMOR
4a30: 59 44 42 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f  YDB.#if TEMP_STO
4a40: 52 45 3d 3d 31 0a 20 20 20 20 69 66 28 20 64 62  RE==1.    if( db
4a50: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20  ->temp_store==2 
4a60: 29 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a  ) zFilename = ":
4a70: 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66  memory:";.#endif
4a80: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
4a90: 3d 32 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74  =2.    if( db->t
4aa0: 65 6d 70 5f 73 74 6f 72 65 21 3d 31 20 29 20 7a  emp_store!=1 ) z
4ab0: 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d  Filename = ":mem
4ac0: 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69  ory:";.#endif.#i
4ad0: 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a  f TEMP_STORE==3.
4ae0: 20 20 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20      zFilename = 
4af0: 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64  ":memory:";.#end
4b00: 69 66 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  if.#endif /* SQL
4b10: 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
4b20: 42 20 2a 2f 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  B */.  }..  rc =
4b30: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
4b40: 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 28 73 71  n(zFilename, (sq
4b50: 6c 69 74 65 33 20 2a 29 64 62 2c 20 70 70 42 74  lite3 *)db, ppBt
4b60: 72 65 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73  ree, btree_flags
4b70: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
4b80: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
4b90: 6c 69 74 65 33 42 74 72 65 65 53 65 74 42 75 73  lite3BtreeSetBus
4ba0: 79 48 61 6e 64 6c 65 72 28 2a 70 70 42 74 72 65  yHandler(*ppBtre
4bb0: 65 2c 20 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62  e, (void*)&db->b
4bc0: 75 73 79 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20  usyHandler);.   
4bd0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
4be0: 43 61 63 68 65 53 69 7a 65 28 2a 70 70 42 74 72  CacheSize(*ppBtr
4bf0: 65 65 2c 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d  ee, nCache);.  }
4c00: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
4c10: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54  ./*.** Return UT
4c20: 46 2d 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  F-8 encoded Engl
4c30: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
4c40: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
4c50: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
4c60: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  rror..*/.const c
4c70: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  har *sqlite3_err
4c80: 6d 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29  msg(sqlite3 *db)
4c90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
4ca0: 7a 3b 0a 20 20 69 66 28 20 21 64 62 20 7c 7c 20  z;.  if( !db || 
4cb0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
4cc0: 6c 65 64 28 29 20 29 7b 0a 20 20 20 20 72 65 74  led() ){.    ret
4cd0: 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74  urn sqlite3ErrSt
4ce0: 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b  r(SQLITE_NOMEM);
4cf0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
4d00: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
4d10: 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65  ) || db->errCode
4d20: 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  ==SQLITE_MISUSE 
4d30: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
4d40: 6c 69 74 65 33 45 72 72 53 74 72 28 53 51 4c 49  lite3ErrStr(SQLI
4d50: 54 45 5f 4d 49 53 55 53 45 29 3b 0a 20 20 7d 0a  TE_MISUSE);.  }.
4d60: 20 20 7a 20 3d 20 28 63 68 61 72 2a 29 73 71 6c    z = (char*)sql
4d70: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
4d80: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28  db->pErr);.  if(
4d90: 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 20 3d   z==0 ){.    z =
4da0: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
4db0: 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20 20 7d  b->errCode);.  }
4dc0: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
4dd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4de0: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
4df0: 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e  Return UTF-16 en
4e00: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
4e10: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
4e20: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
4e30: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
4e40: 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  */.const void *s
4e50: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
4e60: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
4e70: 2f 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74  /* Because all t
4e80: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
4e90: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
4ea0: 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  in the unicode. 
4eb0: 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d 30   ** range 0x00-0
4ec0: 78 46 46 2c 20 69 66 20 77 65 20 70 61 64 20 74  xFF, if we pad t
4ed0: 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 74  he big-endian st
4ee0: 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20 2a  ring with a .  *
4ef0: 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20 77 65 20  * zero byte, we 
4f00: 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65 20 6c  can obtain the l
4f10: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 74 72  ittle-endian str
4f20: 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20 26 62  ing with.  ** &b
4f30: 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20  ig_endian[1]..  
4f40: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  */.  static cons
4f50: 74 20 63 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42  t char outOfMemB
4f60: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27  e[] = {.    0, '
4f70: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
4f80: 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  t', 0, ' ', .   
4f90: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c   0, 'o', 0, 'f',
4fa0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
4fb0: 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'm', 0, 'e', 0,
4fc0: 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'm', 0, 'o', 0,
4fd0: 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c   'r', 0, 'y', 0,
4fe0: 20 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61   0, 0.  };.  sta
4ff0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6d  tic const char m
5000: 69 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b 0a 20  isuseBe [] = {. 
5010: 20 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 69     0, 'l', 0, 'i
5020: 27 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20 27 72  ', 0, 'b', 0, 'r
5030: 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 72  ', 0, 'a', 0, 'r
5040: 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 27 20  ', 0, 'y', 0, ' 
5050: 27 2c 20 0a 20 20 20 20 30 2c 20 27 72 27 2c 20  ', .    0, 'r', 
5060: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
5070: 30 2c 20 27 74 27 2c 20 30 2c 20 27 69 27 2c 20  0, 't', 0, 'i', 
5080: 30 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'n', 0, 'e', 
5090: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
50a0: 27 63 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20  'c', 0, 'a', 0, 
50b0: 27 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20  'l', 0, 'l', 0, 
50c0: 27 65 27 2c 20 30 2c 20 27 64 27 2c 20 30 2c 20  'e', 0, 'd', 0, 
50d0: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27  ' ', .    0, 'o'
50e0: 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27  , 0, 'u', 0, 't'
50f0: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30  , 0, ' ', .    0
5100: 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30  , 'o', 0, 'f', 0
5110: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
5120: 73 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  s', 0, 'e', 0, '
5130: 71 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  q', 0, 'u', 0, '
5140: 65 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27  e', 0, 'n', 0, '
5150: 63 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 30  c', 0, 'e', 0, 0
5160: 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73  , 0.  };..  cons
5170: 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 69 66 28  t void *z;.  if(
5180: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61   sqlite3MallocFa
5190: 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20 72 65  iled() ){.    re
51a0: 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f  turn (void *)(&o
51b0: 75 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45  utOfMemBe[SQLITE
51c0: 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51  _UTF16NATIVE==SQ
51d0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30  LITE_UTF16LE?1:0
51e0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ]);.  }.  if( sq
51f0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
5200: 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43  (db) || db->errC
5210: 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55  ode==SQLITE_MISU
5220: 53 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  SE ){.    return
5230: 20 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75 73   (void *)(&misus
5240: 65 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  eBe[SQLITE_UTF16
5250: 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55  NATIVE==SQLITE_U
5260: 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20  TF16LE?1:0]);.  
5270: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
5280: 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d  value_text16(db-
5290: 3e 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d  >pErr);.  if( z=
52a0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
52b0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d  3ValueSetStr(db-
52c0: 3e 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69 74  >pErr, -1, sqlit
52d0: 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72  e3ErrStr(db->err
52e0: 43 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20 20  Code),.         
52f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
5300: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
5310: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
5320: 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45  ue_text16(db->pE
5330: 72 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  rr);.  }.  sqlit
5340: 65 33 41 70 69 45 78 69 74 28 30 2c 20 30 29 3b  e3ApiExit(0, 0);
5350: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 23  .  return z;.}.#
5360: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
5370: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f  OMIT_UTF16 */../
5380: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
5390: 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  most recent erro
53a0: 72 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64  r code generated
53b0: 20 62 79 20 61 6e 20 53 51 4c 69 74 65 20 72 6f   by an SQLite ro
53c0: 75 74 69 6e 65 2e 20 49 66 20 4e 55 4c 4c 20 69  utine. If NULL i
53d0: 73 0a 2a 2a 20 70 61 73 73 65 64 20 74 6f 20 74  s.** passed to t
53e0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20 77 65  his function, we
53f0: 20 61 73 73 75 6d 65 20 61 20 6d 61 6c 6c 6f 63   assume a malloc
5400: 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67  () failed during
5410: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 2e   sqlite3_open().
5420: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
5430: 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20  errcode(sqlite3 
5440: 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20  *db){.  if( !db 
5450: 7c 7c 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  || sqlite3Malloc
5460: 46 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20  Failed() ){.    
5470: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
5480: 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  MEM;.  }.  if( s
5490: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
54a0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
54b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
54c0: 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  E;.  }.  return 
54d0: 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a  db->errCode;.}..
54e0: 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 6e  /*.** Create a n
54f0: 65 77 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ew collating fun
5500: 63 74 69 6f 6e 20 66 6f 72 20 64 61 74 61 62 61  ction for databa
5510: 73 65 20 22 64 62 22 2e 20 20 54 68 65 20 6e 61  se "db".  The na
5520: 6d 65 20 69 73 20 7a 4e 61 6d 65 0a 2a 2a 20 61  me is zName.** a
5530: 6e 64 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  nd the encoding 
5540: 69 73 20 65 6e 63 2e 0a 2a 2f 0a 73 74 61 74 69  is enc..*/.stati
5550: 63 20 69 6e 74 20 63 72 65 61 74 65 43 6f 6c 6c  c int createColl
5560: 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ation(.  sqlite3
5570: 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63  * db, .  const c
5580: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69  har *zName, .  i
5590: 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a  nt enc, .  void*
55a0: 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43   pCtx,.  int(*xC
55b0: 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e  ompare)(void*,in
55c0: 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e  t,const void*,in
55d0: 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29  t,const void*).)
55e0: 7b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  {.  CollSeq *pCo
55f0: 6c 6c 3b 0a 20 20 69 6e 74 20 65 6e 63 32 3b 0a  ll;.  int enc2;.
5600: 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33    .  if( sqlite3
5610: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5620: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5630: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5640: 0a 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45  ..  /* If SQLITE
5650: 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66  _UTF16 is specif
5660: 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64  ied as the encod
5670: 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66  ing type, transf
5680: 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f  orm this.  ** to
5690: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55   one of SQLITE_U
56a0: 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45  TF16LE or SQLITE
56b0: 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74  _UTF16BE using t
56c0: 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55  he.  ** SQLITE_U
56d0: 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f  TF16NATIVE macro
56e0: 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  . SQLITE_UTF16 i
56f0: 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72  s not used inter
5700: 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 65 6e  nally..  */.  en
5710: 63 32 20 3d 20 65 6e 63 20 26 20 7e 53 51 4c 49  c2 = enc & ~SQLI
5720: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
5730: 3b 0a 20 20 69 66 28 20 65 6e 63 32 3d 3d 53 51  ;.  if( enc2==SQ
5740: 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20  LITE_UTF16 ){.  
5750: 20 20 65 6e 63 32 20 3d 20 53 51 4c 49 54 45 5f    enc2 = SQLITE_
5760: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d  UTF16NATIVE;.  }
5770: 0a 0a 20 20 69 66 28 20 28 65 6e 63 32 26 7e 33  ..  if( (enc2&~3
5780: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )!=0 ){.    sqli
5790: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
57a0: 49 54 45 5f 45 52 52 4f 52 2c 20 22 75 6e 6b 6e  ITE_ERROR, "unkn
57b0: 6f 77 6e 20 65 6e 63 6f 64 69 6e 67 22 29 3b 0a  own encoding");.
57c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
57d0: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  E_ERROR;.  }..  
57e0: 2f 2a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  /* Check if this
57f0: 20 63 61 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e   call is removin
5800: 67 20 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 61  g or replacing a
5810: 6e 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61  n existing colla
5820: 74 69 6f 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65  tion .  ** seque
5830: 6e 63 65 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20  nce. If so, and 
5840: 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
5850: 20 56 4d 73 2c 20 72 65 74 75 72 6e 20 62 75 73   VMs, return bus
5860: 79 2e 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a  y. If there.  **
5870: 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56   are no active V
5880: 4d 73 2c 20 69 6e 76 61 6c 69 64 61 74 65 20 61  Ms, invalidate a
5890: 6e 79 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20  ny pre-compiled 
58a0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f  statements..  */
58b0: 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  .  pColl = sqlit
58c0: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
58d0: 2c 20 28 75 38 29 65 6e 63 32 2c 20 7a 4e 61 6d  , (u8)enc2, zNam
58e0: 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29  e, strlen(zName)
58f0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c  , 0);.  if( pCol
5900: 6c 20 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70  l && pColl->xCmp
5910: 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
5920: 61 63 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b  activeVdbeCnt ){
5930: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
5940: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  ror(db, SQLITE_B
5950: 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55  USY, .        "U
5960: 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f  nable to delete/
5970: 6d 6f 64 69 66 79 20 63 6f 6c 6c 61 74 69 6f 6e  modify collation
5980: 20 73 65 71 75 65 6e 63 65 20 64 75 65 20 74 6f   sequence due to
5990: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
59a0: 74 73 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ts");.      retu
59b0: 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a  rn SQLITE_BUSY;.
59c0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
59d0: 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
59e0: 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
59f0: 20 7d 0a 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71   }..  pColl = sq
5a00: 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
5a10: 28 64 62 2c 20 28 75 38 29 65 6e 63 32 2c 20 7a  (db, (u8)enc2, z
5a20: 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61  Name, strlen(zNa
5a30: 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  me), 1);.  if( p
5a40: 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70 43 6f 6c  Coll ){.    pCol
5a50: 6c 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d 70 61  l->xCmp = xCompa
5a60: 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 70  re;.    pColl->p
5a70: 55 73 65 72 20 3d 20 70 43 74 78 3b 0a 20 20 20  User = pCtx;.   
5a80: 20 70 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 65 6e   pColl->enc = en
5a90: 63 32 20 7c 20 28 65 6e 63 20 26 20 53 51 4c 49  c2 | (enc & SQLI
5aa0: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
5ab0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
5ac0: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
5ad0: 5f 4f 4b 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  _OK, 0);.  retur
5ae0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
5af0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
5b00: 69 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f 72  ine does the wor
5b10: 6b 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20 64  k of opening a d
5b20: 61 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61 6c  atabase on behal
5b30: 66 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  f of.** sqlite3_
5b40: 6f 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69 74  open() and sqlit
5b50: 65 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68 65  e3_open16(). The
5b60: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61   database filena
5b70: 6d 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20 20  me "zFilename"  
5b80: 0a 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e 63  .** is UTF-8 enc
5b90: 6f 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  oded..*/.static 
5ba0: 69 6e 74 20 6f 70 65 6e 44 61 74 61 62 61 73 65  int openDatabase
5bb0: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
5bc0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61  zFilename, /* Da
5bd0: 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20  tabase filename 
5be0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
5bf0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  .  sqlite3 **ppD
5c00: 62 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  b         /* OUT
5c10: 3a 20 52 65 74 75 72 6e 65 64 20 64 61 74 61 62  : Returned datab
5c20: 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 29 7b  ase handle */.){
5c30: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
5c40: 20 20 69 6e 74 20 72 63 3b 0a 20 20 43 6f 6c 6c    int rc;.  Coll
5c50: 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 0a 20 20 61  Seq *pColl;..  a
5c60: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d  ssert( !sqlite3M
5c70: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b  allocFailed() );
5c80: 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20  ..  /* Allocate 
5c90: 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61 20  the sqlite data 
5ca0: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64  structure */.  d
5cb0: 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  b = sqliteMalloc
5cc0: 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  ( sizeof(sqlite3
5cd0: 29 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30  ) );.  if( db==0
5ce0: 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f   ) goto opendb_o
5cf0: 75 74 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e  ut;.  db->priorN
5d00: 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64  ewRowid = 0;.  d
5d10: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
5d20: 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
5d30: 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64  db->nDb = 2;.  d
5d40: 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62  b->aDb = db->aDb
5d50: 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 61 75  Static;.  db->au
5d60: 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
5d70: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
5d80: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
5d90: 73 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  s;.  sqlite3Hash
5da0: 49 6e 69 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c  Init(&db->aFunc,
5db0: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
5dc0: 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  ING, 0);.  sqlit
5dd0: 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e  e3HashInit(&db->
5de0: 61 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 49 54 45  aCollSeq, SQLITE
5df0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
5e00: 3b 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  ;..  /* Add the 
5e10: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
5e20: 6e 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52  n sequence BINAR
5e30: 59 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20  Y. BINARY works 
5e40: 66 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20  for both UTF-8. 
5e50: 20 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20   ** and UTF-16, 
5e60: 73 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e  so add a version
5e70: 20 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f   for each to avo
5e80: 69 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61  id any unnecessa
5e90: 72 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69  ry.  ** conversi
5ea0: 6f 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72  ons. The only er
5eb0: 72 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63  ror that can occ
5ec0: 75 72 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c  ur here is a mal
5ed0: 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20  loc() failure.. 
5ee0: 20 2a 2f 0a 20 20 69 66 28 20 63 72 65 61 74 65   */.  if( create
5ef0: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42  Collation(db, "B
5f00: 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55  INARY", SQLITE_U
5f10: 54 46 38 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46  TF8, 0, binCollF
5f20: 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 63 72  unc) ||.      cr
5f30: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
5f40: 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49  , "BINARY", SQLI
5f50: 54 45 5f 55 54 46 31 36 42 45 2c 20 30 2c 20 62  TE_UTF16BE, 0, b
5f60: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
5f70: 20 20 20 20 20 63 72 65 61 74 65 43 6f 6c 6c 61       createColla
5f80: 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59  tion(db, "BINARY
5f90: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
5fa0: 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e  E, 0, binCollFun
5fb0: 63 29 20 7c 7c 0a 20 20 20 20 20 20 28 64 62 2d  c) ||.      (db-
5fc0: 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c  >pDfltColl = sql
5fd0: 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
5fe0: 64 62 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  db, SQLITE_UTF8,
5ff0: 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29   "BINARY", 6, 0)
6000: 29 3d 3d 30 20 0a 20 20 29 7b 0a 20 20 20 20 61  )==0 .  ){.    a
6010: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 4d 61  ssert( sqlite3Ma
6020: 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b 0a  llocFailed() );.
6030: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
6040: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
6050: 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  SED;.    goto op
6060: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  endb_out;.  }.. 
6070: 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20 61 20 55   /* Also add a U
6080: 54 46 2d 38 20 63 61 73 65 2d 69 6e 73 65 6e 73  TF-8 case-insens
6090: 69 74 69 76 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  itive collation 
60a0: 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 20 20 63  sequence. */.  c
60b0: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64  reateCollation(d
60c0: 62 2c 20 22 4e 4f 43 41 53 45 22 2c 20 53 51 4c  b, "NOCASE", SQL
60d0: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 6e 6f 63  ITE_UTF8, 0, noc
60e0: 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63  aseCollatingFunc
60f0: 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 66 6c 61  );..  /* Set fla
6100: 67 73 20 6f 6e 20 74 68 65 20 62 75 69 6c 74 2d  gs on the built-
6110: 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  in collating seq
6120: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 64 62 2d 3e  uences */.  db->
6130: 70 44 66 6c 74 43 6f 6c 6c 2d 3e 74 79 70 65 20  pDfltColl->type 
6140: 3d 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42 49  = SQLITE_COLL_BI
6150: 4e 41 52 59 3b 0a 20 20 70 43 6f 6c 6c 20 3d 20  NARY;.  pColl = 
6160: 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
6170: 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f 55 54  eq(db, SQLITE_UT
6180: 46 38 2c 20 22 4e 4f 43 41 53 45 22 2c 20 36 2c  F8, "NOCASE", 6,
6190: 20 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c   0);.  if( pColl
61a0: 20 29 7b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 74   ){.    pColl->t
61b0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 43 4f 4c  ype = SQLITE_COL
61c0: 4c 5f 4e 4f 43 41 53 45 3b 0a 20 20 7d 0a 0a 20  L_NOCASE;.  }.. 
61d0: 20 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63   /* Open the bac
61e0: 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20 64 72  kend database dr
61f0: 69 76 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73  iver */.  rc = s
6200: 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f  qlite3BtreeFacto
6210: 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65  ry(db, zFilename
6220: 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20  , 0, MAX_PAGES, 
6230: 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29  &db->aDb[0].pBt)
6240: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
6250: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
6260: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
6270: 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61  , 0);.    db->ma
6280: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
6290: 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67  IC_CLOSED;.    g
62a0: 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a  oto opendb_out;.
62b0: 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d    }.  db->aDb[0]
62c0: 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74  .pSchema = sqlit
62d0: 65 33 53 63 68 65 6d 61 47 65 74 28 64 62 2d 3e  e3SchemaGet(db->
62e0: 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 64  aDb[0].pBt);.  d
62f0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d  b->aDb[1].pSchem
6300: 61 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65 6d  a = sqlite3Schem
6310: 61 47 65 74 28 30 29 3b 0a 0a 0a 20 20 2f 2a 20  aGet(0);...  /* 
6320: 54 68 65 20 64 65 66 61 75 6c 74 20 73 61 66 65  The default safe
6330: 74 79 5f 6c 65 76 65 6c 20 66 6f 72 20 74 68 65  ty_level for the
6340: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
6350: 73 20 27 66 75 6c 6c 27 3b 20 66 6f 72 20 74 68  s 'full'; for th
6360: 65 20 74 65 6d 70 0a 20 20 2a 2a 20 64 61 74 61  e temp.  ** data
6370: 62 61 73 65 20 69 74 20 69 73 20 27 4e 4f 4e 45  base it is 'NONE
6380: 27 2e 20 54 68 69 73 20 6d 61 74 63 68 65 73 20  '. This matches 
6390: 74 68 65 20 70 61 67 65 72 20 6c 61 79 65 72 20  the pager layer 
63a0: 64 65 66 61 75 6c 74 73 2e 20 20 0a 20 20 2a 2f  defaults.  .  */
63b0: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e  .  db->aDb[0].zN
63c0: 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20  ame = "main";.  
63d0: 64 62 2d 3e 61 44 62 5b 30 5d 2e 73 61 66 65 74  db->aDb[0].safet
63e0: 79 5f 6c 65 76 65 6c 20 3d 20 33 3b 0a 23 69 66  y_level = 3;.#if
63f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6400: 5f 54 45 4d 50 44 42 0a 20 20 64 62 2d 3e 61 44  _TEMPDB.  db->aD
6410: 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74 65  b[1].zName = "te
6420: 6d 70 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31  mp";.  db->aDb[1
6430: 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ].safety_level =
6440: 20 31 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a   1;.#endif..  /*
6450: 20 52 65 67 69 73 74 65 72 20 61 6c 6c 20 62 75   Register all bu
6460: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
6470: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 61 74 74  , but do not att
6480: 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65  empt to read the
6490: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73  .  ** database s
64a0: 63 68 65 6d 61 20 79 65 74 2e 20 54 68 69 73 20  chema yet. This 
64b0: 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69 6c  is delayed until
64c0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
64d0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a  the database.  *
64e0: 2a 20 69 73 20 61 63 63 65 73 73 65 64 2e 0a 20  * is accessed.. 
64f0: 20 2a 2f 0a 20 20 69 66 28 20 21 73 71 6c 69 74   */.  if( !sqlit
6500: 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29  e3MallocFailed()
6510: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
6520: 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
6530: 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20 20  nctions(db);.   
6540: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
6550: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
6560: 0a 20 20 7d 0a 20 20 64 62 2d 3e 6d 61 67 69 63  .  }.  db->magic
6570: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
6580: 4f 50 45 4e 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75  OPEN;..opendb_ou
6590: 74 3a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  t:.  if( SQLITE_
65a0: 4e 4f 4d 45 4d 3d 3d 28 72 63 20 3d 20 73 71 6c  NOMEM==(rc = sql
65b0: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
65c0: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
65d0: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20  _close(db);.    
65e0: 64 62 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70  db = 0;.  }.  *p
65f0: 70 44 62 20 3d 20 64 62 3b 0a 20 20 72 65 74 75  pDb = db;.  retu
6600: 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  rn sqlite3ApiExi
6610: 74 28 30 2c 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a  t(0, rc);.}../*.
6620: 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61  ** Open a new da
6630: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a  tabase handle..*
6640: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  /.int sqlite3_op
6650: 65 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  en(.  const char
6660: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20   *zFilename, .  
6670: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a  sqlite3 **ppDb .
6680: 29 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e  ){.  return open
6690: 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61  Database(zFilena
66a0: 6d 65 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 23 69  me, ppDb);.}..#i
66b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
66c0: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70  T_UTF16./*.** Op
66d0: 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
66e0: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  e handle..*/.int
66f0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
6700: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
6710: 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
6720: 69 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20  ite3 **ppDb.){. 
6730: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69   char const *zFi
6740: 6c 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46  lename8;   /* zF
6750: 69 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20  ilename encoded 
6760: 69 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64  in UTF-8 instead
6770: 20 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20   of UTF-16 */.  
6780: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
6790: 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  OK;.  sqlite3_va
67a0: 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a 20 20 61 73  lue *pVal;..  as
67b0: 73 65 72 74 28 20 7a 46 69 6c 65 6e 61 6d 65 20  sert( zFilename 
67c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 70 44  );.  assert( ppD
67d0: 62 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20 30  b );.  *ppDb = 0
67e0: 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
67f0: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
6800: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
6810: 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46 69  tr(pVal, -1, zFi
6820: 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  lename, SQLITE_U
6830: 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49  TF16NATIVE, SQLI
6840: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46  TE_STATIC);.  zF
6850: 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74  ilename8 = sqlit
6860: 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c  e3ValueText(pVal
6870: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
6880: 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 38    if( zFilename8
6890: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70 65   ){.    rc = ope
68a0: 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e  nDatabase(zFilen
68b0: 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20 20  ame8, ppDb);.   
68c0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
68d0: 4f 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a 20  OK && *ppDb ){. 
68e0: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
68f0: 33 5f 65 78 65 63 28 2a 70 70 44 62 2c 20 22 50  3_exec(*ppDb, "P
6900: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
6910: 20 27 55 54 46 2d 31 36 27 22 2c 20 30 2c 20 30   'UTF-16'", 0, 0
6920: 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
6930: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
6940: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6950: 5f 63 6c 6f 73 65 28 2a 70 70 44 62 29 3b 0a 20  _close(*ppDb);. 
6960: 20 20 20 20 20 20 20 2a 70 70 44 62 20 3d 20 30         *ppDb = 0
6970: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6980: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 61 6c    }.  sqlite3Val
6990: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20  ueFree(pVal);.. 
69a0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
69b0: 70 69 45 78 69 74 28 30 2c 20 72 63 29 3b 0a 7d  piExit(0, rc);.}
69c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
69d0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
69e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
69f0: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73  wing routine des
6a00: 74 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20  troys a virtual 
6a10: 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20  machine that is 
6a20: 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
6a30: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  e sqlite3_compil
6a40: 65 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68 65  e() routine. The
6a50: 20 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65   integer returne
6a60: 64 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a  d is an SQLITE_.
6a70: 2a 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75  ** success/failu
6a80: 72 65 20 63 6f 64 65 20 74 68 61 74 20 64 65 73  re code that des
6a90: 63 72 69 62 65 73 20 74 68 65 20 72 65 73 75 6c  cribes the resul
6aa0: 74 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74  t of executing t
6ab0: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  he virtual.** ma
6ac0: 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  chine..**.** Thi
6ad0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
6ae0: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
6af0: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
6b00: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
6b10: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
6b20: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
6b30: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
6b40: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
6b50: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69  e3_finalize(sqli
6b60: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
6b70: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
6b80: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
6b90: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
6ba0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
6bb0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6bc0: 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a 29 70  inalize((Vdbe*)p
6bd0: 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74  Stmt);.  }.  ret
6be0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
6bf0: 20 54 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63   Terminate the c
6c00: 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e  urrent execution
6c10: 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65   of an SQL state
6c20: 6d 65 6e 74 20 61 6e 64 20 72 65 73 65 74 20 69  ment and reset i
6c30: 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20 69 74 73  t.** back to its
6c40: 20 73 74 61 72 74 69 6e 67 20 73 74 61 74 65 20   starting state 
6c50: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
6c60: 65 20 72 65 75 73 65 64 2e 20 41 20 73 75 63 63  e reused. A succ
6c70: 65 73 73 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a  ess code from.**
6c80: 20 74 68 65 20 70 72 69 6f 72 20 65 78 65 63 75   the prior execu
6c90: 74 69 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64  tion is returned
6ca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
6cb0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72  tine sets the er
6cc0: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72  ror code and str
6cd0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a  ing returned by.
6ce0: 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ** sqlite3_errco
6cf0: 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  de(), sqlite3_er
6d00: 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74  rmsg() and sqlit
6d10: 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a  e3_errmsg16()..*
6d20: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65  /.int sqlite3_re
6d30: 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  set(sqlite3_stmt
6d40: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
6d50: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
6d60: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
6d70: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
6d80: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
6d90: 74 65 33 56 64 62 65 52 65 73 65 74 28 28 56 64  te3VdbeReset((Vd
6da0: 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 20 20  be*)pStmt);.    
6db0: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
6dc0: 65 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d  eady((Vdbe*)pStm
6dd0: 74 2c 20 2d 31 2c 20 30 2c 20 30 2c 20 30 29 3b  t, -1, 0, 0, 0);
6de0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
6df0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  ;.}../*.** Regis
6e00: 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74  ter a new collat
6e10: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74  ion sequence wit
6e20: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
6e30: 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74  andle db..*/.int
6e40: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
6e50: 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c  collation(.  sql
6e60: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
6e70: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
6e80: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
6e90: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
6ea0: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
6eb0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
6ec0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
6ed0: 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  *).){.  int rc;.
6ee0: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
6ef0: 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29  e3MallocFailed()
6f00: 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65 61 74   );.  rc = creat
6f10: 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a  eCollation(db, z
6f20: 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78 2c  Name, enc, pCtx,
6f30: 20 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20 72 65   xCompare);.  re
6f40: 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45  turn sqlite3ApiE
6f50: 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a  xit(db, rc);.}..
6f60: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6f70: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
6f80: 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20 63  Register a new c
6f90: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
6fa0: 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  e with the datab
6fb0: 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a  ase handle db..*
6fc0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
6fd0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36  eate_collation16
6fe0: 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c  (.  sqlite3* db,
6ff0: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   .  const char *
7000: 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e  zName, .  int en
7010: 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78  c, .  void* pCtx
7020: 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72  ,.  int(*xCompar
7030: 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  e)(void*,int,con
7040: 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  st void*,int,con
7050: 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69  st void*).){.  i
7060: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
7070: 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  K;.  char *zName
7080: 38 3b 20 0a 20 20 61 73 73 65 72 74 28 20 21 73  8; .  assert( !s
7090: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c  qlite3MallocFail
70a0: 65 64 28 29 20 29 3b 0a 20 20 7a 4e 61 6d 65 38  ed() );.  zName8
70b0: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 74   = sqlite3utf16t
70c0: 6f 38 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20  o8(zName, -1);. 
70d0: 20 69 66 28 20 7a 4e 61 6d 65 38 20 29 7b 0a 20   if( zName8 ){. 
70e0: 20 20 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f     rc = createCo
70f0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d  llation(db, zNam
7100: 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78  e8, enc, pCtx, x
7110: 43 6f 6d 70 61 72 65 29 3b 0a 20 20 20 20 73 71  Compare);.    sq
7120: 6c 69 74 65 46 72 65 65 28 7a 4e 61 6d 65 38 29  liteFree(zName8)
7130: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73  ;.  }.  return s
7140: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62  qlite3ApiExit(db
7150: 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  , rc);.}.#endif 
7160: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7170: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  TF16 */../*.** R
7180: 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74  egister a collat
7190: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
71a0: 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69  tory callback wi
71b0: 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
71c0: 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65  handle.** db. Re
71d0: 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f  place any previo
71e0: 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63  usly installed c
71f0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
7200: 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e  e factory..*/.in
7210: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  t sqlite3_collat
7220: 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73 71  ion_needed(.  sq
7230: 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f  lite3 *db, .  vo
7240: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
7250: 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f  rg, .  void(*xCo
7260: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
7270: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
7280: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
7290: 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  *).){.  if( sqli
72a0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
72b0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
72c0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
72d0: 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e    }.  db->xCollN
72e0: 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65  eeded = xCollNee
72f0: 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  ded;.  db->xColl
7300: 4e 65 65 64 65 64 31 36 20 3d 20 30 3b 0a 20 20  Needed16 = 0;.  
7310: 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41  db->pCollNeededA
7320: 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64  rg = pCollNeeded
7330: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  Arg;.  return SQ
7340: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
7350: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7360: 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69  UTF16./*.** Regi
7370: 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ster a collation
7380: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
7390: 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  y callback with 
73a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
73b0: 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61  dle.** db. Repla
73c0: 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c  ce any previousl
73d0: 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c  y installed coll
73e0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
73f0: 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  actory..*/.int s
7400: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
7410: 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73 71 6c  _needed16(.  sql
7420: 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69  ite3 *db, .  voi
7430: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
7440: 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  g, .  void(*xCol
7450: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
7460: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
7470: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
7480: 64 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c  d*).){.  if( sql
7490: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
74a0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
74b0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
74c0: 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  .  }.  db->xColl
74d0: 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20 64 62  Needed = 0;.  db
74e0: 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20  ->xCollNeeded16 
74f0: 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b  = xCollNeeded16;
7500: 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64  .  db->pCollNeed
7510: 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65  edArg = pCollNee
7520: 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  dedArg;.  return
7530: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
7540: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
7550: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
7560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7570: 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
7580: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
7590: 69 6f 6e 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e  ion is now an an
75a0: 61 63 68 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73  achronism. It us
75b0: 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 74 6f  ed to be used to
75c0: 20 72 65 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a   recover from a.
75d0: 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c  ** malloc() fail
75e0: 75 72 65 2c 20 62 75 74 20 53 51 4c 69 74 65 20  ure, but SQLite 
75f0: 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20 61 75  now does this au
7600: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
7610: 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  int sqlite3_glob
7620: 61 6c 5f 72 65 63 6f 76 65 72 28 29 7b 0a 20 20  al_recover(){.  
7630: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7640: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
7650: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
7660: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
7670: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7680: 74 69 6f 6e 20 69 73 20 69 6e 20 61 75 74 6f 63  tion is in autoc
7690: 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20  ommit.** mode.  
76a0: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 69  Return TRUE if i
76b0: 74 20 69 73 20 61 6e 64 20 46 41 4c 53 45 20 69  t is and FALSE i
76c0: 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63 6f 6d 6d  f not.  Autocomm
76d0: 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a  it mode is on.**
76e0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 75   by default.  Au
76f0: 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64 69 73 61  tocommit is disa
7700: 62 6c 65 64 20 62 79 20 61 20 42 45 47 49 4e 20  bled by a BEGIN 
7710: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
7720: 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79 20 74 68  enabled.** by th
7730: 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54 20 6f 72  e next COMMIT or
7740: 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a   ROLLBACK..**.**
7750: 2a 2a 2a 2a 2a 20 54 48 49 53 20 49 53 20 41 4e  ***** THIS IS AN
7760: 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 41 50   EXPERIMENTAL AP
7770: 49 20 41 4e 44 20 49 53 20 53 55 42 4a 45 43 54  I AND IS SUBJECT
7780: 20 54 4f 20 43 48 41 4e 47 45 20 2a 2a 2a 2a 2a   TO CHANGE *****
7790: 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  *.*/.int sqlite3
77a0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
77b0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
77c0: 72 65 74 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43  return db->autoC
77d0: 6f 6d 6d 69 74 3b 0a 7d 0a 0a 23 69 66 64 65 66  ommit;.}..#ifdef
77e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
77f0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
7800: 67 20 72 6f 75 74 69 6e 65 20 69 73 20 73 75 62  g routine is sub
7810: 74 69 74 75 74 65 64 20 66 6f 72 20 63 6f 6e 73  tituted for cons
7820: 74 61 6e 74 20 53 51 4c 49 54 45 5f 43 4f 52 52  tant SQLITE_CORR
7830: 55 50 54 20 69 6e 0a 2a 2a 20 64 65 62 75 67 67  UPT in.** debugg
7840: 69 6e 67 20 62 75 69 6c 64 73 2e 20 20 54 68 69  ing builds.  Thi
7850: 73 20 70 72 6f 76 69 64 65 73 20 61 20 77 61 79  s provides a way
7860: 20 74 6f 20 73 65 74 20 61 20 62 72 65 61 6b 70   to set a breakp
7870: 6f 69 6e 74 20 66 6f 72 20 77 68 65 6e 0a 2a 2a  oint for when.**
7880: 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 73 20 66   corruption is f
7890: 69 72 73 74 20 64 65 74 65 63 74 65 64 2e 0a 2a  irst detected..*
78a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
78b0: 72 75 70 74 28 76 6f 69 64 29 7b 0a 20 20 72 65  rupt(void){.  re
78c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52  turn SQLITE_CORR
78d0: 55 50 54 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  UPT;.}.#endif...
78e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
78f0: 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
7900: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72  ./*.** Enable or
7910: 20 64 69 73 61 62 6c 65 20 74 68 65 20 73 68 61   disable the sha
7920: 72 65 64 20 70 61 67 65 72 20 61 6e 64 20 73 63  red pager and sc
7930: 68 65 6d 61 20 66 65 61 74 75 72 65 73 20 66 6f  hema features fo
7940: 72 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74  r the.** current
7950: 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 54   thread..**.** T
7960: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75  his routine shou
7970: 6c 64 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65  ld only be calle
7980: 64 20 77 68 65 6e 20 74 68 65 72 65 20 61 72 65  d when there are
7990: 20 6e 6f 20 6f 70 65 6e 0a 2a 2a 20 64 61 74 61   no open.** data
79a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
79b0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
79c0: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
79d0: 61 63 68 65 28 69 6e 74 20 65 6e 61 62 6c 65 29  ache(int enable)
79e0: 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20 2a  {.  ThreadData *
79f0: 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54 68 72  pTd = sqlite3Thr
7a00: 65 61 64 44 61 74 61 28 29 3b 0a 20 20 69 66 28  eadData();.  if(
7a10: 20 70 54 64 20 29 7b 0a 20 20 20 20 2f 2a 20 49   pTd ){.    /* I
7a20: 74 20 69 73 20 6f 6e 6c 79 20 6c 65 67 61 6c 20  t is only legal 
7a30: 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  to call sqlite3_
7a40: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
7a50: 63 68 65 28 29 20 77 68 65 6e 20 74 68 65 72 65  che() when there
7a60: 0a 20 20 20 20 2a 2a 20 61 72 65 20 6e 6f 20 63  .    ** are no c
7a70: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 62 2d  urrently open b-
7a80: 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
7a90: 6f 70 65 6e 65 64 20 62 79 20 74 68 65 20 63 61  opened by the ca
7aa0: 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 20 20  lling thread..  
7ab0: 20 20 2a 2a 20 54 68 69 73 20 63 6f 6e 64 69 74    ** This condit
7ac0: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 61 73 79  ion is only easy
7ad0: 20 74 6f 20 64 65 74 65 63 74 20 69 66 20 74 68   to detect if th
7ae0: 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 77  e shared-cache w
7af0: 65 72 65 20 0a 20 20 20 20 2a 2a 20 70 72 65 76  ere .    ** prev
7b00: 69 6f 75 73 6c 79 20 65 6e 61 62 6c 65 64 20 28  iously enabled (
7b10: 61 6e 64 20 69 73 20 62 65 69 6e 67 20 64 69 73  and is being dis
7b20: 61 62 6c 65 64 29 2e 20 0a 20 20 20 20 2a 2f 0a  abled). .    */.
7b30: 20 20 20 20 69 66 28 20 70 54 64 2d 3e 70 42 74      if( pTd->pBt
7b40: 72 65 65 20 26 26 20 21 65 6e 61 62 6c 65 20 29  ree && !enable )
7b50: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
7b60: 70 54 64 2d 3e 75 73 65 53 68 61 72 65 64 44 61  pTd->useSharedDa
7b70: 74 61 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ta );.      retu
7b80: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
7b90: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 54 64  ;.    }..    pTd
7ba0: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
7bb0: 3d 20 65 6e 61 62 6c 65 3b 0a 20 20 20 20 73 71  = enable;.    sq
7bc0: 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
7bd0: 61 64 44 61 74 61 28 29 3b 0a 20 20 7d 0a 20 20  adData();.  }.  
7be0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
7bf0: 69 45 78 69 74 28 30 2c 20 53 51 4c 49 54 45 5f  iExit(0, SQLITE_
7c00: 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  OK);.}.#endif../
7c10: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 63  *.** This is a c
7c20: 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75 74 69  onvenience routi
7c30: 6e 65 20 74 68 61 74 20 6d 61 6b 65 73 20 73 75  ne that makes su
7c40: 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 72 65  re that all thre
7c50: 61 64 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20 64  ad-specific.** d
7c60: 61 74 61 20 66 6f 72 20 74 68 69 73 20 74 68 72  ata for this thr
7c70: 65 61 64 20 68 61 73 20 62 65 65 6e 20 64 65 61  ead has been dea
7c80: 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a 76 6f 69  llocated..*/.voi
7c90: 64 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64  d sqlite3_thread
7ca0: 5f 63 6c 65 61 6e 75 70 28 76 6f 69 64 29 7b 0a  _cleanup(void){.
7cb0: 20 20 54 68 72 65 61 64 44 61 74 61 20 2a 70 54    ThreadData *pT
7cc0: 64 20 3d 20 73 71 6c 69 74 65 33 4f 73 54 68 72  d = sqlite3OsThr
7cd0: 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 28  eadSpecificData(
7ce0: 30 29 3b 0a 20 20 69 66 28 20 70 54 64 20 29 7b  0);.  if( pTd ){
7cf0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 54 64 2c  .    memset(pTd,
7d00: 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 54 64 29   0, sizeof(*pTd)
7d10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73  );.    sqlite3Os
7d20: 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61  ThreadSpecificDa
7d30: 74 61 28 2d 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  ta(-1);.  }.}../
7d40: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 6d 65 74 61  *.** Return meta
7d50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
7d60: 75 74 20 61 20 73 70 65 63 69 66 69 63 20 63 6f  ut a specific co
7d70: 6c 75 6d 6e 20 6f 66 20 61 20 64 61 74 61 62 61  lumn of a databa
7d80: 73 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 53 65 65  se table..** See
7d90: 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 73 71 6c 69   comment in sqli
7da0: 74 65 33 2e 68 20 28 73 71 6c 69 74 65 2e 68 2e  te3.h (sqlite.h.
7db0: 69 6e 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  in) for details.
7dc0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
7dd0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
7de0: 4d 45 54 41 44 41 54 41 0a 69 6e 74 20 73 71 6c  METADATA.int sql
7df0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
7e00: 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 73 71  n_metadata(.  sq
7e10: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
7e20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
7e30: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 2a  nection handle *
7e40: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
7e50: 7a 44 62 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  zDbName,        
7e60: 2f 2a 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65  /* Database name
7e70: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
7e80: 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65  nst char *zTable
7e90: 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 54 61 62  Name,     /* Tab
7ea0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 6f 6e  le name */.  con
7eb0: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e  st char *zColumn
7ec0: 4e 61 6d 65 2c 20 20 20 20 2f 2a 20 43 6f 6c 75  Name,    /* Colu
7ed0: 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 68 61  mn name */.  cha
7ee0: 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44 61 74 61  r const **pzData
7ef0: 54 79 70 65 2c 20 20 20 20 2f 2a 20 4f 55 54 50  Type,    /* OUTP
7f00: 55 54 3a 20 44 65 63 6c 61 72 65 64 20 64 61 74  UT: Declared dat
7f10: 61 20 74 79 70 65 20 2a 2f 0a 20 20 63 68 61 72  a type */.  char
7f20: 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53   const **pzCollS
7f30: 65 71 2c 20 20 20 20 20 2f 2a 20 4f 55 54 50 55  eq,     /* OUTPU
7f40: 54 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  T: Collation seq
7f50: 75 65 6e 63 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  uence name */.  
7f60: 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 20  int *pNotNull,  
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7f80: 55 54 50 55 54 3a 20 54 72 75 65 20 69 66 20 4e  UTPUT: True if N
7f90: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
7fa0: 6e 74 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 69  nt exists */.  i
7fb0: 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 2c  nt *pPrimaryKey,
7fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
7fd0: 54 50 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f  TPUT: True if co
7fe0: 6c 75 6d 6e 20 70 61 72 74 20 6f 66 20 50 4b 20  lumn part of PK 
7ff0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 41 75 74 6f 69  */.  int *pAutoi
8000: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
8010: 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72 75 65   /* OUTPUT: True
8020: 20 69 66 20 63 6f 6c 75 6d 73 20 69 73 20 61 75   if colums is au
8030: 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  to-increment */.
8040: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  ){.  int rc;.  c
8050: 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
8060: 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20  ;.  Table *pTab 
8070: 3d 20 30 3b 0a 20 20 43 6f 6c 75 6d 6e 20 2a 70  = 0;.  Column *p
8080: 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69  Col = 0;.  int i
8090: 43 6f 6c 3b 0a 0a 20 20 63 68 61 72 20 63 6f 6e  Col;..  char con
80a0: 73 74 20 2a 7a 44 61 74 61 54 79 70 65 20 3d 20  st *zDataType = 
80b0: 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  0;.  char const 
80c0: 2a 7a 43 6f 6c 6c 53 65 71 20 3d 20 30 3b 0a 20  *zCollSeq = 0;. 
80d0: 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 20 3d 20 30   int notnull = 0
80e0: 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72 79 6b  ;.  int primaryk
80f0: 65 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 61 75  ey = 0;.  int au
8100: 74 6f 69 6e 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a  toinc = 0;..  /*
8110: 20 45 6e 73 75 72 65 20 74 68 65 20 64 61 74 61   Ensure the data
8120: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
8130: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 20  been loaded */. 
8140: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
8150: 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20  tyOn(db) ){.    
8160: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
8170: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  SUSE;.  }.  rc =
8180: 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c   sqlite3Init(db,
8190: 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66   &zErrMsg);.  if
81a0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20  ( SQLITE_OK!=rc 
81b0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  ){.    goto erro
81c0: 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  r_out;.  }..  /*
81d0: 20 4c 6f 63 61 74 65 20 74 68 65 20 74 61 62 6c   Locate the tabl
81e0: 65 20 69 6e 20 71 75 65 73 74 69 6f 6e 20 2a 2f  e in question */
81f0: 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65  .  pTab = sqlite
8200: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
8210: 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e 61  TableName, zDbNa
8220: 6d 65 29 3b 0a 20 20 69 66 28 20 21 70 54 61 62  me);.  if( !pTab
8230: 20 7c 7c 20 70 54 61 62 2d 3e 70 53 65 6c 65 63   || pTab->pSelec
8240: 74 20 29 7b 0a 20 20 20 20 70 54 61 62 20 3d 20  t ){.    pTab = 
8250: 30 3b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  0;.    goto erro
8260: 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  r_out;.  }..  /*
8270: 20 46 69 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e   Find the column
8280: 20 66 6f 72 20 77 68 69 63 68 20 69 6e 66 6f 20   for which info 
8290: 69 73 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a  is requested */.
82a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 52    if( sqlite3IsR
82b0: 6f 77 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d 65  owid(zColumnName
82c0: 29 20 29 7b 0a 20 20 20 20 69 43 6f 6c 20 3d 20  ) ){.    iCol = 
82d0: 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20 20 20  pTab->iPKey;.   
82e0: 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 29 7b 0a   if( iCol>=0 ){.
82f0: 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26 70 54        pCol = &pT
8300: 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a  ab->aCol[iCol];.
8310: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
8320: 20 20 20 66 6f 72 28 69 43 6f 6c 3d 30 3b 20 69     for(iCol=0; i
8330: 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  Col<pTab->nCol; 
8340: 69 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 70  iCol++){.      p
8350: 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f  Col = &pTab->aCo
8360: 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 20 20 69  l[iCol];.      i
8370: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
8380: 49 43 6d 70 28 70 43 6f 6c 2d 3e 7a 4e 61 6d 65  ICmp(pCol->zName
8390: 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29  , zColumnName) )
83a0: 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  {.        break;
83b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
83c0: 20 20 20 69 66 28 20 69 43 6f 6c 3d 3d 70 54 61     if( iCol==pTa
83d0: 62 2d 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20  b->nCol ){.     
83e0: 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 20   pTab = 0;.     
83f0: 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
8400: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
8410: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   The following b
8420: 6c 6f 63 6b 20 73 74 6f 72 65 73 20 74 68 65 20  lock stores the 
8430: 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  meta information
8440: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 72 65   that will be re
8450: 74 75 72 6e 65 64 0a 20 20 2a 2a 20 74 6f 20 74  turned.  ** to t
8460: 68 65 20 63 61 6c 6c 65 72 20 69 6e 20 6c 6f 63  he caller in loc
8470: 61 6c 20 76 61 72 69 61 62 6c 65 73 20 7a 44 61  al variables zDa
8480: 74 61 54 79 70 65 2c 20 7a 43 6f 6c 6c 53 65 71  taType, zCollSeq
8490: 2c 20 6e 6f 74 6e 75 6c 6c 2c 20 70 72 69 6d 61  , notnull, prima
84a0: 72 79 6b 65 79 0a 20 20 2a 2a 20 61 6e 64 20 61  rykey.  ** and a
84b0: 75 74 6f 69 6e 63 2e 20 41 74 20 74 68 69 73 20  utoinc. At this 
84c0: 70 6f 69 6e 74 20 74 68 65 72 65 20 61 72 65 20  point there are 
84d0: 74 77 6f 20 70 6f 73 73 69 62 69 6c 69 74 69 65  two possibilitie
84e0: 73 3a 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 20 20  s:.  ** .  **   
84f0: 20 20 31 2e 20 54 68 65 20 73 70 65 63 69 66 69    1. The specifi
8500: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77  ed column name w
8510: 61 73 20 72 6f 77 69 64 22 2c 20 22 6f 69 64 22  as rowid", "oid"
8520: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 0a 20   or "_rowid_" . 
8530: 20 2a 2a 20 20 20 20 20 20 20 20 61 6e 64 20 74   **        and t
8540: 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70 6c 69  here is no expli
8550: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 49  citly declared I
8560: 50 4b 20 63 6f 6c 75 6d 6e 2e 20 0a 20 20 2a 2a  PK column. .  **
8570: 0a 20 20 2a 2a 20 20 20 20 20 32 2e 20 54 68 65  .  **     2. The
8580: 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20   table is not a 
8590: 76 69 65 77 20 61 6e 64 20 74 68 65 20 63 6f 6c  view and the col
85a0: 75 6d 6e 20 6e 61 6d 65 20 69 64 65 6e 74 69 66  umn name identif
85b0: 69 65 64 20 61 6e 20 0a 20 20 2a 2a 20 20 20 20  ied an .  **    
85c0: 20 20 20 20 65 78 70 6c 69 63 69 74 6c 79 20 64      explicitly d
85d0: 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 2e 20  eclared column. 
85e0: 43 6f 70 79 20 6d 65 74 61 20 69 6e 66 6f 72 6d  Copy meta inform
85f0: 61 74 69 6f 6e 20 66 72 6f 6d 20 2a 70 43 6f 6c  ation from *pCol
8600: 2e 0a 20 20 2a 2f 20 0a 20 20 69 66 28 20 70 43  ..  */ .  if( pC
8610: 6f 6c 20 29 7b 0a 20 20 20 20 7a 44 61 74 61 54  ol ){.    zDataT
8620: 79 70 65 20 3d 20 70 43 6f 6c 2d 3e 7a 54 79 70  ype = pCol->zTyp
8630: 65 3b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71 20  e;.    zCollSeq 
8640: 3d 20 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b 0a 20  = pCol->zColl;. 
8650: 20 20 20 6e 6f 74 6e 75 6c 6c 20 3d 20 28 70 43     notnull = (pC
8660: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a 30 29  ol->notNull?1:0)
8670: 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79  ;.    primarykey
8680: 20 20 3d 20 28 70 43 6f 6c 2d 3e 69 73 50 72 69    = (pCol->isPri
8690: 6d 4b 65 79 3f 31 3a 30 29 3b 0a 20 20 20 20 61  mKey?1:0);.    a
86a0: 75 74 6f 69 6e 63 20 3d 20 28 28 70 54 61 62 2d  utoinc = ((pTab-
86b0: 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20 26 26 20  >iPKey==iCol && 
86c0: 70 54 61 62 2d 3e 61 75 74 6f 49 6e 63 29 3f 31  pTab->autoInc)?1
86d0: 3a 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  :0);.  }else{.  
86e0: 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20 22 49    zDataType = "I
86f0: 4e 54 45 47 45 52 22 3b 0a 20 20 20 20 70 72 69  NTEGER";.    pri
8700: 6d 61 72 79 6b 65 79 20 3d 20 31 3b 0a 20 20 7d  marykey = 1;.  }
8710: 0a 20 20 69 66 28 20 21 7a 43 6f 6c 6c 53 65 71  .  if( !zCollSeq
8720: 20 29 7b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71   ){.    zCollSeq
8730: 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a 20 20 7d   = "BINARY";.  }
8740: 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 69  ..error_out:.  i
8750: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
8760: 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72  Off(db) ){.    r
8770: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
8780: 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 57 68 65  E;.  }..  /* Whe
8790: 74 68 65 72 20 74 68 65 20 66 75 6e 63 74 69 6f  ther the functio
87a0: 6e 20 63 61 6c 6c 20 73 75 63 63 65 65 64 65 64  n call succeeded
87b0: 20 6f 72 20 66 61 69 6c 65 64 2c 20 73 65 74 20   or failed, set 
87c0: 74 68 65 20 6f 75 74 70 75 74 20 70 61 72 61 6d  the output param
87d0: 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f 20 77 68  eters.  ** to wh
87e0: 61 74 65 76 65 72 20 74 68 65 69 72 20 6c 6f 63  atever their loc
87f0: 61 6c 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20  al counterparts 
8800: 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61 6e 20 65  contain. If an e
8810: 72 72 6f 72 20 64 69 64 20 6f 63 63 75 72 2c 0a  rror did occur,.
8820: 20 20 2a 2a 20 74 68 69 73 20 68 61 73 20 74 68    ** this has th
8830: 65 20 65 66 66 65 63 74 20 6f 66 20 7a 65 72 6f  e effect of zero
8840: 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75 74 20 70  ing all output p
8850: 61 72 61 6d 65 74 65 72 73 2e 0a 20 20 2a 2f 0a  arameters..  */.
8860: 20 20 69 66 28 20 70 7a 44 61 74 61 54 79 70 65    if( pzDataType
8870: 20 29 20 2a 70 7a 44 61 74 61 54 79 70 65 20 3d   ) *pzDataType =
8880: 20 7a 44 61 74 61 54 79 70 65 3b 0a 20 20 69 66   zDataType;.  if
8890: 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29 20 2a 70  ( pzCollSeq ) *p
88a0: 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f 6c 6c  zCollSeq = zColl
88b0: 53 65 71 3b 0a 20 20 69 66 28 20 70 4e 6f 74 4e  Seq;.  if( pNotN
88c0: 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c 6c 20  ull ) *pNotNull 
88d0: 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 66 28  = notnull;.  if(
88e0: 20 70 50 72 69 6d 61 72 79 4b 65 79 20 29 20 2a   pPrimaryKey ) *
88f0: 70 50 72 69 6d 61 72 79 4b 65 79 20 3d 20 70 72  pPrimaryKey = pr
8900: 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 66 28 20  imarykey;.  if( 
8910: 70 41 75 74 6f 69 6e 63 20 29 20 2a 70 41 75 74  pAutoinc ) *pAut
8920: 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e 63 3b 0a  oinc = autoinc;.
8930: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
8940: 3d 3d 72 63 20 26 26 20 21 70 54 61 62 20 29 7b  ==rc && !pTab ){
8950: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
8960: 74 72 69 6e 67 28 26 7a 45 72 72 4d 73 67 2c 20  tring(&zErrMsg, 
8970: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 20 63  "no such table c
8980: 6f 6c 75 6d 6e 3a 20 22 2c 20 7a 54 61 62 6c 65  olumn: ", zTable
8990: 4e 61 6d 65 2c 20 22 2e 22 2c 20 0a 20 20 20 20  Name, ".", .    
89a0: 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c      zColumnName,
89b0: 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51   0);.    rc = SQ
89c0: 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
89d0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
89e0: 62 2c 20 72 63 2c 20 28 7a 45 72 72 4d 73 67 3f  b, rc, (zErrMsg?
89f0: 22 25 73 22 3a 30 29 2c 20 7a 45 72 72 4d 73 67  "%s":0), zErrMsg
8a00: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
8a10: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75  zErrMsg);.  retu
8a20: 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  rn sqlite3ApiExi
8a30: 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e  t(db, rc);.}.#en
8a40: 64 69 66 0a                                      dif.