/ Hex Artifact Content
Login

Artifact 4a9be207fc6d0161eee2e520622260af8b2f187b:


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 35 30 20 32 30 30 36 2f 30 36  ,v 1.350 2006/06
0280: 2f 32 37 20 32 30 3a 30 36 3a 34 35 20 64 72 68  /27 20:06:45 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 73  _ERROR;.  }..  s
0d30: 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
0d40: 63 6b 28 64 62 29 3b 0a 0a 20 20 66 6f 72 28 6a  ck(db);..  for(j
0d50: 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a  =0; j<db->nDb; j
0d60: 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20  ++){.    struct 
0d70: 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61  Db *pDb = &db->a
0d80: 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70  Db[j];.    if( p
0d90: 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20  Db->pBt ){.     
0da0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
0db0: 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  se(pDb->pBt);.  
0dc0: 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20 30      pDb->pBt = 0
0dd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6a 21 3d 31  ;.      if( j!=1
0de0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d   ){.        pDb-
0df0: 3e 70 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20  >pSchema = 0;.  
0e00: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
0e10: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
0e20: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
0e30: 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64   0);.  assert( d
0e40: 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61  b->nDb<=2 );.  a
0e50: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d  ssert( db->aDb==
0e60: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b  db->aDbStatic );
0e70: 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48  .  for(i=sqliteH
0e80: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46  ashFirst(&db->aF
0e90: 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74  unc); i; i=sqlit
0ea0: 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20  eHashNext(i)){. 
0eb0: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
0ec0: 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66  c, *pNext;.    f
0ed0: 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63  or(pFunc = (Func
0ee0: 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44  Def*)sqliteHashD
0ef0: 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70  ata(i); pFunc; p
0f00: 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20  Func=pNext){.   
0f10: 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63     pNext = pFunc
0f20: 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73  ->pNext;.      s
0f30: 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63 29  qliteFree(pFunc)
0f40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66  ;.    }.  }..  f
0f50: 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46  or(i=sqliteHashF
0f60: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
0f70: 65 71 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65  eq); i; i=sqlite
0f80: 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20  HashNext(i)){.  
0f90: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
0fa0: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
0fb0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
0fc0: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
0fd0: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 71  pColl);.  }.  sq
0fe0: 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26  lite3HashClear(&
0ff0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a 23  db->aCollSeq);.#
1000: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1010: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1020: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
1030: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 4d 6f  shFirst(&db->aMo
1040: 64 75 6c 65 29 3b 20 69 3b 20 69 3d 73 71 6c 69  dule); i; i=sqli
1050: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
1060: 20 20 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64      Module *pMod
1070: 20 3d 20 28 4d 6f 64 75 6c 65 20 2a 29 73 71 6c   = (Module *)sql
1080: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
1090: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
10a0: 4d 6f 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Mod);.  }.  sqli
10b0: 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62  te3HashClear(&db
10c0: 2d 3e 61 4d 6f 64 75 6c 65 29 3b 0a 23 65 6e 64  ->aModule);.#end
10d0: 69 66 0a 0a 20 20 73 71 6c 69 74 65 33 48 61 73  if..  sqlite3Has
10e0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
10f0: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  c);.  sqlite3Err
1100: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
1110: 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63  , 0); /* Dealloc
1120: 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20  ates any cached 
1130: 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a  error strings. *
1140: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72  /.  if( db->pErr
1150: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1160: 61 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72  alueFree(db->pEr
1170: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
1180: 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
1190: 28 64 62 29 3b 0a 0a 20 20 64 62 2d 3e 6d 61 67  (db);..  db->mag
11a0: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
11b0: 43 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54  C_ERROR;..  /* T
11c0: 68 65 20 74 65 6d 70 2d 64 61 74 61 62 61 73 65  he temp-database
11d0: 20 73 63 68 65 6d 61 20 69 73 20 61 6c 6c 6f 63   schema is alloc
11e0: 61 74 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79  ated differently
11f0: 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 20   from the other 
1200: 73 63 68 65 6d 61 0a 20 20 2a 2a 20 6f 62 6a 65  schema.  ** obje
1210: 63 74 73 20 28 75 73 69 6e 67 20 73 71 6c 69 74  cts (using sqlit
1220: 65 4d 61 6c 6c 6f 63 28 29 20 64 69 72 65 63 74  eMalloc() direct
1230: 6c 79 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 73  ly, instead of s
1240: 71 6c 69 74 65 33 42 74 72 65 65 53 63 68 65 6d  qlite3BtreeSchem
1250: 61 28 29 29 2e 0a 20 20 2a 2a 20 53 6f 20 69 74  a())..  ** So it
1260: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1270: 65 64 20 68 65 72 65 2e 20 54 6f 64 6f 3a 20 57  ed here. Todo: W
1280: 68 79 20 6e 6f 74 20 72 6f 6c 6c 20 74 68 65 20  hy not roll the 
1290: 74 65 6d 70 20 73 63 68 65 6d 61 20 69 6e 74 6f  temp schema into
12a0: 0a 20 20 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  .  ** the same s
12b0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 73  qliteMalloc() as
12c0: 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 61 6c   the one that al
12d0: 6c 6f 63 61 74 65 73 20 74 68 65 20 64 61 74 61  locates the data
12e0: 62 61 73 65 20 0a 20 20 2a 2a 20 73 74 72 75 63  base .  ** struc
12f0: 74 75 72 65 3f 0a 20 20 2a 2f 0a 20 20 73 71 6c  ture?.  */.  sql
1300: 69 74 65 46 72 65 65 28 64 62 2d 3e 61 44 62 5b  iteFree(db->aDb[
1310: 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 73  1].pSchema);.  s
1320: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20  qliteFree(db);. 
1330: 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1340: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 72  hreadData();.  r
1350: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1360: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62 61  .}../*.** Rollba
1370: 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ck all database 
1380: 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73  files..*/.void s
1390: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
13a0: 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  l(sqlite3 *db){.
13b0: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69    int i;.  int i
13c0: 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 66 6f  nTrans = 0;.  fo
13d0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
13e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
13f0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29  db->aDb[i].pBt )
1400: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1410: 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
1420: 73 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  s(db->aDb[i].pBt
1430: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 54  ) ){.        inT
1440: 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20 20 20  rans = 1;.      
1450: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  }.      sqlite3B
1460: 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d  treeRollback(db-
1470: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[i].pBt);.  
1480: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69      db->aDb[i].i
1490: 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20  nTrans = 0;.    
14a0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  }.  }.  sqlite3V
14b0: 74 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b  tabRollback(db);
14c0: 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
14d0: 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
14e0: 61 6e 67 65 73 20 29 7b 0a 20 20 20 20 73 71 6c  anges ){.    sql
14f0: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
1500: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
1510: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 6f 6e 65    }..  /* If one
1520: 20 68 61 73 20 62 65 65 6e 20 63 6f 6e 66 69 67   has been config
1530: 75 72 65 64 2c 20 69 6e 76 6f 6b 65 20 74 68 65  ured, invoke the
1540: 20 72 6f 6c 6c 62 61 63 6b 2d 68 6f 6f 6b 20 63   rollback-hook c
1550: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 66 28  allback */.  if(
1560: 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61   db->xRollbackCa
1570: 6c 6c 62 61 63 6b 20 26 26 20 28 69 6e 54 72 61  llback && (inTra
1580: 6e 73 20 7c 7c 20 21 64 62 2d 3e 61 75 74 6f 43  ns || !db->autoC
1590: 6f 6d 6d 69 74 29 20 29 7b 0a 20 20 20 20 64 62  ommit) ){.    db
15a0: 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  ->xRollbackCallb
15b0: 61 63 6b 28 64 62 2d 3e 70 52 6f 6c 6c 62 61 63  ack(db->pRollbac
15c0: 6b 41 72 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  kArg);.  }.}../*
15d0: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61  .** Return a sta
15e0: 74 69 63 20 73 74 72 69 6e 67 20 74 68 61 74 20  tic string that 
15f0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 6b 69  describes the ki
1600: 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63  nd of error spec
1610: 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20  ified in the.** 
1620: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e  argument..*/.con
1630: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1640: 45 72 72 53 74 72 28 69 6e 74 20 72 63 29 7b 0a  ErrStr(int rc){.
1650: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
1660: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b  .  switch( rc ){
1670: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1680: 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73 65 20 53  _ROW:.    case S
1690: 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20  QLITE_DONE:.    
16a0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
16b0: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74          z = "not
16c0: 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20   an error";     
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
16f0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
1700: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c  R:      z = "SQL
1710: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
1720: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
1730: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
1740: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d  case SQLITE_PERM
1750: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63  :       z = "acc
1760: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
1770: 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20  enied";         
1780: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1790: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  case SQLITE_ABOR
17a0: 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c  T:      z = "cal
17b0: 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20  lback requested 
17c0: 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20  query abort";   
17d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
17e0: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
17f0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1800: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22  abase is locked"
1810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1820: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1830: 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  case SQLITE_LOCK
1840: 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  ED:     z = "dat
1850: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
1860: 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20  ocked";         
1870: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1880: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
1890: 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74  M:      z = "out
18a0: 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20   of memory";    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
18d0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
18e0: 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74  ONLY:   z = "att
18f0: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
1900: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
1910: 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  e";  break;.    
1920: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
1930: 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74  RRUPT:  z = "int
1940: 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20 20  errupted";      
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1970: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
1980: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73  R:      z = "dis
1990: 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20  k I/O error";   
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
19c0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  case SQLITE_CORR
19d0: 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74  UPT:    z = "dat
19e0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
19f0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20   is malformed"; 
1a00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a10: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
1a20: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1a30: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73  abase or disk is
1a40: 20 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20   full";         
1a50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a60: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
1a70: 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61  OPEN:   z = "una
1a80: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
1a90: 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20  base file";     
1aa0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ab0: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54  case SQLITE_PROT
1ac0: 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74  OCOL:   z = "dat
1ad0: 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72  abase locking pr
1ae0: 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b  otocol failure";
1af0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b00: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
1b10: 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62  Y:      z = "tab
1b20: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  le contains no d
1b30: 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20 20  ata";           
1b40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b50: 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45  case SQLITE_SCHE
1b60: 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  MA:     z = "dat
1b70: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1b80: 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20   changed";      
1b90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ba0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
1bb0: 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e  TRAINT: z = "con
1bc0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b  straint failed";
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1bf0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
1c00: 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74  ATCH:   z = "dat
1c10: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b  atype mismatch";
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1c40: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  case SQLITE_MISU
1c50: 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62  SE:     z = "lib
1c60: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
1c70: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
1c80: 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  nce";break;.    
1c90: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46  case SQLITE_NOLF
1ca0: 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72  S:      z = "ker
1cb0: 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20  nel lacks large 
1cc0: 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20  file support";  
1cd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ce0: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
1cf0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74  :       z = "aut
1d00: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
1d10: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
1d20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d30: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d  case SQLITE_FORM
1d40: 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78  AT:     z = "aux
1d50: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
1d60: 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20  format error";  
1d70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d80: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
1d90: 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e  E:      z = "bin
1da0: 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  d or column inde
1db0: 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b  x out of range";
1dc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1dd0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41  case SQLITE_NOTA
1de0: 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c  DB:     z = "fil
1df0: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
1e00: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
1e10: 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  ase";break;.    
1e20: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
1e30: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b          z = "unk
1e40: 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  nown error";    
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
1e70: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
1e80: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
1e90: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
1ea0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
1eb0: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
1ec0: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
1ed0: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
1ee0: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
1ef0: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
1f00: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
1f10: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
1f20: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
1f30: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
1f40: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
1f50: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
1f60: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
1f70: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72  back(. void *ptr
1f80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1f90: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
1fa0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63  ection */. int c
1fb0: 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  ount            
1fc0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fd0: 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73   times table has
1fe0: 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b   been busy */.){
1ff0: 0a 23 69 66 20 4f 53 5f 57 49 4e 20 7c 7c 20 28  .#if OS_WIN || (
2000: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c  defined(HAVE_USL
2010: 45 45 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c  EEP) && HAVE_USL
2020: 45 45 50 29 0a 20 20 73 74 61 74 69 63 20 63 6f  EEP).  static co
2030: 6e 73 74 20 75 38 20 64 65 6c 61 79 73 5b 5d 20  nst u8 delays[] 
2040: 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35  =.     { 1, 2, 5
2050: 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35  , 10, 15, 20, 25
2060: 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20  , 25,  25,  50, 
2070: 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73 74   50, 100 };.  st
2080: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 74 6f  atic const u8 to
2090: 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20  tals[] =.     { 
20a0: 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c  0, 1, 3,  8, 18,
20b0: 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33   33, 53, 78, 103
20c0: 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38 20  , 128, 178, 228 
20d0: 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c  };.# define NDEL
20e0: 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79  AY (sizeof(delay
20f0: 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73  s)/sizeof(delays
2100: 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d 65  [0])).  int time
2110: 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20  out = ((sqlite3 
2120: 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65  *)ptr)->busyTime
2130: 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79  out;.  int delay
2140: 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65  , prior;..  asse
2150: 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a  rt( count>=0 );.
2160: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44    if( count < ND
2170: 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61  ELAY ){.    dela
2180: 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74  y = delays[count
2190: 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74  ];.    prior = t
21a0: 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20  otals[count];.  
21b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79  }else{.    delay
21c0: 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59   = delays[NDELAY
21d0: 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d  -1];.    prior =
21e0: 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31   totals[NDELAY-1
21f0: 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74  ] + delay*(count
2200: 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20  -(NDELAY-1));.  
2210: 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20  }.  if( prior + 
2220: 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20  delay > timeout 
2230: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74  ){.    delay = t
2240: 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a  imeout - prior;.
2250: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30      if( delay<=0
2260: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d   ) return 0;.  }
2270: 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65  .  sqlite3OsSlee
2280: 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75  p(delay);.  retu
2290: 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e  rn 1;.#else.  in
22a0: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71  t timeout = ((sq
22b0: 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75  lite3 *)ptr)->bu
22c0: 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28  syTimeout;.  if(
22d0: 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20   (count+1)*1000 
22e0: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
22f0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
2300: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
2310: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
2320: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
2330: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 67 69  ** Invoke the gi
2340: 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ven busy handler
2350: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
2360: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 77  tine is called w
2370: 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  hen an operation
2380: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 20 6c   failed with a l
2390: 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20  ock..** If this 
23a0: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
23b0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f  non-zero, the lo
23c0: 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e 20 20  ck is retried.  
23d0: 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73  If it.** returns
23e0: 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f   0, the operatio
23f0: 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 6e  n aborts with an
2400: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
2410: 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  or..*/.int sqlit
2420: 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
2430: 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 20  ler(BusyHandler 
2440: 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *p){.  int rc;. 
2450: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e   if( p==0 || p->
2460: 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e  xFunc==0 || p->n
2470: 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20  Busy<0 ) return 
2480: 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75  0;.  rc = p->xFu
2490: 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e  nc(p->pArg, p->n
24a0: 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d  Busy);.  if( rc=
24b0: 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75  =0 ){.    p->nBu
24c0: 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  sy = -1;.  }else
24d0: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b  {.    p->nBusy++
24e0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
24f0: 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  c; .}../*.** Thi
2500: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
2510: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
2520: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
2530: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
2540: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
2550: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
2560: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
2570: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2580: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  3_busy_handler(.
2590: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
25a0: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
25b0: 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64  id*,int),.  void
25c0: 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20   *pArg.){.  if( 
25d0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
25e0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
25f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
2600: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75  SE;.  }.  db->bu
2610: 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20  syHandler.xFunc 
2620: 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62  = xBusy;.  db->b
2630: 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20  usyHandler.pArg 
2640: 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75  = pArg;.  db->bu
2650: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
2660: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  = 0;.  return SQ
2670: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
2680: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2690: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
26a0: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  K./*.** This rou
26b0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72  tine sets the pr
26c0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
26d0: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
26e0: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
26f0: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
2700: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
2710: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
2720: 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  . The progress c
2730: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20  allback will.** 
2740: 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79  be invoked every
2750: 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a   nOps opcodes..*
2760: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70  /.void sqlite3_p
2770: 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
2780: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
2790: 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69  .  int nOps,.  i
27a0: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
27b0: 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20  void*), .  void 
27c0: 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21  *pArg.){.  if( !
27d0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
27e0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66  ck(db) ){.    if
27f0: 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20  ( nOps>0 ){.    
2800: 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20    db->xProgress 
2810: 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20  = xProgress;.   
2820: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
2830: 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20  Ops = nOps;.    
2840: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
2850: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d  rg = pArg;.    }
2860: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2870: 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20  xProgress = 0;. 
2880: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
2890: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
28a0: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
28b0: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  g = 0;.    }.  }
28c0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
28d0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
28e0: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
28f0: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
2900: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
2910: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
2920: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
2930: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
2940: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74  urning 0..*/.int
2950: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
2960: 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64  meout(sqlite3 *d
2970: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
2980: 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64 62  ( ms>0 ){.    db
2990: 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20  ->busyTimeout = 
29a0: 6d 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ms;.    sqlite3_
29b0: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
29c0: 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75   sqliteDefaultBu
29d0: 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69  syCallback, (voi
29e0: 64 2a 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  d*)db);.  }else{
29f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
2a00: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c  y_handler(db, 0,
2a10: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
2a20: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
2a30: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
2a40: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
2a50: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
2a60: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
2a70: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
2a80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
2a90: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
2aa0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
2ab0: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
2ac0: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
2ad0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
2ae0: 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t;.  }.}../*.** 
2af0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
2b00: 6e 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  n routines that 
2b10: 75 73 65 20 53 51 4c 69 74 65 73 20 69 6e 74 65  use SQLites inte
2b20: 72 6e 61 6c 20 6d 65 6d 6f 72 79 0a 2a 2a 20 6d  rnal memory.** m
2b30: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2e  emory allocator.
2b40: 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68    Depending on h
2b50: 6f 77 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  ow SQLite is com
2b60: 70 69 6c 65 64 2c 20 74 68 65 0a 2a 2a 20 69 6e  piled, the.** in
2b70: 74 65 72 6e 61 6c 20 6d 65 6d 6f 72 79 20 61 6c  ternal memory al
2b80: 6c 6f 63 61 74 6f 72 20 6d 69 67 68 74 20 62 65  locator might be
2b90: 20 6a 75 73 74 20 61 6e 20 61 6c 69 61 73 20 66   just an alias f
2ba0: 6f 72 20 74 68 65 0a 2a 2a 20 73 79 73 74 65 6d  or the.** system
2bb0: 20 64 65 66 61 75 6c 74 20 6d 61 6c 6c 6f 63 2f   default malloc/
2bc0: 72 65 61 6c 6c 6f 63 2f 66 72 65 65 2e 20 20 4f  realloc/free.  O
2bd0: 72 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  r the built-in a
2be0: 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6d 69 67 68  llocator.** migh
2bf0: 74 20 64 6f 20 65 78 74 72 61 20 73 74 75 66 66  t do extra stuff
2c00: 20 6c 69 6b 65 20 70 75 74 20 73 65 6e 74 69 6e   like put sentin
2c10: 61 6c 73 20 61 72 6f 75 6e 64 20 62 75 66 66 65  als around buffe
2c20: 72 73 20 74 6f 20 0a 2a 2a 20 63 68 65 63 6b 20  rs to .** check 
2c30: 66 6f 72 20 6f 76 65 72 72 75 6e 73 20 6f 72 20  for overruns or 
2c40: 6c 6f 6f 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20  look for memory 
2c50: 6c 65 61 6b 73 2e 0a 2a 2a 0a 2a 2a 20 55 73 65  leaks..**.** Use
2c60: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20   sqlite3_free() 
2c70: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 72  to free memory r
2c80: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
2c90: 65 33 5f 6d 70 72 69 6e 74 66 28 29 2e 0a 2a 2f  e3_mprintf()..*/
2ca0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 66 72  .void sqlite3_fr
2cb0: 65 65 28 76 6f 69 64 20 2a 70 29 7b 20 69 66 28  ee(void *p){ if(
2cc0: 20 70 20 29 20 73 71 6c 69 74 65 33 4f 73 46 72   p ) sqlite3OsFr
2cd0: 65 65 28 70 29 3b 20 7d 0a 76 6f 69 64 20 2a 73  ee(p); }.void *s
2ce0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 69 6e  qlite3_malloc(in
2cf0: 74 20 6e 42 79 74 65 29 7b 20 72 65 74 75 72 6e  t nByte){ return
2d00: 20 6e 42 79 74 65 3e 30 20 3f 20 73 71 6c 69 74   nByte>0 ? sqlit
2d10: 65 33 4f 73 4d 61 6c 6c 6f 63 28 6e 42 79 74 65  e3OsMalloc(nByte
2d20: 29 20 3a 20 30 3b 20 7d 0a 76 6f 69 64 20 2a 73  ) : 0; }.void *s
2d30: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 76  qlite3_realloc(v
2d40: 6f 69 64 20 2a 70 4f 6c 64 2c 20 69 6e 74 20 6e  oid *pOld, int n
2d50: 42 79 74 65 29 7b 20 0a 20 20 69 66 28 20 70 4f  Byte){ .  if( pO
2d60: 6c 64 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 42  ld ){.    if( nB
2d70: 79 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 72  yte>0 ){.      r
2d80: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 73 52  eturn sqlite3OsR
2d90: 65 61 6c 6c 6f 63 28 70 4f 6c 64 2c 20 6e 42 79  ealloc(pOld, nBy
2da0: 74 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  te);.    }else{.
2db0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46        sqlite3OsF
2dc0: 72 65 65 28 70 4f 6c 64 29 3b 0a 20 20 20 20 20  ree(pOld);.     
2dd0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
2de0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
2df0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 6d 61 6c  turn sqlite3_mal
2e00: 6c 6f 63 28 6e 42 79 74 65 29 3b 0a 20 20 7d 0a  loc(nByte);.  }.
2e10: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  }../*.** This fu
2e20: 6e 63 74 69 6f 6e 20 69 73 20 65 78 61 63 74 6c  nction is exactl
2e30: 79 20 74 68 65 20 73 61 6d 65 20 61 73 20 73 71  y the same as sq
2e40: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
2e50: 63 74 69 6f 6e 28 29 2c 20 65 78 63 65 70 74 0a  ction(), except.
2e60: 2a 2a 20 74 68 61 74 20 69 74 20 69 73 20 64 65  ** that it is de
2e70: 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c  signed to be cal
2e80: 6c 65 64 20 62 79 20 69 6e 74 65 72 6e 61 6c 20  led by internal 
2e90: 63 6f 64 65 2e 20 54 68 65 20 64 69 66 66 65 72  code. The differ
2ea0: 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61 74 20  ence is.** that 
2eb0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
2ec0: 69 6c 73 20 69 6e 20 73 71 6c 69 74 65 33 5f 63  ils in sqlite3_c
2ed0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
2ee0: 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 0a  , an error code.
2ef0: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  ** is returned a
2f00: 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69  nd the mallocFai
2f10: 6c 65 64 20 66 6c 61 67 20 63 6c 65 61 72 65 64  led flag cleared
2f20: 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  . .*/.int sqlite
2f30: 33 43 72 65 61 74 65 46 75 6e 63 28 0a 20 20 73  3CreateFunc(.  s
2f40: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f  qlite3 *db,.  co
2f50: 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74  nst char *zFunct
2f60: 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e  ionName,.  int n
2f70: 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a  Arg,.  int enc,.
2f80: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
2f90: 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  a,.  void (*xFun
2fa0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
2fb0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2fc0: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2fd0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
2fe0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2ff0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3000: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
3010: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
3020: 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44  ext*).){.  FuncD
3030: 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61  ef *p;.  int nNa
3040: 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  me;..  if( sqlit
3050: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
3060: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3070: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
3080: 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69   }.  if( zFuncti
3090: 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20  onName==0 ||.   
30a0: 20 20 20 28 78 46 75 6e 63 20 26 26 20 28 78 46     (xFunc && (xF
30b0: 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29 20  inal || xStep)) 
30c0: 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75 6e  || .      (!xFun
30d0: 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26 20  c && (xFinal && 
30e0: 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20  !xStep)) ||.    
30f0: 20 20 28 21 78 46 75 6e 63 20 26 26 20 28 21 78    (!xFunc && (!x
3100: 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29 29  Final && xStep))
3110: 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67 3c   ||.      (nArg<
3120: 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29 20  -1 || nArg>127) 
3130: 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c 28 6e  ||.      (255<(n
3140: 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46  Name = strlen(zF
3150: 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29  unctionName))) )
3160: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
3170: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52  or(db, SQLITE_ER
3180: 52 4f 52 2c 20 22 62 61 64 20 70 61 72 61 6d 65  ROR, "bad parame
3190: 74 65 72 73 22 29 3b 0a 20 20 20 20 72 65 74 75  ters");.    retu
31a0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
31b0: 0a 20 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66 20  .  }.  .#ifndef 
31c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
31d0: 36 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45  6.  /* If SQLITE
31e0: 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66  _UTF16 is specif
31f0: 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64  ied as the encod
3200: 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66  ing type, transf
3210: 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f  orm this.  ** to
3220: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55   one of SQLITE_U
3230: 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45  TF16LE or SQLITE
3240: 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74  _UTF16BE using t
3250: 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55  he.  ** SQLITE_U
3260: 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f  TF16NATIVE macro
3270: 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  . SQLITE_UTF16 i
3280: 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72  s not used inter
3290: 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  nally..  **.  **
32a0: 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69   If SQLITE_ANY i
32b0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 64 64  s specified, add
32c0: 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20   three versions 
32d0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  of the function.
32e0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68    ** to the hash
32f0: 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69   table..  */.  i
3300: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  f( enc==SQLITE_U
3310: 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20  TF16 ){.    enc 
3320: 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  = SQLITE_UTF16NA
3330: 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66  TIVE;.  }else if
3340: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e  ( enc==SQLITE_AN
3350: 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b  Y ){.    int rc;
3360: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
3370: 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20  3CreateFunc(db, 
3380: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
3390: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
33a0: 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73 65 72  ,.         pUser
33b0: 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74  Data, xFunc, xSt
33c0: 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20  ep, xFinal);.   
33d0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
33e0: 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a  OK ) return rc;.
33f0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
3400: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
3410: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
3420: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  rg, SQLITE_UTF16
3430: 4c 45 2c 0a 20 20 20 20 20 20 20 20 70 55 73 65  LE,.        pUse
3440: 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53  rData, xFunc, xS
3450: 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20  tep, xFinal);.  
3460: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
3470: 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b  _OK ) return rc;
3480: 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  .    enc = SQLIT
3490: 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23  E_UTF16BE;.  }.#
34a0: 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c  else.  enc = SQL
34b0: 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66  ITE_UTF8;.#endif
34c0: 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69  .  .  /* Check i
34d0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75  f an existing fu
34e0: 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  nction is being 
34f0: 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65  overridden or de
3500: 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20  leted. If so,.  
3510: 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61 72 65  ** and there are
3520: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65   active VMs, the
3530: 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  n return SQLITE_
3540: 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74  BUSY. If a funct
3550: 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  ion.  ** is bein
3560: 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c  g overridden/del
3570: 65 74 65 64 20 62 75 74 20 74 68 65 72 65 20 61  eted but there a
3580: 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73  re no active VMs
3590: 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a  , allow the.  **
35a0: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f   operation to co
35b0: 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c  ntinue but inval
35c0: 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d  idate all precom
35d0: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
35e0: 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c  ..  */.  p = sql
35f0: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
3600: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
3610: 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  me, nName, nArg,
3620: 20 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28 20   enc, 0);.  if( 
3630: 70 20 26 26 20 70 2d 3e 69 50 72 65 66 45 6e 63  p && p->iPrefEnc
3640: 3d 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41 72 67  ==enc && p->nArg
3650: 3d 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20 69 66  ==nArg ){.    if
3660: 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
3670: 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Cnt ){.      sql
3680: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
3690: 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20  LITE_BUSY, .    
36a0: 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64      "Unable to d
36b0: 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75 73 65  elete/modify use
36c0: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65 20 74  r-function due t
36d0: 6f 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  o active stateme
36e0: 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 61 73 73  nts");.      ass
36f0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d 61 6c  ert( !sqlite3Mal
3700: 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b 0a 20  locFailed() );. 
3710: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3720: 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
3730: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
3740: 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
3750: 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
3760: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 20 3d 20     }.  }..  p = 
3770: 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
3780: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
3790: 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41  nName, nName, nA
37a0: 72 67 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20 69  rg, enc, 1);.  i
37b0: 66 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 66  f( p ){.    p->f
37c0: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 70 2d  lags = 0;.    p-
37d0: 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a  >xFunc = xFunc;.
37e0: 20 20 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78      p->xStep = x
37f0: 53 74 65 70 3b 0a 20 20 20 20 70 2d 3e 78 46 69  Step;.    p->xFi
3800: 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b  nalize = xFinal;
3810: 0a 20 20 20 20 70 2d 3e 70 55 73 65 72 44 61 74  .    p->pUserDat
3820: 61 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20  a = pUserData;. 
3830: 20 20 20 70 2d 3e 6e 41 72 67 20 3d 20 6e 41 72     p->nArg = nAr
3840: 67 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  g;.  }.  return 
3850: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
3860: 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20 75  .** Create new u
3870: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ser functions..*
3880: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
3890: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
38a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
38b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e  const char *zFun
38c0: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
38d0: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63   nArg,.  int enc
38e0: 2c 0a 20 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76  ,.  void *p,.  v
38f0: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
3900: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
3910: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
3920: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53  **),.  void (*xS
3930: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
3940: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
3950: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
3960: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71  oid (*xFinal)(sq
3970: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a  lite3_context*).
3980: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 61  ){.  int rc;.  a
3990: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d  ssert( !sqlite3M
39a0: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b  allocFailed() );
39b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
39c0: 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46  reateFunc(db, zF
39d0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
39e0: 67 2c 20 65 6e 63 2c 20 70 2c 20 78 46 75 6e 63  g, enc, p, xFunc
39f0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
3a00: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
3a10: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
3a20: 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  c);.}..#ifndef S
3a30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
3a40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65  .int sqlite3_cre
3a50: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a  ate_function16(.
3a60: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
3a70: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75   const void *zFu
3a80: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e  nctionName,.  in
3a90: 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54  t nArg,.  int eT
3aa0: 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64 20 2a  extRep,.  void *
3ab0: 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  p,.  void (*xFun
3ac0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
3ad0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
3ae0: 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64  value**),.  void
3af0: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
3b00: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
3b10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c  qlite3_value**),
3b20: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
3b30: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3b40: 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  t*).){.  int rc;
3b50: 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e 63 38 3b  .  char *zFunc8;
3b60: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
3b70: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
3b80: 29 20 29 3b 0a 0a 20 20 7a 46 75 6e 63 38 20 3d  ) );..  zFunc8 =
3b90: 20 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38   sqlite3utf16to8
3ba0: 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20  (zFunctionName, 
3bb0: 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  -1);.  rc = sqli
3bc0: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
3bd0: 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20  , zFunc8, nArg, 
3be0: 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78 46 75  eTextRep, p, xFu
3bf0: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
3c00: 6c 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  l);.  sqliteFree
3c10: 28 7a 46 75 6e 63 38 29 3b 0a 0a 20 20 72 65 74  (zFunc8);..  ret
3c20: 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78  urn sqlite3ApiEx
3c30: 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65  it(db, rc);.}.#e
3c40: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
3c50: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
3c60: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
3c70: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e   trace function.
3c80: 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20    The pArg from 
3c90: 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72  the previously r
3ca0: 65 67 69 73 74 65 72 65 64 20 74 72 61 63 65 0a  egistered trace.
3cb0: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
3cc0: 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74   .**.** A NULL t
3cd0: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65  race function me
3ce0: 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63  ans that no trac
3cf0: 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e  ing is executes.
3d00: 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20    A non-NULL.** 
3d10: 74 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  trace is a point
3d20: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
3d30: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
3d40: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
3d50: 20 65 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61   each.** SQL sta
3d60: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20  tement..*/.void 
3d70: 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73  *sqlite3_trace(s
3d80: 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64  qlite3 *db, void
3d90: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
3da0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76  ,const char*), v
3db0: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f  oid *pArg){.  vo
3dc0: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
3dd0: 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e  TraceArg;.  db->
3de0: 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b  xTrace = xTrace;
3df0: 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67  .  db->pTraceArg
3e00: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
3e10: 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a 2a 20  n pOld;.}./*.** 
3e20: 52 65 67 69 73 74 65 72 20 61 20 70 72 6f 66 69  Register a profi
3e30: 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  le function.  Th
3e40: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
3e50: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
3e60: 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66 69 6c  tered .** profil
3e70: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65  e function is re
3e80: 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20  turned.  .**.** 
3e90: 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65 20 66  A NULL profile f
3ea0: 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68  unction means th
3eb0: 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e 67 20  at no profiling 
3ec0: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
3ed0: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72 6f 66  non-NULL.** prof
3ee0: 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ile is a pointer
3ef0: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
3f00: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
3f10: 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e  t the conclusion
3f20: 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51 4c 20   of.** each SQL 
3f30: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
3f40: 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  s run..*/.void *
3f50: 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28  sqlite3_profile(
3f60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
3f70: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
3f80: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
3f90: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69 6e 74  har*,sqlite_uint
3fa0: 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  64),.  void *pAr
3fb0: 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c  g.){.  void *pOl
3fc0: 64 20 3d 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65  d = db->pProfile
3fd0: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 50 72 6f 66  Arg;.  db->xProf
3fe0: 69 6c 65 20 3d 20 78 50 72 6f 66 69 6c 65 3b 0a  ile = xProfile;.
3ff0: 20 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72    db->pProfileAr
4000: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
4010: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e 64 69  rn pOld;.}.#endi
4020: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
4030: 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a 2a 20  _TRACE */../*** 
4040: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a  EXPERIMENTAL ***
4050: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
4060: 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  a function to be
4070: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
4080: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
4090: 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ents..** If the 
40a0: 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74 69 6f 6e  invoked function
40b0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
40c0: 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d  o, then the comm
40d0: 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a 20  it becomes a.** 
40e0: 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69  rollback..*/.voi
40f0: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  d *sqlite3_commi
4100: 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65  t_hook(.  sqlite
4110: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
4120: 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68      /* Attach th
4130: 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64  e hook to this d
4140: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74  atabase */.  int
4150: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
4160: 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74 69  id*),  /* Functi
4170: 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20  on to invoke on 
4180: 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20  each commit */. 
4190: 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20   void *pArg     
41a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
41b0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75  gument to the fu
41c0: 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76  nction */.){.  v
41d0: 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e  oid *pOld = db->
41e0: 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64 62  pCommitArg;.  db
41f0: 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  ->xCommitCallbac
4200: 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20  k = xCallback;. 
4210: 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 20   db->pCommitArg 
4220: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
4230: 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   pOld;.}../*.** 
4240: 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62  Register a callb
4250: 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ack to be invoke
4260: 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 72 6f  d each time a ro
4270: 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 2a 2a  w is updated,.**
4280: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c   inserted or del
4290: 65 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  eted using this 
42a0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
42b0: 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ion..*/.void *sq
42c0: 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
42d0: 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  k(.  sqlite3 *db
42e0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
42f0: 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f  * Attach the hoo
4300: 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  k to this databa
4310: 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  se */.  void (*x
4320: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
4330: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a  int,char const *
4340: 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a 2c 73 71  ,char const *,sq
4350: 6c 69 74 65 5f 69 6e 74 36 34 29 2c 0a 20 20 76  lite_int64),.  v
4360: 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
4370: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
4380: 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63  ment to the func
4390: 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69  tion */.){.  voi
43a0: 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70 55  d *pRet = db->pU
43b0: 70 64 61 74 65 41 72 67 3b 0a 20 20 64 62 2d 3e  pdateArg;.  db->
43c0: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
43d0: 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64  = xCallback;.  d
43e0: 62 2d 3e 70 55 70 64 61 74 65 41 72 67 20 3d 20  b->pUpdateArg = 
43f0: 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70  pArg;.  return p
4400: 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  Ret;.}../*.** Re
4410: 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63  gister a callbac
4420: 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  k to be invoked 
4430: 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e  each time a tran
4440: 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65  saction is rolle
4450: 64 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74 68 69  d.** back by thi
4460: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
4470: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
4480: 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
4490: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33  _hook(.  sqlite3
44a0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
44b0: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
44c0: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
44d0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64  tabase */.  void
44e0: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
44f0: 69 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61 63  id*), /* Callbac
4500: 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  k function */.  
4510: 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20  void *pArg      
4520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
4530: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e  ument to the fun
4540: 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f  ction */.){.  vo
4550: 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70  id *pRet = db->p
4560: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a 20 20 64  RollbackArg;.  d
4570: 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  b->xRollbackCall
4580: 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b  back = xCallback
4590: 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63  ;.  db->pRollbac
45a0: 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  kArg = pArg;.  r
45b0: 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f  eturn pRet;.}../
45c0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
45d0: 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  e is called to c
45e0: 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69  reate a connecti
45f0: 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  on to a database
4600: 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72   BTree.** driver
4610: 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20  .  If zFilename 
4620: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
4630: 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74   file, then that
4640: 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e   file is.** open
4650: 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66  ed and used.  If
4660: 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68   zFilename is th
4670: 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d  e magic name ":m
4680: 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20  emory:" then.** 
4690: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
46a0: 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79  stored in memory
46b0: 20 28 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f   (and is thus fo
46c0: 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20  rgotten as soon 
46d0: 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63  as.** the connec
46e0: 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29  tion is closed.)
46f0: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
4700: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
4710: 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 61  database.** is a
4720: 20 22 76 69 72 74 75 61 6c 22 20 64 61 74 61 62   "virtual" datab
4730: 61 73 65 20 66 6f 72 20 74 72 61 6e 73 69 65 6e  ase for transien
4740: 74 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69  t use only and i
4750: 73 20 64 65 6c 65 74 65 64 20 61 73 0a 2a 2a 20  s deleted as.** 
4760: 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e  soon as the conn
4770: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
4780: 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69 72 74 75 61  ..**.** A virtua
4790: 6c 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  l database can b
47a0: 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20  e either a disk 
47b0: 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75  file (that is au
47c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64  tomatically.** d
47d0: 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
47e0: 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20  file is closed) 
47f0: 6f 72 20 69 74 20 61 6e 20 62 65 20 68 65 6c 64  or it an be held
4800: 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65 6d   entirely in mem
4810: 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69 6e  ory,.** dependin
4820: 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73 20  g on the values 
4830: 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f 52  of the TEMP_STOR
4840: 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  E compile-time m
4850: 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a 20  acro and the.** 
4860: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 76  db->temp_store v
4870: 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64 69  ariable, accordi
4880: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
4890: 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a  ing chart:.**.**
48a0: 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f 52         TEMP_STOR
48b0: 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73  E     db->temp_s
48c0: 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f  tore     Locatio
48d0: 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64  n of temporary d
48e0: 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20 20  atabase.**      
48f0: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20   ----------     
4900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20  --------------  
4910: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d     -------------
4920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4930: 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 30  -.**           0
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
4950: 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20 66  ny             f
4960: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
4970: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
4980: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
4990: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
49a0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
49b0: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
49c0: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
49d0: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
49e0: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20          0       
49f0: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
4a00: 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
4a10: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
4a20: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
4a30: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20              2   
4a50: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72             memor
4a60: 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  y.**           2
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  0              m
4a90: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
4aa0: 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20     3            
4ab0: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
4ac0: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74     memory.*/.int
4ad0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
4ae0: 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71  tory(.  const sq
4af0: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
4b00: 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61    /* Main databa
4b10: 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20  se when opening 
4b20: 61 75 78 20 6f 74 68 65 72 77 69 73 65 20 30 20  aux otherwise 0 
4b30: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
4b40: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f  *zFilename,    /
4b50: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69  * Name of the fi
4b60: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
4b70: 65 20 42 54 72 65 65 20 64 61 74 61 62 61 73 65  e BTree database
4b80: 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f   */.  int omitJo
4b90: 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20  urnal,          
4ba0: 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e 20  /* if TRUE then 
4bb0: 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74  do not journal t
4bc0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
4bd0: 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20  t nCache,       
4be0: 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d          /* How m
4bf0: 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68 65  any pages in the
4c00: 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20   page cache */. 
4c10: 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65   Btree **ppBtree
4c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
4c30: 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72  inter to new Btr
4c40: 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65  ee object writte
4c50: 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69  n here */.){.  i
4c60: 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73 20 3d  nt btree_flags =
4c70: 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20   0;.  int rc;.  
4c80: 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74 72  .  assert( ppBtr
4c90: 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28 20  ee != 0);.  if( 
4ca0: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a 20  omitJournal ){. 
4cb0: 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c     btree_flags |
4cc0: 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  = BTREE_OMIT_JOU
4cd0: 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RNAL;.  }.  if( 
4ce0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4cf0: 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 29 7b  TE_NoReadlock ){
4d00: 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73  .    btree_flags
4d10: 20 7c 3d 20 42 54 52 45 45 5f 4e 4f 5f 52 45 41   |= BTREE_NO_REA
4d20: 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69 66 28  DLOCK;.  }.  if(
4d30: 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b   zFilename==0 ){
4d40: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
4d50: 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  =0.    /* Do not
4d60: 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  hing */.#endif.#
4d70: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4d80: 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69 66 20  IT_MEMORYDB.#if 
4d90: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a 20 20  TEMP_STORE==1.  
4da0: 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73    if( db->temp_s
4db0: 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c 65 6e  tore==2 ) zFilen
4dc0: 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22  ame = ":memory:"
4dd0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d  ;.#endif.#if TEM
4de0: 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20 20 69  P_STORE==2.    i
4df0: 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  f( db->temp_stor
4e00: 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61 6d 65  e!=1 ) zFilename
4e10: 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
4e20: 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53  endif.#if TEMP_S
4e30: 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46 69 6c  TORE==3.    zFil
4e40: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
4e50: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  :";.#endif.#endi
4e60: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
4e70: 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20 20 7d  _MEMORYDB */.  }
4e80: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
4e90: 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e  BtreeOpen(zFilen
4ea0: 61 6d 65 2c 20 28 73 71 6c 69 74 65 33 20 2a 29  ame, (sqlite3 *)
4eb0: 64 62 2c 20 70 70 42 74 72 65 65 2c 20 62 74 72  db, ppBtree, btr
4ec0: 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69 66 28  ee_flags);.  if(
4ed0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
4ee0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
4ef0: 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c 65 72  eeSetBusyHandler
4f00: 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f 69 64  (*ppBtree, (void
4f10: 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  *)&db->busyHandl
4f20: 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  er);.    sqlite3
4f30: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
4f40: 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43 61 63  e(*ppBtree, nCac
4f50: 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  he);.  }.  retur
4f60: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
4f70: 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e 63 6f  eturn UTF-8 enco
4f80: 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  ded English lang
4f90: 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e  uage explanation
4fa0: 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
4fb0: 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f  ent.** error..*/
4fc0: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
4fd0: 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69  ite3_errmsg(sqli
4fe0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73  te3 *db){.  cons
4ff0: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28  t char *z;.  if(
5000: 20 21 64 62 20 7c 7c 20 73 71 6c 69 74 65 33 4d   !db || sqlite3M
5010: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 7b  allocFailed() ){
5020: 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .    return sqli
5030: 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
5040: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69  _NOMEM);.  }.  i
5050: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5060: 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d  Check(db) || db-
5070: 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45  >errCode==SQLITE
5080: 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72  _MISUSE ){.    r
5090: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72  eturn sqlite3Err
50a0: 53 74 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53  Str(SQLITE_MISUS
50b0: 45 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 28 63  E);.  }.  z = (c
50c0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
50d0: 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72  ue_text(db->pErr
50e0: 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  );.  if( z==0 ){
50f0: 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
5100: 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f  ErrStr(db->errCo
5110: 64 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  de);.  }.  retur
5120: 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  n z;.}..#ifndef 
5130: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
5140: 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55  6./*.** Return U
5150: 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e  TF-16 encoded En
5160: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
5170: 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68  xplanation of th
5180: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a  e most recent.**
5190: 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74   error..*/.const
51a0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65   void *sqlite3_e
51b0: 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20  rrmsg16(sqlite3 
51c0: 2a 64 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61 75  *db){.  /* Becau
51d0: 73 65 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61  se all the chara
51e0: 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
51f0: 69 6e 67 20 61 72 65 20 69 6e 20 74 68 65 20 75  ing are in the u
5200: 6e 69 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e 67  nicode.  ** rang
5210: 65 20 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20  e 0x00-0xFF, if 
5220: 77 65 20 70 61 64 20 74 68 65 20 62 69 67 2d 65  we pad the big-e
5230: 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74  ndian string wit
5240: 68 20 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20 62  h a .  ** zero b
5250: 79 74 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61  yte, we can obta
5260: 69 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e  in the little-en
5270: 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68  dian string with
5280: 0a 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61  .  ** &big_endia
5290: 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74 61  n[1]..  */.  sta
52a0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6f  tic const char o
52b0: 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a  utOfMemBe[] = {.
52c0: 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27      0, 'o', 0, '
52d0: 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27  u', 0, 't', 0, '
52e0: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c   ', .    0, 'o',
52f0: 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c   0, 'f', 0, ' ',
5300: 20 0a 20 20 20 20 30 2c 20 27 6d 27 2c 20 30 2c   .    0, 'm', 0,
5310: 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30 2c   'e', 0, 'm', 0,
5320: 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c   'o', 0, 'r', 0,
5330: 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20   'y', 0, 0, 0.  
5340: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
5350: 74 20 63 68 61 72 20 6d 69 73 75 73 65 42 65 20  t char misuseBe 
5360: 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6c  [] = {.    0, 'l
5370: 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 62  ', 0, 'i', 0, 'b
5380: 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 61  ', 0, 'r', 0, 'a
5390: 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79  ', 0, 'r', 0, 'y
53a0: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
53b0: 30 2c 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c 20  0, 'r', 0, 'o', 
53c0: 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20  0, 'u', 0, 't', 
53d0: 30 2c 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c 20  0, 'i', 0, 'n', 
53e0: 30 2c 20 27 65 27 2c 20 30 2c 20 27 20 27 2c 20  0, 'e', 0, ' ', 
53f0: 0a 20 20 20 20 30 2c 20 27 63 27 2c 20 30 2c 20  .    0, 'c', 0, 
5400: 27 61 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20  'a', 0, 'l', 0, 
5410: 27 6c 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  'l', 0, 'e', 0, 
5420: 27 64 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'd', 0, ' ', .  
5430: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
5440: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
5450: 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30  , .    0, 'o', 0
5460: 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'f', 0, ' ', .
5470: 20 20 20 20 30 2c 20 27 73 27 2c 20 30 2c 20 27      0, 's', 0, '
5480: 65 27 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20 27  e', 0, 'q', 0, '
5490: 75 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  u', 0, 'e', 0, '
54a0: 6e 27 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20 27  n', 0, 'c', 0, '
54b0: 65 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b  e', 0, 0, 0.  };
54c0: 0a 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
54d0: 7a 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  z;.  if( sqlite3
54e0: 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29  MallocFailed() )
54f0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f  {.    return (vo
5500: 69 64 20 2a 29 28 26 6f 75 74 4f 66 4d 65 6d 42  id *)(&outOfMemB
5510: 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e[SQLITE_UTF16NA
5520: 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46  TIVE==SQLITE_UTF
5530: 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a  16LE?1:0]);.  }.
5540: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5550: 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20  etyCheck(db) || 
5560: 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c  db->errCode==SQL
5570: 49 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20  ITE_MISUSE ){.  
5580: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a    return (void *
5590: 29 28 26 6d 69 73 75 73 65 42 65 5b 53 51 4c 49  )(&misuseBe[SQLI
55a0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d  TE_UTF16NATIVE==
55b0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31  SQLITE_UTF16LE?1
55c0: 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  :0]);.  }.  z = 
55d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
55e0: 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a  xt16(db->pErr);.
55f0: 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20    if( z==0 ){.  
5600: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
5610: 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d  tStr(db->pErr, -
5620: 31 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  1, sqlite3ErrStr
5630: 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 2c 0a 20  (db->errCode),. 
5640: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55          SQLITE_U
5650: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
5660: 49 43 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c  IC);.    z = sql
5670: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
5680: 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d  6(db->pErr);.  }
5690: 0a 20 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  .  sqlite3ApiExi
56a0: 74 28 30 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  t(0, 0);.  retur
56b0: 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  n z;.}.#endif /*
56c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
56d0: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  16 */../*.** Ret
56e0: 75 72 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63  urn the most rec
56f0: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 67  ent error code g
5700: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 20 53  enerated by an S
5710: 51 4c 69 74 65 20 72 6f 75 74 69 6e 65 2e 20 49  QLite routine. I
5720: 66 20 4e 55 4c 4c 20 69 73 0a 2a 2a 20 70 61 73  f NULL is.** pas
5730: 73 65 64 20 74 6f 20 74 68 69 73 20 66 75 6e 63  sed to this func
5740: 74 69 6f 6e 2c 20 77 65 20 61 73 73 75 6d 65 20  tion, we assume 
5750: 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65  a malloc() faile
5760: 64 20 64 75 72 69 6e 67 20 73 71 6c 69 74 65 33  d during sqlite3
5770: 5f 6f 70 65 6e 28 29 2e 0a 2a 2f 0a 69 6e 74 20  _open()..*/.int 
5780: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
5790: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
57a0: 69 66 28 20 21 64 62 20 7c 7c 20 73 71 6c 69 74  if( !db || sqlit
57b0: 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29  e3MallocFailed()
57c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
57d0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
57e0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
57f0: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
5800: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5810: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
5820: 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43   return db->errC
5830: 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  ode;.}../*.** Cr
5840: 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c 61  eate a new colla
5850: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ting function fo
5860: 72 20 64 61 74 61 62 61 73 65 20 22 64 62 22 2e  r database "db".
5870: 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20 7a 4e    The name is zN
5880: 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65  ame.** and the e
5890: 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e 0a  ncoding is enc..
58a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72  */.static int cr
58b0: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a 20  eateCollation(. 
58c0: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
58d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
58e0: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
58f0: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
5900: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
5910: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5920: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5930: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c  void*).){.  Coll
5940: 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e  Seq *pColl;.  in
5950: 74 20 65 6e 63 32 3b 0a 20 20 0a 20 20 69 66 28  t enc2;.  .  if(
5960: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
5970: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
5980: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
5990: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  USE;.  }..  /* I
59a0: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  f SQLITE_UTF16 i
59b0: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
59c0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65  he encoding type
59d0: 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73  , transform this
59e0: 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20  .  ** to one of 
59f0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
5a00: 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  r SQLITE_UTF16BE
5a10: 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20   using the.  ** 
5a20: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
5a30: 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45  VE macro. SQLITE
5a40: 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73  _UTF16 is not us
5a50: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed internally.. 
5a60: 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20 65 6e 63   */.  enc2 = enc
5a70: 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31 36   & ~SQLITE_UTF16
5a80: 5f 41 4c 49 47 4e 45 44 3b 0a 20 20 69 66 28 20  _ALIGNED;.  if( 
5a90: 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46  enc2==SQLITE_UTF
5aa0: 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 32 20 3d  16 ){.    enc2 =
5ab0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5ac0: 49 56 45 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  IVE;.  }..  if( 
5ad0: 28 65 6e 63 32 26 7e 33 29 21 3d 30 20 29 7b 0a  (enc2&~3)!=0 ){.
5ae0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
5af0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f  (db, SQLITE_ERRO
5b00: 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 65 6e 63 6f  R, "unknown enco
5b10: 64 69 6e 67 22 29 3b 0a 20 20 20 20 72 65 74 75  ding");.    retu
5b20: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
5b30: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b  .  }..  /* Check
5b40: 20 69 66 20 74 68 69 73 20 63 61 6c 6c 20 69 73   if this call is
5b50: 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70   removing or rep
5b60: 6c 61 63 69 6e 67 20 61 6e 20 65 78 69 73 74 69  lacing an existi
5b70: 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  ng collation .  
5b80: 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20 49 66 20  ** sequence. If 
5b90: 73 6f 2c 20 61 6e 64 20 74 68 65 72 65 20 61 72  so, and there ar
5ba0: 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 72 65  e active VMs, re
5bb0: 74 75 72 6e 20 62 75 73 79 2e 20 49 66 20 74 68  turn busy. If th
5bc0: 65 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20  ere.  ** are no 
5bd0: 61 63 74 69 76 65 20 56 4d 73 2c 20 69 6e 76 61  active VMs, inva
5be0: 6c 69 64 61 74 65 20 61 6e 79 20 70 72 65 2d 63  lidate any pre-c
5bf0: 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
5c00: 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c  ts..  */.  pColl
5c10: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
5c20: 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e  llSeq(db, (u8)en
5c30: 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  c2, zName, strle
5c40: 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20  n(zName), 0);.  
5c50: 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f  if( pColl && pCo
5c60: 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20  ll->xCmp ){.    
5c70: 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
5c80: 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  beCnt ){.      s
5c90: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
5ca0: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
5cb0: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
5cc0: 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63   delete/modify c
5cd0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
5ce0: 65 20 64 75 65 20 74 6f 20 61 63 74 69 76 65 20  e due to active 
5cf0: 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20  statements");.  
5d00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5d10: 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20  E_BUSY;.    }.  
5d20: 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
5d30: 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
5d40: 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43  s(db);.  }..  pC
5d50: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
5d60: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38  dCollSeq(db, (u8
5d70: 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74  )enc2, zName, st
5d80: 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b  rlen(zName), 1);
5d90: 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a  .  if( pColl ){.
5da0: 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20      pColl->xCmp 
5db0: 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20  = xCompare;.    
5dc0: 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70  pColl->pUser = p
5dd0: 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e  Ctx;.    pColl->
5de0: 65 6e 63 20 3d 20 65 6e 63 32 20 7c 20 28 65 6e  enc = enc2 | (en
5df0: 63 20 26 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c & SQLITE_UTF16
5e00: 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20 7d 0a 20  _ALIGNED);.  }. 
5e10: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
5e20: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
5e30: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
5e40: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54  _OK;.}.../*.** T
5e50: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
5e60: 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65   the work of ope
5e70: 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 20  ning a database 
5e80: 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20  on behalf of.** 
5e90: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61  sqlite3_open() a
5ea0: 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  nd sqlite3_open1
5eb0: 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61 73  6(). The databas
5ec0: 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c  e filename "zFil
5ed0: 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55  ename"  .** is U
5ee0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f  TF-8 encoded..*/
5ef0: 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e  .static int open
5f00: 44 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73  Database(.  cons
5f10: 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
5f20: 65 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66  e, /* Database f
5f30: 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e  ilename UTF-8 en
5f40: 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  coded */.  sqlit
5f50: 65 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20  e3 **ppDb       
5f60: 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e    /* OUT: Return
5f70: 65 64 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ed database hand
5f80: 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  le */.){.  sqlit
5f90: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
5fa0: 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
5fb0: 6c 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 21  ll;..  assert( !
5fc0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
5fd0: 6c 65 64 28 29 20 29 3b 0a 0a 20 20 2f 2a 20 41  led() );..  /* A
5fe0: 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69  llocate the sqli
5ff0: 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72  te data structur
6000: 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69  e */.  db = sqli
6010: 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66  teMalloc( sizeof
6020: 28 73 71 6c 69 74 65 33 29 20 29 3b 0a 20 20 69  (sqlite3) );.  i
6030: 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20  f( db==0 ) goto 
6040: 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62  opendb_out;.  db
6050: 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20  ->priorNewRowid 
6060: 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63  = 0;.  db->magic
6070: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
6080: 42 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20  BUSY;.  db->nDb 
6090: 3d 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d  = 2;.  db->aDb =
60a0: 20 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a   db->aDbStatic;.
60b0: 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
60c0: 20 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67   = 1;.  db->flag
60d0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72  s |= SQLITE_Shor
60e0: 74 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 73 71 6c  tColNames;.  sql
60f0: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
6100: 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f  ->aFunc, SQLITE_
6110: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
6120: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e  .  sqlite3HashIn
6130: 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  it(&db->aCollSeq
6140: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
6150: 52 49 4e 47 2c 20 30 29 3b 0a 23 69 66 6e 64 65  RING, 0);.#ifnde
6160: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
6170: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 73 71 6c  RTUALTABLE.  sql
6180: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
6190: 2d 3e 61 4d 6f 64 75 6c 65 2c 20 53 51 4c 49 54  ->aModule, SQLIT
61a0: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
61b0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  );.#endif..  /* 
61c0: 41 64 64 20 74 68 65 20 64 65 66 61 75 6c 74 20  Add the default 
61d0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
61e0: 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41 52  ce BINARY. BINAR
61f0: 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  Y works for both
6200: 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64 20   UTF-8.  ** and 
6210: 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20 61  UTF-16, so add a
6220: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61 63   version for eac
6230: 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20 75  h to avoid any u
6240: 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a 20  nnecessary.  ** 
6250: 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68 65  conversions. The
6260: 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61 74   only error that
6270: 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65 20   can occur here 
6280: 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  is a malloc() fa
6290: 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  ilure..  */.  if
62a0: 28 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  ( createCollatio
62b0: 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20  n(db, "BINARY", 
62c0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
62d0: 62 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a  binCollFunc) ||.
62e0: 20 20 20 20 20 20 63 72 65 61 74 65 43 6f 6c 6c        createColl
62f0: 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52  ation(db, "BINAR
6300: 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  Y", SQLITE_UTF16
6310: 42 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75  BE, 0, binCollFu
6320: 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 63 72 65  nc) ||.      cre
6330: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  ateCollation(db,
6340: 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54   "BINARY", SQLIT
6350: 45 5f 55 54 46 31 36 4c 45 2c 20 30 2c 20 62 69  E_UTF16LE, 0, bi
6360: 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20  nCollFunc) ||.  
6370: 20 20 20 20 28 64 62 2d 3e 70 44 66 6c 74 43 6f      (db->pDfltCo
6380: 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ll = sqlite3Find
6390: 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c 49  CollSeq(db, SQLI
63a0: 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41 52 59  TE_UTF8, "BINARY
63b0: 22 2c 20 36 2c 20 30 29 29 3d 3d 30 20 0a 20 20  ", 6, 0))==0 .  
63c0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  ){.    assert( s
63d0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c  qlite3MallocFail
63e0: 65 64 28 29 20 29 3b 0a 20 20 20 20 64 62 2d 3e  ed() );.    db->
63f0: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
6400: 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20  AGIC_CLOSED;.   
6410: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
6420: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f  ;.  }..  /* Also
6430: 20 61 64 64 20 61 20 55 54 46 2d 38 20 63 61 73   add a UTF-8 cas
6440: 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 63 6f  e-insensitive co
6450: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
6460: 2e 20 2a 2f 0a 20 20 63 72 65 61 74 65 43 6f 6c  . */.  createCol
6470: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41  lation(db, "NOCA
6480: 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  SE", SQLITE_UTF8
6490: 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61  , 0, nocaseColla
64a0: 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a  tingFunc);..  /*
64b0: 20 53 65 74 20 66 6c 61 67 73 20 6f 6e 20 74 68   Set flags on th
64c0: 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61  e built-in colla
64d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
64e0: 2f 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c  /.  db->pDfltCol
64f0: 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  l->type = SQLITE
6500: 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20 20  _COLL_BINARY;.  
6510: 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  pColl = sqlite3F
6520: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53  indCollSeq(db, S
6530: 51 4c 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f 43  QLITE_UTF8, "NOC
6540: 41 53 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20 69  ASE", 6, 0);.  i
6550: 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20  f( pColl ){.    
6560: 70 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51  pColl->type = SQ
6570: 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45  LITE_COLL_NOCASE
6580: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e  ;.  }..  /* Open
6590: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74   the backend dat
65a0: 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a  abase driver */.
65b0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
65c0: 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a  reeFactory(db, z
65d0: 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58  Filename, 0, MAX
65e0: 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62  _PAGES, &db->aDb
65f0: 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20  [0].pBt);.  if( 
6600: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
6610: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
6620: 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20  r(db, rc, 0);.  
6630: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
6640: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
6650: 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  D;.    goto open
6660: 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62  db_out;.  }.  db
6670: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
6680: 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61   = sqlite3Schema
6690: 47 65 74 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  Get(db->aDb[0].p
66a0: 42 74 29 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31  Bt);.  db->aDb[1
66b0: 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c 69  ].pSchema = sqli
66c0: 74 65 33 53 63 68 65 6d 61 47 65 74 28 30 29 3b  te3SchemaGet(0);
66d0: 0a 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65 66 61  ...  /* The defa
66e0: 75 6c 74 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  ult safety_level
66f0: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
6700: 74 61 62 61 73 65 20 69 73 20 27 66 75 6c 6c 27  tabase is 'full'
6710: 3b 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a 20  ; for the temp. 
6720: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74 20   ** database it 
6730: 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20  is 'NONE'. This 
6740: 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67 65  matches the page
6750: 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74 73  r layer defaults
6760: 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61  .  .  */.  db->a
6770: 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d  Db[0].zName = "m
6780: 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b  ain";.  db->aDb[
6790: 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  0].safety_level 
67a0: 3d 20 33 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  = 3;.#ifndef SQL
67b0: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
67c0: 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61    db->aDb[1].zNa
67d0: 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64  me = "temp";.  d
67e0: 62 2d 3e 61 44 62 5b 31 5d 2e 73 61 66 65 74 79  b->aDb[1].safety
67f0: 5f 6c 65 76 65 6c 20 3d 20 31 3b 0a 23 65 6e 64  _level = 1;.#end
6800: 69 66 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65  if..  /* Registe
6810: 72 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66  r all built-in f
6820: 75 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f  unctions, but do
6830: 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
6840: 72 65 61 64 20 74 68 65 0a 20 20 2a 2a 20 64 61  read the.  ** da
6850: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 79 65  tabase schema ye
6860: 74 2e 20 54 68 69 73 20 69 73 20 64 65 6c 61 79  t. This is delay
6870: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72  ed until the fir
6880: 73 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  st time the data
6890: 62 61 73 65 0a 20 20 2a 2a 20 69 73 20 61 63 63  base.  ** is acc
68a0: 65 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  essed..  */.  if
68b0: 28 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  ( !sqlite3Malloc
68c0: 46 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20  Failed() ){.    
68d0: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
68e0: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
68f0: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  db);.    sqlite3
6900: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
6910: 5f 4f 4b 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 64  _OK, 0);.  }.  d
6920: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6930: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 0a 6f  E_MAGIC_OPEN;..o
6940: 70 65 6e 64 62 5f 6f 75 74 3a 0a 20 20 69 66 28  pendb_out:.  if(
6950: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 28   SQLITE_NOMEM==(
6960: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
6970: 63 6f 64 65 28 64 62 29 29 20 29 7b 0a 20 20 20  code(db)) ){.   
6980: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64   sqlite3_close(d
6990: 62 29 3b 0a 20 20 20 20 64 62 20 3d 20 30 3b 0a  b);.    db = 0;.
69a0: 20 20 7d 0a 20 20 2a 70 70 44 62 20 3d 20 64 62    }.  *ppDb = db
69b0: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
69c0: 65 33 41 70 69 45 78 69 74 28 30 2c 20 72 63 29  e3ApiExit(0, rc)
69d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  ;.}../*.** Open 
69e0: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68  a new database h
69f0: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
6a00: 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63 6f  lite3_open(.  co
6a10: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
6a20: 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20  ame, .  sqlite3 
6a30: 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65 74  **ppDb .){.  ret
6a40: 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65  urn openDatabase
6a50: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62  (zFilename, ppDb
6a60: 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  );.}..#ifndef SQ
6a70: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6a80: 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  /*.** Open a new
6a90: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
6aa0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
6ab0: 5f 6f 70 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74  _open16(.  const
6ac0: 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65   void *zFilename
6ad0: 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70  , .  sqlite3 **p
6ae0: 70 44 62 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f  pDb.){.  char co
6af0: 6e 73 74 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b  nst *zFilename8;
6b00: 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20     /* zFilename 
6b10: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
6b20: 20 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46 2d   instead of UTF-
6b30: 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  16 */.  int rc =
6b40: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 73 71   SQLITE_OK;.  sq
6b50: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
6b60: 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 7a 46  l;..  assert( zF
6b70: 69 6c 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  ilename );.  ass
6b80: 65 72 74 28 20 70 70 44 62 20 29 3b 0a 20 20 2a  ert( ppDb );.  *
6b90: 70 70 44 62 20 3d 20 30 3b 0a 20 20 70 56 61 6c  ppDb = 0;.  pVal
6ba0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
6bb0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
6bc0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
6bd0: 20 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20   -1, zFilename, 
6be0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6bf0: 56 45 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  VE, SQLITE_STATI
6c00: 43 29 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 38  C);.  zFilename8
6c10: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54   = sqlite3ValueT
6c20: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
6c30: 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a 46  _UTF8);.  if( zF
6c40: 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20  ilename8 ){.    
6c50: 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73  rc = openDatabas
6c60: 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70  e(zFilename8, pp
6c70: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  Db);.    if( rc=
6c80: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a 70  =SQLITE_OK && *p
6c90: 70 44 62 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pDb ){.      rc 
6ca0: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a  = sqlite3_exec(*
6cb0: 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e  ppDb, "PRAGMA en
6cc0: 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36  coding = 'UTF-16
6cd0: 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  '", 0, 0, 0);.  
6ce0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
6cf0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
6d00: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 2a   sqlite3_close(*
6d10: 70 70 44 62 29 3b 0a 20 20 20 20 20 20 20 20 2a  ppDb);.        *
6d20: 70 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  ppDb = 0;.      
6d30: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  }.    }.  }.  sq
6d40: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
6d50: 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Val);..  return 
6d60: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
6d70: 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  , rc);.}.#endif 
6d80: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
6d90: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  TF16 */../*.** T
6da0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
6db0: 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20  tine destroys a 
6dc0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6dd0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
6de0: 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  by.** the sqlite
6df0: 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74  3_compile() rout
6e00: 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ine. The integer
6e10: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20   returned is an 
6e20: 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65  SQLITE_.** succe
6e30: 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20  ss/failure code 
6e40: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
6e50: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65  he result of exe
6e60: 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75  cuting the virtu
6e70: 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a  al.** machine..*
6e80: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
6e90: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
6ea0: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
6eb0: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
6ec0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
6ed0: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
6ee0: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
6ef0: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
6f00: 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  nt sqlite3_final
6f10: 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ize(sqlite3_stmt
6f20: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
6f30: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
6f40: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
6f50: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
6f60: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
6f70: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
6f80: 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20  (Vdbe*)pStmt);. 
6f90: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
6fa0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
6fb0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
6fc0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
6fd0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
6fe0: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
6ff0: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
7000: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
7010: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
7020: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
7030: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
7040: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
7050: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
7060: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
7070: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
7080: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
7090: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
70a0: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
70b0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
70c0: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
70d0: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
70e0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
70f0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
7100: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
7110: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
7120: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
7130: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
7140: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
7150: 65 73 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d  eset((Vdbe*)pStm
7160: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
7170: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64  dbeMakeReady((Vd
7180: 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30  be*)pStmt, -1, 0
7190: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  , 0, 0);.  }.  r
71a0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
71b0: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
71c0: 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
71d0: 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
71e0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
71f0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
7200: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
7210: 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62  n(.  sqlite3* db
7220: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
7230: 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65  *zName, .  int e
7240: 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
7250: 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
7260: 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
7270: 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
7280: 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
7290: 69 6e 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74  int rc;.  assert
72a0: 28 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  ( !sqlite3Malloc
72b0: 46 61 69 6c 65 64 28 29 20 29 3b 0a 20 20 72 63  Failed() );.  rc
72c0: 20 3d 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69   = createCollati
72d0: 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 65 6e  on(db, zName, en
72e0: 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72  c, pCtx, xCompar
72f0: 65 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  e);.  return sql
7300: 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20  ite3ApiExit(db, 
7310: 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  rc);.}..#ifndef 
7320: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
7330: 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  6./*.** Register
7340: 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e   a new collation
7350: 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20 74   sequence with t
7360: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7370: 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71  le db..*/.int sq
7380: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
7390: 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69  lation16(.  sqli
73a0: 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73  te3* db, .  cons
73b0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a  t char *zName, .
73c0: 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f    int enc, .  vo
73d0: 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28  id* pCtx,.  int(
73e0: 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a  *xCompare)(void*
73f0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  ,int,const void*
7400: 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  ,int,const void*
7410: 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  ).){.  int rc = 
7420: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63 68 61  SQLITE_OK;.  cha
7430: 72 20 2a 7a 4e 61 6d 65 38 3b 20 0a 20 20 61 73  r *zName8; .  as
7440: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d 61  sert( !sqlite3Ma
7450: 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b 0a  llocFailed() );.
7460: 20 20 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74    zName8 = sqlit
7470: 65 33 75 74 66 31 36 74 6f 38 28 7a 4e 61 6d 65  e3utf16to8(zName
7480: 2c 20 2d 31 29 3b 0a 20 20 69 66 28 20 7a 4e 61  , -1);.  if( zNa
7490: 6d 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  me8 ){.    rc = 
74a0: 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
74b0: 64 62 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c  db, zName8, enc,
74c0: 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 29   pCtx, xCompare)
74d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  ;.    sqliteFree
74e0: 28 7a 4e 61 6d 65 38 29 3b 0a 20 20 7d 0a 20 20  (zName8);.  }.  
74f0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
7500: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d  iExit(db, rc);.}
7510: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7520: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
7530: 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
7540: 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
7550: 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c  ence factory cal
7560: 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64  lback with the d
7570: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
7580: 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e  * db. Replace an
7590: 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  y previously ins
75a0: 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  talled collation
75b0: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
75c0: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
75d0: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
75e0: 65 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ed(.  sqlite3 *d
75f0: 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  b, .  void *pCol
7600: 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76  lNeededArg, .  v
7610: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
7620: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
7630: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
7640: 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20  nst char*).){.  
7650: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
7660: 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20  yCheck(db) ){.  
7670: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7680: 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62  MISUSE;.  }.  db
7690: 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20  ->xCollNeeded = 
76a0: 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20 64  xCollNeeded;.  d
76b0: 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  b->xCollNeeded16
76c0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c   = 0;.  db->pCol
76d0: 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f  lNeededArg = pCo
76e0: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72  llNeededArg;.  r
76f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
7700: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
7710: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a  TE_OMIT_UTF16./*
7720: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63  .** Register a c
7730: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
7740: 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61  e factory callba
7750: 63 6b 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ck with the data
7760: 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64  base handle.** d
7770: 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70  b. Replace any p
7780: 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c  reviously instal
7790: 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  led collation se
77a0: 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a  quence factory..
77b0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
77c0: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31  ollation_needed1
77d0: 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  6(.  sqlite3 *db
77e0: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  , .  void *pColl
77f0: 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76 6f  NeededArg, .  vo
7800: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
7810: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
7820: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
7830: 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
7840: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
7850: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
7860: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7870: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64  _MISUSE;.  }.  d
7880: 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d  b->xCollNeeded =
7890: 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e   0;.  db->xCollN
78a0: 65 65 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c 4e  eeded16 = xCollN
78b0: 65 65 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e 70  eeded16;.  db->p
78c0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20  CollNeededArg = 
78d0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
78e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
78f0: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
7900: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
7910: 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  6 */..#ifndef SQ
7920: 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c  LITE_OMIT_GLOBAL
7930: 52 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a 20 54 68  RECOVER./*.** Th
7940: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e  is function is n
7950: 6f 77 20 61 6e 20 61 6e 61 63 68 72 6f 6e 69 73  ow an anachronis
7960: 6d 2e 20 49 74 20 75 73 65 64 20 74 6f 20 62 65  m. It used to be
7970: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 76 65 72   used to recover
7980: 20 66 72 6f 6d 20 61 0a 2a 2a 20 6d 61 6c 6c 6f   from a.** mallo
7990: 63 28 29 20 66 61 69 6c 75 72 65 2c 20 62 75 74  c() failure, but
79a0: 20 53 51 4c 69 74 65 20 6e 6f 77 20 64 6f 65 73   SQLite now does
79b0: 20 74 68 69 73 20 61 75 74 6f 6d 61 74 69 63 61   this automatica
79c0: 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  lly..*/.int sqli
79d0: 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  te3_global_recov
79e0: 65 72 28 29 7b 0a 20 20 72 65 74 75 72 6e 20 53  er(){.  return S
79f0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
7a00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  if../*.** Test t
7a10: 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
7a20: 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61 73   not the databas
7a30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
7a40: 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 0a 2a 2a  in autocommit.**
7a50: 20 6d 6f 64 65 2e 20 20 52 65 74 75 72 6e 20 54   mode.  Return T
7a60: 52 55 45 20 69 66 20 69 74 20 69 73 20 61 6e 64  RUE if it is and
7a70: 20 46 41 4c 53 45 20 69 66 20 6e 6f 74 2e 20 20   FALSE if not.  
7a80: 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20  Autocommit mode 
7a90: 69 73 20 6f 6e 0a 2a 2a 20 62 79 20 64 65 66 61  is on.** by defa
7aa0: 75 6c 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74  ult.  Autocommit
7ab0: 20 69 73 20 64 69 73 61 62 6c 65 64 20 62 79 20   is disabled by 
7ac0: 61 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  a BEGIN statemen
7ad0: 74 20 61 6e 64 20 72 65 65 6e 61 62 6c 65 64 0a  t and reenabled.
7ae0: 2a 2a 20 62 79 20 74 68 65 20 6e 65 78 74 20 43  ** by the next C
7af0: 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43  OMMIT or ROLLBAC
7b00: 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 20 54 48  K..**.******* TH
7b10: 49 53 20 49 53 20 41 4e 20 45 58 50 45 52 49 4d  IS IS AN EXPERIM
7b20: 45 4e 54 41 4c 20 41 50 49 20 41 4e 44 20 49 53  ENTAL API AND IS
7b30: 20 53 55 42 4a 45 43 54 20 54 4f 20 43 48 41 4e   SUBJECT TO CHAN
7b40: 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a 2f 0a 69 6e 74  GE ******.*/.int
7b50: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
7b60: 6f 63 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  ocommit(sqlite3 
7b70: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
7b80: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 7d  b->autoCommit;.}
7b90: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
7ba0: 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 65 20  DEBUG./*.** The 
7bb0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e  following routin
7bc0: 65 20 69 73 20 73 75 62 74 69 74 75 74 65 64 20  e is subtituted 
7bd0: 66 6f 72 20 63 6f 6e 73 74 61 6e 74 20 53 51 4c  for constant SQL
7be0: 49 54 45 5f 43 4f 52 52 55 50 54 20 69 6e 0a 2a  ITE_CORRUPT in.*
7bf0: 2a 20 64 65 62 75 67 67 69 6e 67 20 62 75 69 6c  * debugging buil
7c00: 64 73 2e 20 20 54 68 69 73 20 70 72 6f 76 69 64  ds.  This provid
7c10: 65 73 20 61 20 77 61 79 20 74 6f 20 73 65 74 20  es a way to set 
7c20: 61 20 62 72 65 61 6b 70 6f 69 6e 74 20 66 6f 72  a breakpoint for
7c30: 20 77 68 65 6e 0a 2a 2a 20 63 6f 72 72 75 70 74   when.** corrupt
7c40: 69 6f 6e 20 69 73 20 66 69 72 73 74 20 64 65 74  ion is first det
7c50: 65 63 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ected..*/.int sq
7c60: 6c 69 74 65 33 43 6f 72 72 75 70 74 28 76 6f 69  lite3Corrupt(voi
7c70: 64 29 7b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  d){.  return SQL
7c80: 49 54 45 5f 43 4f 52 52 55 50 54 3b 0a 7d 0a 23  ITE_CORRUPT;.}.#
7c90: 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
7ca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
7cb0: 45 44 5f 43 41 43 48 45 0a 2f 2a 0a 2a 2a 20 45  ED_CACHE./*.** E
7cc0: 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65  nable or disable
7cd0: 20 74 68 65 20 73 68 61 72 65 64 20 70 61 67 65   the shared page
7ce0: 72 20 61 6e 64 20 73 63 68 65 6d 61 20 66 65 61  r and schema fea
7cf0: 74 75 72 65 73 20 66 6f 72 20 74 68 65 0a 2a 2a  tures for the.**
7d00: 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e   current thread.
7d10: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
7d20: 69 6e 65 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20  ine should only 
7d30: 62 65 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 74  be called when t
7d40: 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 70 65 6e  here are no open
7d50: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
7d60: 6e 65 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74  nections..*/.int
7d70: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
7d80: 73 68 61 72 65 64 5f 63 61 63 68 65 28 69 6e 74  shared_cache(int
7d90: 20 65 6e 61 62 6c 65 29 7b 0a 20 20 54 68 72 65   enable){.  Thre
7da0: 61 64 44 61 74 61 20 2a 70 54 64 20 3d 20 73 71  adData *pTd = sq
7db0: 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28  lite3ThreadData(
7dc0: 29 3b 0a 20 20 69 66 28 20 70 54 64 20 29 7b 0a  );.  if( pTd ){.
7dd0: 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6f 6e 6c      /* It is onl
7de0: 79 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20  y legal to call 
7df0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
7e00: 68 61 72 65 64 5f 63 61 63 68 65 28 29 20 77 68  hared_cache() wh
7e10: 65 6e 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20  en there.    ** 
7e20: 61 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 6c 79  are no currently
7e30: 20 6f 70 65 6e 20 62 2d 74 72 65 65 73 20 74 68   open b-trees th
7e40: 61 74 20 77 65 72 65 20 6f 70 65 6e 65 64 20 62  at were opened b
7e50: 79 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74 68  y the calling th
7e60: 72 65 61 64 2e 0a 20 20 20 20 2a 2a 20 54 68 69  read..    ** Thi
7e70: 73 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 6f  s condition is o
7e80: 6e 6c 79 20 65 61 73 79 20 74 6f 20 64 65 74 65  nly easy to dete
7e90: 63 74 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ct if the shared
7ea0: 2d 63 61 63 68 65 20 77 65 72 65 20 0a 20 20 20  -cache were .   
7eb0: 20 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 65   ** previously e
7ec0: 6e 61 62 6c 65 64 20 28 61 6e 64 20 69 73 20 62  nabled (and is b
7ed0: 65 69 6e 67 20 64 69 73 61 62 6c 65 64 29 2e 20  eing disabled). 
7ee0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
7ef0: 70 54 64 2d 3e 70 42 74 72 65 65 20 26 26 20 21  pTd->pBtree && !
7f00: 65 6e 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  enable ){.      
7f10: 61 73 73 65 72 74 28 20 70 54 64 2d 3e 75 73 65  assert( pTd->use
7f20: 53 68 61 72 65 64 44 61 74 61 20 29 3b 0a 20 20  SharedData );.  
7f30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7f40: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 7d 0a  E_MISUSE;.    }.
7f50: 0a 20 20 20 20 70 54 64 2d 3e 75 73 65 53 68 61  .    pTd->useSha
7f60: 72 65 64 44 61 74 61 20 3d 20 65 6e 61 62 6c 65  redData = enable
7f70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 6c  ;.    sqlite3Rel
7f80: 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28 29  easeThreadData()
7f90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73  ;.  }.  return s
7fa0: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30 2c  qlite3ApiExit(0,
7fb0: 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23   SQLITE_OK);.}.#
7fc0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  endif../*.** Thi
7fd0: 73 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  s is a convenien
7fe0: 63 65 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  ce routine that 
7ff0: 6d 61 6b 65 73 20 73 75 72 65 20 74 68 61 74 20  makes sure that 
8000: 61 6c 6c 20 74 68 72 65 61 64 2d 73 70 65 63 69  all thread-speci
8010: 66 69 63 0a 2a 2a 20 64 61 74 61 20 66 6f 72 20  fic.** data for 
8020: 74 68 69 73 20 74 68 72 65 61 64 20 68 61 73 20  this thread has 
8030: 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65 64  been deallocated
8040: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
8050: 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
8060: 28 76 6f 69 64 29 7b 0a 20 20 54 68 72 65 61 64  (void){.  Thread
8070: 44 61 74 61 20 2a 70 54 64 20 3d 20 73 71 6c 69  Data *pTd = sqli
8080: 74 65 33 4f 73 54 68 72 65 61 64 53 70 65 63 69  te3OsThreadSpeci
8090: 66 69 63 44 61 74 61 28 30 29 3b 0a 20 20 69 66  ficData(0);.  if
80a0: 28 20 70 54 64 20 29 7b 0a 20 20 20 20 6d 65 6d  ( pTd ){.    mem
80b0: 73 65 74 28 70 54 64 2c 20 30 2c 20 73 69 7a 65  set(pTd, 0, size
80c0: 6f 66 28 2a 70 54 64 29 29 3b 0a 20 20 20 20 73  of(*pTd));.    s
80d0: 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53 70  qlite3OsThreadSp
80e0: 65 63 69 66 69 63 44 61 74 61 28 2d 31 29 3b 0a  ecificData(-1);.
80f0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74    }.}../*.** Ret
8100: 75 72 6e 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  urn meta informa
8110: 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 73 70 65  tion about a spe
8120: 63 69 66 69 63 20 63 6f 6c 75 6d 6e 20 6f 66 20  cific column of 
8130: 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
8140: 2e 0a 2a 2a 20 53 65 65 20 63 6f 6d 6d 65 6e 74  ..** See comment
8150: 20 69 6e 20 73 71 6c 69 74 65 33 2e 68 20 28 73   in sqlite3.h (s
8160: 71 6c 69 74 65 2e 68 2e 69 6e 29 20 66 6f 72 20  qlite.h.in) for 
8170: 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 69 66 64  details..*/.#ifd
8180: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8190: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
81a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 61 62  .int sqlite3_tab
81b0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
81c0: 74 61 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ta(.  sqlite3 *d
81d0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
81e0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
81f0: 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73  handle */.  cons
8200: 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c  t char *zDbName,
8210: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
8220: 61 73 65 20 6e 61 6d 65 20 6f 72 20 4e 55 4c 4c  ase name or NULL
8230: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
8240: 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 20 20   *zTableName,   
8250: 20 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20    /* Table name 
8260: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
8270: 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 20  *zColumnName,   
8280: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 20   /* Column name 
8290: 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  */.  char const 
82a0: 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20 20 20  **pzDataType,   
82b0: 20 2f 2a 20 4f 55 54 50 55 54 3a 20 44 65 63 6c   /* OUTPUT: Decl
82c0: 61 72 65 64 20 64 61 74 61 20 74 79 70 65 20 2a  ared data type *
82d0: 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  /.  char const *
82e0: 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 20 20 20 20  *pzCollSeq,     
82f0: 2f 2a 20 4f 55 54 50 55 54 3a 20 43 6f 6c 6c 61  /* OUTPUT: Colla
8300: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
8310: 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 4e 6f  me */.  int *pNo
8320: 74 4e 75 6c 6c 2c 20 20 20 20 20 20 20 20 20 20  tNull,          
8330: 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54      /* OUTPUT: T
8340: 72 75 65 20 69 66 20 4e 4f 54 20 4e 55 4c 4c 20  rue if NOT NULL 
8350: 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 69 73 74  constraint exist
8360: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 50 72 69  s */.  int *pPri
8370: 6d 61 72 79 4b 65 79 2c 20 20 20 20 20 20 20 20  maryKey,        
8380: 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72     /* OUTPUT: Tr
8390: 75 65 20 69 66 20 63 6f 6c 75 6d 6e 20 70 61 72  ue if column par
83a0: 74 20 6f 66 20 50 4b 20 2a 2f 0a 20 20 69 6e 74  t of PK */.  int
83b0: 20 2a 70 41 75 74 6f 69 6e 63 20 20 20 20 20 20   *pAutoinc      
83c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 50           /* OUTP
83d0: 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f 6c 75  UT: True if colu
83e0: 6d 73 20 69 73 20 61 75 74 6f 2d 69 6e 63 72 65  ms is auto-incre
83f0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
8400: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72   rc;.  char *zEr
8410: 72 4d 73 67 20 3d 20 30 3b 0a 20 20 54 61 62 6c  rMsg = 0;.  Tabl
8420: 65 20 2a 70 54 61 62 20 3d 20 30 3b 0a 20 20 43  e *pTab = 0;.  C
8430: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 20 3d 20 30 3b  olumn *pCol = 0;
8440: 0a 20 20 69 6e 74 20 69 43 6f 6c 3b 0a 0a 20 20  .  int iCol;..  
8450: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 44 61 74  char const *zDat
8460: 61 54 79 70 65 20 3d 20 30 3b 0a 20 20 63 68 61  aType = 0;.  cha
8470: 72 20 63 6f 6e 73 74 20 2a 7a 43 6f 6c 6c 53 65  r const *zCollSe
8480: 71 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 6f 74  q = 0;.  int not
8490: 6e 75 6c 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20  null = 0;.  int 
84a0: 70 72 69 6d 61 72 79 6b 65 79 20 3d 20 30 3b 0a  primarykey = 0;.
84b0: 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 20 3d 20    int autoinc = 
84c0: 30 3b 0a 0a 20 20 2f 2a 20 45 6e 73 75 72 65 20  0;..  /* Ensure 
84d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
84e0: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
84f0: 64 65 64 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ded */.  if( sql
8500: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
8510: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
8520: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
8530: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
8540: 49 6e 69 74 28 64 62 2c 20 26 7a 45 72 72 4d 73  Init(db, &zErrMs
8550: 67 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  g);.  if( SQLITE
8560: 5f 4f 4b 21 3d 72 63 20 29 7b 0a 20 20 20 20 67  _OK!=rc ){.    g
8570: 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20  oto error_out;. 
8580: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
8590: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 71 75 65  the table in que
85a0: 73 74 69 6f 6e 20 2a 2f 0a 20 20 70 54 61 62 20  stion */.  pTab 
85b0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
85c0: 6c 65 28 64 62 2c 20 7a 54 61 62 6c 65 4e 61 6d  le(db, zTableNam
85d0: 65 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 69  e, zDbName);.  i
85e0: 66 28 20 21 70 54 61 62 20 7c 7c 20 70 54 61 62  f( !pTab || pTab
85f0: 2d 3e 70 53 65 6c 65 63 74 20 29 7b 0a 20 20 20  ->pSelect ){.   
8600: 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 67   pTab = 0;.    g
8610: 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20  oto error_out;. 
8620: 20 7d 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68   }..  /* Find th
8630: 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 77 68 69  e column for whi
8640: 63 68 20 69 6e 66 6f 20 69 73 20 72 65 71 75 65  ch info is reque
8650: 73 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 73 71  sted */.  if( sq
8660: 6c 69 74 65 33 49 73 52 6f 77 69 64 28 7a 43 6f  lite3IsRowid(zCo
8670: 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20 20 20  lumnName) ){.   
8680: 20 69 43 6f 6c 20 3d 20 70 54 61 62 2d 3e 69 50   iCol = pTab->iP
8690: 4b 65 79 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  Key;.    if( iCo
86a0: 6c 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43  l>=0 ){.      pC
86b0: 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f 6c  ol = &pTab->aCol
86c0: 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 7d 0a 20 20  [iCol];.    }.  
86d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69  }else{.    for(i
86e0: 43 6f 6c 3d 30 3b 20 69 43 6f 6c 3c 70 54 61 62  Col=0; iCol<pTab
86f0: 2d 3e 6e 43 6f 6c 3b 20 69 43 6f 6c 2b 2b 29 7b  ->nCol; iCol++){
8700: 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26 70  .      pCol = &p
8710: 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b  Tab->aCol[iCol];
8720: 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71  .      if( 0==sq
8730: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 43 6f  lite3StrICmp(pCo
8740: 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d  l->zName, zColum
8750: 6e 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  nName) ){.      
8760: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
8770: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
8780: 43 6f 6c 3d 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20  Col==pTab->nCol 
8790: 29 7b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  ){.      pTab = 
87a0: 30 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65 72  0;.      goto er
87b0: 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  ror_out;.    }. 
87c0: 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c   }..  /* The fol
87d0: 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 73 74 6f  lowing block sto
87e0: 72 65 73 20 74 68 65 20 6d 65 74 61 20 69 6e 66  res the meta inf
87f0: 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77 69  ormation that wi
8800: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 0a 20  ll be returned. 
8810: 20 2a 2a 20 74 6f 20 74 68 65 20 63 61 6c 6c 65   ** to the calle
8820: 72 20 69 6e 20 6c 6f 63 61 6c 20 76 61 72 69 61  r in local varia
8830: 62 6c 65 73 20 7a 44 61 74 61 54 79 70 65 2c 20  bles zDataType, 
8840: 7a 43 6f 6c 6c 53 65 71 2c 20 6e 6f 74 6e 75 6c  zCollSeq, notnul
8850: 6c 2c 20 70 72 69 6d 61 72 79 6b 65 79 0a 20 20  l, primarykey.  
8860: 2a 2a 20 61 6e 64 20 61 75 74 6f 69 6e 63 2e 20  ** and autoinc. 
8870: 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20 74 68  At this point th
8880: 65 72 65 20 61 72 65 20 74 77 6f 20 70 6f 73 73  ere are two poss
8890: 69 62 69 6c 69 74 69 65 73 3a 0a 20 20 2a 2a 20  ibilities:.  ** 
88a0: 0a 20 20 2a 2a 20 20 20 20 20 31 2e 20 54 68 65  .  **     1. The
88b0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
88c0: 6e 20 6e 61 6d 65 20 77 61 73 20 72 6f 77 69 64  n name was rowid
88d0: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
88e0: 77 69 64 5f 22 20 0a 20 20 2a 2a 20 20 20 20 20  wid_" .  **     
88f0: 20 20 20 61 6e 64 20 74 68 65 72 65 20 69 73 20     and there is 
8900: 6e 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65  no explicitly de
8910: 63 6c 61 72 65 64 20 49 50 4b 20 63 6f 6c 75 6d  clared IPK colum
8920: 6e 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  n. .  **.  **   
8930: 20 20 32 2e 20 54 68 65 20 74 61 62 6c 65 20 69    2. The table i
8940: 73 20 6e 6f 74 20 61 20 76 69 65 77 20 61 6e 64  s not a view and
8950: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
8960: 20 69 64 65 6e 74 69 66 69 65 64 20 61 6e 20 0a   identified an .
8970: 20 20 2a 2a 20 20 20 20 20 20 20 20 65 78 70 6c    **        expl
8980: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
8990: 63 6f 6c 75 6d 6e 2e 20 43 6f 70 79 20 6d 65 74  column. Copy met
89a0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  a information fr
89b0: 6f 6d 20 2a 70 43 6f 6c 2e 0a 20 20 2a 2f 20 0a  om *pCol..  */ .
89c0: 20 20 69 66 28 20 70 43 6f 6c 20 29 7b 0a 20 20    if( pCol ){.  
89d0: 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20 70 43    zDataType = pC
89e0: 6f 6c 2d 3e 7a 54 79 70 65 3b 0a 20 20 20 20 7a  ol->zType;.    z
89f0: 43 6f 6c 6c 53 65 71 20 3d 20 70 43 6f 6c 2d 3e  CollSeq = pCol->
8a00: 7a 43 6f 6c 6c 3b 0a 20 20 20 20 6e 6f 74 6e 75  zColl;.    notnu
8a10: 6c 6c 20 3d 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e  ll = (pCol->notN
8a20: 75 6c 6c 3f 31 3a 30 29 3b 0a 20 20 20 20 70 72  ull?1:0);.    pr
8a30: 69 6d 61 72 79 6b 65 79 20 20 3d 20 28 70 43 6f  imarykey  = (pCo
8a40: 6c 2d 3e 69 73 50 72 69 6d 4b 65 79 3f 31 3a 30  l->isPrimKey?1:0
8a50: 29 3b 0a 20 20 20 20 61 75 74 6f 69 6e 63 20 3d  );.    autoinc =
8a60: 20 28 28 70 54 61 62 2d 3e 69 50 4b 65 79 3d 3d   ((pTab->iPKey==
8a70: 69 43 6f 6c 20 26 26 20 70 54 61 62 2d 3e 61 75  iCol && pTab->au
8a80: 74 6f 49 6e 63 29 3f 31 3a 30 29 3b 0a 20 20 7d  toInc)?1:0);.  }
8a90: 65 6c 73 65 7b 0a 20 20 20 20 7a 44 61 74 61 54  else{.    zDataT
8aa0: 79 70 65 20 3d 20 22 49 4e 54 45 47 45 52 22 3b  ype = "INTEGER";
8ab0: 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79 20  .    primarykey 
8ac0: 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21  = 1;.  }.  if( !
8ad0: 7a 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20 20  zCollSeq ){.    
8ae0: 7a 43 6f 6c 6c 53 65 71 20 3d 20 22 42 49 4e 41  zCollSeq = "BINA
8af0: 52 59 22 3b 0a 20 20 7d 0a 0a 65 72 72 6f 72 5f  RY";.  }..error_
8b00: 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74  out:.  if( sqlit
8b10: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
8b20: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
8b30: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a  TE_MISUSE;.  }..
8b40: 20 20 2f 2a 20 57 68 65 74 68 65 72 20 74 68 65    /* Whether the
8b50: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 73   function call s
8b60: 75 63 63 65 65 64 65 64 20 6f 72 20 66 61 69 6c  ucceeded or fail
8b70: 65 64 2c 20 73 65 74 20 74 68 65 20 6f 75 74 70  ed, set the outp
8b80: 75 74 20 70 61 72 61 6d 65 74 65 72 73 0a 20 20  ut parameters.  
8b90: 2a 2a 20 74 6f 20 77 68 61 74 65 76 65 72 20 74  ** to whatever t
8ba0: 68 65 69 72 20 6c 6f 63 61 6c 20 63 6f 75 6e 74  heir local count
8bb0: 65 72 70 61 72 74 73 20 63 6f 6e 74 61 69 6e 2e  erparts contain.
8bc0: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 64 69 64   If an error did
8bd0: 20 6f 63 63 75 72 2c 0a 20 20 2a 2a 20 74 68 69   occur,.  ** thi
8be0: 73 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  s has the effect
8bf0: 20 6f 66 20 7a 65 72 6f 69 6e 67 20 61 6c 6c 20   of zeroing all 
8c00: 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65 72  output parameter
8c10: 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 7a  s..  */.  if( pz
8c20: 44 61 74 61 54 79 70 65 20 29 20 2a 70 7a 44 61  DataType ) *pzDa
8c30: 74 61 54 79 70 65 20 3d 20 7a 44 61 74 61 54 79  taType = zDataTy
8c40: 70 65 3b 0a 20 20 69 66 28 20 70 7a 43 6f 6c 6c  pe;.  if( pzColl
8c50: 53 65 71 20 29 20 2a 70 7a 43 6f 6c 6c 53 65 71  Seq ) *pzCollSeq
8c60: 20 3d 20 7a 43 6f 6c 6c 53 65 71 3b 0a 20 20 69   = zCollSeq;.  i
8c70: 66 28 20 70 4e 6f 74 4e 75 6c 6c 20 29 20 2a 70  f( pNotNull ) *p
8c80: 4e 6f 74 4e 75 6c 6c 20 3d 20 6e 6f 74 6e 75 6c  NotNull = notnul
8c90: 6c 3b 0a 20 20 69 66 28 20 70 50 72 69 6d 61 72  l;.  if( pPrimar
8ca0: 79 4b 65 79 20 29 20 2a 70 50 72 69 6d 61 72 79  yKey ) *pPrimary
8cb0: 4b 65 79 20 3d 20 70 72 69 6d 61 72 79 6b 65 79  Key = primarykey
8cc0: 3b 0a 20 20 69 66 28 20 70 41 75 74 6f 69 6e 63  ;.  if( pAutoinc
8cd0: 20 29 20 2a 70 41 75 74 6f 69 6e 63 20 3d 20 61   ) *pAutoinc = a
8ce0: 75 74 6f 69 6e 63 3b 0a 0a 20 20 69 66 28 20 53  utoinc;..  if( S
8cf0: 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 26 26 20  QLITE_OK==rc && 
8d00: 21 70 54 61 62 20 29 7b 0a 20 20 20 20 73 71 6c  !pTab ){.    sql
8d10: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 7a  ite3SetString(&z
8d20: 45 72 72 4d 73 67 2c 20 22 6e 6f 20 73 75 63 68  ErrMsg, "no such
8d30: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 3a 20 22   table column: "
8d40: 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 22 2e  , zTableName, ".
8d50: 22 2c 20 0a 20 20 20 20 20 20 20 20 7a 43 6f 6c  ", .        zCol
8d60: 75 6d 6e 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  umnName, 0);.   
8d70: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
8d80: 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  OR;.  }.  sqlite
8d90: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 28  3Error(db, rc, (
8da0: 7a 45 72 72 4d 73 67 3f 22 25 73 22 3a 30 29 2c  zErrMsg?"%s":0),
8db0: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c   zErrMsg);.  sql
8dc0: 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29  iteFree(zErrMsg)
8dd0: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
8de0: 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63  e3ApiExit(db, rc
8df0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
8e00: 2a 2a 20 53 65 74 20 61 6c 6c 20 74 68 65 20 70  ** Set all the p
8e10: 61 72 61 6d 65 74 65 72 73 20 69 6e 20 74 68 65  arameters in the
8e20: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
8e30: 61 74 65 6d 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e  atement to NULL.
8e40: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8e50: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 73  clear_bindings(s
8e60: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
8e70: 6d 74 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  mt){.  int i;.  
8e80: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
8e90: 4f 4b 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 72  OK;.  for(i=1; r
8ea0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
8eb0: 69 3c 3d 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  i<=sqlite3_bind_
8ec0: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
8ed0: 70 53 74 6d 74 29 3b 20 69 2b 2b 29 7b 0a 20 20  pStmt); i++){.  
8ee0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
8ef0: 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20  ind_null(pStmt, 
8f00: 69 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  i);.  }.  return
8f10: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 6c   rc;.}../*.** Sl
8f20: 65 65 70 20 66 6f 72 20 61 20 6c 69 74 74 6c 65  eep for a little
8f30: 20 77 68 69 6c 65 2e 20 20 52 65 74 75 72 6e 20   while.  Return 
8f40: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  the amount of ti
8f50: 6d 65 20 73 6c 65 70 74 2e 0a 2a 2f 0a 69 6e 74  me slept..*/.int
8f60: 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28 69   sqlite3_sleep(i
8f70: 6e 74 20 6d 73 29 7b 0a 20 20 72 65 74 75 72 6e  nt ms){.  return
8f80: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
8f90: 6d 73 29 3b 0a 7d 0a                             ms);.}.