/ Hex Artifact Content
Login

Artifact 66c6c35e94f57a7505f7f44b5a9504fb60ca0730:


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 32 20 32 30 30 34 2f 30 36  ,v 1.202 2004/06
0280: 2f 30 31 20 30 30 3a 30 33 3a 35 33 20 64 61 6e  /01 00:03:53 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 20 41 6e 0a 2a 2a  tructure.  An.**
2b90: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
2ba0: 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2bb0: 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 73  he database as s
2bc0: 6f 6f 6e 20 61 73 20 69 74 0a 2a 2a 20 69 73 20  oon as it.** is 
2bd0: 6f 70 65 6e 65 64 2e 20 20 49 66 20 74 68 61 74  opened.  If that
2be0: 20 66 61 69 6c 73 20 28 70 65 72 68 61 70 73 20   fails (perhaps 
2bf0: 62 65 63 61 75 73 65 20 61 6e 6f 74 68 65 72 20  because another 
2c00: 70 72 6f 63 65 73 73 0a 2a 2a 20 68 61 73 20 74  process.** has t
2c10: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2c20: 20 74 61 62 6c 65 20 6c 6f 63 6b 65 64 29 20 74   table locked) t
2c30: 68 61 6e 20 61 6e 6f 74 68 65 72 20 61 74 74 65  han another atte
2c40: 6d 70 74 0a 2a 2a 20 69 73 20 6d 61 64 65 20 74  mpt.** is made t
2c50: 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
2c60: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 61 63  e database is ac
2c70: 63 65 73 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  cessed..*/.int s
2c80: 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
2c90: 65 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 70 7a  e *db, char **pz
2ca0: 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20 69  ErrMsg){.  int i
2cb0: 2c 20 72 63 3b 0a 20 20 0a 20 20 69 66 28 20 64  , rc;.  .  if( d
2cc0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 20 72  b->init.busy ) r
2cd0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
2ce0: 0a 20 20 61 73 73 65 72 74 28 20 28 64 62 2d 3e  .  assert( (db->
2cf0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
2d00: 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29  nitialized)==0 )
2d10: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2d20: 4f 4b 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62  OK;.  db->init.b
2d30: 75 73 79 20 3d 20 31 3b 0a 20 20 66 6f 72 28 69  usy = 1;.  for(i
2d40: 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  =0; rc==SQLITE_O
2d50: 4b 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  K && i<db->nDb; 
2d60: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 44 62  i++){.    if( Db
2d70: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2d80: 69 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  i, DB_SchemaLoad
2d90: 65 64 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ed) ) continue;.
2da0: 20 20 20 20 61 73 73 65 72 74 28 20 69 21 3d 31      assert( i!=1
2db0: 20 29 3b 20 20 2f 2a 20 53 68 6f 75 6c 64 20 68   );  /* Should h
2dc0: 61 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ave been initial
2dd0: 69 7a 65 64 20 74 6f 67 65 74 68 65 72 20 77 69  ized together wi
2de0: 74 68 20 30 20 2a 2f 0a 20 20 20 20 72 63 20 3d  th 0 */.    rc =
2df0: 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28   sqlite3InitOne(
2e00: 64 62 2c 20 69 2c 20 70 7a 45 72 72 4d 73 67 29  db, i, pzErrMsg)
2e10: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
2e20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
2e30: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
2e40: 28 64 62 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 20  (db, i);.    }. 
2e50: 20 7d 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75   }.  db->init.bu
2e60: 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  sy = 0;.  if( rc
2e70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e80: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
2e90: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2ea0: 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43  ed;.    sqlite3C
2eb0: 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
2ec0: 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20  nges(db);.  }.. 
2ed0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2ee0: 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66 6c  OK ){.    db->fl
2ef0: 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49  ags &= ~SQLITE_I
2f00: 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a  nitialized;.  }.
2f10: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
2f20: 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73 69 6f  /*.** The versio
2f30: 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  n of the library
2f40: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 72  .*/.const char r
2f50: 63 73 69 64 5b 5d 20 3d 20 22 40 28 23 29 20 5c  csid[] = "@(#) \
2f60: 30 34 34 49 64 3a 20 53 51 4c 69 74 65 20 76 65  044Id: SQLite ve
2f70: 72 73 69 6f 6e 20 22 20 53 51 4c 49 54 45 5f 56  rsion " SQLITE_V
2f80: 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a 63 6f 6e  ERSION " $";.con
2f90: 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f  st char sqlite3_
2fa0: 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49  version[] = SQLI
2fb0: 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a 0a  TE_VERSION;../*.
2fc0: 2a 2a 20 44 6f 65 73 20 74 68 65 20 6c 69 62 72  ** Does the libr
2fd0: 61 72 79 20 65 78 70 65 63 74 20 64 61 74 61 20  ary expect data 
2fe0: 74 6f 20 62 65 20 65 6e 63 6f 64 65 64 20 61 73  to be encoded as
2ff0: 20 55 54 46 2d 38 20 6f 72 20 69 73 6f 38 38 35   UTF-8 or iso885
3000: 39 3f 20 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c 6f  9?  The.** follo
3010: 77 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 73  wing global cons
3020: 74 61 6e 74 20 61 6c 77 61 79 73 20 6c 65 74 73  tant always lets
3030: 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69 66   us know..*/.#if
3040: 64 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38 0a  def SQLITE_UTF8.
3050: 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
3060: 65 33 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20  e3_encoding[] = 
3070: 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73 65 0a 63  "UTF-8";.#else.c
3080: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
3090: 33 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20 22  3_encoding[] = "
30a0: 69 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64 69 66  iso8859";.#endif
30b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
30c0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
30d0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e  ating function n
30e0: 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77 68  amed "BINARY" wh
30f0: 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a  ich is always.**
3100: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73   available..*/.s
3110: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 61 72 79  tatic int binary
3120: 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20  CollatingFunc(. 
3130: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3140: 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e    int nKey1, con
3150: 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a  st void *pKey1,.
3160: 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e    int nKey2, con
3170: 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29  st void *pKey2.)
3180: 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20  {.  int rc, n;. 
3190: 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32   n = nKey1<nKey2
31a0: 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32   ? nKey1 : nKey2
31b0: 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28  ;.  rc = memcmp(
31c0: 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29  pKey1, pKey2, n)
31d0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b  ;.  if( rc==0 ){
31e0: 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20  .    rc = nKey1 
31f0: 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72  - nKey2;.  }.  r
3200: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
3210: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f  ** Return the RO
3220: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
3230: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f  recent insert.*/
3240: 0a 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 20 73  .long long int s
3250: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
3260: 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 20  rt_rowid(sqlite 
3270: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
3280: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a  b->lastRowid;.}.
3290: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
32b0: 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  ges in the most 
32c0: 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73  recent call to s
32d0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a  qlite3_exec()..*
32e0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68  /.int sqlite3_ch
32f0: 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62  anges(sqlite *db
3300: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
3310: 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  nChange;.}../*.*
3320: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
3330: 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 70  ber of changes p
3340: 72 6f 64 75 63 65 64 20 62 79 20 74 68 65 20 6c  roduced by the l
3350: 61 73 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41  ast INSERT, UPDA
3360: 54 45 2c 20 6f 72 0a 2a 2a 20 44 45 4c 45 54 45  TE, or.** DELETE
3370: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f   statement to co
3380: 6d 70 6c 65 74 65 20 65 78 65 63 75 74 69 6f 6e  mplete execution
3390: 2e 20 54 68 65 20 63 6f 75 6e 74 20 64 6f 65 73  . The count does
33a0: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 0a 2a 2a 20   not include.** 
33b0: 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 53  changes due to S
33c0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78  QL statements ex
33d0: 65 63 75 74 65 64 20 69 6e 20 74 72 69 67 67 65  ecuted in trigge
33e0: 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20  r programs that 
33f0: 77 65 72 65 0a 2a 2a 20 74 72 69 67 67 65 72 65  were.** triggere
3400: 64 20 62 79 20 74 68 61 74 20 73 74 61 74 65 6d  d by that statem
3410: 65 6e 74 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ent.*/.int sqlit
3420: 65 33 5f 6c 61 73 74 5f 73 74 61 74 65 6d 65 6e  e3_last_statemen
3430: 74 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65  t_changes(sqlite
3440: 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20   *db){.  return 
3450: 64 62 2d 3e 6c 73 43 68 61 6e 67 65 3b 0a 7d 0a  db->lsChange;.}.
3460: 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
3470: 65 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20  existing SQLite 
3480: 64 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64  database.*/.void
3490: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73   sqlite3_close(s
34a0: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 48 61  qlite *db){.  Ha
34b0: 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74  shElem *i;.  int
34c0: 20 6a 3b 0a 20 20 64 62 2d 3e 77 61 6e 74 5f 74   j;.  db->want_t
34d0: 6f 5f 63 6c 6f 73 65 20 3d 20 31 3b 0a 20 20 69  o_close = 1;.  i
34e0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
34f0: 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 73 71 6c  Check(db) || sql
3500: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
3510: 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74   ){.    /* print
3520: 66 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45  f("DID NOT CLOSE
3530: 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64  \n"); fflush(std
3540: 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74  out); */.    ret
3550: 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6d  urn;.  }.  db->m
3560: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
3570: 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 66 6f  GIC_CLOSED;.  fo
3580: 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62  r(j=0; j<db->nDb
3590: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75  ; j++){.    stru
35a0: 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62  ct Db *pDb = &db
35b0: 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66  ->aDb[j];.    if
35c0: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
35d0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
35e0: 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b  Close(pDb->pBt);
35f0: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20  .      pDb->pBt 
3600: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
3610: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
3620: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
3630: 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  0);.  assert( db
3640: 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73  ->nDb<=2 );.  as
3650: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64  sert( db->aDb==d
3660: 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a  b->aDbStatic );.
3670: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
3680: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75  shFirst(&db->aFu
3690: 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65  nc); i; i=sqlite
36a0: 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20  HashNext(i)){.  
36b0: 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
36c0: 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66 6f  , *pNext;.    fo
36d0: 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63 44  r(pFunc = (FuncD
36e0: 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  ef*)sqliteHashDa
36f0: 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70 46  ta(i); pFunc; pF
3700: 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20 20  unc=pNext){.    
3710: 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63 2d    pNext = pFunc-
3720: 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73 71  >pNext;.      sq
3730: 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63 29 3b  liteFree(pFunc);
3740: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
3750: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
3760: 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c  b->aFunc);.  sql
3770: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
3780: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20  LITE_OK, 0); /* 
3790: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
37a0: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
37b0: 69 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ings. */.  sqlit
37c0: 65 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a  eFree(db);.}../*
37d0: 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c  .** Rollback all
37e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
37f0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3800: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
3810: 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  te *db){.  int i
3820: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64  ;.  for(i=0; i<d
3830: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
3840: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
3850: 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71  .pBt ){.      sq
3860: 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61  lite3BtreeRollba
3870: 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  ck(db->aDb[i].pB
3880: 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  t);.      db->aD
3890: 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30  b[i].inTrans = 0
38a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
38b0: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
38c0: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
38d0: 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 52 6f 6c  .  /* sqlite3Rol
38e0: 6c 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61  lbackInternalCha
38f0: 6e 67 65 73 28 64 62 29 3b 20 2a 2f 0a 7d 0a 0a  nges(db); */.}..
3900: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73  /*.** Return a s
3910: 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 68 61  tatic string tha
3920: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
3930: 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70  kind of error sp
3940: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a  ecified in the.*
3950: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63  * argument..*/.c
3960: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
3970: 65 33 45 72 72 53 74 72 28 69 6e 74 20 72 63 29  e3ErrStr(int rc)
3980: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
3990: 7a 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20  z;.  switch( rc 
39a0: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
39b0: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
39c0: 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72   = "not an error
39d0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
39f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3a00: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a  TE_ERROR:      z
3a10: 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72   = "SQL logic er
3a20: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
3a30: 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61  atabase";   brea
3a40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3a50: 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a  TE_INTERNAL:   z
3a60: 20 3d 20 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c   = "internal SQL
3a70: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
3a80: 6f 6e 20 66 6c 61 77 22 3b 20 20 20 62 72 65 61  on flaw";   brea
3a90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3aa0: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
3ab0: 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69   = "access permi
3ac0: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ssion denied";  
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3ae0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3af0: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
3b00: 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71   = "callback req
3b10: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
3b20: 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  rt";        brea
3b30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3b40: 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a  TE_BUSY:       z
3b50: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
3b60: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3b80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3b90: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
3ba0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62   = "database tab
3bb0: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20  le is locked";  
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3bd0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3be0: 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a  TE_NOMEM:      z
3bf0: 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   = "out of memor
3c00: 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y";             
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3c20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3c30: 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a  TE_READONLY:   z
3c40: 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77   = "attempt to w
3c50: 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20  rite a readonly 
3c60: 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61  database";  brea
3c70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3c80: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
3c90: 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22   = "interrupted"
3ca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3cc0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3cd0: 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a  TE_IOERR:      z
3ce0: 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72   = "disk I/O err
3cf0: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3d10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d20: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
3d30: 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73   = "database dis
3d40: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
3d50: 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61  rmed";      brea
3d60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d70: 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a  TE_NOTFOUND:   z
3d80: 20 3d 20 22 74 61 62 6c 65 20 6f 72 20 72 65 63   = "table or rec
3d90: 6f 72 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20  ord not found"; 
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3db0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3dc0: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
3dd0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
3de0: 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20  full";          
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3e00: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e10: 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a  TE_CANTOPEN:   z
3e20: 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70   = "unable to op
3e30: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
3e40: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
3e50: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e60: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
3e70: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63   = "database loc
3e80: 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61  king protocol fa
3e90: 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61  ilure";     brea
3ea0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3eb0: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
3ec0: 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69   = "table contai
3ed0: 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20  ns no data";    
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3ef0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f00: 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a  TE_SCHEMA:     z
3f10: 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68   = "database sch
3f20: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
3f30: 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;           brea
3f40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f50: 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a  TE_TOOBIG:     z
3f60: 20 3d 20 22 74 6f 6f 20 6d 75 63 68 20 64 61 74   = "too much dat
3f70: 61 20 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20  a for one table 
3f80: 72 6f 77 22 3b 20 20 20 20 20 20 20 62 72 65 61  row";       brea
3f90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3fa0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
3fb0: 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66   = "constraint f
3fc0: 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20  ailed";         
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3fe0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3ff0: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a  TE_MISMATCH:   z
4000: 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   = "datatype mis
4010: 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20  match";         
4020: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4030: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4040: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
4050: 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74   = "library rout
4060: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
4070: 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61  f sequence";brea
4080: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4090: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
40a0: 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73   = "kernel lacks
40b0: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
40c0: 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61  ort";       brea
40d0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
40e0: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a  TE_AUTH:       z
40f0: 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f   = "authorizatio
4100: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
4110: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4120: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4130: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
4140: 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61   = "auxiliary da
4150: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
4160: 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61  ror";       brea
4170: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4180: 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a  TE_RANGE:      z
4190: 20 3d 20 22 62 69 6e 64 20 69 6e 64 65 78 20 6f   = "bind index o
41a0: 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20  ut of range";   
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
41c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
41d0: 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a  TE_NOTADB:     z
41e0: 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72   = "file is encr
41f0: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
4200: 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61  a database";brea
4210: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
4230: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f   = "unknown erro
4240: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
4250: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4260: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
4270: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
4280: 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65   routine impleme
4290: 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62  nts a busy callb
42a0: 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20  ack that sleeps 
42b0: 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61  and tries.** aga
42c0: 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f  in until a timeo
42d0: 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63  ut value is reac
42e0: 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75  hed.  The timeou
42f0: 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e  t value is.** an
4300: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
4310: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
4320: 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
4330: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
4340: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
4350: 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  t sqliteDefaultB
4360: 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f  usyCallback(. vo
4370: 69 64 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20  id *Timeout,    
4380: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
4390: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
43a0: 20 74 6f 20 77 61 69 74 20 2a 2f 0a 20 63 6f 6e   to wait */. con
43b0: 73 74 20 63 68 61 72 20 2a 4e 6f 74 55 73 65 64  st char *NotUsed
43c0: 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d  ,     /* The nam
43d0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
43e0: 68 61 74 20 69 73 20 62 75 73 79 20 2a 2f 0a 20  hat is busy */. 
43f0: 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20  int count       
4400: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
4410: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c  er of times tabl
4420: 65 20 68 61 73 20 62 65 65 6e 20 62 75 73 79 20  e has been busy 
4430: 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45  */.){.#if SQLITE
4440: 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31  _MIN_SLEEP_MS==1
4450: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
4460: 63 68 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d 0a  char delays[] =.
4470: 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20       { 1, 2, 5, 
4480: 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20  10, 15, 20, 25, 
4490: 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35  25,  25,  50,  5
44a0: 30 2c 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20 20  0,  50, 100};.  
44b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 68 6f  static const sho
44c0: 72 74 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d 20  rt int totals[] 
44d0: 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33  =.     { 0, 1, 3
44e0: 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33  ,  8, 18, 33, 53
44f0: 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20  , 78, 103, 128, 
4500: 31 37 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b 0a  178, 228, 287};.
4510: 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20  # define NDELAY 
4520: 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f  (sizeof(delays)/
4530: 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d  sizeof(delays[0]
4540: 29 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  )).  int timeout
4550: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
4560: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
4570: 69 6f 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75 6e  ior;..  if( coun
4580: 74 20 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a 20  t <= NDELAY ){. 
4590: 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79     delay = delay
45a0: 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20 20  s[count-1];.    
45b0: 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63  prior = totals[c
45c0: 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65  ount-1];.  }else
45d0: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  {.    delay = de
45e0: 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a  lays[NDELAY-1];.
45f0: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
4600: 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64  ls[NDELAY-1] + d
4610: 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c  elay*(count-NDEL
4620: 41 59 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28  AY-1);.  }.  if(
4630: 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e   prior + delay >
4640: 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20   timeout ){.    
4650: 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20  delay = timeout 
4660: 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28  - prior;.    if(
4670: 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75   delay<=0 ) retu
4680: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rn 0;.  }.  sqli
4690: 74 65 33 4f 73 53 6c 65 65 70 28 64 65 6c 61 79  te3OsSleep(delay
46a0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
46b0: 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f  else.  int timeo
46c0: 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75  ut = (int)Timeou
46d0: 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b  t;.  if( (count+
46e0: 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75  1)*1000 > timeou
46f0: 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  t ){.    return 
4700: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
4710: 4f 73 53 6c 65 65 70 28 31 30 30 30 29 3b 0a 20  OsSleep(1000);. 
4720: 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69   return 1;.#endi
4730: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  f.}../*.** This 
4740: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
4750: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66   busy callback f
4760: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
4770: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
4780: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
4790: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
47a0: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
47b0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
47c0: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20  _busy_handler(. 
47d0: 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20 20 69   sqlite *db,.  i
47e0: 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64  nt (*xBusy)(void
47f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
4800: 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67  t),.  void *pArg
4810: 0a 29 7b 0a 20 20 64 62 2d 3e 78 42 75 73 79 43  .){.  db->xBusyC
4820: 61 6c 6c 62 61 63 6b 20 3d 20 78 42 75 73 79 3b  allback = xBusy;
4830: 0a 20 20 64 62 2d 3e 70 42 75 73 79 41 72 67 20  .  db->pBusyArg 
4840: 3d 20 70 41 72 67 3b 0a 7d 0a 0a 23 69 66 6e 64  = pArg;.}..#ifnd
4850: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4860: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4870: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4880: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f  ine sets the pro
4890: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66  gress callback f
48a0: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
48b0: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
48c0: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
48d0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
48e0: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
48f0: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
4900: 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62  llback will.** b
4910: 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20  e invoked every 
4920: 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  nOps opcodes..*/
4930: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72  .void sqlite3_pr
4940: 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a  ogress_handler(.
4950: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 0a 20    sqlite *db, . 
4960: 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74   int nOps,.  int
4970: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
4980: 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70  id*), .  void *p
4990: 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 6e 4f 70  Arg.){.  if( nOp
49a0: 73 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  s>0 ){.    db->x
49b0: 50 72 6f 67 72 65 73 73 20 3d 20 78 50 72 6f 67  Progress = xProg
49c0: 72 65 73 73 3b 0a 20 20 20 20 64 62 2d 3e 6e 50  ress;.    db->nP
49d0: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70  rogressOps = nOp
49e0: 73 3b 0a 20 20 20 20 64 62 2d 3e 70 50 72 6f 67  s;.    db->pProg
49f0: 72 65 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a  ressArg = pArg;.
4a00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62 2d    }else{.    db-
4a10: 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a  >xProgress = 0;.
4a20: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
4a30: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 64 62  sOps = 0;.    db
4a40: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d  ->pProgressArg =
4a50: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
4a60: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  .../*.** This ro
4a70: 75 74 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61  utine installs a
4a80: 20 64 65 66 61 75 6c 74 20 62 75 73 79 20 68 61   default busy ha
4a90: 6e 64 6c 65 72 20 74 68 61 74 20 77 61 69 74 73  ndler that waits
4aa0: 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63   for the.** spec
4ab0: 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ified number of 
4ac0: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66  milliseconds bef
4ad0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e  ore returning 0.
4ae0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4af0: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 73 71  _busy_timeout(sq
4b00: 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20 6d 73  lite *db, int ms
4b10: 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b  ){.  if( ms>0 ){
4b20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
4b30: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71  y_handler(db, sq
4b40: 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43  liteDefaultBusyC
4b50: 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29  allback, (void*)
4b60: 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ms);.  }else{.  
4b70: 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68    sqlite3_busy_h
4b80: 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29  andler(db, 0, 0)
4b90: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ;.  }.}../*.** C
4ba0: 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  ause any pending
4bb0: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73 74   operation to st
4bc0: 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69 65  op at its earlie
4bd0: 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e 0a  st opportunity..
4be0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
4bf0: 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65  interrupt(sqlite
4c00: 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61   *db){.  db->fla
4c10: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
4c20: 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  errupt;.}../*.**
4c30: 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   Windows systems
4c40: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69   should call thi
4c50: 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65  s routine to fre
4c60: 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a  e memory that.**
4c70: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20   is returned in 
4c80: 74 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73  the in the errms
4c90: 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  g parameter of s
4ca0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 77 68  qlite3_open() wh
4cb0: 65 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20  en.** SQLite is 
4cc0: 61 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65  a DLL.  For some
4cd0: 20 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73   reason, it does
4ce0: 20 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c   not work to cal
4cf0: 6c 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65  l free().** dire
4d00: 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ctly..**.** Note
4d10: 20 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f   that we need to
4d20: 20 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74   call free() not
4d30: 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65   sqliteFree() he
4d40: 72 65 2c 20 73 69 6e 63 65 20 65 76 65 72 79 0a  re, since every.
4d50: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 69  ** string that i
4d60: 73 20 65 78 70 6f 72 74 65 64 20 66 72 6f 6d 20  s exported from 
4d70: 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 68 61  SQLite should ha
4d80: 76 65 20 61 6c 72 65 61 64 79 20 70 61 73 73 65  ve already passe
4d90: 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71 6c  d through.** sql
4da0: 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 29  ite3StrRealloc()
4db0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
4dc0: 33 5f 66 72 65 65 28 63 68 61 72 20 2a 70 29 7b  3_free(char *p){
4dd0: 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a   free(p); }../*.
4de0: 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  ** Windows syste
4df0: 6d 73 20 6e 65 65 64 20 66 75 6e 63 74 69 6f 6e  ms need function
4e00: 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20 72 65 74  s to call to ret
4e10: 75 72 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f  urn the sqlite3_
4e20: 76 65 72 73 69 6f 6e 0a 2a 2a 20 61 6e 64 20 73  version.** and s
4e30: 71 6c 69 74 65 33 5f 65 6e 63 6f 64 69 6e 67 20  qlite3_encoding 
4e40: 73 74 72 69 6e 67 73 20 73 69 6e 63 65 20 74 68  strings since th
4e50: 65 79 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f  ey are unable to
4e60: 20 61 63 63 65 73 73 20 63 6f 6e 73 74 61 6e 74   access constant
4e70: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 44 4c 4c 73  s.** within DLLs
4e80: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
4e90: 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  *sqlite3_libvers
4ea0: 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65 74 75 72  ion(void){ retur
4eb0: 6e 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f  n sqlite3_versio
4ec0: 6e 3b 20 7d 0a 63 6f 6e 73 74 20 63 68 61 72 20  n; }.const char 
4ed0: 2a 73 71 6c 69 74 65 33 5f 6c 69 62 65 6e 63 6f  *sqlite3_libenco
4ee0: 64 69 6e 67 28 76 6f 69 64 29 7b 20 72 65 74 75  ding(void){ retu
4ef0: 72 6e 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f 64  rn sqlite3_encod
4f00: 69 6e 67 3b 20 7d 0a 0a 69 6e 74 20 73 71 6c 69  ing; }..int sqli
4f10: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
4f20: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ion(.  sqlite3 *
4f30: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db,.  const char
4f40: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
4f50: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
4f60: 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 69  nt eTextRep,.  i
4f70: 6e 74 20 69 43 6f 6c 6c 61 74 65 41 72 67 2c 0a  nt iCollateArg,.
4f80: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
4f90: 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  a,.  void (*xFun
4fa0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
4fb0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
4fc0: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
4fd0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
4fe0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
4ff0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
5000: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
5010: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
5020: 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44  ext*).){.  FuncD
5030: 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61  ef *p;.  int nNa
5040: 6d 65 3b 0a 0a 20 20 69 66 28 20 28 64 62 3d 3d  me;..  if( (db==
5050: 30 20 7c 7c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  0 || zFunctionNa
5060: 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  me==0 || sqlite3
5070: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 29  SafetyCheck(db))
5080: 20 7c 7c 0a 20 20 20 20 20 20 28 78 46 75 6e 63   ||.      (xFunc
5090: 20 26 26 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78   && (xFinal || x
50a0: 53 74 65 70 29 29 20 7c 7c 20 0a 20 20 20 20 20  Step)) || .     
50b0: 20 28 21 78 46 75 6e 63 20 26 26 20 28 78 46 69   (!xFunc && (xFi
50c0: 6e 61 6c 20 26 26 20 21 78 53 74 65 70 29 29 20  nal && !xStep)) 
50d0: 7c 7c 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63  ||.      (!xFunc
50e0: 20 26 26 20 28 21 78 46 69 6e 61 6c 20 26 26 20   && (!xFinal && 
50f0: 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20  xStep)) ||.     
5100: 20 28 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72   (nArg<-1 || nAr
5110: 67 3e 31 32 37 29 20 7c 7c 0a 20 20 20 20 20 20  g>127) ||.      
5120: 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74  (255<(nName = st
5130: 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61  rlen(zFunctionNa
5140: 6d 65 29 29 29 20 29 7b 0a 20 20 20 20 72 65 74  me))) ){.    ret
5150: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
5160: 3b 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c  ;.  }..  p = sql
5170: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
5180: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
5190: 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  me, nName, nArg,
51a0: 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20   1);.  if( p==0 
51b0: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 2d  ) return 1;.  p-
51c0: 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a  >xFunc = xFunc;.
51d0: 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74    p->xStep = xSt
51e0: 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69  ep;.  p->xFinali
51f0: 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 70  ze = xFinal;.  p
5200: 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55  ->pUserData = pU
5210: 73 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75 72  serData;.  retur
5220: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 69  n SQLITE_OK;.}.i
5230: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
5240: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a 20 20  e_function16(.  
5250: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63  sqlite3 *db,.  c
5260: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75 6e 63  onst void *zFunc
5270: 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  tionName,.  int 
5280: 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54 65 78  nArg,.  int eTex
5290: 74 52 65 70 2c 0a 20 20 69 6e 74 20 69 43 6f 6c  tRep,.  int iCol
52a0: 6c 61 74 65 41 72 67 2c 0a 20 20 76 6f 69 64 20  lateArg,.  void 
52b0: 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76 6f  *pUserData,.  vo
52c0: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
52d0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
52e0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
52f0: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  ),.  void (*xSte
5300: 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  p)(sqlite3_conte
5310: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
5320: 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64  value**),.  void
5330: 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74   (*xFinal)(sqlit
5340: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a  e3_context*).){.
5350: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
5360: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38   *zFunctionName8
5370: 3b 0a 20 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ;.  zFunctionNam
5380: 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  e8 = sqlite3utf1
5390: 36 74 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61  6to8(zFunctionNa
53a0: 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 42  me, -1, SQLITE_B
53b0: 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69 66 28  IGENDIAN);.  if(
53c0: 20 21 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38   !zFunctionName8
53d0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
53e0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
53f0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
5400: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5410: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
5420: 65 38 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52  e8, nArg, eTextR
5430: 65 70 2c 20 0a 20 20 20 20 20 20 69 43 6f 6c 6c  ep, .      iColl
5440: 61 74 65 41 72 67 2c 20 70 55 73 65 72 44 61 74  ateArg, pUserDat
5450: 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  a, xFunc, xStep,
5460: 20 78 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69   xFinal);.  sqli
5470: 74 65 46 72 65 65 28 7a 46 75 6e 63 74 69 6f 6e  teFree(zFunction
5480: 4e 61 6d 65 38 29 3b 0a 20 20 72 65 74 75 72 6e  Name8);.  return
5490: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65   rc;.}../*.** Re
54a0: 67 69 73 74 65 72 20 61 20 74 72 61 63 65 20 66  gister a trace f
54b0: 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41  unction.  The pA
54c0: 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76  rg from the prev
54d0: 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72 65  iously registere
54e0: 64 20 74 72 61 63 65 0a 2a 2a 20 69 73 20 72 65  d trace.** is re
54f0: 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20  turned.  .**.** 
5500: 41 20 4e 55 4c 4c 20 74 72 61 63 65 20 66 75 6e  A NULL trace fun
5510: 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74  ction means that
5520: 20 6e 6f 20 74 72 61 63 69 6e 67 20 69 73 20 65   no tracing is e
5530: 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d  xecutes.  A non-
5540: 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73  NULL.** trace is
5550: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
5560: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73  function that is
5570: 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20   invoked at the 
5580: 73 74 61 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a  start of each.**
5590: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e   sqlite3_exec().
55a0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
55b0: 33 5f 74 72 61 63 65 28 73 71 6c 69 74 65 20 2a  3_trace(sqlite *
55c0: 64 62 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63  db, void (*xTrac
55d0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
55e0: 68 61 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72  har*), void *pAr
55f0: 67 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64  g){.  void *pOld
5600: 20 3d 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67   = db->pTraceArg
5610: 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d  ;.  db->xTrace =
5620: 20 78 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70   xTrace;.  db->p
5630: 54 72 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b  TraceArg = pArg;
5640: 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a  .  return pOld;.
5650: 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45  }../*** EXPERIME
5660: 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52  NTAL ***.**.** R
5670: 65 67 69 73 74 65 72 20 61 20 66 75 6e 63 74 69  egister a functi
5680: 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
5690: 20 77 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74   when a transact
56a0: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a  ion comments..**
56b0: 20 49 66 20 65 69 74 68 65 72 20 66 75 6e 63 74   If either funct
56c0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ion returns non-
56d0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63  zero, then the c
56e0: 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a  ommit becomes a.
56f0: 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  ** rollback..*/.
5700: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
5710: 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  mmit_hook(.  sql
5720: 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20  ite *db,        
5730: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
5740: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
5750: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
5760: 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
5770: 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e  (void*),  /* Fun
5780: 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20  ction to invoke 
5790: 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a  on each commit *
57a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20  /.  void *pArg  
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
57c0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
57d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
57e0: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
57f0: 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20  b->pCommitArg;. 
5800: 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c   db->xCommitCall
5810: 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b  back = xCallback
5820: 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41  ;.  db->pCommitA
5830: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74  rg = pArg;.  ret
5840: 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a  urn pOld;.}.../*
5850: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
5860: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
5870: 65 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f  eate a connectio
5880: 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20  n to a database 
5890: 42 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72 2e  BTree.** driver.
58a0: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
58b0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
58c0: 66 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74 20  file, then that 
58d0: 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e 65  file is.** opene
58e0: 64 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66 20  d and used.  If 
58f0: 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65  zFilename is the
5900: 20 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d 65   magic name ":me
5910: 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20 74  mory:" then.** t
5920: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 73  he database is s
5930: 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  tored in memory 
5940: 28 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f 72  (and is thus for
5950: 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20 61  gotten as soon a
5960: 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63 74  s.** the connect
5970: 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29 20  ion is closed.) 
5980: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
5990: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 64   NULL then the d
59a0: 61 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 66 6f  atabase.** is fo
59b0: 72 20 74 65 6d 70 6f 72 61 72 79 20 75 73 65 20  r temporary use 
59c0: 6f 6e 6c 79 20 61 6e 64 20 69 73 20 64 65 6c 65  only and is dele
59d0: 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74  ted as soon as t
59e0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a  he connection.**
59f0: 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
5a00: 2a 20 41 20 74 65 6d 70 6f 72 61 72 79 20 64 61  * A temporary da
5a10: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 65 69  tabase can be ei
5a20: 74 68 65 72 20 61 20 64 69 73 6b 20 66 69 6c 65  ther a disk file
5a30: 20 28 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61   (that is automa
5a40: 74 69 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74  tically.** delet
5a50: 65 64 20 77 68 65 6e 20 74 68 65 20 66 69 6c 65  ed when the file
5a60: 20 69 73 20 63 6c 6f 73 65 64 29 20 6f 72 20 61   is closed) or a
5a70: 20 73 65 74 20 6f 66 20 72 65 64 2d 62 6c 61 63   set of red-blac
5a80: 6b 20 74 72 65 65 73 20 68 65 6c 64 20 69 6e 20  k trees held in 
5a90: 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e  memory,.** depen
5aa0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75  ding on the valu
5ab0: 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53  es of the TEMP_S
5ac0: 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  TORE compile-tim
5ad0: 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a  e macro and the.
5ae0: 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ** db->temp_stor
5af0: 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f  e variable, acco
5b00: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c  rding to the fol
5b10: 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a  lowing chart:.**
5b20: 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53  .**       TEMP_S
5b30: 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d  TORE     db->tem
5b40: 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61  p_store     Loca
5b50: 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72  tion of temporar
5b60: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20  y database.**   
5b70: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20      ----------  
5b80: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d     -------------
5b90: 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -     ----------
5ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5bb0: 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20  ----.**         
5bc0: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
5bd0: 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20    any           
5be0: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
5bf0: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
5c00: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
5c10: 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20      file.**     
5c20: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
5c30: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
5c40: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
5c50: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
5c60: 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20             0    
5c70: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
5c80: 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20  *           2   
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20               1  
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
5cb0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20  .**           2 
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
5ce0: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
5cf0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
5d00: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
5d10: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
5d20: 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20        3         
5d30: 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20        any       
5d40: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a        memory.*/.
5d50: 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
5d60: 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74  Factory(.  const
5d70: 20 73 71 6c 69 74 65 20 2a 64 62 2c 09 20 20 20   sqlite *db,.   
5d80: 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61 73   /* Main databas
5d90: 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61  e when opening a
5da0: 75 78 20 6f 74 68 65 72 77 69 73 65 20 30 20 2a  ux otherwise 0 *
5db0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
5dc0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f 2a  zFilename,    /*
5dd0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c   Name of the fil
5de0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
5df0: 20 42 54 72 65 65 20 64 61 74 61 62 61 73 65 20   BTree database 
5e00: 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75  */.  int omitJou
5e10: 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f  rnal,          /
5e20: 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e 20 64  * if TRUE then d
5e30: 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74 68  o not journal th
5e40: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
5e50: 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20 20   nCache,        
5e60: 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 61         /* How ma
5e70: 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ny pages in the 
5e80: 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20 20  page cache */.  
5e90: 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65 20  Btree **ppBtree 
5ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
5eb0: 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72 65  nter to new Btre
5ec0: 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65 6e  e object written
5ed0: 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e   here */.){.  in
5ee0: 74 20 62 74 72 65 65 5f 66 6c 61 67 73 20 3d 20  t btree_flags = 
5ef0: 30 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20  0;.  .  assert( 
5f00: 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20  ppBtree != 0);. 
5f10: 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   if( omitJournal
5f20: 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c   ){.    btree_fl
5f30: 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49  ags |= BTREE_OMI
5f40: 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20  T_JOURNAL;.  }. 
5f50: 20 69 66 28 20 21 7a 46 69 6c 65 6e 61 6d 65 20   if( !zFilename 
5f60: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
5f70: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4d 45 4d 4f  gs |= BTREE_MEMO
5f80: 52 59 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  RY;.  }..  retur
5f90: 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  n sqlite3BtreeOp
5fa0: 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70  en(zFilename, pp
5fb0: 42 74 72 65 65 2c 20 6e 43 61 63 68 65 2c 20 62  Btree, nCache, b
5fc0: 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 7d 0a 0a  tree_flags);.}..
5fd0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
5fe0: 2d 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69  -8 encoded Engli
5ff0: 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c  sh language expl
6000: 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  anation of the m
6010: 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72  ost recent.** er
6020: 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ror..*/.const ch
6030: 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d  ar *sqlite3_errm
6040: 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  sg(sqlite3 *db){
6050: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
6060: 20 20 2f 2a 20 49 66 20 64 62 20 69 73 20 4e 55    /* If db is NU
6070: 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  LL, then assume 
6080: 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29 20  that a malloc() 
6090: 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20 61 6e  failed during an
60a0: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
60b0: 6f 70 65 6e 28 29 20 63 61 6c 6c 2e 0a 20 20 20  open() call..   
60c0: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 73   */.    return s
60d0: 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51 4c  qlite3ErrStr(SQL
60e0: 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a  ITE_NOMEM);.  }.
60f0: 20 20 69 66 28 20 64 62 2d 3e 7a 45 72 72 4d 73    if( db->zErrMs
6100: 67 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  g ){.    return 
6110: 64 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 7d  db->zErrMsg;.  }
6120: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
6130: 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43  3ErrStr(db->errC
6140: 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ode);.}../*.** R
6150: 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e 63  eturn UTF-16 enc
6160: 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e  oded English lan
6170: 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f  guage explanatio
6180: 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
6190: 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a  cent.** error..*
61a0: 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  /.const void *sq
61b0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 73  lite3_errmsg16(s
61c0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
61d0: 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 2f 2a  f( !db ){.    /*
61e0: 20 49 66 20 64 62 20 69 73 20 4e 55 4c 4c 2c 20   If db is NULL, 
61f0: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
6200: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
6210: 65 64 20 64 75 72 69 6e 67 20 61 6e 0a 20 20 20  ed during an.   
6220: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e   ** sqlite3_open
6230: 28 29 20 63 61 6c 6c 2e 20 57 65 20 68 61 76 65  () call. We have
6240: 20 61 20 73 74 61 74 69 63 20 76 65 72 73 69 6f   a static versio
6250: 6e 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  n of the string 
6260: 0a 20 20 20 20 2a 2a 20 22 6f 75 74 20 6f 66 20  .    ** "out of 
6270: 6d 65 6d 6f 72 79 22 20 65 6e 63 6f 64 65 64 20  memory" encoded 
6280: 75 73 69 6e 67 20 55 54 46 2d 31 36 20 6a 75 73  using UTF-16 jus
6290: 74 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f  t for this purpo
62a0: 73 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  se..    **.    *
62b0: 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20 74 68  * Because all th
62c0: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
62d0: 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20 69  the string are i
62e0: 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20 20  n the unicode.  
62f0: 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d    ** range 0x00-
6300: 30 78 46 46 2c 20 69 66 20 77 65 20 70 61 64 20  0xFF, if we pad 
6310: 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73  the big-endian s
6320: 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20  tring with a .  
6330: 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20    ** zero byte, 
6340: 77 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74 68  we can obtain th
6350: 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20  e little-endian 
6360: 73 74 72 69 6e 67 20 77 69 74 68 0a 20 20 20 20  string with.    
6370: 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b 31  ** &big_endian[1
6380: 5d 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74  ]..    */.    st
6390: 61 74 69 63 20 63 68 61 72 20 6f 75 74 4f 66 4d  atic char outOfM
63a0: 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  emBe[] = {.     
63b0: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c   0, 'o', 0, 'u',
63c0: 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27 2c   0, 't', 0, ' ',
63d0: 20 0a 20 20 20 20 20 20 30 2c 20 27 6f 27 2c 20   .      0, 'o', 
63e0: 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20  0, 'f', 0, ' ', 
63f0: 0a 20 20 20 20 20 20 30 2c 20 27 6d 27 2c 20 30  .      0, 'm', 0
6400: 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30  , 'e', 0, 'm', 0
6410: 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'o', 0, 'r', 0
6420: 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20  , 'y', 0, 0, 0. 
6430: 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69 63     };.    static
6440: 20 63 68 61 72 20 2a 6f 75 74 4f 66 4d 65 6d 4c   char *outOfMemL
6450: 65 20 3d 20 26 6f 75 74 4f 66 4d 65 6d 42 65 5b  e = &outOfMemBe[
6460: 31 5d 3b 0a 0a 20 20 20 20 69 66 28 20 53 51 4c  1];..    if( SQL
6470: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 29 7b  ITE_BIGENDIAN ){
6480: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 76  .      return (v
6490: 6f 69 64 20 2a 29 6f 75 74 4f 66 4d 65 6d 42 65  oid *)outOfMemBe
64a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
64b0: 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 20     return (void 
64c0: 2a 29 6f 75 74 4f 66 4d 65 6d 4c 65 3b 0a 20 20  *)outOfMemLe;.  
64d0: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 21 64    }.  }.  if( !d
64e0: 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20 29 7b 0a  b->zErrMsg16 ){.
64f0: 20 20 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a      char const *
6500: 7a 45 72 72 38 20 3d 20 73 71 6c 69 74 65 33 5f  zErr8 = sqlite3_
6510: 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20 20 20  errmsg(db);.    
6520: 69 66 28 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  if( SQLITE_BIGEN
6530: 44 49 41 4e 20 29 7b 0a 20 20 20 20 20 20 64 62  DIAN ){.      db
6540: 2d 3e 7a 45 72 72 4d 73 67 31 36 20 3d 20 73 71  ->zErrMsg16 = sq
6550: 6c 69 74 65 33 75 74 66 38 74 6f 31 36 62 65 28  lite3utf8to16be(
6560: 7a 45 72 72 38 2c 20 2d 31 29 3b 0a 20 20 20 20  zErr8, -1);.    
6570: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
6580: 3e 7a 45 72 72 4d 73 67 31 36 20 3d 20 73 71 6c  >zErrMsg16 = sql
6590: 69 74 65 33 75 74 66 38 74 6f 31 36 6c 65 28 7a  ite3utf8to16le(z
65a0: 45 72 72 38 2c 20 2d 31 29 3b 0a 20 20 20 20 7d  Err8, -1);.    }
65b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62  .  }.  return db
65c0: 2d 3e 7a 45 72 72 4d 73 67 31 36 3b 0a 7d 0a 0a  ->zErrMsg16;.}..
65d0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72 63  int sqlite3_errc
65e0: 6f 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ode(sqlite3 *db)
65f0: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 65  {.  return db->e
6600: 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rrCode;.}../*.**
6610: 20 43 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46   Compile the UTF
6620: 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73  -8 encoded SQL s
6630: 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e  tatement zSql in
6640: 74 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68  to a statement h
6650: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
6660: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 0a 20  lite3_prepare(. 
6670: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
6680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
6690: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a  tabase handle. *
66a0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
66b0: 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a  zSql,         /*
66c0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
66d0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f  QL statement. */
66e0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20  .  int nBytes,  
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6700: 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69  Length of zSql i
6710: 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71  n bytes. */.  sq
6720: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
6730: 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20  tmt,    /* OUT: 
6740: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
6750: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
6760: 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ent */.  const c
6770: 68 61 72 2a 2a 20 70 7a 54 61 69 6c 20 20 20 20  har** pzTail    
6780: 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f     /* OUT: End o
6790: 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20  f parsed string 
67a0: 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50  */.){.  Parse sP
67b0: 61 72 73 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45  arse;.  char *zE
67c0: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 6e 74  rrMsg = 0;.  int
67d0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
67e0: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
67f0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
6800: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
6810: 49 53 55 53 45 3b 0a 20 20 20 20 67 6f 74 6f 20  ISUSE;.    goto 
6820: 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20 7d  prepare_out;.  }
6830: 0a 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69  ..  if( !db->ini
6840: 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69 66  t.busy ){.    if
6850: 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
6860: 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65  QLITE_Initialize
6870: 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  d)==0 ){.      i
6880: 6e 74 20 63 6e 74 20 3d 20 31 3b 0a 20 20 20 20  nt cnt = 1;.    
6890: 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
68a0: 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26  qlite3Init(db, &
68b0: 7a 45 72 72 4d 73 67 29 29 3d 3d 53 51 4c 49 54  zErrMsg))==SQLIT
68c0: 45 5f 42 55 53 59 0a 20 20 20 20 20 20 20 20 20  E_BUSY.         
68d0: 26 26 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c  && db->xBusyCall
68e0: 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 26 26  back.         &&
68f0: 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61   db->xBusyCallba
6900: 63 6b 28 64 62 2d 3e 70 42 75 73 79 41 72 67 2c  ck(db->pBusyArg,
6910: 20 22 22 2c 20 63 6e 74 2b 2b 29 21 3d 30 20 29   "", cnt++)!=0 )
6920: 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  {}.      if( rc!
6930: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6940: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 65 70 61        goto prepa
6950: 72 65 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  re_out;.      }.
6960: 20 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73        if( zErrMs
6970: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  g ){.        sql
6980: 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29  iteFree(zErrMsg)
6990: 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d 73  ;.        zErrMs
69a0: 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  g = 0;.      }. 
69b0: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
69c0: 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  t( (db->flags & 
69d0: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
69e0: 65 64 29 21 3d 30 20 7c 7c 20 64 62 2d 3e 69 6e  ed)!=0 || db->in
69f0: 69 74 2e 62 75 73 79 20 29 3b 0a 0a 20 20 69 66  it.busy );..  if
6a00: 28 20 64 62 2d 3e 70 56 64 62 65 3d 3d 30 20 29  ( db->pVdbe==0 )
6a10: 7b 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  { db->nChange = 
6a20: 30 3b 20 7d 0a 20 20 6d 65 6d 73 65 74 28 26 73  0; }.  memset(&s
6a30: 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66  Parse, 0, sizeof
6a40: 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50 61  (sParse));.  sPa
6a50: 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73  rse.db = db;.  s
6a60: 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
6a70: 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20 26  &sParse, zSql, &
6a80: 7a 45 72 72 4d 73 67 29 3b 0a 0a 20 20 69 66 28  zErrMsg);..  if(
6a90: 20 64 62 2d 3e 78 54 72 61 63 65 20 26 26 20 21   db->xTrace && !
6aa0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b  db->init.busy ){
6ab0: 0a 20 20 20 20 2f 2a 20 54 72 61 63 65 20 6f 6e  .    /* Trace on
6ac0: 6c 79 20 74 68 65 20 73 74 61 74 6d 65 6e 74 20  ly the statment 
6ad0: 74 68 61 74 20 77 61 73 20 63 6f 6d 70 69 6c 65  that was compile
6ae0: 64 2e 0a 20 20 20 20 2a 2a 20 4d 61 6b 65 20 61  d..    ** Make a
6af0: 20 63 6f 70 79 20 6f 66 20 74 68 61 74 20 70 61   copy of that pa
6b00: 72 74 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  rt of the SQL st
6b10: 72 69 6e 67 20 73 69 6e 63 65 20 7a 53 51 4c 20  ring since zSQL 
6b20: 69 73 20 63 6f 6e 73 74 0a 20 20 20 20 2a 2a 20  is const.    ** 
6b30: 61 6e 64 20 77 65 20 6d 75 73 74 20 70 61 73 73  and we must pass
6b40: 20 61 20 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74   a zero terminat
6b50: 65 64 20 73 74 72 69 6e 67 20 74 6f 20 74 68 65  ed string to the
6b60: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 0a   trace function.
6b70: 20 20 20 20 2a 2a 20 54 68 65 20 63 6f 70 79 20      ** The copy 
6b80: 69 73 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  is unnecessary i
6b90: 66 20 74 68 65 20 74 61 69 6c 20 70 6f 69 6e 74  f the tail point
6ba0: 65 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 61  er is pointing a
6bb0: 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 62 65 67  t the.    ** beg
6bc0: 69 6e 6e 69 67 20 6f 72 20 65 6e 64 20 6f 66 20  innig or end of 
6bd0: 74 68 65 20 53 51 4c 20 73 74 72 69 6e 67 2e 0a  the SQL string..
6be0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
6bf0: 50 61 72 73 65 2e 7a 54 61 69 6c 20 26 26 20 73  Parse.zTail && s
6c00: 50 61 72 73 65 2e 7a 54 61 69 6c 21 3d 7a 53 71  Parse.zTail!=zSq
6c10: 6c 20 26 26 20 2a 73 50 61 72 73 65 2e 7a 54 61  l && *sParse.zTa
6c20: 69 6c 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  il ){.      char
6c30: 20 2a 74 6d 70 53 71 6c 20 3d 20 73 71 6c 69 74   *tmpSql = sqlit
6c40: 65 53 74 72 4e 44 75 70 28 7a 53 71 6c 2c 20 73  eStrNDup(zSql, s
6c50: 50 61 72 73 65 2e 7a 54 61 69 6c 20 2d 20 7a 53  Parse.zTail - zS
6c60: 71 6c 29 3b 0a 20 20 20 20 20 20 69 66 28 20 74  ql);.      if( t
6c70: 6d 70 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 20  mpSql ){.       
6c80: 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
6c90: 70 54 72 61 63 65 41 72 67 2c 20 74 6d 70 53 71  pTraceArg, tmpSq
6ca0: 6c 29 3b 0a 20 20 20 20 20 20 20 20 66 72 65 65  l);.        free
6cb0: 28 74 6d 70 53 71 6c 29 3b 0a 20 20 20 20 20 20  (tmpSql);.      
6cc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
6cd0: 2a 20 49 66 20 61 20 6d 65 6d 6f 72 79 20 65 72  * If a memory er
6ce0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 64 75 72  ror occurred dur
6cf0: 69 6e 67 20 74 68 65 20 63 6f 70 79 2c 0a 20 20  ing the copy,.  
6d00: 20 20 20 20 20 20 2a 2a 20 74 72 61 63 65 20 65        ** trace e
6d10: 6e 74 69 72 65 20 53 51 4c 20 73 74 72 69 6e 67  ntire SQL string
6d20: 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
6d30: 68 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 20  h to the.       
6d40: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   ** sqlite3_mall
6d50: 6f 63 5f 66 61 69 6c 65 64 20 74 65 73 74 20 74  oc_failed test t
6d60: 6f 20 72 65 70 6f 72 74 20 74 68 65 20 65 72 72  o report the err
6d70: 6f 72 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  or..        */. 
6d80: 20 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63         db->xTrac
6d90: 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
6da0: 20 7a 53 71 6c 29 3b 20 0a 20 20 20 20 20 20 7d   zSql); .      }
6db0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6dc0: 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d    db->xTrace(db-
6dd0: 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 53 71 6c  >pTraceArg, zSql
6de0: 29 3b 20 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ); .    }.  }.. 
6df0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c   if( sqlite3_mal
6e00: 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20  loc_failed ){.  
6e10: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
6e20: 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  MEM;.    sqlite3
6e30: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b  RollbackAll(db);
6e40: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
6e50: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
6e60: 64 62 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e  db, 0);.    db->
6e70: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
6e80: 5f 49 6e 54 72 61 6e 73 3b 0a 20 20 20 20 67 6f  _InTrans;.    go
6e90: 74 6f 20 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a  to prepare_out;.
6ea0: 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65    }.  if( sParse
6eb0: 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  .rc==SQLITE_DONE
6ec0: 20 29 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53   ) sParse.rc = S
6ed0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20  QLITE_OK;.  if( 
6ee0: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
6ef0: 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20  E_SCHEMA ){.    
6f00: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
6f10: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
6f20: 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
6f30: 20 70 70 53 74 6d 74 20 29 3b 0a 20 20 2a 70 70   ppStmt );.  *pp
6f40: 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65 33 5f  Stmt = (sqlite3_
6f50: 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70 56 64  stmt*)sParse.pVd
6f60: 62 65 3b 0a 20 20 69 66 28 20 70 7a 54 61 69 6c  be;.  if( pzTail
6f70: 20 29 20 2a 70 7a 54 61 69 6c 20 3d 20 73 50 61   ) *pzTail = sPa
6f80: 72 73 65 2e 7a 54 61 69 6c 3b 0a 20 20 72 63 20  rse.zTail;.  rc 
6f90: 3d 20 73 50 61 72 73 65 2e 72 63 3b 0a 0a 20 20  = sParse.rc;..  
6fa0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
6fb0: 4b 20 26 26 20 73 50 61 72 73 65 2e 70 56 64 62  K && sParse.pVdb
6fc0: 65 20 26 26 20 73 50 61 72 73 65 2e 65 78 70 6c  e && sParse.expl
6fd0: 61 69 6e 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ain ){.    sqlit
6fe0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
6ff0: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 35  (sParse.pVdbe, 5
7000: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7010: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61  beSetColName(sPa
7020: 72 73 65 2e 70 56 64 62 65 2c 20 30 2c 20 22 61  rse.pVdbe, 0, "a
7030: 64 64 72 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ddr", P3_STATIC)
7040: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7050: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72  eSetColName(sPar
7060: 73 65 2e 70 56 64 62 65 2c 20 31 2c 20 22 6f 70  se.pVdbe, 1, "op
7070: 63 6f 64 65 22 2c 20 50 33 5f 53 54 41 54 49 43  code", P3_STATIC
7080: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7090: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61  beSetColName(sPa
70a0: 72 73 65 2e 70 56 64 62 65 2c 20 32 2c 20 22 70  rse.pVdbe, 2, "p
70b0: 31 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  1", P3_STATIC);.
70c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
70d0: 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65  etColName(sParse
70e0: 2e 70 56 64 62 65 2c 20 33 2c 20 22 70 32 22 2c  .pVdbe, 3, "p2",
70f0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
7100: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7110: 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56  olName(sParse.pV
7120: 64 62 65 2c 20 34 2c 20 22 70 33 22 2c 20 50 33  dbe, 4, "p3", P3
7130: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 20 0a 0a  _STATIC);.  } ..
7140: 70 72 65 70 61 72 65 5f 6f 75 74 3a 0a 20 20 69  prepare_out:.  i
7150: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
7160: 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72  Off(db) ){.    r
7170: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
7180: 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 45 72  E;.  }.  if( zEr
7190: 72 4d 73 67 20 29 7b 0a 20 20 20 20 73 71 6c 69  rMsg ){.    sqli
71a0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c  te3Error(db, rc,
71b0: 20 22 25 73 22 2c 20 7a 45 72 72 4d 73 67 29 3b   "%s", zErrMsg);
71c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
71d0: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
71e0: 63 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74  c, 0);.  }.  ret
71f0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
7200: 20 43 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46   Compile the UTF
7210: 2d 31 36 20 65 6e 63 6f 64 65 64 20 53 51 4c 20  -16 encoded SQL 
7220: 73 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69  statement zSql i
7230: 6e 74 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20  nto a statement 
7240: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
7250: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
7260: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
7270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7280: 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   Database handle
7290: 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f  . */ .  const vo
72a0: 69 64 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  id *zSql,       
72b0: 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64    /* UTF-8 encod
72c0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
72d0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  . */.  int nByte
72e0: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
72f0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53   /* Length of zS
7300: 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a  ql in bytes. */.
7310: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
7320: 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f  *ppStmt,    /* O
7330: 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  UT: A pointer to
7340: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
7350: 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  atement */.  con
7360: 73 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c  st void **pzTail
7370: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45         /* OUT: E
7380: 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72  nd of parsed str
7390: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 54  ing */.){.  /* T
73a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 75 72  his function cur
73b0: 72 65 6e 74 6c 79 20 77 6f 72 6b 73 20 62 79 20  rently works by 
73c0: 66 69 72 73 74 20 74 72 61 6e 73 66 6f 72 6d 69  first transformi
73d0: 6e 67 20 74 68 65 20 55 54 46 2d 31 36 0a 20 20  ng the UTF-16.  
73e0: 2a 2a 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e  ** encoded strin
73f0: 67 20 74 6f 20 55 54 46 2d 38 2c 20 74 68 65 6e  g to UTF-8, then
7400: 20 69 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65   invoking sqlite
7410: 33 5f 70 72 65 70 61 72 65 28 29 2e 20 54 68 65  3_prepare(). The
7420: 0a 20 20 2a 2a 20 74 72 69 63 6b 79 20 62 69 74  .  ** tricky bit
7430: 20 69 73 20 66 69 67 75 72 69 6e 67 20 6f 75 74   is figuring out
7440: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
7450: 72 65 74 75 72 6e 20 69 6e 20 2a 70 7a 54 61 69  return in *pzTai
7460: 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a  l..  */.  char *
7470: 7a 53 71 6c 38 20 3d 20 30 3b 0a 20 20 63 68 61  zSql8 = 0;.  cha
7480: 72 20 63 6f 6e 73 74 20 2a 7a 54 61 69 6c 38 20  r const *zTail8 
7490: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  = 0;.  int rc;..
74a0: 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69 74 65    zSql8 = sqlite
74b0: 33 75 74 66 31 36 74 6f 38 28 7a 53 71 6c 2c 20  3utf16to8(zSql, 
74c0: 6e 42 79 74 65 73 2c 20 53 51 4c 49 54 45 5f 42  nBytes, SQLITE_B
74d0: 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69 66 28  IGENDIAN);.  if(
74e0: 20 21 7a 53 71 6c 38 20 29 7b 0a 20 20 20 20 73   !zSql8 ){.    s
74f0: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
7500: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29  SQLITE_NOMEM, 0)
7510: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  ;.    return SQL
7520: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20  ITE_NOMEM;.  }. 
7530: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
7540: 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 38 2c  epare(db, zSql8,
7550: 20 2d 31 2c 20 70 70 53 74 6d 74 2c 20 26 7a 54   -1, ppStmt, &zT
7560: 61 69 6c 38 29 3b 0a 0a 20 20 69 66 28 20 7a 54  ail8);..  if( zT
7570: 61 69 6c 38 20 26 26 20 70 7a 54 61 69 6c 20 29  ail8 && pzTail )
7580: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 73 71 6c 69  {.    /* If sqli
7590: 74 65 33 5f 70 72 65 70 61 72 65 20 72 65 74 75  te3_prepare retu
75a0: 72 6e 73 20 61 20 74 61 69 6c 20 70 6f 69 6e 74  rns a tail point
75b0: 65 72 2c 20 77 65 20 63 61 6c 63 75 6c 61 74 65  er, we calculate
75c0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 71 75 69   the.    ** equi
75d0: 76 61 6c 65 6e 74 20 70 6f 69 6e 74 65 72 20 69  valent pointer i
75e0: 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73  nto the UTF-16 s
75f0: 74 72 69 6e 67 20 62 79 20 63 6f 75 6e 74 69 6e  tring by countin
7600: 67 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20 20  g the unicode.  
7610: 20 20 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20    ** characters 
7620: 62 65 74 77 65 65 6e 20 7a 53 71 6c 38 20 61 6e  between zSql8 an
7630: 64 20 7a 54 61 69 6c 38 2c 20 61 6e 64 20 74 68  d zTail8, and th
7640: 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 61 20 70  en returning a p
7650: 6f 69 6e 74 65 72 0a 20 20 20 20 2a 2a 20 74 68  ointer.    ** th
7660: 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e same number of
7670: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
7680: 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72 69   the UTF-16 stri
7690: 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ng..    */.    i
76a0: 6e 74 20 63 68 61 72 73 5f 70 61 72 73 65 64 20  nt chars_parsed 
76b0: 3d 20 73 71 6c 69 74 65 33 75 74 66 38 43 68 61  = sqlite3utf8Cha
76c0: 72 4c 65 6e 28 7a 53 71 6c 38 2c 20 7a 54 61 69  rLen(zSql8, zTai
76d0: 6c 38 2d 7a 53 71 6c 38 29 3b 0a 20 20 20 20 2a  l8-zSql8);.    *
76e0: 70 7a 54 61 69 6c 20 3d 20 28 75 38 20 2a 29 7a  pzTail = (u8 *)z
76f0: 53 71 6c 20 2b 20 73 71 6c 69 74 65 33 75 74 66  Sql + sqlite3utf
7700: 31 36 42 79 74 65 4c 65 6e 28 7a 53 71 6c 2c 20  16ByteLen(zSql, 
7710: 63 68 61 72 73 5f 70 61 72 73 65 64 29 3b 0a 20  chars_parsed);. 
7720: 20 7d 0a 20 0a 20 20 72 65 74 75 72 6e 20 72 63   }. .  return rc
7730: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
7740: 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 74 68 65  routine does the
7750: 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e 69 6e 67   work of opening
7760: 20 61 20 64 61 74 61 62 61 73 65 20 6f 6e 20 62   a database on b
7770: 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c 69  ehalf of.** sqli
7780: 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64 20 73  te3_open() and s
7790: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 29 2e  qlite3_open16().
77a0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
77b0: 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65 6e 61 6d  lename "zFilenam
77c0: 65 22 20 20 0a 2a 2a 20 69 73 20 55 54 46 2d 38  e"  .** is UTF-8
77d0: 20 65 6e 63 6f 64 65 64 2e 20 54 68 65 20 66 6f   encoded. The fo
77e0: 75 72 74 68 20 61 72 67 75 6d 65 6e 74 2c 20 22  urth argument, "
77f0: 64 65 66 5f 65 6e 63 22 20 69 73 20 6f 6e 65 20  def_enc" is one 
7800: 6f 66 20 74 68 65 20 54 45 58 54 5f 2a 0a 2a 2a  of the TEXT_*.**
7810: 20 6d 61 63 72 6f 73 20 66 72 6f 6d 20 73 71 6c   macros from sql
7820: 69 74 65 49 6e 74 2e 68 2e 20 49 66 20 77 65 20  iteInt.h. If we 
7830: 65 6e 64 20 75 70 20 63 72 65 61 74 69 6e 67 20  end up creating 
7840: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66  a new database f
7850: 69 6c 65 0a 2a 2a 20 28 6e 6f 74 20 6f 70 65 6e  ile.** (not open
7860: 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
7870: 6f 6e 65 29 2c 20 74 68 65 20 74 65 78 74 20 65  one), the text e
7880: 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 64  ncoding of the d
7890: 61 74 61 62 61 73 65 0a 2a 2a 20 77 69 6c 6c 20  atabase.** will 
78a0: 62 65 20 73 65 74 20 74 6f 20 74 68 69 73 20 76  be set to this v
78b0: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
78c0: 69 6e 74 20 6f 70 65 6e 44 61 74 61 62 61 73 65  int openDatabase
78d0: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
78e0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61  zFilename, /* Da
78f0: 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20  tabase filename 
7900: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
7910: 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  .  sqlite3 **ppD
7920: 62 2c 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  b,        /* OUT
7930: 3a 20 52 65 74 75 72 6e 65 64 20 64 61 74 61 62  : Returned datab
7940: 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20  ase handle */.  
7950: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 6f 70 74  const char **opt
7960: 69 6f 6e 73 2c 20 20 2f 2a 20 4e 75 6c 6c 20 74  ions,  /* Null t
7970: 65 72 6d 69 6e 61 74 65 64 20 6c 69 73 74 20 6f  erminated list o
7980: 66 20 64 62 20 6f 70 74 69 6f 6e 73 2c 20 6f 72  f db options, or
7990: 20 6e 75 6c 6c 20 2a 2f 0a 20 20 75 38 20 64 65   null */.  u8 de
79a0: 66 5f 65 6e 63 20 20 20 20 20 20 20 20 20 20 20  f_enc           
79b0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 45 58 54    /* One of TEXT
79c0: 5f 55 74 66 38 2c 20 54 45 58 54 5f 55 74 66 31  _Utf8, TEXT_Utf1
79d0: 36 6c 65 20 6f 72 20 54 45 58 54 5f 55 74 66 31  6le or TEXT_Utf1
79e0: 36 62 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  6be */.){.  sqli
79f0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
7a00: 63 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 45  c, i;.  char *zE
7a10: 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 23 69 66 64  rrMsg = 0;..#ifd
7a20: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
7a30: 20 66 6f 72 28 69 3d 30 3b 20 6f 70 74 69 6f 6e   for(i=0; option
7a40: 73 20 26 26 20 6f 70 74 69 6f 6e 73 5b 69 5d 3b  s && options[i];
7a50: 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20   i++){.    char 
7a60: 63 6f 6e 73 74 20 2a 7a 4f 70 74 20 3d 20 6f 70  const *zOpt = op
7a70: 74 69 6f 6e 73 5b 69 5d 3b 0a 20 20 20 20 69 66  tions[i];.    if
7a80: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
7a90: 43 6d 70 28 7a 4f 70 74 2c 20 22 2d 75 74 66 38  Cmp(zOpt, "-utf8
7aa0: 22 29 20 29 7b 0a 20 20 20 20 20 20 64 65 66 5f  ") ){.      def_
7ab0: 65 6e 63 20 3d 20 54 45 58 54 5f 55 74 66 38 3b  enc = TEXT_Utf8;
7ac0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 30  .    }else if( 0
7ad0: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
7ae0: 28 7a 4f 70 74 2c 20 22 2d 75 74 66 31 36 6c 65  (zOpt, "-utf16le
7af0: 22 29 20 29 7b 0a 20 20 20 20 20 20 64 65 66 5f  ") ){.      def_
7b00: 65 6e 63 20 3d 20 54 45 58 54 5f 55 74 66 31 36  enc = TEXT_Utf16
7b10: 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  le;.    }else if
7b20: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
7b30: 43 6d 70 28 7a 4f 70 74 2c 20 22 2d 75 74 66 31  Cmp(zOpt, "-utf1
7b40: 36 62 65 22 29 20 29 7b 0a 20 20 20 20 20 20 64  6be") ){.      d
7b50: 65 66 5f 65 6e 63 20 3d 20 54 45 58 54 5f 55 74  ef_enc = TEXT_Ut
7b60: 66 31 36 62 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  f16be;.    }.  }
7b70: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 41 6c  .#endif..  /* Al
7b80: 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74  locate the sqlit
7b90: 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e data structure
7ba0: 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74   */.  db = sqlit
7bb0: 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28  eMalloc( sizeof(
7bc0: 73 71 6c 69 74 65 29 20 29 3b 0a 20 20 69 66 28  sqlite) );.  if(
7bd0: 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70   db==0 ) goto op
7be0: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e  endb_out;.  db->
7bf0: 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20  priorNewRowid = 
7c00: 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  0;.  db->magic =
7c10: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
7c20: 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20  SY;.  db->nDb = 
7c30: 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64  2;.  db->aDb = d
7c40: 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20  b->aDbStatic;.  
7c50: 64 62 2d 3e 65 6e 63 20 3d 20 64 65 66 5f 65 6e  db->enc = def_en
7c60: 63 3b 0a 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  c;.  db->autoCom
7c70: 6d 69 74 20 3d 20 31 3b 0a 20 20 2f 2a 20 64 62  mit = 1;.  /* db
7c80: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
7c90: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b  E_ShortColNames;
7ca0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 48 61 73   */.  sqlite3Has
7cb0: 68 49 6e 69 74 28 26 64 62 2d 3e 61 46 75 6e 63  hInit(&db->aFunc
7cc0: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
7cd0: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69  RING, 0);.  sqli
7ce0: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
7cf0: 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 49 54  >aCollSeq, SQLIT
7d00: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
7d10: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
7d20: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
7d30: 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e     sqlite3HashIn
7d40: 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74  it(&db->aDb[i].t
7d50: 62 6c 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48  blHash, SQLITE_H
7d60: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
7d70: 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49      sqlite3HashI
7d80: 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  nit(&db->aDb[i].
7d90: 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  idxHash, SQLITE_
7da0: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
7db0: 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68  .    sqlite3Hash
7dc0: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
7dd0: 2e 74 72 69 67 48 61 73 68 2c 20 53 51 4c 49 54  .trigHash, SQLIT
7de0: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
7df0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  );.    sqlite3Ha
7e00: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
7e10: 69 5d 2e 61 46 4b 65 79 2c 20 53 51 4c 49 54 45  i].aFKey, SQLITE
7e20: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29  _HASH_STRING, 1)
7e30: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 70 44 66 6c  ;.  }.  db->pDfl
7e40: 74 43 6f 6c 6c 20 3d 0a 20 20 20 20 20 73 71 6c  tColl =.     sql
7e50: 69 74 65 33 43 68 61 6e 67 65 43 6f 6c 6c 61 74  ite3ChangeCollat
7e60: 69 6e 67 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20  ingFunction(db, 
7e70: 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 2c 20  "BINARY", 6, 0, 
7e80: 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46  binaryCollatingF
7e90: 75 6e 63 29 3b 0a 20 20 0a 20 20 2f 2a 20 4f 70  unc);.  .  /* Op
7ea0: 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64  en the backend d
7eb0: 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a  atabase driver *
7ec0: 2f 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d  /.  if( zFilenam
7ed0: 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20 73 74 72  e[0]==':' && str
7ee0: 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a  cmp(zFilename,":
7ef0: 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20 29 7b 0a  memory:")==0 ){.
7f00: 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
7f10: 72 65 20 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 63  re = 2;.  }.  rc
7f20: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
7f30: 61 63 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65  actory(db, zFile
7f40: 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47  name, 0, MAX_PAG
7f50: 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e  ES, &db->aDb[0].
7f60: 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  pBt);.  if( rc!=
7f70: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7f80: 20 2f 2a 20 46 49 58 20 4d 45 3a 20 73 71 6c 69   /* FIX ME: sqli
7f90: 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28  te3BtreeFactory(
7fa0: 29 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 73 71  ) should call sq
7fb0: 6c 69 74 65 33 45 72 72 6f 72 28 29 2e 20 2a 2f  lite3Error(). */
7fc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
7fd0: 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20  r(db, rc, 0);.  
7fe0: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
7ff0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
8000: 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  D;.    goto open
8010: 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62  db_out;.  }.  db
8020: 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d  ->aDb[0].zName =
8030: 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61   "main";.  db->a
8040: 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74  Db[1].zName = "t
8050: 65 6d 70 22 3b 0a 0a 20 20 2f 2a 20 41 74 74 65  emp";..  /* Atte
8060: 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65 20  mpt to read the 
8070: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 73 71 6c 69  schema */.  sqli
8080: 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
8090: 69 6e 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b  inFunctions(db);
80a0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49  .  rc = sqlite3I
80b0: 6e 69 74 28 64 62 2c 20 26 7a 45 72 72 4d 73 67  nit(db, &zErrMsg
80c0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
80d0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
80e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  {.    sqlite3_cl
80f0: 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62 20  ose(db);.    db 
8100: 3d 20 30 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  = 0;.    goto op
8110: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 65 6c 73  endb_out;.  }els
8120: 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45  e if( rc!=SQLITE
8130: 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54  _OK && rc!=SQLIT
8140: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 73 71  E_BUSY ){.    sq
8150: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
8160: 63 2c 20 22 25 73 22 2c 20 7a 45 72 72 4d 73 67  c, "%s", zErrMsg
8170: 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61  , 0);.    db->ma
8180: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
8190: 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c  IC_CLOSED;.  }el
81a0: 73 65 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69  se{.    db->magi
81b0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
81c0: 5f 4f 50 45 4e 3b 0a 20 20 7d 0a 20 20 69 66 28  _OPEN;.  }.  if(
81d0: 20 7a 45 72 72 4d 73 67 20 29 20 73 71 6c 69 74   zErrMsg ) sqlit
81e0: 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  eFree(zErrMsg);.
81f0: 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20 20 2a  .opendb_out:.  *
8200: 70 70 44 62 20 3d 20 64 62 3b 0a 20 20 72 65 74  ppDb = db;.  ret
8210: 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 63  urn sqlite3_errc
8220: 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ode(db);.}../*.*
8230: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
8240: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
8250: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
8260: 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  n(.  const char 
8270: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73  *zFilename, .  s
8280: 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20 0a  qlite3 **ppDb, .
8290: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 6f    const char **o
82a0: 70 74 69 6f 6e 73 0a 29 7b 0a 20 20 72 65 74 75  ptions.){.  retu
82b0: 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28  rn openDatabase(
82c0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 2c  zFilename, ppDb,
82d0: 20 6f 70 74 69 6f 6e 73 2c 20 54 45 58 54 5f 55   options, TEXT_U
82e0: 74 66 38 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f  tf8);.}../*.** O
82f0: 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61  pen a new databa
8300: 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  se handle..*/.in
8310: 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36  t sqlite3_open16
8320: 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  (.  const void *
8330: 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71  zFilename, .  sq
8340: 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20 0a 20  lite3 **ppDb, . 
8350: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 6f 70   const char **op
8360: 74 69 6f 6e 73 0a 29 7b 0a 20 20 63 68 61 72 20  tions.){.  char 
8370: 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20 2f  *zFilename8;   /
8380: 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63 6f  * zFilename enco
8390: 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e 73  ded in UTF-8 ins
83a0: 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20 2a  tead of UTF-16 *
83b0: 2f 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 61  /.  int rc;..  a
83c0: 73 73 65 72 74 28 20 70 70 44 62 20 29 3b 0a 0a  ssert( ppDb );..
83d0: 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73    zFilename8 = s
83e0: 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a  qlite3utf16to8(z
83f0: 46 69 6c 65 6e 61 6d 65 2c 20 2d 31 2c 20 53 51  Filename, -1, SQ
8400: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 29 3b  LITE_BIGENDIAN);
8410: 0a 20 20 69 66 28 20 21 7a 46 69 6c 65 6e 61 6d  .  if( !zFilenam
8420: 65 38 20 29 7b 0a 20 20 20 20 2a 70 70 44 62 20  e8 ){.    *ppDb 
8430: 3d 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  = 0;.    return 
8440: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
8450: 7d 0a 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20  }..  /* FIX ME: 
8460: 41 6c 73 6f 20 6e 65 65 64 20 74 6f 20 74 72 61  Also need to tra
8470: 6e 73 6c 61 74 65 20 74 68 65 20 6f 70 74 69 6f  nslate the optio
8480: 6e 20 73 74 72 69 6e 67 73 20 2a 2f 0a 0a 20 20  n strings */..  
8490: 69 66 28 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  if( SQLITE_BIGEN
84a0: 44 49 41 4e 20 29 7b 0a 20 20 20 20 72 63 20 3d  DIAN ){.    rc =
84b0: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46   openDatabase(zF
84c0: 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62 2c 20  ilename8, ppDb, 
84d0: 6f 70 74 69 6f 6e 73 2c 20 54 45 58 54 5f 55 74  options, TEXT_Ut
84e0: 66 31 36 62 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  f16be);.  }else{
84f0: 0a 20 20 20 20 72 63 20 3d 20 6f 70 65 6e 44 61  .    rc = openDa
8500: 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65  tabase(zFilename
8510: 38 2c 20 70 70 44 62 2c 20 6f 70 74 69 6f 6e 73  8, ppDb, options
8520: 2c 20 54 45 58 54 5f 55 74 66 31 36 6c 65 29 3b  , TEXT_Utf16le);
8530: 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 46 72  .  }..  sqliteFr
8540: 65 65 28 7a 46 69 6c 65 6e 61 6d 65 38 29 3b 0a  ee(zFilename8);.
8550: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
8560: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8570: 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73 74  ing routine dest
8580: 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20 6d  roys a virtual m
8590: 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20 63  achine that is c
85a0: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
85b0: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
85c0: 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68 65 20  () routine. The 
85d0: 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65 64  integer returned
85e0: 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a   is an SQLITE_.*
85f0: 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  * success/failur
8600: 65 20 63 6f 64 65 20 74 68 61 74 20 64 65 73 63  e code that desc
8610: 72 69 62 65 73 20 74 68 65 20 72 65 73 75 6c 74  ribes the result
8620: 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68   of executing th
8630: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  e virtual.** mac
8640: 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  hine..**.** This
8650: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
8660: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  e error code and
8670: 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
8680: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65   by.** sqlite3_e
8690: 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65  rrcode(), sqlite
86a0: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
86b0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
86c0: 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
86d0: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74  3_finalize(sqlit
86e0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
86f0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
8700: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56  3VdbeFinalize((V
8710: 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a  dbe*)pStmt, 0);.
8720: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
8730: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
8740: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
8750: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
8760: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
8770: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
8780: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
8790: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
87a0: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
87b0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
87c0: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
87d0: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
87e0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
87f0: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
8800: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
8810: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
8820: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
8830: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
8840: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
8850: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
8860: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
8870: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
8880: 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c  {.  int rc = sql
8890: 69 74 65 33 56 64 62 65 52 65 73 65 74 28 28 56  ite3VdbeReset((V
88a0: 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a  dbe*)pStmt, 0);.
88b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b    sqlite3VdbeMak
88c0: 65 52 65 61 64 79 28 28 56 64 62 65 2a 29 70 53  eReady((Vdbe*)pS
88d0: 74 6d 74 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 72  tmt, -1, 0);.  r
88e0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a              eturn rc;.}.