/ Hex Artifact Content
Login

Artifact 8a7725b40fbe645883b2162aee782ad1063435b4:


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 32 30 39 20 32 30 30 34 2f 30 36  ,v 1.209 2004/06
0280: 2f 30 39 20 31 32 3a 33 30 3a 30 36 20 64 61 6e  /09 12:30:06 dan
0290: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
02a0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
02b0: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
02c0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
02d0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
02e0: 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
02f0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
0300: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
0310: 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
0320: 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
0330: 33 49 6e 69 74 20 69 6e 74 6f 20 74 68 65 20 73  3Init into the s
0340: 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
0350: 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
0360: 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
0370: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
0380: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
0390: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
03a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
03b0: 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
03c0: 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
03d0: 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
03e0: 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ata;../*.** The 
03f0: 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
0400: 6e 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  nt value is used
0410: 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42   by the SQLITE_B
0420: 49 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20  IGENDIAN and.** 
0430: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
0440: 49 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63  IAN macros..*/.c
0450: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
0460: 6f 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  one = 1;../*.** 
0470: 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44 61 74  Fill the InitDat
0480: 61 20 73 74 72 75 63 74 75 72 65 20 77 69 74 68  a structure with
0490: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
04a0: 65 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  e that indicates
04b0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
04c0: 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
04d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
04e0: 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 49   corruptSchema(I
04f0: 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20  nitData *pData, 
0500: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74  const char *zExt
0510: 72 61 29 7b 0a 20 20 73 71 6c 69 74 65 33 53 65  ra){.  sqlite3Se
0520: 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d 3e 70  tString(pData->p
0530: 7a 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66 6f 72  zErrMsg, "malfor
0540: 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68  med database sch
0550: 65 6d 61 22 2c 0a 20 20 20 20 20 7a 45 78 74 72  ema",.     zExtr
0560: 61 21 3d 30 20 26 26 20 7a 45 78 74 72 61 5b 30  a!=0 && zExtra[0
0570: 5d 21 3d 30 20 3f 20 22 20 2d 20 22 20 3a 20 28  ]!=0 ? " - " : (
0580: 63 68 61 72 2a 29 30 2c 20 7a 45 78 74 72 61 2c  char*)0, zExtra,
0590: 20 28 63 68 61 72 2a 29 30 29 3b 0a 7d 0a 0a 2f   (char*)0);.}../
05a0: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
05b0: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
05c0: 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 74  e for the code t
05d0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
05e0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
05f0: 20 20 53 65 65 20 73 71 6c 69 74 65 33 49 6e 69    See sqlite3Ini
0600: 74 28 29 20 62 65 6c 6f 77 20 66 6f 72 20 61 64  t() below for ad
0610: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
0620: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  tion..**.** Each
0630: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61 69   callback contai
0640: 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ns the following
0650: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a   information:.**
0660: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d 20  .**     argv[0] 
0670: 3d 20 22 66 69 6c 65 2d 66 6f 72 6d 61 74 22 20  = "file-format" 
0680: 6f 72 20 22 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  or "schema-cooki
0690: 65 22 20 6f 72 20 22 74 61 62 6c 65 22 20 6f 72  e" or "table" or
06a0: 20 22 69 6e 64 65 78 22 0a 2a 2a 20 20 20 20 20   "index".**     
06b0: 61 72 67 76 5b 31 5d 20 3d 20 74 61 62 6c 65 20  argv[1] = table 
06c0: 6f 72 20 69 6e 64 65 78 20 6e 61 6d 65 20 6f 72  or index name or
06d0: 20 6d 65 74 61 20 73 74 61 74 65 6d 65 6e 74 20   meta statement 
06e0: 74 79 70 65 2e 0a 2a 2a 20 20 20 20 20 61 72 67  type..**     arg
06f0: 76 5b 32 5d 20 3d 20 72 6f 6f 74 20 70 61 67 65  v[2] = root page
0700: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 61 62 6c   number for tabl
0710: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 4e 55 4c  e or index.  NUL
0720: 4c 20 66 6f 72 20 6d 65 74 61 2e 0a 2a 2a 20 20  L for meta..**  
0730: 20 20 20 61 72 67 76 5b 33 5d 20 3d 20 53 51 4c     argv[3] = SQL
0740: 20 74 65 78 74 20 66 6f 72 20 61 20 43 52 45 41   text for a CREA
0750: 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
0760: 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
0770: 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b  nt..**     argv[
0780: 34 5d 20 3d 20 22 31 22 20 66 6f 72 20 74 65 6d  4] = "1" for tem
0790: 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20 22 30  porary files, "0
07a0: 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  " for main datab
07b0: 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f 72 65  ase, "2" or more
07c0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
07d0: 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20    for auxiliary 
07e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
07f0: 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 0a 69 6e 74  **.*/.static.int
0800: 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
0810: 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74  back(void *pInit
0820: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
0830: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
0840: 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20 49 6e  azColName){.  In
0850: 69 74 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20  itData *pData = 
0860: 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74  (InitData*)pInit
0870: 3b 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30  ;.  int nErr = 0
0880: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  ;..  assert( arg
0890: 63 3d 3d 35 20 29 3b 0a 20 20 69 66 28 20 61 72  c==5 );.  if( ar
08a0: 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  gv==0 ) return 0
08b0: 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 70  ;   /* Might hap
08c0: 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52 45 53  pen if EMPTY_RES
08d0: 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20 61 72  ULT_CALLBACKS ar
08e0: 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 61 72  e on */.  if( ar
08f0: 67 76 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[0]==0 ){.    
0900: 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44  corruptSchema(pD
0910: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ata, 0);.    ret
0920: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 73 77 69  urn 1;.  }.  swi
0930: 74 63 68 28 20 61 72 67 76 5b 30 5d 5b 30 5d 20  tch( argv[0][0] 
0940: 29 7b 0a 20 20 20 20 63 61 73 65 20 27 76 27 3a  ){.    case 'v':
0950: 0a 20 20 20 20 63 61 73 65 20 27 69 27 3a 0a 20  .    case 'i':. 
0960: 20 20 20 63 61 73 65 20 27 74 27 3a 20 7b 20 20     case 't': {  
0970: 2f 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c  /* CREATE TABLE,
0980: 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 6f   CREATE INDEX, o
0990: 72 20 43 52 45 41 54 45 20 56 49 45 57 20 73 74  r CREATE VIEW st
09a0: 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20  atements */.    
09b0: 20 20 73 71 6c 69 74 65 20 2a 64 62 20 3d 20 70    sqlite *db = p
09c0: 44 61 74 61 2d 3e 64 62 3b 0a 20 20 20 20 20 20  Data->db;.      
09d0: 69 66 28 20 61 72 67 76 5b 32 5d 3d 3d 30 20 7c  if( argv[2]==0 |
09e0: 7c 20 61 72 67 76 5b 34 5d 3d 3d 30 20 29 7b 0a  | argv[4]==0 ){.
09f0: 20 20 20 20 20 20 20 20 63 6f 72 72 75 70 74 53          corruptS
0a00: 63 68 65 6d 61 28 70 44 61 74 61 2c 20 30 29 3b  chema(pData, 0);
0a10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0a20: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
0a30: 20 69 66 28 20 61 72 67 76 5b 33 5d 20 26 26 20   if( argv[3] && 
0a40: 61 72 67 76 5b 33 5d 5b 30 5d 20 29 7b 0a 20 20  argv[3][0] ){.  
0a50: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68        /* Call th
0a60: 65 20 70 61 72 73 65 72 20 74 6f 20 70 72 6f 63  e parser to proc
0a70: 65 73 73 20 61 20 43 52 45 41 54 45 20 54 41 42  ess a CREATE TAB
0a80: 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20 56 49 45  LE, INDEX or VIE
0a90: 57 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 42 75  W..        ** Bu
0aa0: 74 20 62 65 63 61 75 73 65 20 64 62 2d 3e 69 6e  t because db->in
0ab0: 69 74 2e 62 75 73 79 20 69 73 20 73 65 74 20 74  it.busy is set t
0ac0: 6f 20 31 2c 20 6e 6f 20 56 44 42 45 20 63 6f 64  o 1, no VDBE cod
0ad0: 65 20 69 73 20 67 65 6e 65 72 61 74 65 64 0a 20  e is generated. 
0ae0: 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65 78 65         ** or exe
0af0: 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20  cuted.  All the 
0b00: 70 61 72 73 65 72 20 64 6f 65 73 20 69 73 20 62  parser does is b
0b10: 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61  uild the interna
0b20: 6c 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 2a  l data.        *
0b30: 2a 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  * structures tha
0b40: 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20 74  t describe the t
0b50: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20  able, index, or 
0b60: 76 69 65 77 2e 0a 20 20 20 20 20 20 20 20 2a 2f  view..        */
0b70: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a  .        char *z
0b80: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 61 73 73  Err;.        ass
0b90: 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
0ba0: 73 79 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  sy );.        db
0bb0: 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 61 74 6f  ->init.iDb = ato
0bc0: 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20 20  i(argv[4]);.    
0bd0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
0be0: 69 6e 69 74 2e 69 44 62 3e 3d 30 20 26 26 20 64  init.iDb>=0 && d
0bf0: 62 2d 3e 69 6e 69 74 2e 69 44 62 3c 64 62 2d 3e  b->init.iDb<db->
0c00: 6e 44 62 20 29 3b 0a 20 20 20 20 20 20 20 20 64  nDb );.        d
0c10: 62 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20  b->init.newTnum 
0c20: 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29 3b  = atoi(argv[2]);
0c30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
0c40: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72  ite3_exec(db, ar
0c50: 67 76 5b 33 5d 2c 20 30 2c 20 30 2c 20 26 7a 45  gv[3], 0, 0, &zE
0c60: 72 72 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  rr) ){.         
0c70: 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70   corruptSchema(p
0c80: 44 61 74 61 2c 20 7a 45 72 72 29 3b 0a 20 20 20  Data, zErr);.   
0c90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
0ca0: 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 20 20 20  ree(zErr);.     
0cb0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
0cc0: 3e 69 6e 69 74 2e 69 44 62 20 3d 20 30 3b 0a 20  >init.iDb = 0;. 
0cd0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
0ce0: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51      /* If the SQ
0cf0: 4c 20 63 6f 6c 75 6d 6e 20 69 73 20 62 6c 61 6e  L column is blan
0d00: 6b 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  k it means this 
0d10: 69 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  is an index that
0d20: 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 61 73 20  .        ** was 
0d30: 63 72 65 61 74 65 64 20 74 6f 20 62 65 20 74 68  created to be th
0d40: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
0d50: 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e   to fulfill a UN
0d60: 49 51 55 45 0a 20 20 20 20 20 20 20 20 2a 2a 20  IQUE.        ** 
0d70: 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 61  constraint for a
0d80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 20 20   CREATE TABLE.  
0d90: 54 68 65 20 69 6e 64 65 78 20 73 68 6f 75 6c 64  The index should
0da0: 20 68 61 76 65 20 61 6c 72 65 61 64 79 0a 20 20   have already.  
0db0: 20 20 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72        ** been cr
0dc0: 65 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72  eated when we pr
0dd0: 6f 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41  ocessed the CREA
0de0: 54 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77  TE TABLE.  All w
0df0: 65 20 68 61 76 65 0a 20 20 20 20 20 20 20 20 2a  e have.        *
0e00: 2a 20 74 6f 20 64 6f 20 68 65 72 65 20 69 73 20  * to do here is 
0e10: 72 65 63 6f 72 64 20 74 68 65 20 72 6f 6f 74 20  record the root 
0e20: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0e30: 74 68 61 74 20 69 6e 64 65 78 2e 0a 20 20 20 20  that index..    
0e40: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
0e50: 6e 74 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20  nt iDb;.        
0e60: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 0a 0a  Index *pIndex;..
0e70: 20 20 20 20 20 20 20 20 69 44 62 20 3d 20 61 74          iDb = at
0e80: 6f 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20  oi(argv[4]);.   
0e90: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62       assert( iDb
0ea0: 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
0eb0: 44 62 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49  Db );.        pI
0ec0: 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 33 46 69  ndex = sqlite3Fi
0ed0: 6e 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67 76  ndIndex(db, argv
0ee0: 5b 31 5d 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62  [1], db->aDb[iDb
0ef0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
0f00: 20 20 69 66 28 20 70 49 6e 64 65 78 3d 3d 30 20    if( pIndex==0 
0f10: 7c 7c 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 21  || pIndex->tnum!
0f20: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
0f30: 2f 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75  /* This can occu
0f40: 72 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74  r if there exist
0f50: 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20  s an index on a 
0f60: 54 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68  TEMP table which
0f70: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 68 61  .          ** ha
0f80: 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
0f90: 61 73 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78  as another index
0fa0: 20 6f 6e 20 61 20 70 65 72 6d 61 6e 65 6e 74 20   on a permanent 
0fb0: 69 6e 64 65 78 2e 20 20 53 69 6e 63 65 0a 20 20  index.  Since.  
0fc0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 70          ** the p
0fd0: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20 69  ermanent table i
0fe0: 73 20 68 69 64 64 65 6e 20 62 79 20 74 68 65 20  s hidden by the 
0ff0: 54 45 4d 50 20 74 61 62 6c 65 2c 20 77 65 20 63  TEMP table, we c
1000: 61 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20 20 20  an also.        
1010: 20 20 2a 2a 20 73 61 66 65 6c 79 20 69 67 6e 6f    ** safely igno
1020: 72 65 20 74 68 65 20 69 6e 64 65 78 20 6f 6e 20  re the index on 
1030: 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20 74 61  the permanent ta
1040: 62 6c 65 2e 0a 20 20 20 20 20 20 20 20 20 20 2a  ble..          *
1050: 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  /.          /* D
1060: 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f 3b 0a 20 20  o Nothing */;.  
1070: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1080: 20 20 20 20 20 20 20 70 49 6e 64 65 78 2d 3e 74         pIndex->t
1090: 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72 67 76 5b  num = atoi(argv[
10a0: 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  2]);.        }. 
10b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
10c0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ak;.    }.    de
10d0: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 2f  fault: {.      /
10e0: 2a 20 54 68 69 73 20 63 61 6e 20 6e 6f 74 20 68  * This can not h
10f0: 61 70 70 65 6e 21 20 2a 2f 0a 20 20 20 20 20 20  appen! */.      
1100: 6e 45 72 72 20 3d 20 31 3b 0a 20 20 20 20 20 20  nErr = 1;.      
1110: 61 73 73 65 72 74 28 20 6e 45 72 72 3d 3d 30 20  assert( nErr==0 
1120: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
1130: 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a 0a 2f  eturn nErr;.}../
1140: 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20  *.** Attempt to 
1150: 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1160: 65 20 73 63 68 65 6d 61 20 61 6e 64 20 69 6e 69  e schema and ini
1170: 74 69 61 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c  tialize internal
1180: 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
1190: 72 65 73 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  res for a single
11a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
11b0: 20 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   The index of th
11c0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69  e.** database fi
11d0: 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 69  le is given by i
11e0: 44 62 2e 20 20 69 44 62 3d 3d 30 20 69 73 20 75  Db.  iDb==0 is u
11f0: 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  sed for the main
1200: 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 69  .** database.  i
1210: 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20 6e 65 76  Db==1 should nev
1220: 65 72 20 62 65 20 75 73 65 64 2e 20 20 69 44 62  er be used.  iDb
1230: 3e 3d 32 20 69 73 20 75 73 65 64 20 66 6f 72 0a  >=2 is used for.
1240: 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
1250: 61 62 61 73 65 73 2e 20 20 52 65 74 75 72 6e 20  abases.  Return 
1260: 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
1270: 45 5f 20 65 72 72 6f 72 20 63 6f 64 65 73 20 74  E_ error codes t
1280: 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65 20 73 75  o.** indicate su
1290: 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75 72 65  ccess or failure
12a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12b0: 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
12c0: 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20 69  qlite *db, int i
12d0: 44 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  Db, char **pzErr
12e0: 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  Msg){.  int rc;.
12f0: 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72 4d    BtCursor *curM
1300: 61 69 6e 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b  ain;.  int size;
1310: 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
1320: 20 20 63 68 61 72 20 2a 61 7a 41 72 67 5b 36 5d    char *azArg[6]
1330: 3b 0a 20 20 63 68 61 72 20 7a 44 62 4e 75 6d 5b  ;.  char zDbNum[
1340: 33 30 5d 3b 0a 20 20 69 6e 74 20 6d 65 74 61 5b  30];.  int meta[
1350: 31 30 5d 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  10];.  InitData 
1360: 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 0a  initData;..  /*.
1370: 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20    ** The master 
1380: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 68  database table h
1390: 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 6c  as a structure l
13a0: 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20  ike this.  */.  
13b0: 73 74 61 74 69 63 20 63 68 61 72 20 6d 61 73 74  static char mast
13c0: 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20  er_schema[] = . 
13d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
13e0: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28  E sqlite_master(
13f0: 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65  \n".     "  type
1400: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1410: 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
1420: 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65       "  tbl_name
1430: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1440: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
1450: 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73  er,\n".     "  s
1460: 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
1470: 22 29 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63  ")".  ;.  static
1480: 20 63 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65   char temp_maste
1490: 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20  r_schema[] = .  
14a0: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20     "CREATE TEMP 
14b0: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d  TABLE sqlite_tem
14c0: 70 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20  p_master(\n".   
14d0: 20 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c    "  type text,\
14e0: 6e 22 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20  n".     "  name 
14f0: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1500: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c   tbl_name text,\
1510: 6e 22 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70  n".     "  rootp
1520: 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a  age integer,\n".
1530: 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74       "  sql text
1540: 5c 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b  \n".     ")".  ;
1550: 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
1560: 77 69 6e 67 20 53 51 4c 20 77 69 6c 6c 20 72 65  wing SQL will re
1570: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1580: 6f 6d 20 74 68 65 20 6d 61 73 74 65 72 20 74 61  om the master ta
1590: 62 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 73 74 61  bles..  */.  sta
15a0: 74 69 63 20 63 68 61 72 20 69 6e 69 74 5f 73 63  tic char init_sc
15b0: 72 69 70 74 31 5b 5d 20 3d 20 0a 20 20 20 20 20  ript1[] = .     
15c0: 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61  "SELECT type, na
15d0: 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
15e0: 6c 2c 20 31 20 46 52 4f 4d 20 73 71 6c 69 74 65  l, 1 FROM sqlite
15f0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 3b 0a 20  _temp_master";. 
1600: 20 73 74 61 74 69 63 20 63 68 61 72 20 69 6e 69   static char ini
1610: 74 5f 73 63 72 69 70 74 32 5b 5d 20 3d 20 0a 20  t_script2[] = . 
1620: 20 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65      "SELECT type
1630: 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  , name, rootpage
1640: 2c 20 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71  , sql, 0 FROM sq
1650: 6c 69 74 65 5f 6d 61 73 74 65 72 22 3b 0a 0a 20  lite_master";.. 
1660: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1670: 26 26 20 69 44 62 21 3d 31 20 26 26 20 69 44 62  && iDb!=1 && iDb
1680: 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f  <db->nDb );..  /
1690: 2a 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * Construct the 
16a0: 73 63 68 65 6d 61 20 74 61 62 6c 65 73 3a 20 73  schema tables: s
16b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 61 6e 64  qlite_master and
16c0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
16d0: 74 65 72 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ter.  */.  sqlit
16e0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
16f0: 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74  .  azArg[0] = "t
1700: 61 62 6c 65 22 3b 0a 20 20 61 7a 41 72 67 5b 31  able";.  azArg[1
1710: 5d 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  ] = MASTER_NAME;
1720: 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 22 31  .  azArg[2] = "1
1730: 22 3b 0a 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20  ";.  azArg[3] = 
1740: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1750: 20 73 70 72 69 6e 74 66 28 7a 44 62 4e 75 6d 2c   sprintf(zDbNum,
1760: 20 22 25 64 22 2c 20 69 44 62 29 3b 0a 20 20 61   "%d", iDb);.  a
1770: 7a 41 72 67 5b 34 5d 20 3d 20 7a 44 62 4e 75 6d  zArg[4] = zDbNum
1780: 3b 0a 20 20 61 7a 41 72 67 5b 35 5d 20 3d 20 30  ;.  azArg[5] = 0
1790: 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20  ;.  initData.db 
17a0: 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61  = db;.  initData
17b0: 2e 70 7a 45 72 72 4d 73 67 20 3d 20 70 7a 45 72  .pzErrMsg = pzEr
17c0: 72 4d 73 67 3b 0a 20 20 73 71 6c 69 74 65 33 49  rMsg;.  sqlite3I
17d0: 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69  nitCallback(&ini
17e0: 74 44 61 74 61 2c 20 35 2c 20 61 7a 41 72 67 2c  tData, 5, azArg,
17f0: 20 30 29 3b 0a 20 20 70 54 61 62 20 3d 20 73 71   0);.  pTab = sq
1800: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
1810: 62 2c 20 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20  b, MASTER_NAME, 
1820: 22 6d 61 69 6e 22 29 3b 0a 20 20 69 66 28 20 70  "main");.  if( p
1830: 54 61 62 20 29 7b 0a 20 20 20 20 70 54 61 62 2d  Tab ){.    pTab-
1840: 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20  >readOnly = 1;. 
1850: 20 7d 0a 20 20 69 66 28 20 69 44 62 3d 3d 30 20   }.  if( iDb==0 
1860: 29 7b 0a 20 20 20 20 61 7a 41 72 67 5b 31 5d 20  ){.    azArg[1] 
1870: 3d 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  = TEMP_MASTER_NA
1880: 4d 45 3b 0a 20 20 20 20 61 7a 41 72 67 5b 33 5d  ME;.    azArg[3]
1890: 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73   = temp_master_s
18a0: 63 68 65 6d 61 3b 0a 20 20 20 20 61 7a 41 72 67  chema;.    azArg
18b0: 5b 34 5d 20 3d 20 22 31 22 3b 0a 20 20 20 20 73  [4] = "1";.    s
18c0: 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
18d0: 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20 35 2c  ck(&initData, 5,
18e0: 20 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 20 20   azArg, 0);.    
18f0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
1900: 6e 64 54 61 62 6c 65 28 64 62 2c 20 54 45 4d 50  ndTable(db, TEMP
1910: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20 22 74  _MASTER_NAME, "t
1920: 65 6d 70 22 29 3b 0a 20 20 20 20 69 66 28 20 70  emp");.    if( p
1930: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 54 61  Tab ){.      pTa
1940: 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b  b->readOnly = 1;
1950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
1960: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
1970: 3b 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 61  ;..  /* Create a
1980: 20 63 75 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20   cursor to hold 
1990: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
19a0: 6e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  n.  */.  if( db-
19b0: 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 3d 3d 30  >aDb[iDb].pBt==0
19c0: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
19d0: 5f 4f 4b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  _OK;.  rc = sqli
19e0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 64  te3BtreeCursor(d
19f0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1a00: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 30 2c   MASTER_ROOT, 0,
1a10: 20 30 2c 20 30 2c 20 26 63 75 72 4d 61 69 6e 29   0, 0, &curMain)
1a20: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
1a30: 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c  TE_OK && rc!=SQL
1a40: 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20  ITE_EMPTY ){.   
1a50: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1a60: 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69  g(pzErrMsg, sqli
1a70: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 28  te3ErrStr(rc), (
1a80: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
1a90: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20  turn rc;.  }..  
1aa0: 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61 62  /* Get the datab
1ab0: 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  ase meta informa
1ac0: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
1ad0: 4d 65 74 61 20 76 61 6c 75 65 73 20 61 72 65 20  Meta values are 
1ae0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a  as follows:.  **
1af0: 20 20 20 20 6d 65 74 61 5b 30 5d 20 20 20 53 63      meta[0]   Sc
1b00: 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43 68  hema cookie.  Ch
1b10: 61 6e 67 65 73 20 77 69 74 68 20 65 61 63 68 20  anges with each 
1b20: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 20  schema change.. 
1b30: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20 20   **    meta[1]  
1b40: 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66 20   File format of 
1b50: 73 63 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20 20  schema layer..  
1b60: 2a 2a 20 20 20 20 6d 65 74 61 5b 32 5d 20 20 20  **    meta[2]   
1b70: 53 69 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65  Size of the page
1b80: 20 63 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20 20   cache..  **    
1b90: 6d 65 74 61 5b 33 5d 20 20 20 53 79 6e 63 68 72  meta[3]   Synchr
1ba0: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 2e 20 20  onous setting.  
1bb0: 31 3a 6f 66 66 2c 20 32 3a 6e 6f 72 6d 61 6c 2c  1:off, 2:normal,
1bc0: 20 33 3a 66 75 6c 6c 0a 20 20 2a 2a 20 20 20 20   3:full.  **    
1bd0: 6d 65 74 61 5b 34 5d 20 20 20 44 62 20 74 65 78  meta[4]   Db tex
1be0: 74 20 65 6e 63 6f 64 69 6e 67 2e 20 31 3a 55 54  t encoding. 1:UT
1bf0: 46 2d 38 20 32 3a 55 54 46 2d 31 36 20 4c 45 20  F-8 2:UTF-16 LE 
1c00: 33 3a 55 54 46 2d 31 36 20 42 45 0a 20 20 2a 2a  3:UTF-16 BE.  **
1c10: 20 20 20 20 6d 65 74 61 5b 35 5d 20 20 20 50 72      meta[5]   Pr
1c20: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
1c30: 76 61 6c 75 65 2e 20 20 53 65 65 20 63 6f 6d 6d  value.  See comm
1c40: 65 6e 74 73 20 6f 6e 20 42 74 72 65 65 46 61 63  ents on BtreeFac
1c50: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 20 6d 65 74  tory.  **    met
1c60: 61 5b 36 5d 0a 20 20 2a 2a 20 20 20 20 6d 65 74  a[6].  **    met
1c70: 61 5b 37 5d 0a 20 20 2a 2a 20 20 20 20 6d 65 74  a[7].  **    met
1c80: 61 5b 38 5d 0a 20 20 2a 2a 20 20 20 20 6d 65 74  a[8].  **    met
1c90: 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e  a[9].  **.  ** N
1ca0: 6f 74 65 3a 20 54 68 65 20 68 61 73 68 20 64 65  ote: The hash de
1cb0: 66 69 6e 65 64 20 54 45 58 54 5f 55 74 66 2a 20  fined TEXT_Utf* 
1cc0: 73 79 6d 62 6f 6c 73 20 69 6e 20 73 71 6c 69 74  symbols in sqlit
1cd0: 65 49 6e 74 2e 68 20 63 6f 72 72 65 73 70 6f 6e  eInt.h correspon
1ce0: 64 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 70 6f  d to.  ** the po
1cf0: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 6f 66  ssible values of
1d00: 20 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f 0a 20   meta[4]..  */. 
1d10: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1d20: 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  OK ){.    int i;
1d30: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 72 63  .    for(i=0; rc
1d40: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
1d50: 3c 73 69 7a 65 6f 66 28 6d 65 74 61 29 2f 73 69  <sizeof(meta)/si
1d60: 7a 65 6f 66 28 6d 65 74 61 5b 30 5d 29 3b 20 69  zeof(meta[0]); i
1d70: 2b 2b 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ++){.      rc = 
1d80: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1d90: 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
1da0: 2e 70 42 74 2c 20 69 2b 31 2c 20 26 6d 65 74 61  .pBt, i+1, &meta
1db0: 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
1dc0: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
1dd0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
1de0: 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74  (pzErrMsg, sqlit
1df0: 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 28 63  e3ErrStr(rc), (c
1e00: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 73  har*)0);.      s
1e10: 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65  qlite3BtreeClose
1e20: 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b  Cursor(curMain);
1e30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63  .      return rc
1e40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1e50: 0a 20 20 20 20 6d 65 6d 73 65 74 28 6d 65 74 61  .    memset(meta
1e60: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65 74 61  , 0, sizeof(meta
1e70: 29 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44  ));.  }.  db->aD
1e80: 62 5b 69 44 62 5d 2e 73 63 68 65 6d 61 5f 63 6f  b[iDb].schema_co
1e90: 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d 3b 0a  okie = meta[0];.
1ea0: 0a 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67  .  /* If opening
1eb0: 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 64 61 74   a non-empty dat
1ec0: 61 62 61 73 65 2c 20 63 68 65 63 6b 20 74 68 65  abase, check the
1ed0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20   text encoding. 
1ee0: 46 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 69  For the.  ** mai
1ef0: 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65 74 20  n database, set 
1f00: 73 71 6c 69 74 65 33 2e 65 6e 63 20 74 6f 20 74  sqlite3.enc to t
1f10: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
1f20: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1f30: 2e 0a 20 20 2a 2a 20 46 6f 72 20 61 6e 20 61 74  ..  ** For an at
1f40: 74 61 63 68 65 64 20 64 62 2c 20 69 74 20 69 73  tached db, it is
1f50: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
1f60: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 6e 6f 74   encoding is not
1f70: 20 74 68 65 20 73 61 6d 65 0a 20 20 2a 2a 20 61   the same.  ** a
1f80: 73 20 73 71 6c 69 74 65 33 2e 65 6e 63 2e 0a 20  s sqlite3.enc.. 
1f90: 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b 34   */.  if( meta[4
1fa0: 5d 20 29 7b 20 20 2f 2a 20 74 65 78 74 20 65 6e  ] ){  /* text en
1fb0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 20 20 69 66  coding */.    if
1fc0: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
1fd0: 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20    /* If opening 
1fe0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1ff0: 65 2c 20 73 65 74 20 64 62 2d 3e 65 6e 63 2e 20  e, set db->enc. 
2000: 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 65 6e 63  */.      db->enc
2010: 20 3d 20 28 75 38 29 6d 65 74 61 5b 34 5d 3b 0a   = (u8)meta[4];.
2020: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2030: 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20 61   /* If opening a
2040: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2050: 61 73 65 2c 20 74 68 65 20 65 6e 63 6f 64 69 6e  ase, the encodin
2060: 67 20 6d 75 63 68 20 6d 61 74 63 68 20 64 62 2d  g much match db-
2070: 3e 65 6e 63 20 2a 2f 0a 20 20 20 20 20 20 69 66  >enc */.      if
2080: 28 20 6d 65 74 61 5b 34 5d 21 3d 64 62 2d 3e 65  ( meta[4]!=db->e
2090: 6e 63 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  nc ){.        sq
20a0: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43  lite3BtreeCloseC
20b0: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
20c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
20d0: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
20e0: 67 2c 20 22 61 74 74 61 63 68 65 64 20 64 61 74  g, "attached dat
20f0: 61 62 61 73 65 73 20 6d 75 73 74 20 75 73 65 20  abases must use 
2100: 74 68 65 20 73 61 6d 65 22 0a 20 20 20 20 20 20  the same".      
2110: 20 20 20 20 20 20 22 20 74 65 78 74 20 65 6e 63        " text enc
2120: 6f 64 69 6e 67 20 61 73 20 6d 61 69 6e 20 64 61  oding as main da
2130: 74 61 62 61 73 65 22 2c 20 28 63 68 61 72 2a 29  tabase", (char*)
2140: 30 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  0);.        retu
2150: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
2160: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2170: 20 7d 0a 0a 20 20 69 66 28 20 69 44 62 3d 3d 30   }..  if( iDb==0
2180: 20 29 7b 0a 20 20 20 20 73 69 7a 65 20 3d 20 6d   ){.    size = m
2190: 65 74 61 5b 32 5d 3b 0a 20 20 20 20 69 66 28 20  eta[2];.    if( 
21a0: 73 69 7a 65 3d 3d 30 20 29 7b 20 73 69 7a 65 20  size==0 ){ size 
21b0: 3d 20 4d 41 58 5f 50 41 47 45 53 3b 20 7d 0a 20  = MAX_PAGES; }. 
21c0: 20 20 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a     db->cache_siz
21d0: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 64 62  e = size;.    db
21e0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
21f0: 20 6d 65 74 61 5b 33 5d 3b 0a 20 20 20 20 69 66   meta[3];.    if
2200: 28 20 6d 65 74 61 5b 35 5d 3e 30 20 26 26 20 6d  ( meta[5]>0 && m
2210: 65 74 61 5b 35 5d 3c 3d 32 20 26 26 20 64 62 2d  eta[5]<=2 && db-
2220: 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 30 20 29  >temp_store==0 )
2230: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 74 65 6d 70  {.      db->temp
2240: 5f 73 74 6f 72 65 20 3d 20 6d 65 74 61 5b 35 5d  _store = meta[5]
2250: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2260: 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  db->safety_level
2270: 3d 3d 30 20 29 20 64 62 2d 3e 73 61 66 65 74 79  ==0 ) db->safety
2280: 5f 6c 65 76 65 6c 20 3d 20 32 3b 0a 0a 20 20 20  _level = 2;..   
2290: 20 2f 2a 20 46 49 58 20 4d 45 3a 20 45 76 65 72   /* FIX ME: Ever
22a0: 79 20 73 74 72 75 63 74 20 44 62 20 77 69 6c 6c  y struct Db will
22b0: 20 6e 65 65 64 20 61 20 6e 65 78 74 5f 63 6f 6f   need a next_coo
22c0: 6b 69 65 20 2a 2f 0a 20 20 20 20 64 62 2d 3e 6e  kie */.    db->n
22d0: 65 78 74 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65 74  ext_cookie = met
22e0: 61 5b 30 5d 3b 0a 20 20 20 20 64 62 2d 3e 66 69  a[0];.    db->fi
22f0: 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 6d 65 74 61  le_format = meta
2300: 5b 31 5d 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  [1];.    if( db-
2310: 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20  >file_format==0 
2320: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  ){.      /* This
2330: 20 68 61 70 70 65 6e 73 20 69 66 20 74 68 65 20   happens if the 
2340: 64 61 74 61 62 61 73 65 20 77 61 73 20 69 6e 69  database was ini
2350: 74 69 61 6c 6c 79 20 65 6d 70 74 79 20 2a 2f 0a  tially empty */.
2360: 20 20 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66        db->file_f
2370: 6f 72 6d 61 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ormat = 1;.    }
2380: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
2390: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20   file_format==1 
23a0: 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e 30     Version 3.0.0
23b0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74  ..  */.  if( met
23c0: 61 5b 31 5d 3e 31 20 29 7b 0a 20 20 20 20 73 71  a[1]>1 ){.    sq
23d0: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43  lite3BtreeCloseC
23e0: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
23f0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2400: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2410: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65  unsupported file
2420: 20 66 6f 72 6d 61 74 22 2c 20 28 63 68 61 72 2a   format", (char*
2430: 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  )0);.    return 
2440: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2450: 7d 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  }..  sqlite3Btre
2460: 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 64 62  eSetCacheSize(db
2470: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
2480: 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  db->cache_size);
2490: 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  .  sqlite3BtreeS
24a0: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 64 62  etSafetyLevel(db
24b0: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
24c0: 6d 65 74 61 5b 33 5d 3d 3d 30 20 3f 20 32 20 3a  meta[3]==0 ? 2 :
24d0: 20 6d 65 74 61 5b 33 5d 29 3b 0a 0a 20 20 2f 2a   meta[3]);..  /*
24e0: 20 52 65 61 64 20 74 68 65 20 73 63 68 65 6d 61   Read the schema
24f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
2500: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
2510: 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20 61 73 73  ables.  */.  ass
2520: 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
2530: 73 79 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  sy );.  if( rc==
2540: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a  SQLITE_EMPTY ){.
2550: 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e 20 65 6d      /* For an em
2560: 70 74 79 20 64 61 74 61 62 61 73 65 2c 20 74 68  pty database, th
2570: 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 74  ere is nothing t
2580: 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20 20 72 63  o read */.    rc
2590: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
25a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
25b0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
25c0: 0a 20 20 20 20 69 66 28 20 69 44 62 3d 3d 30 20  .    if( iDb==0 
25d0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  ){.      /* This
25e0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
25f0: 72 69 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  ries to read the
2600: 20 74 65 6d 70 2e 2a 20 73 63 68 65 6d 61 20 66   temp.* schema f
2610: 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  rom the.      **
2620: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
2630: 74 65 72 20 74 61 62 6c 65 2e 20 49 74 20 6d 69  ter table. It mi
2640: 67 68 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ght return SQLIT
2650: 45 5f 45 4d 50 54 59 2e 20 0a 20 20 20 20 20 20  E_EMPTY. .      
2660: 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  */.      rc = sq
2670: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 69  lite3_exec(db, i
2680: 6e 69 74 5f 73 63 72 69 70 74 31 2c 20 73 71 6c  nit_script1, sql
2690: 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
26a0: 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
26b0: 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
26c0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
26d0: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a  SQLITE_EMPTY ){.
26e0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
26f0: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 69 6e  ite3_exec(db, in
2700: 69 74 5f 73 63 72 69 70 74 32 2c 20 73 71 6c 69  it_script2, sqli
2710: 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2720: 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2730: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2740: 65 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  e{.      char *z
2750: 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  Sql = 0;.      s
2760: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2770: 26 7a 53 71 6c 2c 20 0a 20 20 20 20 20 20 20 20  &zSql, .        
2780: 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e   "SELECT type, n
2790: 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
27a0: 71 6c 2c 20 22 2c 20 7a 44 62 4e 75 6d 2c 20 22  ql, ", zDbNum, "
27b0: 20 46 52 4f 4d 20 5c 22 22 2c 0a 20 20 20 20 20   FROM \"",.     
27c0: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
27d0: 2e 7a 4e 61 6d 65 2c 20 22 5c 22 2e 73 71 6c 69  .zName, "\".sqli
27e0: 74 65 5f 6d 61 73 74 65 72 22 2c 20 28 63 68 61  te_master", (cha
27f0: 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 72 63 20  r*)0);.      rc 
2800: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2810: 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
2820: 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
2830: 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2840: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 53     sqliteFree(zS
2850: 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ql);.    }.    s
2860: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2870: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42  b);.    sqlite3B
2880: 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28  treeCloseCursor(
2890: 63 75 72 4d 61 69 6e 29 3b 0a 20 20 7d 0a 20 20  curMain);.  }.  
28a0: 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  if( sqlite3_mall
28b0: 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20  oc_failed ){.   
28c0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
28d0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74  g(pzErrMsg, "out
28e0: 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63 68   of memory", (ch
28f0: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 63 20 3d  ar*)0);.    rc =
2900: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
2910: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
2920: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
2930: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
2940: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2950: 0a 20 20 20 20 44 62 53 65 74 50 72 6f 70 65 72  .    DbSetProper
2960: 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
2970: 63 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20  chemaLoaded);.  
2980: 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a    if( iDb==0 ){.
2990: 20 20 20 20 20 20 44 62 53 65 74 50 72 6f 70 65        DbSetPrope
29a0: 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f 53 63  rty(db, 1, DB_Sc
29b0: 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20  hemaLoaded);.   
29c0: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
29d0: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
29e0: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69  rnalSchema(db, i
29f0: 44 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Db);.  }.  retur
2a00: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  n rc;.}../*.** I
2a10: 6e 69 74 69 61 6c 69 7a 65 20 61 6c 6c 20 64 61  nitialize all da
2a20: 74 61 62 61 73 65 20 66 69 6c 65 73 20 2d 20 74  tabase files - t
2a30: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2a40: 20 66 69 6c 65 2c 20 74 68 65 20 66 69 6c 65 0a   file, the file.
2a50: 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
2a60: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
2a70: 73 2c 20 61 6e 64 20 61 6e 79 20 61 64 64 69 74  s, and any addit
2a80: 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
2a90: 69 6c 65 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  iles.** created 
2aa0: 75 73 69 6e 67 20 41 54 54 41 43 48 20 73 74 61  using ATTACH sta
2ab0: 74 65 6d 65 6e 74 73 2e 20 20 52 65 74 75 72 6e  tements.  Return
2ac0: 20 61 20 73 75 63 63 65 73 73 20 63 6f 64 65 2e   a success code.
2ad0: 20 20 49 66 20 61 6e 0a 2a 2a 20 65 72 72 6f 72    If an.** error
2ae0: 20 6f 63 63 75 72 73 2c 20 77 72 69 74 65 20 61   occurs, write a
2af0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2b00: 69 6e 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 0a  into *pzErrMsg..
2b10: 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  **.** After the 
2b20: 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 69 74  database is init
2b30: 69 61 6c 69 7a 65 64 2c 20 74 68 65 20 53 51 4c  ialized, the SQL
2b40: 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 0a  ITE_Initialized.
2b50: 2a 2a 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ** bit is set in
2b60: 20 74 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64   the flags field
2b70: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
2b80: 74 72 75 63 74 75 72 65 2e 20 0a 2a 2f 0a 69 6e  tructure. .*/.in
2b90: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
2ba0: 6c 69 74 65 20 2a 64 62 2c 20 63 68 61 72 20 2a  lite *db, char *
2bb0: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e  *pzErrMsg){.  in
2bc0: 74 20 69 2c 20 72 63 3b 0a 20 20 0a 20 20 69 66  t i, rc;.  .  if
2bd0: 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  ( db->init.busy 
2be0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
2bf0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 28 64  OK;.  assert( (d
2c00: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2c10: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d  E_Initialized)==
2c20: 30 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  0 );.  rc = SQLI
2c30: 54 45 5f 4f 4b 3b 0a 20 20 64 62 2d 3e 69 6e 69  TE_OK;.  db->ini
2c40: 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 66 6f  t.busy = 1;.  fo
2c50: 72 28 69 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54  r(i=0; rc==SQLIT
2c60: 45 5f 4f 4b 20 26 26 20 69 3c 64 62 2d 3e 6e 44  E_OK && i<db->nD
2c70: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  b; i++){.    if(
2c80: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
2c90: 62 2c 20 69 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, i, DB_SchemaL
2ca0: 6f 61 64 65 64 29 20 29 20 63 6f 6e 74 69 6e 75  oaded) ) continu
2cb0: 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  e;.    assert( i
2cc0: 21 3d 31 20 29 3b 20 20 2f 2a 20 53 68 6f 75 6c  !=1 );  /* Shoul
2cd0: 64 20 68 61 76 65 20 62 65 65 6e 20 69 6e 69 74  d have been init
2ce0: 69 61 6c 69 7a 65 64 20 74 6f 67 65 74 68 65 72  ialized together
2cf0: 20 77 69 74 68 20 30 20 2a 2f 0a 20 20 20 20 72   with 0 */.    r
2d00: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
2d10: 6e 65 28 64 62 2c 20 69 2c 20 70 7a 45 72 72 4d  ne(db, i, pzErrM
2d20: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
2d30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2d40: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2d50: 65 6d 61 28 64 62 2c 20 69 29 3b 0a 20 20 20 20  ema(db, i);.    
2d60: 7d 0a 20 20 7d 0a 20 20 64 62 2d 3e 69 6e 69 74  }.  }.  db->init
2d70: 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28  .busy = 0;.  if(
2d80: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2d90: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2da0: 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61  |= SQLITE_Initia
2db0: 6c 69 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69 74  lized;.    sqlit
2dc0: 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
2dd0: 43 68 61 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d  Changes(db);.  }
2de0: 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ..  if( rc!=SQLI
2df0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d  TE_OK ){.    db-
2e00: 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54  >flags &= ~SQLIT
2e10: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20  E_Initialized;. 
2e20: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
2e30: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
2e40: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
2e50: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2e60: 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61   schema is alrea
2e70: 64 79 20 69 6e 69 74 69 61 6c 69 73 65 64 2e 0a  dy initialised..
2e80: 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  ** Otherwise, th
2e90: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
2ea0: 65 64 2e 20 41 6e 20 65 72 72 6f 72 20 63 6f 64  ed. An error cod
2eb0: 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
2ec0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  /.int sqlite3Rea
2ed0: 64 53 63 68 65 6d 61 28 73 71 6c 69 74 65 20 2a  dSchema(sqlite *
2ee0: 64 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  db, char **pzErr
2ef0: 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  Msg){.  int rc =
2f00: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69   SQLITE_OK;..  i
2f10: 66 28 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  f( !db->init.bus
2f20: 79 20 29 7b 0a 20 20 20 20 69 66 28 20 28 64 62  y ){.    if( (db
2f30: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2f40: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30  _Initialized)==0
2f50: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
2f60: 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 70  qlite3Init(db, p
2f70: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a  zErrMsg);.    }.
2f80: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63    }.  assert( rc
2f90: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  !=SQLITE_OK || (
2fa0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2fb0: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 7c  TE_Initialized)|
2fc0: 7c 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29  |db->init.busy )
2fd0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
2fe0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73  ../*.** The vers
2ff0: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
3000: 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  ry.*/.const char
3010: 20 72 63 73 69 64 5b 5d 20 3d 20 22 40 28 23 29   rcsid[] = "@(#)
3020: 20 5c 30 34 34 49 64 3a 20 53 51 4c 69 74 65 20   \044Id: SQLite 
3030: 76 65 72 73 69 6f 6e 20 22 20 53 51 4c 49 54 45  version " SQLITE
3040: 5f 56 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a 63  _VERSION " $";.c
3050: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
3060: 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51  3_version[] = SQ
3070: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f  LITE_VERSION;../
3080: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
3090: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
30a0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65  ng function name
30b0: 64 20 22 42 49 4e 41 52 59 22 20 77 68 69 63 68  d "BINARY" which
30c0: 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20 61 76   is always.** av
30d0: 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  ailable..*/.stat
30e0: 69 63 20 69 6e 74 20 62 69 6e 61 72 79 43 6f 6c  ic int binaryCol
30f0: 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f  latingFunc(.  vo
3100: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69  id *NotUsed,.  i
3110: 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20  nt nKey1, const 
3120: 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69  void *pKey1,.  i
3130: 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20  nt nKey2, const 
3140: 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20  void *pKey2.){. 
3150: 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20   int rc, n;.  n 
3160: 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20  = nKey1<nKey2 ? 
3170: 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20  nKey1 : nKey2;. 
3180: 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65   rc = memcmp(pKe
3190: 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20  y1, pKey2, n);. 
31a0: 20 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20   if( rc==0 ){.  
31b0: 20 20 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e    rc = nKey1 - n
31c0: 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Key2;.  }.  retu
31d0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
31e0: 41 6e 6f 74 68 65 72 20 62 75 69 6c 74 2d 69 6e  Another built-in
31f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
3200: 6e 63 65 3a 20 4e 4f 43 41 53 45 2e 20 41 74 20  nce: NOCASE. At 
3210: 74 68 65 20 6d 6f 6d 65 6e 74 20 74 68 65 72 65  the moment there
3220: 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 61 20 55 54   is.** only a UT
3230: 46 2d 38 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  F-8 implementati
3240: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
3250: 74 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  t nocaseCollatin
3260: 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  gFunc(.  void *N
3270: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
3280: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
3290: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
32a0: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
32b0: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
32c0: 72 20 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 49  r = sqlite3StrNI
32d0: 43 6d 70 28 0a 20 20 20 20 20 20 28 63 6f 6e 73  Cmp(.      (cons
32e0: 74 20 63 68 61 72 20 2a 29 70 4b 65 79 31 2c 20  t char *)pKey1, 
32f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b  (const char *)pK
3300: 65 79 32 2c 20 28 6e 4b 65 79 31 3e 6e 4b 65 79  ey2, (nKey1>nKey
3310: 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32 29 3b  2)?nKey1:nKey2);
3320: 0a 20 20 69 66 28 20 30 3d 3d 72 20 29 7b 0a 20  .  if( 0==r ){. 
3330: 20 20 20 72 20 3d 20 6e 4b 65 79 31 2d 6e 4b 65     r = nKey1-nKe
3340: 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
3350: 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   r;.}../*.** Ret
3360: 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66  urn the ROWID of
3370: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
3380: 20 69 6e 73 65 72 74 0a 2a 2f 0a 6c 6f 6e 67 20   insert.*/.long 
3390: 6c 6f 6e 67 20 69 6e 74 20 73 71 6c 69 74 65 33  long int sqlite3
33a0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
33b0: 69 64 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  id(sqlite *db){.
33c0: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73    return db->las
33d0: 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  tRowid;.}../*.**
33e0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
33f0: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  er of changes in
3400: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
3410: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
3420: 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20  _exec()..*/.int 
3430: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
3440: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 72  sqlite *db){.  r
3450: 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67  eturn db->nChang
3460: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  e;.}../*.** Retu
3470: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
3480: 20 63 68 61 6e 67 65 73 20 70 72 6f 64 75 63 65   changes produce
3490: 64 20 62 79 20 74 68 65 20 6c 61 73 74 20 49 4e  d by the last IN
34a0: 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
34b0: 0a 2a 2a 20 44 45 4c 45 54 45 20 73 74 61 74 65  .** DELETE state
34c0: 6d 65 6e 74 20 74 6f 20 63 6f 6d 70 6c 65 74 65  ment to complete
34d0: 20 65 78 65 63 75 74 69 6f 6e 2e 20 54 68 65 20   execution. The 
34e0: 63 6f 75 6e 74 20 64 6f 65 73 20 6e 6f 74 20 69  count does not i
34f0: 6e 63 6c 75 64 65 0a 2a 2a 20 63 68 61 6e 67 65  nclude.** change
3500: 73 20 64 75 65 20 74 6f 20 53 51 4c 20 73 74 61  s due to SQL sta
3510: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
3520: 20 69 6e 20 74 72 69 67 67 65 72 20 70 72 6f 67   in trigger prog
3530: 72 61 6d 73 20 74 68 61 74 20 77 65 72 65 0a 2a  rams that were.*
3540: 2a 20 74 72 69 67 67 65 72 65 64 20 62 79 20 74  * triggered by t
3550: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f  hat statement.*/
3560: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 61 73  .int sqlite3_las
3570: 74 5f 73 74 61 74 65 6d 65 6e 74 5f 63 68 61 6e  t_statement_chan
3580: 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29 7b  ges(sqlite *db){
3590: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 73  .  return db->ls
35a0: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
35b0: 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69   Close an existi
35c0: 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ng SQLite databa
35d0: 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  se.*/.void sqlit
35e0: 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20  e3_close(sqlite 
35f0: 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d  *db){.  HashElem
3600: 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20   *i;.  int j;.  
3610: 64 62 2d 3e 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73  db->want_to_clos
3620: 65 20 3d 20 31 3b 0a 20 20 69 66 28 20 73 71 6c  e = 1;.  if( sql
3630: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
3640: 64 62 29 20 7c 7c 20 73 71 6c 69 74 65 33 53 61  db) || sqlite3Sa
3650: 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
3660: 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49 44    /* printf("DID
3670: 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b 20   NOT CLOSE\n"); 
3680: 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 20  fflush(stdout); 
3690: 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  */.    return;. 
36a0: 20 7d 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d   }.  db->magic =
36b0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
36c0: 4f 53 45 44 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  OSED;.  for(j=0;
36d0: 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29   j<db->nDb; j++)
36e0: 7b 0a 20 20 20 20 73 74 72 75 63 74 20 44 62 20  {.    struct Db 
36f0: 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b  *pDb = &db->aDb[
3700: 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d  j];.    if( pDb-
3710: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71  >pBt ){.      sq
3720: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28  lite3BtreeClose(
3730: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
3740: 20 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b 0a 20   pDb->pBt = 0;. 
3750: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
3760: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
3770: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
3780: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c  assert( db->nDb<
3790: 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =2 );.  assert( 
37a0: 64 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62  db->aDb==db->aDb
37b0: 53 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28  Static );.  for(
37c0: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
37d0: 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69  t(&db->aFunc); i
37e0: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
37f0: 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63  xt(i)){.    Func
3800: 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65  Def *pFunc, *pNe
3810: 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e  xt;.    for(pFun
3820: 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71  c = (FuncDef*)sq
3830: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
3840: 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e   pFunc; pFunc=pN
3850: 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  ext){.      pNex
3860: 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74  t = pFunc->pNext
3870: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72  ;.      sqliteFr
3880: 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d  ee(pFunc);.    }
3890: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61  .  }.  sqlite3Ha
38a0: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75  shClear(&db->aFu
38b0: 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72  nc);.  sqlite3Er
38c0: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
38d0: 4b 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f  K, 0); /* Deallo
38e0: 63 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64  cates any cached
38f0: 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20   error strings. 
3900: 2a 2f 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  */.  sqliteFree(
3910: 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f  db);.}../*.** Ro
3920: 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62  llback all datab
3930: 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f  ase files..*/.vo
3940: 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
3950: 63 6b 41 6c 6c 28 73 71 6c 69 74 65 20 2a 64 62  ckAll(sqlite *db
3960: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  ){.  int i;.  fo
3970: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
3980: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
3990: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29  db->aDb[i].pBt )
39a0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
39b0: 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d  treeRollback(db-
39c0: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[i].pBt);.  
39d0: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69      db->aDb[i].i
39e0: 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20  nTrans = 0;.    
39f0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  }.  }.  sqlite3R
3a00: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
3a10: 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 2f 2a 20  ma(db, 0);.  /* 
3a20: 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 49  sqlite3RollbackI
3a30: 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64  nternalChanges(d
3a40: 62 29 3b 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  b); */.}../*.** 
3a50: 52 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20  Return a static 
3a60: 73 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63  string that desc
3a70: 72 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f  ribes the kind o
3a80: 66 20 65 72 72 6f 72 20 73 70 65 63 69 66 69 65  f error specifie
3a90: 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75  d in the.** argu
3aa0: 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  ment..*/.const c
3ab0: 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
3ac0: 74 72 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f  tr(int rc){.  co
3ad0: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73  nst char *z;.  s
3ae0: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
3af0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a   case SQLITE_OK:
3b00: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f           z = "no
3b10: 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  t an error";    
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3b40: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52   case SQLITE_ERR
3b50: 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51  OR:      z = "SQ
3b60: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
3b70: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
3b80: 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  e";   break;.   
3b90: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
3ba0: 45 52 4e 41 4c 3a 20 20 20 7a 20 3d 20 22 69 6e  ERNAL:   z = "in
3bb0: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 20 69 6d  ternal SQLite im
3bc0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6c 61  plementation fla
3bd0: 77 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  w";   break;.   
3be0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52   case SQLITE_PER
3bf0: 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63  M:       z = "ac
3c00: 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20  cess permission 
3c10: 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20  denied";        
3c20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3c30: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f   case SQLITE_ABO
3c40: 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61  RT:      z = "ca
3c50: 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64  llback requested
3c60: 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20   query abort";  
3c70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3c80: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
3c90: 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  Y:       z = "da
3ca0: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
3cb0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3cc0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3cd0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43   case SQLITE_LOC
3ce0: 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  KED:     z = "da
3cf0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
3d00: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
3d10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3d20: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d   case SQLITE_NOM
3d30: 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75  EM:      z = "ou
3d40: 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20  t of memory";   
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3d70: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
3d80: 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74  DONLY:   z = "at
3d90: 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
3da0: 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61   readonly databa
3db0: 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  se";  break;.   
3dc0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
3dd0: 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e  ERRUPT:  z = "in
3de0: 74 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20  terrupted";     
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3e10: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
3e20: 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69  RR:      z = "di
3e30: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20  sk I/O error";  
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3e60: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52   case SQLITE_COR
3e70: 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61  RUPT:    z = "da
3e80: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
3e90: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b  e is malformed";
3ea0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3eb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
3ec0: 46 4f 55 4e 44 3a 20 20 20 7a 20 3d 20 22 74 61  FOUND:   z = "ta
3ed0: 62 6c 65 20 6f 72 20 72 65 63 6f 72 64 20 6e 6f  ble or record no
3ee0: 74 20 66 6f 75 6e 64 22 3b 20 20 20 20 20 20 20  t found";       
3ef0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3f00: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c   case SQLITE_FUL
3f10: 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  L:       z = "da
3f20: 74 61 62 61 73 65 20 69 73 20 66 75 6c 6c 22 3b  tabase is full";
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f40: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3f50: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
3f60: 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e  TOPEN:   z = "un
3f70: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
3f80: 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20  abase file";    
3f90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3fa0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f   case SQLITE_PRO
3fb0: 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61  TOCOL:   z = "da
3fc0: 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70  tabase locking p
3fd0: 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22  rotocol failure"
3fe0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
3ff0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50   case SQLITE_EMP
4000: 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61  TY:      z = "ta
4010: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
4020: 64 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20  data";          
4030: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4040: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48   case SQLITE_SCH
4050: 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  EMA:     z = "da
4060: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
4070: 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20  s changed";     
4080: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4090: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f   case SQLITE_TOO
40a0: 42 49 47 3a 20 20 20 20 20 7a 20 3d 20 22 74 6f  BIG:     z = "to
40b0: 6f 20 6d 75 63 68 20 64 61 74 61 20 66 6f 72 20  o much data for 
40c0: 6f 6e 65 20 74 61 62 6c 65 20 72 6f 77 22 3b 20  one table row"; 
40d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
40e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
40f0: 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f  STRAINT: z = "co
4100: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
4110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4120: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4130: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
4140: 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61  MATCH:   z = "da
4150: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
4160: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4170: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4180: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
4190: 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69  USE:     z = "li
41a0: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
41b0: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
41c0: 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  ence";break;.   
41d0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c   case SQLITE_NOL
41e0: 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65  FS:      z = "ke
41f0: 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65  rnel lacks large
4200: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20   file support"; 
4210: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4220: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54   case SQLITE_AUT
4230: 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75  H:       z = "au
4240: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69  thorization deni
4250: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
4260: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4270: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52   case SQLITE_FOR
4280: 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75  MAT:     z = "au
4290: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
42a0: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20   format error"; 
42b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
42c0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e   case SQLITE_RAN
42d0: 47 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69  GE:      z = "bi
42e0: 6e 64 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  nd index out of 
42f0: 72 61 6e 67 65 22 3b 20 20 20 20 20 20 20 20 20  range";         
4300: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4310: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
4320: 41 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69  ADB:     z = "fi
4330: 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20  le is encrypted 
4340: 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  or is not a data
4350: 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  base";break;.   
4360: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
4370: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e           z = "un
4380: 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20  known error";   
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d        break;.  }
43b0: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
43c0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
43d0: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  ne implements a 
43e0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68  busy callback th
43f0: 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72  at sleeps and tr
4400: 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74  ies.** again unt
4410: 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c  il a timeout val
4420: 75 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20  ue is reached.  
4430: 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  The timeout valu
4440: 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  e is.** an integ
4450: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c  er number of mil
4460: 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64  liseconds passed
4470: 20 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74   in as the first
4480: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  .** argument..*/
4490: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
44a0: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
44b0: 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69  lback(. void *Ti
44c0: 6d 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20  meout,          
44d0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75   /* Maximum amou
44e0: 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61  nt of time to wa
44f0: 69 74 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68 61  it */. const cha
4500: 72 20 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20 20  r *NotUsed,     
4510: 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
4520: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
4530: 20 62 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63 6f   busy */. int co
4540: 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  unt             
4550: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4560: 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20  times table has 
4570: 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a  been busy */.){.
4580: 23 69 66 20 53 51 4c 49 54 45 5f 4d 49 4e 5f 53  #if SQLITE_MIN_S
4590: 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20 20 73 74 61  LEEP_MS==1.  sta
45a0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 64  tic const char d
45b0: 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  elays[] =.     {
45c0: 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20 31 35   1, 2, 5, 10, 15
45d0: 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20 20 32  , 20, 25, 25,  2
45e0: 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 20 35 30  5,  50,  50,  50
45f0: 2c 20 31 30 30 7d 3b 0a 20 20 73 74 61 74 69 63  , 100};.  static
4600: 20 63 6f 6e 73 74 20 73 68 6f 72 74 20 69 6e 74   const short int
4610: 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20   totals[] =.    
4620: 20 7b 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20   { 0, 1, 3,  8, 
4630: 31 38 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20  18, 33, 53, 78, 
4640: 31 30 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32  103, 128, 178, 2
4650: 32 38 2c 20 32 38 37 7d 3b 0a 23 20 64 65 66 69  28, 287};.# defi
4660: 6e 65 20 4e 44 45 4c 41 59 20 28 73 69 7a 65 6f  ne NDELAY (sizeo
4670: 66 28 64 65 6c 61 79 73 29 2f 73 69 7a 65 6f 66  f(delays)/sizeof
4680: 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a 20 20 69  (delays[0])).  i
4690: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e  nt timeout = (in
46a0: 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74  t)Timeout;.  int
46b0: 20 64 65 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a   delay, prior;..
46c0: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 3d 20 4e    if( count <= N
46d0: 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c  DELAY ){.    del
46e0: 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e  ay = delays[coun
46f0: 74 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  t-1];.    prior 
4700: 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 2d 31  = totals[count-1
4710: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
4720: 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e  delay = delays[N
4730: 44 45 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72  DELAY-1];.    pr
4740: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45  ior = totals[NDE
4750: 4c 41 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28  LAY-1] + delay*(
4760: 63 6f 75 6e 74 2d 4e 44 45 4c 41 59 2d 31 29 3b  count-NDELAY-1);
4770: 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72  .  }.  if( prior
4780: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
4790: 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  ut ){.    delay 
47a0: 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f  = timeout - prio
47b0: 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  r;.    if( delay
47c0: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
47d0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53    }.  sqlite3OsS
47e0: 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72  leep(delay);.  r
47f0: 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
4800: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28   int timeout = (
4810: 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69  int)Timeout;.  i
4820: 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30  f( (count+1)*100
4830: 30 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20  0 > timeout ){. 
4840: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4850: 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65  .  sqlite3OsSlee
4860: 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72  p(1000);.  retur
4870: 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  n 1;.#endif.}../
4880: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4890: 65 20 73 65 74 73 20 74 68 65 20 62 75 73 79 20  e sets the busy 
48a0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20  callback for an 
48b0: 53 71 6c 69 74 65 20 64 61 74 61 62 61 73 65 20  Sqlite database 
48c0: 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20  to the.** given 
48d0: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
48e0: 6e 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e  n with the given
48f0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f   argument..*/.vo
4900: 69 64 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  id sqlite3_busy_
4910: 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74  handler(.  sqlit
4920: 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78  e *db,.  int (*x
4930: 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  Busy)(void*,cons
4940: 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a 20 20  t char*,int),.  
4950: 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20  void *pArg.){.  
4960: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4970: 78 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20  xFunc = xBusy;. 
4980: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4990: 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a  .pArg = pArg;.}.
49a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
49b0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
49c0: 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69  LLBACK./*.** Thi
49d0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
49e0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
49f0: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
4a00: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
4a10: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
4a20: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
4a30: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
4a40: 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72  ument. The progr
4a50: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c  ess callback wil
4a60: 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20  l.** be invoked 
4a70: 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64  every nOps opcod
4a80: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
4a90: 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e  te3_progress_han
4aa0: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a  dler(.  sqlite *
4ab0: 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c  db, .  int nOps,
4ac0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
4ad0: 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76  ss)(void*), .  v
4ae0: 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69  oid *pArg.){.  i
4af0: 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20  f( nOps>0 ){.   
4b00: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
4b10: 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20   xProgress;.    
4b20: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4b30: 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d   = nOps;.    db-
4b40: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20  >pProgressArg = 
4b50: 70 41 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  pArg;.  }else{. 
4b60: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
4b70: 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50   = 0;.    db->nP
4b80: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
4b90: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
4ba0: 73 41 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  sArg = 0;.  }.}.
4bb0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
4bc0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
4bd0: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
4be0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
4bf0: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
4c00: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
4c10: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
4c20: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
4c30: 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ing 0..*/.void s
4c40: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
4c50: 6f 75 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  out(sqlite *db, 
4c60: 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d  int ms){.  if( m
4c70: 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  s>0 ){.    sqlit
4c80: 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28  e3_busy_handler(
4c90: 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c  db, sqliteDefaul
4ca0: 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28  tBusyCallback, (
4cb0: 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c  void*)ms);.  }el
4cc0: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  se{.    sqlite3_
4cd0: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
4ce0: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f   0, 0);.  }.}../
4cf0: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
4d00: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
4d10: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
4d20: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
4d30: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
4d40: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
4d50: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64  sqlite *db){.  d
4d60: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
4d70: 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  TE_Interrupt;.}.
4d80: 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73  ./*.** Windows s
4d90: 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61  ystems should ca
4da0: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
4db0: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74  to free memory t
4dc0: 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  hat.** is return
4dd0: 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65  ed in the in the
4de0: 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65   errmsg paramete
4df0: 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70 65  r of sqlite3_ope
4e00: 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69  n() when.** SQLi
4e10: 74 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f  te is a DLL.  Fo
4e20: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69  r some reason, i
4e30: 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  t does not work 
4e40: 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a  to call free().*
4e50: 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a  * directly..**.*
4e60: 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e  * Note that we n
4e70: 65 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65  eed to call free
4e80: 28 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65  () not sqliteFre
4e90: 65 28 29 20 68 65 72 65 2c 20 73 69 6e 63 65 20  e() here, since 
4ea0: 65 76 65 72 79 0a 2a 2a 20 73 74 72 69 6e 67 20  every.** string 
4eb0: 74 68 61 74 20 69 73 20 65 78 70 6f 72 74 65 64  that is exported
4ec0: 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 73 68 6f   from SQLite sho
4ed0: 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79  uld have already
4ee0: 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
4ef0: 2a 2a 20 73 71 6c 69 74 65 33 53 74 72 52 65 61  ** sqlite3StrRea
4f00: 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  lloc()..*/.void 
4f10: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 63 68 61  sqlite3_free(cha
4f20: 72 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b 20  r *p){ free(p); 
4f30: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
4f40: 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69 6f  new user functio
4f50: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
4f60: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
4f70: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  on(.  sqlite3 *d
4f80: 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
4f90: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
4fa0: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
4fb0: 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 69 6e  t eTextRep,.  in
4fc0: 74 20 69 43 6f 6c 6c 61 74 65 41 72 67 2c 0a 20  t iCollateArg,. 
4fd0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
4fe0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  ,.  void (*xFunc
4ff0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
5000: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
5010: 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
5020: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
5030: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
5040: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
5050: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  ,.  void (*xFina
5060: 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  l)(sqlite3_conte
5070: 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65  xt*).){.  FuncDe
5080: 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d  f *p;.  int nNam
5090: 65 3b 0a 0a 20 20 69 66 28 20 28 64 62 3d 3d 30  e;..  if( (db==0
50a0: 20 7c 7c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d   || zFunctionNam
50b0: 65 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 53  e==0 || sqlite3S
50c0: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 29 20  afetyCheck(db)) 
50d0: 7c 7c 0a 20 20 20 20 20 20 28 78 46 75 6e 63 20  ||.      (xFunc 
50e0: 26 26 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78 53  && (xFinal || xS
50f0: 74 65 70 29 29 20 7c 7c 20 0a 20 20 20 20 20 20  tep)) || .      
5100: 28 21 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e  (!xFunc && (xFin
5110: 61 6c 20 26 26 20 21 78 53 74 65 70 29 29 20 7c  al && !xStep)) |
5120: 7c 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63 20  |.      (!xFunc 
5130: 26 26 20 28 21 78 46 69 6e 61 6c 20 26 26 20 78  && (!xFinal && x
5140: 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20  Step)) ||.      
5150: 28 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67  (nArg<-1 || nArg
5160: 3e 31 32 37 29 20 7c 7c 0a 20 20 20 20 20 20 28  >127) ||.      (
5170: 32 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74 72  255<(nName = str
5180: 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  len(zFunctionNam
5190: 65 29 29 29 20 29 7b 0a 20 20 20 20 72 65 74 75  e))) ){.    retu
51a0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
51b0: 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69  .  }..  p = sqli
51c0: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
51d0: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
51e0: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
51f0: 65 54 65 78 74 52 65 70 2c 20 31 29 3b 0a 20 20  eTextRep, 1);.  
5200: 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72  if( p==0 ) retur
5210: 6e 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20  n 1;.  p->xFunc 
5220: 3d 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e 78 53  = xFunc;.  p->xS
5230: 74 65 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 70  tep = xStep;.  p
5240: 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46  ->xFinalize = xF
5250: 69 6e 61 6c 3b 0a 20 20 70 2d 3e 70 55 73 65 72  inal;.  p->pUser
5260: 44 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61  Data = pUserData
5270: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
5280: 45 5f 4f 4b 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  E_OK;.}.int sqli
5290: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
52a0: 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33  ion16(.  sqlite3
52b0: 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f   *db,.  const vo
52c0: 69 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  id *zFunctionNam
52d0: 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  e,.  int nArg,. 
52e0: 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20   int eTextRep,. 
52f0: 20 69 6e 74 20 69 43 6f 6c 6c 61 74 65 41 72 67   int iCollateArg
5300: 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ,.  void *pUserD
5310: 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ata,.  void (*xF
5320: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
5330: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
5340: 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f  3_value**),.  vo
5350: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
5360: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
5370: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
5380: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
5390: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
53a0: 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72  ext*).){.  int r
53b0: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e 63  c;.  char *zFunc
53c0: 74 69 6f 6e 4e 61 6d 65 38 3b 0a 20 20 7a 46 75  tionName8;.  zFu
53d0: 6e 63 74 69 6f 6e 4e 61 6d 65 38 20 3d 20 73 71  nctionName8 = sq
53e0: 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a 46  lite3utf16to8(zF
53f0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31 2c  unctionName, -1,
5400: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
5410: 4e 29 3b 0a 20 20 69 66 28 20 21 7a 46 75 6e 63  N);.  if( !zFunc
5420: 74 69 6f 6e 4e 61 6d 65 38 20 29 7b 0a 20 20 20  tionName8 ){.   
5430: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
5440: 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  OMEM;.  }.  rc =
5450: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
5460: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75  function(db, zFu
5470: 6e 63 74 69 6f 6e 4e 61 6d 65 38 2c 20 6e 41 72  nctionName8, nAr
5480: 67 2c 20 65 54 65 78 74 52 65 70 2c 20 0a 20 20  g, eTextRep, .  
5490: 20 20 20 20 69 43 6f 6c 6c 61 74 65 41 72 67 2c      iCollateArg,
54a0: 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e   pUserData, xFun
54b0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
54c0: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
54d0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 29 3b  zFunctionName8);
54e0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
54f0: 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
5500: 61 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  a trace function
5510: 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d  .  The pArg from
5520: 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20   the previously 
5530: 72 65 67 69 73 74 65 72 65 64 20 74 72 61 63 65  registered trace
5540: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
5550: 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20    .**.** A NULL 
5560: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d  trace function m
5570: 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61  eans that no tra
5580: 63 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73  cing is executes
5590: 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a  .  A non-NULL.**
55a0: 20 74 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e   trace is a poin
55b0: 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ter to a functio
55c0: 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65  n that is invoke
55d0: 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f  d at the start o
55e0: 66 20 65 61 63 68 0a 2a 2a 20 73 71 6c 69 74 65  f each.** sqlite
55f0: 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 76 6f 69  3_exec()..*/.voi
5600: 64 20 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65  d *sqlite3_trace
5610: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 76 6f 69  (sqlite *db, voi
5620: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
5630: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20  *,const char*), 
5640: 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76  void *pArg){.  v
5650: 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e  oid *pOld = db->
5660: 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d  pTraceArg;.  db-
5670: 3e 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65  >xTrace = xTrace
5680: 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72  ;.  db->pTraceAr
5690: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
56a0: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a  rn pOld;.}../***
56b0: 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a   EXPERIMENTAL **
56c0: 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
56d0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62   a function to b
56e0: 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61  e invoked when a
56f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
5700: 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 65 69 74  ments..** If eit
5710: 68 65 72 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  her function ret
5720: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  urns non-zero, t
5730: 68 65 6e 20 74 68 65 20 63 6f 6d 6d 69 74 20 62  hen the commit b
5740: 65 63 6f 6d 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c  ecomes a.** roll
5750: 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  back..*/.void *s
5760: 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
5770: 6f 6b 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  ok(.  sqlite *db
5780: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
5790: 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f  /* Attach the ho
57a0: 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62  ok to this datab
57b0: 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ase */.  int (*x
57c0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
57d0: 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74  ,  /* Function t
57e0: 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20 65 61 63 68  o invoke on each
57f0: 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20 76 6f 69   commit */.  voi
5800: 64 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20  d *pArg         
5810: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
5820: 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  nt to the functi
5830: 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20  on */.){.  void 
5840: 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d  *pOld = db->pCom
5850: 6d 69 74 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43  mitArg;.  db->xC
5860: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20  ommitCallback = 
5870: 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d  xCallback;.  db-
5880: 3e 70 43 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41  >pCommitArg = pA
5890: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c  rg;.  return pOl
58a0: 64 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  d;.}.../*.** Thi
58b0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
58c0: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
58d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
58e0: 64 61 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a  database BTree.*
58f0: 2a 20 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46  * driver.  If zF
5900: 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e  ilename is the n
5910: 61 6d 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74  ame of a file, t
5920: 68 65 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73  hen that file is
5930: 0a 2a 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75  .** opened and u
5940: 73 65 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61  sed.  If zFilena
5950: 6d 65 20 69 73 20 74 68 65 20 6d 61 67 69 63 20  me is the magic 
5960: 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  name ":memory:" 
5970: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  then.** the data
5980: 62 61 73 65 20 69 73 20 73 74 6f 72 65 64 20 69  base is stored i
5990: 6e 20 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73  n memory (and is
59a0: 20 74 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20   thus forgotten 
59b0: 61 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68  as soon as.** th
59c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
59d0: 63 6c 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69  closed.)  If zFi
59e0: 6c 65 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74  lename is NULL t
59f0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
5a00: 0a 2a 2a 20 69 73 20 66 6f 72 20 74 65 6d 70 6f  .** is for tempo
5a10: 72 61 72 79 20 75 73 65 20 6f 6e 6c 79 20 61 6e  rary use only an
5a20: 64 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 20  d is deleted as 
5a30: 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e  soon as the conn
5a40: 65 63 74 69 6f 6e 0a 2a 2a 20 69 73 20 63 6c 6f  ection.** is clo
5a50: 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 65 6d  sed..**.** A tem
5a60: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20  porary database 
5a70: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20  can be either a 
5a80: 64 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20  disk file (that 
5a90: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
5aa0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e  .** deleted when
5ab0: 20 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f   the file is clo
5ac0: 73 65 64 29 20 6f 72 20 61 20 73 65 74 20 6f 66  sed) or a set of
5ad0: 20 72 65 64 2d 62 6c 61 63 6b 20 74 72 65 65 73   red-black trees
5ae0: 20 68 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 2c   held in memory,
5af0: 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  .** depending on
5b00: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74   the values of t
5b10: 68 65 20 54 45 4d 50 5f 53 54 4f 52 45 20 63 6f  he TEMP_STORE co
5b20: 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 63 72 6f  mpile-time macro
5b30: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 64 62 2d 3e   and the.** db->
5b40: 74 65 6d 70 5f 73 74 6f 72 65 20 76 61 72 69 61  temp_store varia
5b50: 62 6c 65 2c 20 61 63 63 6f 72 64 69 6e 67 20 74  ble, according t
5b60: 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
5b70: 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  chart:.**.**    
5b80: 20 20 20 54 45 4d 50 5f 53 54 4f 52 45 20 20 20     TEMP_STORE   
5b90: 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65    db->temp_store
5ba0: 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20 6f 66       Location of
5bb0: 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
5bc0: 61 73 65 0a 2a 2a 20 20 20 20 20 20 20 2d 2d 2d  ase.**       ---
5bd0: 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d  -------     ----
5be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d  ----------     -
5bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a  -------------.**
5c10: 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20             0    
5c20: 20 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20             any  
5c30: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
5c40: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20  **           1  
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
5c70: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31  e.**           1
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c90: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  2              m
5ca0: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
5cb0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
5cc0: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
5cd0: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
5ce0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
5cf0: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
5d00: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
5d10: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
5d20: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
5d30: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
5d40: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
5d50: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20              0   
5d60: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72             memor
5d70: 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 33  y.**           3
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
5d90: 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  ny             m
5da0: 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20 73 71 6c  emory.*/.int sql
5db0: 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79  ite3BtreeFactory
5dc0: 28 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  (.  const sqlite
5dd0: 20 2a 64 62 2c 09 20 20 20 20 2f 2a 20 4d 61 69   *db,.    /* Mai
5de0: 6e 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 20  n database when 
5df0: 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65  opening aux othe
5e00: 72 77 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e  rwise 0 */.  con
5e10: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
5e20: 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  me,    /* Name o
5e30: 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61  f the file conta
5e40: 69 6e 69 6e 67 20 74 68 65 20 42 54 72 65 65 20  ining the BTree 
5e50: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e  database */.  in
5e60: 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20  t omitJournal,  
5e70: 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52          /* if TR
5e80: 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  UE then do not j
5e90: 6f 75 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65  ournal this file
5ea0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65   */.  int nCache
5eb0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
5ec0: 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65  /* How many page
5ed0: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
5ee0: 63 68 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  che */.  Btree *
5ef0: 2a 70 70 42 74 72 65 65 20 20 20 20 20 20 20 20  *ppBtree        
5f00: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
5f10: 20 6e 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63   new Btree objec
5f20: 74 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  t written here *
5f30: 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74 72 65 65  /.){.  int btree
5f40: 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 0a 20  _flags = 0;.  . 
5f50: 20 61 73 73 65 72 74 28 20 70 70 42 74 72 65 65   assert( ppBtree
5f60: 20 21 3d 20 30 29 3b 0a 20 20 69 66 28 20 6f 6d   != 0);.  if( om
5f70: 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a 20 20 20  itJournal ){.   
5f80: 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20   btree_flags |= 
5f90: 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
5fa0: 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21 7a  AL;.  }.  if( !z
5fb0: 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
5fc0: 62 74 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20 42  btree_flags |= B
5fd0: 54 52 45 45 5f 4d 45 4d 4f 52 59 3b 0a 20 20 7d  TREE_MEMORY;.  }
5fe0: 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ..  return sqlit
5ff0: 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c  e3BtreeOpen(zFil
6000: 65 6e 61 6d 65 2c 20 70 70 42 74 72 65 65 2c 20  ename, ppBtree, 
6010: 6e 43 61 63 68 65 2c 20 62 74 72 65 65 5f 66 6c  nCache, btree_fl
6020: 61 67 73 2c 0a 20 20 20 20 20 20 26 64 62 2d 3e  ags,.      &db->
6030: 62 75 73 79 48 61 6e 64 6c 65 72 29 3b 0a 7d 0a  busyHandler);.}.
6040: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54  ./*.** Return UT
6050: 46 2d 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  F-8 encoded Engl
6060: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
6070: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
6080: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
6090: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  rror..*/.const c
60a0: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  har *sqlite3_err
60b0: 6d 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29  msg(sqlite3 *db)
60c0: 7b 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20  {.  if( !db ){. 
60d0: 20 20 20 2f 2a 20 49 66 20 64 62 20 69 73 20 4e     /* If db is N
60e0: 55 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75 6d 65  ULL, then assume
60f0: 20 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29   that a malloc()
6100: 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20 61   failed during a
6110: 6e 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  n.    ** sqlite3
6120: 5f 6f 70 65 6e 28 29 20 63 61 6c 6c 2e 0a 20 20  _open() call..  
6130: 20 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20    */.    return 
6140: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51  sqlite3ErrStr(SQ
6150: 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d  LITE_NOMEM);.  }
6160: 0a 20 20 69 66 28 20 64 62 2d 3e 7a 45 72 72 4d  .  if( db->zErrM
6170: 73 67 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  sg ){.    return
6180: 20 64 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   db->zErrMsg;.  
6190: 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  }.  return sqlit
61a0: 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72  e3ErrStr(db->err
61b0: 43 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Code);.}../*.** 
61c0: 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e  Return UTF-16 en
61d0: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
61e0: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
61f0: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
6200: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
6210: 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  */.const void *s
6220: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
6230: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
6240: 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 2f  if( !db ){.    /
6250: 2a 20 49 66 20 64 62 20 69 73 20 4e 55 4c 4c 2c  * If db is NULL,
6260: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
6270: 74 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  t a malloc() fai
6280: 6c 65 64 20 64 75 72 69 6e 67 20 61 6e 0a 20 20  led during an.  
6290: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65    ** sqlite3_ope
62a0: 6e 28 29 20 63 61 6c 6c 2e 20 57 65 20 68 61 76  n() call. We hav
62b0: 65 20 61 20 73 74 61 74 69 63 20 76 65 72 73 69  e a static versi
62c0: 6f 6e 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  on of the string
62d0: 20 0a 20 20 20 20 2a 2a 20 22 6f 75 74 20 6f 66   .    ** "out of
62e0: 20 6d 65 6d 6f 72 79 22 20 65 6e 63 6f 64 65 64   memory" encoded
62f0: 20 75 73 69 6e 67 20 55 54 46 2d 31 36 20 6a 75   using UTF-16 ju
6300: 73 74 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  st for this purp
6310: 6f 73 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ose..    **.    
6320: 2a 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74  ** Because all t
6330: 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  he characters in
6340: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
6350: 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  in the unicode. 
6360: 20 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30     ** range 0x00
6370: 2d 30 78 46 46 2c 20 69 66 20 77 65 20 70 61 64  -0xFF, if we pad
6380: 20 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   the big-endian 
6390: 73 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20  string with a . 
63a0: 20 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c     ** zero byte,
63b0: 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74   we can obtain t
63c0: 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e  he little-endian
63d0: 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20 20 20   string with.   
63e0: 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b   ** &big_endian[
63f0: 31 5d 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  1]..    */.    s
6400: 74 61 74 69 63 20 63 68 61 72 20 6f 75 74 4f 66  tatic char outOf
6410: 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  MemBe[] = {.    
6420: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
6430: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
6440: 2c 20 0a 20 20 20 20 20 20 30 2c 20 27 6f 27 2c  , .      0, 'o',
6450: 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c   0, 'f', 0, ' ',
6460: 20 0a 20 20 20 20 20 20 30 2c 20 27 6d 27 2c 20   .      0, 'm', 
6470: 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20  0, 'e', 0, 'm', 
6480: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20  0, 'o', 0, 'r', 
6490: 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a  0, 'y', 0, 0, 0.
64a0: 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69      };.    stati
64b0: 63 20 63 68 61 72 20 2a 6f 75 74 4f 66 4d 65 6d  c char *outOfMem
64c0: 4c 65 20 3d 20 26 6f 75 74 4f 66 4d 65 6d 42 65  Le = &outOfMemBe
64d0: 5b 31 5d 3b 0a 0a 20 20 20 20 69 66 28 20 53 51  [1];..    if( SQ
64e0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 29  LITE_BIGENDIAN )
64f0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
6500: 76 6f 69 64 20 2a 29 6f 75 74 4f 66 4d 65 6d 42  void *)outOfMemB
6510: 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
6520: 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64      return (void
6530: 20 2a 29 6f 75 74 4f 66 4d 65 6d 4c 65 3b 0a 20   *)outOfMemLe;. 
6540: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 21     }.  }.  if( !
6550: 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20 29 7b  db->zErrMsg16 ){
6560: 0a 20 20 20 20 63 68 61 72 20 63 6f 6e 73 74 20  .    char const 
6570: 2a 7a 45 72 72 38 20 3d 20 73 71 6c 69 74 65 33  *zErr8 = sqlite3
6580: 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20 20  _errmsg(db);.   
6590: 20 69 66 28 20 53 51 4c 49 54 45 5f 42 49 47 45   if( SQLITE_BIGE
65a0: 4e 44 49 41 4e 20 29 7b 0a 20 20 20 20 20 20 64  NDIAN ){.      d
65b0: 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20 3d 20 73  b->zErrMsg16 = s
65c0: 71 6c 69 74 65 33 75 74 66 38 74 6f 31 36 62 65  qlite3utf8to16be
65d0: 28 7a 45 72 72 38 2c 20 2d 31 29 3b 0a 20 20 20  (zErr8, -1);.   
65e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
65f0: 2d 3e 7a 45 72 72 4d 73 67 31 36 20 3d 20 73 71  ->zErrMsg16 = sq
6600: 6c 69 74 65 33 75 74 66 38 74 6f 31 36 6c 65 28  lite3utf8to16le(
6610: 7a 45 72 72 38 2c 20 2d 31 29 3b 0a 20 20 20 20  zErr8, -1);.    
6620: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64  }.  }.  return d
6630: 62 2d 3e 7a 45 72 72 4d 73 67 31 36 3b 0a 7d 0a  b->zErrMsg16;.}.
6640: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72  .int sqlite3_err
6650: 63 6f 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62  code(sqlite3 *db
6660: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
6670: 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  errCode;.}../*.*
6680: 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65 20 55 54  * Compile the UT
6690: 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20  F-8 encoded SQL 
66a0: 73 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69  statement zSql i
66b0: 6e 74 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20  nto a statement 
66c0: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
66d0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 0a  qlite3_prepare(.
66e0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
6700: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
6710: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
6720: 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f  *zSql,         /
6730: 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  * UTF-8 encoded 
6740: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a  SQL statement. *
6750: 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20  /.  int nBytes, 
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6770: 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20   Length of zSql 
6780: 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73  in bytes. */.  s
6790: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70  qlite3_stmt **pp
67a0: 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a  Stmt,    /* OUT:
67b0: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
67c0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
67d0: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
67e0: 63 68 61 72 2a 2a 20 70 7a 54 61 69 6c 20 20 20  char** pzTail   
67f0: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20      /* OUT: End 
6800: 6f 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67  of parsed string
6810: 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73   */.){.  Parse s
6820: 50 61 72 73 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Parse;.  char *z
6830: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 6e  ErrMsg = 0;.  in
6840: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
6850: 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
6860: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
6870: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6880: 4d 49 53 55 53 45 3b 0a 20 20 20 20 67 6f 74 6f  MISUSE;.    goto
6890: 20 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20   prepare_out;.  
68a0: 7d 0a 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64  }..  if( db->pVd
68b0: 62 65 3d 3d 30 20 29 7b 20 64 62 2d 3e 6e 43 68  be==0 ){ db->nCh
68c0: 61 6e 67 65 20 3d 20 30 3b 20 7d 0a 20 20 6d 65  ange = 0; }.  me
68d0: 6d 73 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c  mset(&sParse, 0,
68e0: 20 73 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29   sizeof(sParse))
68f0: 3b 0a 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20  ;.  sParse.db = 
6900: 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 52 75 6e  db;.  sqlite3Run
6910: 50 61 72 73 65 72 28 26 73 50 61 72 73 65 2c 20  Parser(&sParse, 
6920: 7a 53 71 6c 2c 20 26 7a 45 72 72 4d 73 67 29 3b  zSql, &zErrMsg);
6930: 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  ..  if( db->xTra
6940: 63 65 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e  ce && !db->init.
6950: 62 75 73 79 20 29 7b 0a 20 20 20 20 2f 2a 20 54  busy ){.    /* T
6960: 72 61 63 65 20 6f 6e 6c 79 20 74 68 65 20 73 74  race only the st
6970: 61 74 6d 65 6e 74 20 74 68 61 74 20 77 61 73 20  atment that was 
6980: 63 6f 6d 70 69 6c 65 64 2e 0a 20 20 20 20 2a 2a  compiled..    **
6990: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
69a0: 74 68 61 74 20 70 61 72 74 20 6f 66 20 74 68 65  that part of the
69b0: 20 53 51 4c 20 73 74 72 69 6e 67 20 73 69 6e 63   SQL string sinc
69c0: 65 20 7a 53 51 4c 20 69 73 20 63 6f 6e 73 74 0a  e zSQL is const.
69d0: 20 20 20 20 2a 2a 20 61 6e 64 20 77 65 20 6d 75      ** and we mu
69e0: 73 74 20 70 61 73 73 20 61 20 7a 65 72 6f 20 74  st pass a zero t
69f0: 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
6a00: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
6a10: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 54 68  nction.    ** Th
6a20: 65 20 63 6f 70 79 20 69 73 20 75 6e 6e 65 63 65  e copy is unnece
6a30: 73 73 61 72 79 20 69 66 20 74 68 65 20 74 61 69  ssary if the tai
6a40: 6c 20 70 6f 69 6e 74 65 72 20 69 73 20 70 6f 69  l pointer is poi
6a50: 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 20 20 20  nting at the.   
6a60: 20 2a 2a 20 62 65 67 69 6e 6e 69 67 20 6f 72 20   ** beginnig or 
6a70: 65 6e 64 20 6f 66 20 74 68 65 20 53 51 4c 20 73  end of the SQL s
6a80: 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20  tring..    */.  
6a90: 20 20 69 66 28 20 73 50 61 72 73 65 2e 7a 54 61    if( sParse.zTa
6aa0: 69 6c 20 26 26 20 73 50 61 72 73 65 2e 7a 54 61  il && sParse.zTa
6ab0: 69 6c 21 3d 7a 53 71 6c 20 26 26 20 2a 73 50 61  il!=zSql && *sPa
6ac0: 72 73 65 2e 7a 54 61 69 6c 20 29 7b 0a 20 20 20  rse.zTail ){.   
6ad0: 20 20 20 63 68 61 72 20 2a 74 6d 70 53 71 6c 20     char *tmpSql 
6ae0: 3d 20 73 71 6c 69 74 65 53 74 72 4e 44 75 70 28  = sqliteStrNDup(
6af0: 7a 53 71 6c 2c 20 73 50 61 72 73 65 2e 7a 54 61  zSql, sParse.zTa
6b00: 69 6c 20 2d 20 7a 53 71 6c 29 3b 0a 20 20 20 20  il - zSql);.    
6b10: 20 20 69 66 28 20 74 6d 70 53 71 6c 20 29 7b 0a    if( tmpSql ){.
6b20: 20 20 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61          db->xTra
6b30: 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
6b40: 2c 20 74 6d 70 53 71 6c 29 3b 0a 20 20 20 20 20  , tmpSql);.     
6b50: 20 20 20 66 72 65 65 28 74 6d 70 53 71 6c 29 3b     free(tmpSql);
6b60: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6b70: 20 20 20 20 20 20 2f 2a 20 49 66 20 61 20 6d 65        /* If a me
6b80: 6d 6f 72 79 20 65 72 72 6f 72 20 6f 63 63 75 72  mory error occur
6b90: 72 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 63  red during the c
6ba0: 6f 70 79 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  opy,.        ** 
6bb0: 74 72 61 63 65 20 65 6e 74 69 72 65 20 53 51 4c  trace entire SQL
6bc0: 20 73 74 72 69 6e 67 20 61 6e 64 20 66 61 6c 6c   string and fall
6bd0: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 0a   through to the.
6be0: 20 20 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74          ** sqlit
6bf0: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
6c00: 20 74 65 73 74 20 74 6f 20 72 65 70 6f 72 74 20   test to report 
6c10: 74 68 65 20 65 72 72 6f 72 2e 0a 20 20 20 20 20  the error..     
6c20: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 64 62     */.        db
6c30: 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
6c40: 61 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a  aceArg, zSql); .
6c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
6c60: 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72  e{.      db->xTr
6c70: 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
6c80: 67 2c 20 7a 53 71 6c 29 3b 20 0a 20 20 20 20 7d  g, zSql); .    }
6c90: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 71 6c 69  .  }..  if( sqli
6ca0: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
6cb0: 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
6cc0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
6cd0: 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
6ce0: 6c 6c 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  ll(db);.    sqli
6cf0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
6d00: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
6d10: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
6d20: 7e 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b  ~SQLITE_InTrans;
6d30: 0a 20 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72  .    goto prepar
6d40: 65 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28  e_out;.  }.  if(
6d50: 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49   sParse.rc==SQLI
6d60: 54 45 5f 44 4f 4e 45 20 29 20 73 50 61 72 73 65  TE_DONE ) sParse
6d70: 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
6d80: 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63  .  if( sParse.rc
6d90: 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  ==SQLITE_SCHEMA 
6da0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
6db0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
6dc0: 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  a(db, 0);.  }.  
6dd0: 61 73 73 65 72 74 28 20 70 70 53 74 6d 74 20 29  assert( ppStmt )
6de0: 3b 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 28 73  ;.  *ppStmt = (s
6df0: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73 50 61  qlite3_stmt*)sPa
6e00: 72 73 65 2e 70 56 64 62 65 3b 0a 20 20 69 66 28  rse.pVdbe;.  if(
6e10: 20 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61 69   pzTail ) *pzTai
6e20: 6c 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69 6c  l = sParse.zTail
6e30: 3b 0a 20 20 72 63 20 3d 20 73 50 61 72 73 65 2e  ;.  rc = sParse.
6e40: 72 63 3b 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53  rc;..  if( rc==S
6e50: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 50 61 72  QLITE_OK && sPar
6e60: 73 65 2e 70 56 64 62 65 20 26 26 20 73 50 61 72  se.pVdbe && sPar
6e70: 73 65 2e 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20  se.explain ){.  
6e80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6e90: 4e 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e 70  NumCols(sParse.p
6ea0: 56 64 62 65 2c 20 35 29 3b 0a 20 20 20 20 73 71  Vdbe, 5);.    sq
6eb0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
6ec0: 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65  ame(sParse.pVdbe
6ed0: 2c 20 30 2c 20 22 61 64 64 72 22 2c 20 50 33 5f  , 0, "addr", P3_
6ee0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
6ef0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
6f00: 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c  me(sParse.pVdbe,
6f10: 20 31 2c 20 22 6f 70 63 6f 64 65 22 2c 20 50 33   1, "opcode", P3
6f20: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
6f30: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
6f40: 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65  ame(sParse.pVdbe
6f50: 2c 20 32 2c 20 22 70 31 22 2c 20 50 33 5f 53 54  , 2, "p1", P3_ST
6f60: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
6f70: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
6f80: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 33  (sParse.pVdbe, 3
6f90: 2c 20 22 70 32 22 2c 20 50 33 5f 53 54 41 54 49  , "p2", P3_STATI
6fa0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
6fb0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50  dbeSetColName(sP
6fc0: 61 72 73 65 2e 70 56 64 62 65 2c 20 34 2c 20 22  arse.pVdbe, 4, "
6fd0: 70 33 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  p3", P3_STATIC);
6fe0: 0a 20 20 7d 20 0a 0a 70 72 65 70 61 72 65 5f 6f  .  } ..prepare_o
6ff0: 75 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  ut:.  if( sqlite
7000: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
7010: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
7020: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
7030: 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20  if( zErrMsg ){. 
7040: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
7050: 64 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45  db, rc, "%s", zE
7060: 72 72 4d 73 67 29 3b 0a 20 20 7d 65 6c 73 65 7b  rrMsg);.  }else{
7070: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
7080: 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20  r(db, rc, 0);.  
7090: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
70a0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20  ../*.** Compile 
70b0: 74 68 65 20 55 54 46 2d 31 36 20 65 6e 63 6f 64  the UTF-16 encod
70c0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
70d0: 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61   zSql into a sta
70e0: 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a  tement handle..*
70f0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72  /.int sqlite3_pr
7100: 65 70 61 72 65 31 36 28 0a 20 20 73 71 6c 69 74  epare16(.  sqlit
7110: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
7120: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
7130: 20 68 61 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63   handle. */ .  c
7140: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c  onst void *zSql,
7150: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d           /* UTF-
7160: 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74  8 encoded SQL st
7170: 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e  atement. */.  in
7180: 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20  t nBytes,       
7190: 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
71a0: 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74  h of zSql in byt
71b0: 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  es. */.  sqlite3
71c0: 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20  _stmt **ppStmt, 
71d0: 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69     /* OUT: A poi
71e0: 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70  nter to the prep
71f0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a  ared statement *
7200: 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  /.  const void *
7210: 2a 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a  *pzTail       /*
7220: 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72   OUT: End of par
7230: 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b  sed string */.){
7240: 0a 20 20 2f 2a 20 54 68 69 73 20 66 75 6e 63 74  .  /* This funct
7250: 69 6f 6e 20 63 75 72 72 65 6e 74 6c 79 20 77 6f  ion currently wo
7260: 72 6b 73 20 62 79 20 66 69 72 73 74 20 74 72 61  rks by first tra
7270: 6e 73 66 6f 72 6d 69 6e 67 20 74 68 65 20 55 54  nsforming the UT
7280: 46 2d 31 36 0a 20 20 2a 2a 20 65 6e 63 6f 64 65  F-16.  ** encode
7290: 64 20 73 74 72 69 6e 67 20 74 6f 20 55 54 46 2d  d string to UTF-
72a0: 38 2c 20 74 68 65 6e 20 69 6e 76 6f 6b 69 6e 67  8, then invoking
72b0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
72c0: 28 29 2e 20 54 68 65 0a 20 20 2a 2a 20 74 72 69  (). The.  ** tri
72d0: 63 6b 79 20 62 69 74 20 69 73 20 66 69 67 75 72  cky bit is figur
72e0: 69 6e 67 20 6f 75 74 20 74 68 65 20 70 6f 69 6e  ing out the poin
72f0: 74 65 72 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  ter to return in
7300: 20 2a 70 7a 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20   *pzTail..  */. 
7310: 20 63 68 61 72 20 2a 7a 53 71 6c 38 20 3d 20 30   char *zSql8 = 0
7320: 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ;.  char const *
7330: 7a 54 61 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e  zTail8 = 0;.  in
7340: 74 20 72 63 3b 0a 0a 20 20 7a 53 71 6c 38 20 3d  t rc;..  zSql8 =
7350: 20 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38   sqlite3utf16to8
7360: 28 7a 53 71 6c 2c 20 6e 42 79 74 65 73 2c 20 53  (zSql, nBytes, S
7370: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 29  QLITE_BIGENDIAN)
7380: 3b 0a 20 20 69 66 28 20 21 7a 53 71 6c 38 20 29  ;.  if( !zSql8 )
7390: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
73a0: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f  or(db, SQLITE_NO
73b0: 4d 45 4d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MEM, 0);.    ret
73c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
73d0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
73e0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c  ite3_prepare(db,
73f0: 20 7a 53 71 6c 38 2c 20 2d 31 2c 20 70 70 53 74   zSql8, -1, ppSt
7400: 6d 74 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 0a 20  mt, &zTail8);.. 
7410: 20 69 66 28 20 7a 54 61 69 6c 38 20 26 26 20 70   if( zTail8 && p
7420: 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  zTail ){.    /* 
7430: 49 66 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  If sqlite3_prepa
7440: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 61 69  re returns a tai
7450: 6c 20 70 6f 69 6e 74 65 72 2c 20 77 65 20 63 61  l pointer, we ca
7460: 6c 63 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20  lculate the.    
7470: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f  ** equivalent po
7480: 69 6e 74 65 72 20 69 6e 74 6f 20 74 68 65 20 55  inter into the U
7490: 54 46 2d 31 36 20 73 74 72 69 6e 67 20 62 79 20  TF-16 string by 
74a0: 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 75 6e 69  counting the uni
74b0: 63 6f 64 65 0a 20 20 20 20 2a 2a 20 63 68 61 72  code.    ** char
74c0: 61 63 74 65 72 73 20 62 65 74 77 65 65 6e 20 7a  acters between z
74d0: 53 71 6c 38 20 61 6e 64 20 7a 54 61 69 6c 38 2c  Sql8 and zTail8,
74e0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
74f0: 69 6e 67 20 61 20 70 6f 69 6e 74 65 72 0a 20 20  ing a pointer.  
7500: 20 20 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 75    ** the same nu
7510: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
7520: 72 73 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d  rs into the UTF-
7530: 31 36 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a  16 string..    *
7540: 2f 0a 20 20 20 20 69 6e 74 20 63 68 61 72 73 5f  /.    int chars_
7550: 70 61 72 73 65 64 20 3d 20 73 71 6c 69 74 65 33  parsed = sqlite3
7560: 75 74 66 38 43 68 61 72 4c 65 6e 28 7a 53 71 6c  utf8CharLen(zSql
7570: 38 2c 20 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29  8, zTail8-zSql8)
7580: 3b 0a 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20  ;.    *pzTail = 
7590: 28 75 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c  (u8 *)zSql + sql
75a0: 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e  ite3utf16ByteLen
75b0: 28 7a 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72  (zSql, chars_par
75c0: 73 65 64 29 3b 0a 20 20 7d 0a 20 0a 20 20 72 65  sed);.  }. .  re
75d0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
75e0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64  * This routine d
75f0: 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
7600: 6f 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61  opening a databa
7610: 73 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a  se on behalf of.
7620: 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  ** sqlite3_open(
7630: 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70  ) and sqlite3_op
7640: 65 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74 61  en16(). The data
7650: 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a  base filename "z
7660: 46 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69  Filename"  .** i
7670: 73 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e  s UTF-8 encoded.
7680: 20 54 68 65 20 66 6f 75 72 74 68 20 61 72 67 75   The fourth argu
7690: 6d 65 6e 74 2c 20 22 64 65 66 5f 65 6e 63 22 20  ment, "def_enc" 
76a0: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 54 45  is one of the TE
76b0: 58 54 5f 2a 0a 2a 2a 20 6d 61 63 72 6f 73 20 66  XT_*.** macros f
76c0: 72 6f 6d 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e  rom sqliteInt.h.
76d0: 20 49 66 20 77 65 20 65 6e 64 20 75 70 20 63 72   If we end up cr
76e0: 65 61 74 69 6e 67 20 61 20 6e 65 77 20 64 61 74  eating a new dat
76f0: 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 28 6e  abase file.** (n
7700: 6f 74 20 6f 70 65 6e 69 6e 67 20 61 6e 20 65 78  ot opening an ex
7710: 69 73 74 69 6e 67 20 6f 6e 65 29 2c 20 74 68 65  isting one), the
7720: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f   text encoding o
7730: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
7740: 2a 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  * will be set to
7750: 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 2a 2f 0a   this value..*/.
7760: 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44  static int openD
7770: 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74  atabase(.  const
7780: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
7790: 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69  , /* Database fi
77a0: 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63  lename UTF-8 enc
77b0: 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  oded */.  sqlite
77c0: 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20  3 **ppDb        
77d0: 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65   /* OUT: Returne
77e0: 64 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  d database handl
77f0: 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  e */.){.  sqlite
7800: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c  3 *db;.  int rc,
7810: 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   i;.  char *zErr
7820: 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 41  Msg = 0;..  /* A
7830: 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69  llocate the sqli
7840: 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72  te data structur
7850: 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69  e */.  db = sqli
7860: 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66  teMalloc( sizeof
7870: 28 73 71 6c 69 74 65 29 20 29 3b 0a 20 20 69 66  (sqlite) );.  if
7880: 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f  ( db==0 ) goto o
7890: 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d  pendb_out;.  db-
78a0: 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d  >priorNewRowid =
78b0: 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   0;.  db->magic 
78c0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  = SQLITE_MAGIC_B
78d0: 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d  USY;.  db->nDb =
78e0: 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20   2;.  db->aDb = 
78f0: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20  db->aDbStatic;. 
7900: 20 64 62 2d 3e 65 6e 63 20 3d 20 54 45 58 54 5f   db->enc = TEXT_
7910: 55 74 66 38 3b 0a 20 20 64 62 2d 3e 61 75 74 6f  Utf8;.  db->auto
7920: 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 2f 2a  Commit = 1;.  /*
7930: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
7940: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
7950: 65 73 3b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  es; */.  sqlite3
7960: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 46  HashInit(&db->aF
7970: 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  unc, SQLITE_HASH
7980: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73  _STRING, 0);.  s
7990: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
79a0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51  db->aCollSeq, SQ
79b0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
79c0: 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  , 0);.  for(i=0;
79d0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
79e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73  {.    sqlite3Has
79f0: 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69  hInit(&db->aDb[i
7a00: 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54  ].tblHash, SQLIT
7a10: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
7a20: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  );.    sqlite3Ha
7a30: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
7a40: 69 5d 2e 69 64 78 48 61 73 68 2c 20 53 51 4c 49  i].idxHash, SQLI
7a50: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
7a60: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
7a70: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
7a80: 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c 20 53 51  [i].trigHash, SQ
7a90: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
7aa0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
7ab0: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
7ac0: 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51 4c  Db[i].aFKey, SQL
7ad0: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
7ae0: 20 31 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a   1);.  }.  .  /*
7af0: 20 41 64 64 20 74 68 65 20 64 65 66 61 75 6c 74   Add the default
7b00: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
7b10: 6e 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41  nce BINARY. BINA
7b20: 52 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  RY works for bot
7b30: 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64  h UTF-8.  ** and
7b40: 20 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20   UTF-16, so add 
7b50: 61 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61  a version for ea
7b60: 63 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20  ch to avoid any 
7b70: 75 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a  unnecessary.  **
7b80: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68   conversions. Th
7b90: 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61  e only error tha
7ba0: 74 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65  t can occur here
7bb0: 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   is a malloc() f
7bc0: 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 73  ailure..  */.  s
7bd0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
7be0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e  llation(db, "BIN
7bf0: 41 52 59 22 2c 20 30 2c 20 30 2c 20 62 69 6e 61  ARY", 0, 0, bina
7c00: 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29  ryCollatingFunc)
7c10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61  ;.  sqlite3_crea
7c20: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
7c30: 20 22 42 49 4e 41 52 59 22 2c 20 31 2c 20 30 2c   "BINARY", 1, 0,
7c40: 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67   binaryCollating
7c50: 46 75 6e 63 29 3b 0a 20 20 64 62 2d 3e 70 44 66  Func);.  db->pDf
7c60: 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33  ltColl = sqlite3
7c70: 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20  FindCollSeq(db, 
7c80: 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 3b  "BINARY", 6, 0);
7c90: 0a 20 20 69 66 28 20 21 64 62 2d 3e 70 44 66 6c  .  if( !db->pDfl
7ca0: 74 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 72 63 20  tColl ){.    rc 
7cb0: 3d 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 20  = db->errCode;. 
7cc0: 20 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53     assert( rc!=S
7cd0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
7ce0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
7cf0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
7d00: 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62  .    goto opendb
7d10: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
7d20: 41 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38  Also add a UTF-8
7d30: 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
7d40: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
7d50: 65 6e 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ence. */.  sqlit
7d60: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
7d70: 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22  ion(db, "NOCASE"
7d80: 2c 20 30 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f  , 0, 0, nocaseCo
7d90: 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20  llatingFunc);.. 
7da0: 20 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63   /* Open the bac
7db0: 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20 64 72  kend database dr
7dc0: 69 76 65 72 20 2a 2f 0a 20 20 69 66 28 20 7a 46  iver */.  if( zF
7dd0: 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 27 3a 27 20  ilename[0]==':' 
7de0: 26 26 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e  && strcmp(zFilen
7df0: 61 6d 65 2c 22 3a 6d 65 6d 6f 72 79 3a 22 29 3d  ame,":memory:")=
7e00: 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 74 65  =0 ){.    db->te
7e10: 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20  mp_store = 2;.  
7e20: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7e30: 42 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c  BtreeFactory(db,
7e40: 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d   zFilename, 0, M
7e50: 41 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61  AX_PAGES, &db->a
7e60: 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66  Db[0].pBt);.  if
7e70: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
7e80: 29 7b 0a 20 20 20 20 2f 2a 20 46 49 58 20 4d 45  ){.    /* FIX ME
7e90: 3a 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  : sqlite3BtreeFa
7ea0: 63 74 6f 72 79 28 29 20 73 68 6f 75 6c 64 20 63  ctory() should c
7eb0: 61 6c 6c 20 73 71 6c 69 74 65 33 45 72 72 6f 72  all sqlite3Error
7ec0: 28 29 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  (). */.    sqlit
7ed0: 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20  e3Error(db, rc, 
7ee0: 30 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69  0);.    db->magi
7ef0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
7f00: 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74  _CLOSED;.    got
7f10: 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20  o opendb_out;.  
7f20: 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a  }.  db->aDb[0].z
7f30: 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20  Name = "main";. 
7f40: 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d   db->aDb[1].zNam
7f50: 65 20 3d 20 22 74 65 6d 70 22 3b 0a 0a 20 20 2f  e = "temp";..  /
7f60: 2a 20 52 65 67 69 73 74 65 72 20 61 6c 6c 20 62  * Register all b
7f70: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
7f80: 73 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 61 74  s, but do not at
7f90: 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68  tempt to read th
7fa0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
7fb0: 73 63 68 65 6d 61 20 79 65 74 2e 20 54 68 69 73  schema yet. This
7fc0: 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69   is delayed unti
7fd0: 6c 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  l the first time
7fe0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
7ff0: 2a 2a 20 69 73 20 61 63 63 65 73 73 65 64 2e 0a  ** is accessed..
8000: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 52 65    */.  sqlite3Re
8010: 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
8020: 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20 69 66  ctions(db);.  if
8030: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
8040: 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
8050: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
8060: 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  OPEN;.  }else{. 
8070: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
8080: 64 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45  db, rc, "%s", zE
8090: 72 72 4d 73 67 2c 20 30 29 3b 0a 20 20 20 20 69  rrMsg, 0);.    i
80a0: 66 28 20 7a 45 72 72 4d 73 67 20 29 20 73 71 6c  f( zErrMsg ) sql
80b0: 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29  iteFree(zErrMsg)
80c0: 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  ;.    db->magic 
80d0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  = SQLITE_MAGIC_C
80e0: 4c 4f 53 45 44 3b 0a 20 20 7d 0a 0a 6f 70 65 6e  LOSED;.  }..open
80f0: 64 62 5f 6f 75 74 3a 0a 20 20 2a 70 70 44 62 20  db_out:.  *ppDb 
8100: 3d 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20 73  = db;.  return s
8110: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
8120: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  b);.}../*.** Ope
8130: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
8140: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
8150: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20  sqlite3_open(.  
8160: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
8170: 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65  ename, .  sqlite
8180: 33 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72  3 **ppDb .){.  r
8190: 65 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61  eturn openDataba
81a0: 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70  se(zFilename, pp
81b0: 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  Db);.}../*.** Op
81c0: 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
81d0: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  e handle..*/.int
81e0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
81f0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
8200: 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
8210: 69 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20  ite3 **ppDb.){. 
8220: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
8230: 38 3b 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d  8;   /* zFilenam
8240: 65 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46  e encoded in UTF
8250: 2d 38 20 69 6e 73 74 65 61 64 20 6f 66 20 55 54  -8 instead of UT
8260: 46 2d 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63  F-16 */.  int rc
8270: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70 44  ;..  assert( ppD
8280: 62 20 29 3b 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d  b );..  zFilenam
8290: 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  e8 = sqlite3utf1
82a0: 36 74 6f 38 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  6to8(zFilename, 
82b0: 2d 31 2c 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  -1, SQLITE_BIGEN
82c0: 44 49 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a 46  DIAN);.  if( !zF
82d0: 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20  ilename8 ){.    
82e0: 2a 70 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 72  *ppDb = 0;.    r
82f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
8300: 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 6f  EM;.  }.  rc = o
8310: 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c  penDatabase(zFil
8320: 65 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20  ename8, ppDb);. 
8330: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8340: 4f 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a 20  OK && *ppDb ){. 
8350: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
8360: 2a 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65  *ppDb, "PRAGMA e
8370: 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31  ncoding = 'UTF-1
8380: 36 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  6'", 0, 0, 0);. 
8390: 20 7d 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28   }.  sqliteFree(
83a0: 7a 46 69 6c 65 6e 61 6d 65 38 29 3b 0a 0a 20 20  zFilename8);..  
83b0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
83c0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
83d0: 67 20 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f  g routine destro
83e0: 79 73 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63  ys a virtual mac
83f0: 68 69 6e 65 20 74 68 61 74 20 69 73 20 63 72 65  hine that is cre
8400: 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73  ated by.** the s
8410: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29  qlite3_compile()
8420: 20 72 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e   routine. The in
8430: 74 65 67 65 72 20 72 65 74 75 72 6e 65 64 20 69  teger returned i
8440: 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20  s an SQLITE_.** 
8450: 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20  success/failure 
8460: 63 6f 64 65 20 74 68 61 74 20 64 65 73 63 72 69  code that descri
8470: 62 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  bes the result o
8480: 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  f executing the 
8490: 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
84a0: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  ne..**.** This r
84b0: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
84c0: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73  error code and s
84d0: 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
84e0: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72  y.** sqlite3_err
84f0: 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f  code(), sqlite3_
8500: 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c  errmsg() and sql
8510: 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e  ite3_errmsg16().
8520: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8530: 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33  finalize(sqlite3
8540: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
8550: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
8560: 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62  dbeFinalize((Vdb
8570: 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 7d 0a  e*)pStmt, 0);.}.
8580: 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65  ./*.** Terminate
8590: 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65   the current exe
85a0: 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  cution of an SQL
85b0: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
85c0: 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20  eset it.** back 
85d0: 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20  to its starting 
85e0: 73 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74  state so that it
85f0: 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20   can be reused. 
8600: 41 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66  A success code f
8610: 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72  rom.** the prior
8620: 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65   execution is re
8630: 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  turned..**.** Th
8640: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
8650: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  the error code a
8660: 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  nd string return
8670: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
8680: 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69  _errcode(), sqli
8690: 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64  te3_errmsg() and
86a0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31   sqlite3_errmsg1
86b0: 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  6()..*/.int sqli
86c0: 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65  te3_reset(sqlite
86d0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
86e0: 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69 74    int rc = sqlit
86f0: 65 33 56 64 62 65 52 65 73 65 74 28 28 56 64 62  e3VdbeReset((Vdb
8700: 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  e*)pStmt, 0);.  
8710: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
8720: 65 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d  eady((Vdbe*)pStm
8730: 74 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 72 65 74  t, -1, 0);.  ret
8740: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74 20 73  urn rc;.}..int s
8750: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
8760: 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  llation(.  sqlit
8770: 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3* db, .  const
8780: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20   char *zName, . 
8790: 20 69 6e 74 20 70 72 65 66 31 36 2c 20 0a 20 20   int pref16, .  
87a0: 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e  void* pCtx,.  in
87b0: 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69  t(*xCompare)(voi
87c0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
87d0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
87e0: 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65 71  d*).){.  CollSeq
87f0: 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20 72   *pColl;.  int r
8800: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
8810: 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33   pColl = sqlite3
8820: 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20  FindCollSeq(db, 
8830: 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e  zName, strlen(zN
8840: 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66 28 20  ame), 1);.  if( 
8850: 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 72  0==pColl ){.   r
8860: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
8870: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 72  ;.  }else if( pr
8880: 65 66 31 36 20 29 7b 0a 20 20 20 20 70 43 6f 6c  ef16 ){.    pCol
8890: 6c 2d 3e 78 43 6d 70 31 36 20 3d 20 78 43 6f 6d  l->xCmp16 = xCom
88a0: 70 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d  pare;.    pColl-
88b0: 3e 70 55 73 65 72 31 36 20 3d 20 70 43 74 78 3b  >pUser16 = pCtx;
88c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
88d0: 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d  oll->xCmp = xCom
88e0: 70 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d  pare;.    pColl-
88f0: 3e 70 55 73 65 72 20 3d 20 70 43 74 78 3b 0a 20  >pUser = pCtx;. 
8900: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f   }.  sqlite3Erro
8910: 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20  r(db, rc, 0);.  
8920: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8930: 3b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  ;.}..int sqlite3
8940: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
8950: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  n16(.  sqlite3* 
8960: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
8970: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
8980: 20 70 72 65 66 31 36 2c 20 0a 20 20 76 6f 69 64   pref16, .  void
8990: 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78  * pCtx,.  int(*x
89a0: 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69  Compare)(void*,i
89b0: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69  nt,const void*,i
89c0: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a  nt,const void*).
89d0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  ){.  int rc;.  c
89e0: 68 61 72 20 2a 7a 4e 61 6d 65 38 20 3d 20 73 71  har *zName8 = sq
89f0: 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a 4e  lite3utf16to8(zN
8a00: 61 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  ame, -1, SQLITE_
8a10: 42 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 72 63  BIGENDIAN);.  rc
8a20: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
8a30: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
8a40: 7a 4e 61 6d 65 38 2c 20 70 72 65 66 31 36 2c 20  zName8, pref16, 
8a50: 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 29 3b  pCtx, xCompare);
8a60: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 4e  .  sqliteFree(zN
8a70: 61 6d 65 38 29 3b 0a 20 20 72 65 74 75 72 6e 20  ame8);.  return 
8a80: 72 63 3b 0a 7d 0a 0a                             rc;.}..