/ Hex Artifact Content
Login

Artifact 59b662fab26dd6f39224971755836f328b426cf3:


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 31 36 20 32 30 30 34 2f 30 36  ,v 1.216 2004/06
0280: 2f 31 32 20 30 30 3a 34 32 3a 33 35 20 64 61 6e  /12 00:42:35 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 33 3a 55 54 46 2d 31 36 20 4c 45 20  F-8 3:UTF-16 LE 
1c00: 34 3a 55 54 46 2d 31 36 20 42 45 0a 20 20 2a 2a  4: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 53 51 4c 49 54 45 5f 55 54 46  fined SQLITE_UTF
1cc0: 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73 71 6c  * symbols in sql
1cd0: 69 74 65 49 6e 74 2e 68 20 63 6f 72 72 65 73 70  iteInt.h corresp
1ce0: 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20  ond to.  ** the 
1cf0: 70 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  possible values 
1d00: 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f  of meta[4]..  */
1d10: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1d20: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20  E_OK ){.    int 
1d30: 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
1d40: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1d50: 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74 61 29 2f   i<sizeof(meta)/
1d60: 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30 5d 29 3b  sizeof(meta[0]);
1d70: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 72 63 20   i++){.      rc 
1d80: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1d90: 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1da0: 62 5d 2e 70 42 74 2c 20 69 2b 31 2c 20 26 6d 65  b].pBt, i+1, &me
1db0: 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ta[i]);.    }.  
1dc0: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
1dd0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
1de0: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c  ng(pzErrMsg, sql
1df0: 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20  ite3ErrStr(rc), 
1e00: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20  (char*)0);.     
1e10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
1e20: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
1e30: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1e40: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  rc;.    }.  }els
1e50: 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 6d 65  e{.    memset(me
1e60: 74 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65  ta, 0, sizeof(me
1e70: 74 61 29 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  ta));.  }.  db->
1e80: 61 44 62 5b 69 44 62 5d 2e 73 63 68 65 6d 61 5f  aDb[iDb].schema_
1e90: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d  cookie = meta[0]
1ea0: 3b 0a 0a 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69  ;..  /* If openi
1eb0: 6e 67 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 64  ng a non-empty d
1ec0: 61 74 61 62 61 73 65 2c 20 63 68 65 63 6b 20 74  atabase, check t
1ed0: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1ee0: 2e 20 46 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  . For the.  ** m
1ef0: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65  ain database, se
1f00: 74 20 73 71 6c 69 74 65 33 2e 65 6e 63 20 74 6f  t sqlite3.enc to
1f10: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
1f20: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1f30: 73 65 2e 0a 20 20 2a 2a 20 46 6f 72 20 61 6e 20  se..  ** For an 
1f40: 61 74 74 61 63 68 65 64 20 64 62 2c 20 69 74 20  attached db, it 
1f50: 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  is an error if t
1f60: 68 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 6e  he encoding is n
1f70: 6f 74 20 74 68 65 20 73 61 6d 65 0a 20 20 2a 2a  ot the same.  **
1f80: 20 61 73 20 73 71 6c 69 74 65 33 2e 65 6e 63 2e   as sqlite3.enc.
1f90: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61  .  */.  if( meta
1fa0: 5b 34 5d 20 29 7b 20 20 2f 2a 20 74 65 78 74 20  [4] ){  /* text 
1fb0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 20 20  encoding */.    
1fc0: 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20  if( iDb==0 ){.  
1fd0: 20 20 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e      /* If openin
1fe0: 67 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  g the main datab
1ff0: 61 73 65 2c 20 73 65 74 20 64 62 2d 3e 65 6e 63  ase, set db->enc
2000: 2e 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 65  . */.      db->e
2010: 6e 63 20 3d 20 28 75 38 29 6d 65 74 61 5b 34 5d  nc = (u8)meta[4]
2020: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70 44 66 6c  ;.      db->pDfl
2030: 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  tColl = sqlite3F
2040: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 64  indCollSeq(db, d
2050: 62 2d 3e 65 6e 63 2c 20 22 42 49 4e 41 52 59 22  b->enc, "BINARY"
2060: 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , 6, 0);.    }el
2070: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
2080: 6f 70 65 6e 69 6e 67 20 61 6e 20 61 74 74 61 63  opening an attac
2090: 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  hed database, th
20a0: 65 20 65 6e 63 6f 64 69 6e 67 20 6d 75 63 68 20  e encoding much 
20b0: 6d 61 74 63 68 20 64 62 2d 3e 65 6e 63 20 2a 2f  match db->enc */
20c0: 0a 20 20 20 20 20 20 69 66 28 20 6d 65 74 61 5b  .      if( meta[
20d0: 34 5d 21 3d 64 62 2d 3e 65 6e 63 20 29 7b 0a 20  4]!=db->enc ){. 
20e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
20f0: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
2100: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 20 20 20  urMain);.       
2110: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2120: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 61 74 74  g(pzErrMsg, "att
2130: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
2140: 6d 75 73 74 20 75 73 65 20 74 68 65 20 73 61 6d  must use the sam
2150: 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  e".            "
2160: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61   text encoding a
2170: 73 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 22  s main database"
2180: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
2190: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
21a0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
21b0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69  }.    }.  }..  i
21c0: 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20  f( iDb==0 ){.   
21d0: 20 73 69 7a 65 20 3d 20 6d 65 74 61 5b 32 5d 3b   size = meta[2];
21e0: 0a 20 20 20 20 69 66 28 20 73 69 7a 65 3d 3d 30  .    if( size==0
21f0: 20 29 7b 20 73 69 7a 65 20 3d 20 4d 41 58 5f 50   ){ size = MAX_P
2200: 41 47 45 53 3b 20 7d 0a 20 20 20 20 64 62 2d 3e  AGES; }.    db->
2210: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
2220: 65 3b 0a 20 20 20 20 64 62 2d 3e 73 61 66 65 74  e;.    db->safet
2230: 79 5f 6c 65 76 65 6c 20 3d 20 6d 65 74 61 5b 33  y_level = meta[3
2240: 5d 3b 0a 20 20 20 20 69 66 28 20 6d 65 74 61 5b  ];.    if( meta[
2250: 35 5d 3e 30 20 26 26 20 6d 65 74 61 5b 35 5d 3c  5]>0 && meta[5]<
2260: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
2270: 74 6f 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  tore==0 ){.     
2280: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
2290: 3d 20 6d 65 74 61 5b 35 5d 3b 0a 20 20 20 20 7d  = meta[5];.    }
22a0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 73 61 66  .    if( db->saf
22b0: 65 74 79 5f 6c 65 76 65 6c 3d 3d 30 20 29 20 64  ety_level==0 ) d
22c0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
22d0: 3d 20 32 3b 0a 0a 20 20 20 20 2f 2a 20 46 49 58  = 2;..    /* FIX
22e0: 20 4d 45 3a 20 45 76 65 72 79 20 73 74 72 75 63   ME: Every struc
22f0: 74 20 44 62 20 77 69 6c 6c 20 6e 65 65 64 20 61  t Db will need a
2300: 20 6e 65 78 74 5f 63 6f 6f 6b 69 65 20 2a 2f 0a   next_cookie */.
2310: 20 20 20 20 64 62 2d 3e 6e 65 78 74 5f 63 6f 6f      db->next_coo
2320: 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d 3b 0a 20  kie = meta[0];. 
2330: 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d     db->file_form
2340: 61 74 20 3d 20 6d 65 74 61 5b 31 5d 3b 0a 20 20  at = meta[1];.  
2350: 20 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66    if( db->file_f
2360: 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ormat==0 ){.    
2370: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
2380: 73 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  s if the databas
2390: 65 20 77 61 73 20 69 6e 69 74 69 61 6c 6c 79 20  e was initially 
23a0: 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 20 20 64  empty */.      d
23b0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
23c0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   1;.    }.  }.. 
23d0: 20 2f 2a 0a 20 20 2a 2a 20 20 66 69 6c 65 5f 66   /*.  **  file_f
23e0: 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56 65 72 73  ormat==1    Vers
23f0: 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20 2a 2f 0a  ion 3.0.0..  */.
2400: 20 20 69 66 28 20 6d 65 74 61 5b 31 5d 3e 31 20    if( meta[1]>1 
2410: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
2420: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
2430: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 73 71 6c  urMain);.    sql
2440: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2450: 45 72 72 4d 73 67 2c 20 22 75 6e 73 75 70 70 6f  ErrMsg, "unsuppo
2460: 72 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74  rted file format
2470: 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ", (char*)0);.  
2480: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2490: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 73 71  ERROR;.  }..  sq
24a0: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
24b0: 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b 69  heSize(db->aDb[i
24c0: 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61 63  Db].pBt, db->cac
24d0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 73 71 6c 69  he_size);.  sqli
24e0: 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74  te3BtreeSetSafet
24f0: 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44 62 5b 69  yLevel(db->aDb[i
2500: 44 62 5d 2e 70 42 74 2c 20 6d 65 74 61 5b 33 5d  Db].pBt, meta[3]
2510: 3d 3d 30 20 3f 20 32 20 3a 20 6d 65 74 61 5b 33  ==0 ? 2 : meta[3
2520: 5d 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 74  ]);..  /* Read t
2530: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
2540: 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74 68 65  ation out of the
2550: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 0a 20   schema tables. 
2560: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
2570: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20  ->init.busy );. 
2580: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2590: 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 2f 2a 20  EMPTY ){.    /* 
25a0: 46 6f 72 20 61 6e 20 65 6d 70 74 79 20 64 61 74  For an empty dat
25b0: 61 62 61 73 65 2c 20 74 68 65 72 65 20 69 73 20  abase, there is 
25c0: 6e 6f 74 68 69 6e 67 20 74 6f 20 72 65 61 64 20  nothing to read 
25d0: 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  */.    rc = SQLI
25e0: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
25f0: 20 20 20 20 73 71 6c 69 74 65 33 53 61 66 65 74      sqlite3Safet
2600: 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 69 66  yOff(db);.    if
2610: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
2620: 20 20 2f 2a 20 54 68 69 73 20 53 51 4c 20 73 74    /* This SQL st
2630: 61 74 65 6d 65 6e 74 20 74 72 69 65 73 20 74 6f  atement tries to
2640: 20 72 65 61 64 20 74 68 65 20 74 65 6d 70 2e 2a   read the temp.*
2650: 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
2660: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
2670: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 74 61 62  _temp_master tab
2680: 6c 65 2e 20 49 74 20 6d 69 67 68 74 20 72 65 74  le. It might ret
2690: 75 72 6e 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  urn SQLITE_EMPTY
26a0: 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
26b0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
26c0: 78 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72  xec(db, init_scr
26d0: 69 70 74 31 2c 20 73 71 6c 69 74 65 33 49 6e 69  ipt1, sqlite3Ini
26e0: 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
26f0: 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
2700: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2710: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
2720: 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 20 20 20  EMPTY ){.       
2730: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2740: 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72 69  ec(db, init_scri
2750: 70 74 32 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  pt2, sqlite3Init
2760: 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
2770: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ata, 0);.      }
2780: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2790: 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 30    char *zSql = 0
27a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
27b0: 65 74 53 74 72 69 6e 67 28 26 7a 53 71 6c 2c 20  etString(&zSql, 
27c0: 0a 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  .         "SELEC
27d0: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f  T type, name, ro
27e0: 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 22 2c 20  otpage, sql, ", 
27f0: 7a 44 62 4e 75 6d 2c 20 22 20 46 52 4f 4d 20 5c  zDbNum, " FROM \
2800: 22 22 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d  "",.         db-
2810: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
2820: 20 22 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74   "\".sqlite_mast
2830: 65 72 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  er", (char*)0);.
2840: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2850: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2860: 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
2870: 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
2880: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
2890: 74 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  teFree(zSql);.  
28a0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 53    }.    sqlite3S
28b0: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20  afetyOn(db);.   
28c0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
28d0: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
28e0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
28f0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
2900: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
2910: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
2920: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
2930: 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ory", (char*)0);
2940: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2950: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
2960: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
2970: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
2980: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
2990: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44 62  ITE_OK ){.    Db
29a0: 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20  SetProperty(db, 
29b0: 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
29c0: 61 64 65 64 29 3b 0a 20 20 20 20 69 66 28 20 69  aded);.    if( i
29d0: 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 44  Db==0 ){.      D
29e0: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
29f0: 20 31 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   1, DB_SchemaLoa
2a00: 64 65 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  ded);.    }.  }e
2a10: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2a20: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2a30: 65 6d 61 28 64 62 2c 20 69 44 62 29 3b 0a 20 20  ema(db, iDb);.  
2a40: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
2a50: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69  ../*.** Initiali
2a60: 7a 65 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ze all database 
2a70: 66 69 6c 65 73 20 2d 20 74 68 65 20 6d 61 69 6e  files - the main
2a80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
2a90: 74 68 65 20 66 69 6c 65 0a 2a 2a 20 75 73 65 64  the file.** used
2aa0: 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
2ab0: 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
2ac0: 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 64  any additional d
2ad0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 0a 2a 2a  atabase files.**
2ae0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 41   created using A
2af0: 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73  TTACH statements
2b00: 2e 20 20 52 65 74 75 72 6e 20 61 20 73 75 63 63  .  Return a succ
2b10: 65 73 73 20 63 6f 64 65 2e 20 20 49 66 20 61 6e  ess code.  If an
2b20: 0a 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73  .** error occurs
2b30: 2c 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  , write an error
2b40: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 2a 70   message into *p
2b50: 7a 45 72 72 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41  zErrMsg..**.** A
2b60: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
2b70: 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  e is initialized
2b80: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49 6e 69  , the SQLITE_Ini
2b90: 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74 20  tialized.** bit 
2ba0: 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66 6c  is set in the fl
2bb0: 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ags field of the
2bc0: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75 72   sqlite structur
2bd0: 65 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  e. .*/.int sqlit
2be0: 65 33 49 6e 69 74 28 73 71 6c 69 74 65 20 2a 64  e3Init(sqlite *d
2bf0: 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  b, char **pzErrM
2c00: 73 67 29 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63  sg){.  int i, rc
2c10: 3b 0a 20 20 0a 20 20 69 66 28 20 64 62 2d 3e 69  ;.  .  if( db->i
2c20: 6e 69 74 2e 62 75 73 79 20 29 20 72 65 74 75 72  nit.busy ) retur
2c30: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61  n SQLITE_OK;.  a
2c40: 73 73 65 72 74 28 20 28 64 62 2d 3e 66 6c 61 67  ssert( (db->flag
2c50: 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69  s & SQLITE_Initi
2c60: 61 6c 69 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20  alized)==0 );.  
2c70: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2c80: 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2c90: 3d 20 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  = 1;.  for(i=0; 
2ca0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
2cb0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
2cc0: 7b 0a 20 20 20 20 69 66 28 20 44 62 48 61 73 50  {.    if( DbHasP
2cd0: 72 6f 70 65 72 74 79 28 64 62 2c 20 69 2c 20 44  roperty(db, i, D
2ce0: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
2cf0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
2d00: 61 73 73 65 72 74 28 20 69 21 3d 31 20 29 3b 20  assert( i!=1 ); 
2d10: 20 2f 2a 20 53 68 6f 75 6c 64 20 68 61 76 65 20   /* Should have 
2d20: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
2d30: 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 30   together with 0
2d40: 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2d50: 69 74 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20  ite3InitOne(db, 
2d60: 69 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  i, pzErrMsg);.  
2d70: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2d80: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
2d90: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
2da0: 20 69 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   i);.    }.  }. 
2db0: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2dc0: 20 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   0;.  if( rc==SQ
2dd0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64  LITE_OK ){.    d
2de0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2df0: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a  TE_Initialized;.
2e00: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69      sqlite3Commi
2e10: 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
2e20: 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  (db);.  }..  if(
2e30: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2e40: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2e50: 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69  &= ~SQLITE_Initi
2e60: 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65  alized;.  }.  re
2e70: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
2e80: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
2e90: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
2ea0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2eb0: 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74   is already init
2ec0: 69 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65  ialised..** Othe
2ed0: 72 77 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d  rwise, the schem
2ee0: 61 20 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20  a is loaded. An 
2ef0: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65  error code is re
2f00: 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  turned..*/.int s
2f10: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2f20: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 68 61  (sqlite *db, cha
2f30: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20  r **pzErrMsg){. 
2f40: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
2f50: 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 21 64 62 2d  _OK;..  if( !db-
2f60: 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20  >init.busy ){.  
2f70: 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
2f80: 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61   & SQLITE_Initia
2f90: 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20  lized)==0 ){.   
2fa0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49     rc = sqlite3I
2fb0: 6e 69 74 28 64 62 2c 20 70 7a 45 72 72 4d 73 67  nit(db, pzErrMsg
2fc0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  );.    }.  }.  a
2fd0: 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
2fe0: 45 5f 4f 4b 20 7c 7c 20 28 64 62 2d 3e 66 6c 61  E_OK || (db->fla
2ff0: 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74  gs & SQLITE_Init
3000: 69 61 6c 69 7a 65 64 29 7c 7c 64 62 2d 3e 69 6e  ialized)||db->in
3010: 69 74 2e 62 75 73 79 20 29 3b 0a 20 20 72 65 74  it.busy );.  ret
3020: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
3030: 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20   The version of 
3040: 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63  the library.*/.c
3050: 6f 6e 73 74 20 63 68 61 72 20 72 63 73 69 64 5b  onst char rcsid[
3060: 5d 20 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64  ] = "@(#) \044Id
3070: 3a 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  : SQLite version
3080: 20 22 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   " SQLITE_VERSIO
3090: 4e 20 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68  N " $";.const ch
30a0: 61 72 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69  ar sqlite3_versi
30b0: 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45  on[] = SQLITE_VE
30c0: 52 53 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  RSION;../*.** Th
30d0: 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
30e0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
30f0: 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e 41  tion named "BINA
3100: 52 59 22 20 77 68 69 63 68 20 69 73 20 61 6c 77  RY" which is alw
3110: 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65  ays.** available
3120: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
3130: 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46  binaryCollatingF
3140: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  unc(.  void *Not
3150: 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Used,.  int nKey
3160: 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  1, const void *p
3170: 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Key1,.  int nKey
3180: 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  2, const void *p
3190: 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63  Key2.){.  int rc
31a0: 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31  , n;.  n = nKey1
31b0: 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a  <nKey2 ? nKey1 :
31c0: 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d 20 6d   nKey2;.  rc = m
31d0: 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65  emcmp(pKey1, pKe
31e0: 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20 72 63  y2, n);.  if( rc
31f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
3200: 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b 0a 20  nKey1 - nKey2;. 
3210: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
3220: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68 65 72  }../*.** Another
3230: 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74   built-in collat
3240: 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20 4e 4f  ing sequence: NO
3250: 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  CASE. .**.** Thi
3260: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
3270: 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64 65 64  ence is intended
3280: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
3290: 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64 61 6e  "case independan
32a0: 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 22  t.** comparison"
32b0: 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f 77 6c  . SQLite's knowl
32c0: 65 64 67 65 20 6f 66 20 75 70 70 65 72 20 61 6e  edge of upper an
32d0: 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65 71 75  d lower case equ
32e0: 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78 74 65  ivalents.** exte
32f0: 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68 65 20  nds only to the 
3300: 32 36 20 63 68 61 72 61 63 74 65 72 73 20 75 73  26 characters us
3310: 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c 69 73  ed in the Englis
3320: 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a 0a 2a  h language..**.*
3330: 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e 74 20  * At the moment 
3340: 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20  there is only a 
3350: 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e 74 61  UTF-8 implementa
3360: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tion..*/.static 
3370: 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74  int nocaseCollat
3380: 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20  ingFunc(.  void 
3390: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20  *NotUsed,.  int 
33a0: 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey1, const voi
33b0: 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20  d *pKey1,.  int 
33c0: 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey2, const voi
33d0: 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e  d *pKey2.){.  in
33e0: 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53 74 72  t r = sqlite3Str
33f0: 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28 63 6f  NICmp(.      (co
3400: 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65 79 31  nst char *)pKey1
3410: 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  , (const char *)
3420: 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3e 6e 4b  pKey2, (nKey1>nK
3430: 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32  ey2)?nKey1:nKey2
3440: 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20 29 7b  );.  if( 0==r ){
3450: 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31 2d 6e  .    r = nKey1-n
3460: 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Key2;.  }.  retu
3470: 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn r;.}../*.** R
3480: 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20  eturn the ROWID 
3490: 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  of the most rece
34a0: 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 6c 6f 6e  nt insert.*/.lon
34b0: 67 20 6c 6f 6e 67 20 69 6e 74 20 73 71 6c 69 74  g long int sqlit
34c0: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
34d0: 6f 77 69 64 28 73 71 6c 69 74 65 20 2a 64 62 29  owid(sqlite *db)
34e0: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c  {.  return db->l
34f0: 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a  astRowid;.}../*.
3500: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
3510: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
3520: 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
3530: 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74  nt call to sqlit
3540: 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e  e3_exec()..*/.in
3550: 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  t sqlite3_change
3560: 73 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20  s(sqlite *db){. 
3570: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61   return db->nCha
3580: 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  nge;.}../*.** Re
3590: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
35a0: 6f 66 20 63 68 61 6e 67 65 73 20 70 72 6f 64 75  of changes produ
35b0: 63 65 64 20 62 79 20 74 68 65 20 6c 61 73 74 20  ced by the last 
35c0: 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
35d0: 6f 72 0a 2a 2a 20 44 45 4c 45 54 45 20 73 74 61  or.** DELETE sta
35e0: 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6d 70 6c 65  tement to comple
35f0: 74 65 20 65 78 65 63 75 74 69 6f 6e 2e 20 54 68  te execution. Th
3600: 65 20 63 6f 75 6e 74 20 64 6f 65 73 20 6e 6f 74  e count does not
3610: 20 69 6e 63 6c 75 64 65 0a 2a 2a 20 63 68 61 6e   include.** chan
3620: 67 65 73 20 64 75 65 20 74 6f 20 53 51 4c 20 73  ges due to SQL s
3630: 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74  tatements execut
3640: 65 64 20 69 6e 20 74 72 69 67 67 65 72 20 70 72  ed in trigger pr
3650: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 65 72 65  ograms that were
3660: 0a 2a 2a 20 74 72 69 67 67 65 72 65 64 20 62 79  .** triggered by
3670: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 0a   that statement.
3680: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c  */.int sqlite3_l
3690: 61 73 74 5f 73 74 61 74 65 6d 65 6e 74 5f 63 68  ast_statement_ch
36a0: 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62  anges(sqlite *db
36b0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
36c0: 6c 73 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  lsChange;.}../*.
36d0: 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73  ** Close an exis
36e0: 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61  ting SQLite data
36f0: 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  base.*/.void sql
3700: 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74  ite3_close(sqlit
3710: 65 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  e *db){.  HashEl
3720: 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a  em *i;.  int j;.
3730: 20 20 64 62 2d 3e 77 61 6e 74 5f 74 6f 5f 63 6c    db->want_to_cl
3740: 6f 73 65 20 3d 20 31 3b 0a 20 20 69 66 28 20 73  ose = 1;.  if( s
3750: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
3760: 6b 28 64 62 29 20 7c 7c 20 73 71 6c 69 74 65 33  k(db) || sqlite3
3770: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
3780: 20 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44      /* printf("D
3790: 49 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29  ID NOT CLOSE\n")
37a0: 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29  ; fflush(stdout)
37b0: 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 3b  ; */.    return;
37c0: 0a 20 20 7d 0a 20 20 64 62 2d 3e 6d 61 67 69 63  .  }.  db->magic
37d0: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
37e0: 43 4c 4f 53 45 44 3b 0a 20 20 66 6f 72 28 6a 3d  CLOSED;.  for(j=
37f0: 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b  0; j<db->nDb; j+
3800: 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20 44  +){.    struct D
3810: 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  b *pDb = &db->aD
3820: 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70 44  b[j];.    if( pD
3830: 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20  b->pBt ){.      
3840: 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73  sqlite3BtreeClos
3850: 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  e(pDb->pBt);.   
3860: 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b     pDb->pBt = 0;
3870: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
3880: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
3890: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
38a0: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 44    assert( db->nD
38b0: 62 3c 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74  b<=2 );.  assert
38c0: 28 20 64 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61  ( db->aDb==db->a
38d0: 44 62 53 74 61 74 69 63 20 29 3b 0a 20 20 66 6f  DbStatic );.  fo
38e0: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
38f0: 72 73 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b  rst(&db->aFunc);
3900: 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68   i; i=sqliteHash
3910: 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75  Next(i)){.    Fu
3920: 6e 63 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70  ncDef *pFunc, *p
3930: 4e 65 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46  Next;.    for(pF
3940: 75 6e 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29  unc = (FuncDef*)
3950: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
3960: 29 3b 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d  ); pFunc; pFunc=
3970: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e  pNext){.      pN
3980: 65 78 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65  ext = pFunc->pNe
3990: 78 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  xt;.      sqlite
39a0: 46 72 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20  Free(pFunc);.   
39b0: 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d   }.  }..  for(i=
39c0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
39d0: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20  &db->aFunc); i; 
39e0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
39f0: 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65  (i)){.    CollSe
3a00: 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c  q *pColl = (Coll
3a10: 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68  Seq *)sqliteHash
3a20: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 2f 2a 20  Data(i);.    /* 
3a30: 73 71 6c 69 74 65 46 72 65 65 28 70 43 6f 6c 6c  sqliteFree(pColl
3a40: 29 3b 20 2a 2f 0a 20 20 7d 0a 0a 20 20 73 71 6c  ); */.  }..  sql
3a50: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
3a60: 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c  b->aFunc);.  sql
3a70: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
3a80: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20  LITE_OK, 0); /* 
3a90: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
3aa0: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
3ab0: 69 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ings. */.  sqlit
3ac0: 65 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a  eFree(db);.}../*
3ad0: 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c  .** Rollback all
3ae0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
3af0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3b00: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
3b10: 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  te *db){.  int i
3b20: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64  ;.  for(i=0; i<d
3b30: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
3b40: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
3b50: 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71  .pBt ){.      sq
3b60: 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61  lite3BtreeRollba
3b70: 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  ck(db->aDb[i].pB
3b80: 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  t);.      db->aD
3b90: 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30  b[i].inTrans = 0
3ba0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
3bb0: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
3bc0: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
3bd0: 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 52 6f 6c  .  /* sqlite3Rol
3be0: 6c 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61  lbackInternalCha
3bf0: 6e 67 65 73 28 64 62 29 3b 20 2a 2f 0a 7d 0a 0a  nges(db); */.}..
3c00: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73  /*.** Return a s
3c10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 68 61  tatic string tha
3c20: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
3c30: 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70  kind of error sp
3c40: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a  ecified in the.*
3c50: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63  * argument..*/.c
3c60: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
3c70: 65 33 45 72 72 53 74 72 28 69 6e 74 20 72 63 29  e3ErrStr(int rc)
3c80: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
3c90: 7a 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20  z;.  switch( rc 
3ca0: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
3cb0: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
3cc0: 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72   = "not an error
3cd0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3cf0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d00: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a  TE_ERROR:      z
3d10: 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72   = "SQL logic er
3d20: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
3d30: 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61  atabase";   brea
3d40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d50: 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a  TE_INTERNAL:   z
3d60: 20 3d 20 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c   = "internal SQL
3d70: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
3d80: 6f 6e 20 66 6c 61 77 22 3b 20 20 20 62 72 65 61  on flaw";   brea
3d90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3da0: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
3db0: 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69   = "access permi
3dc0: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ssion denied";  
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3de0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3df0: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
3e00: 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71   = "callback req
3e10: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
3e20: 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  rt";        brea
3e30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e40: 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a  TE_BUSY:       z
3e50: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
3e60: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3e80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e90: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
3ea0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62   = "database tab
3eb0: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20  le is locked";  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3ed0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3ee0: 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a  TE_NOMEM:      z
3ef0: 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   = "out of memor
3f00: 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y";             
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3f20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f30: 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a  TE_READONLY:   z
3f40: 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77   = "attempt to w
3f50: 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20  rite a readonly 
3f60: 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61  database";  brea
3f70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f80: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
3f90: 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22   = "interrupted"
3fa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3fc0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3fd0: 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a  TE_IOERR:      z
3fe0: 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72   = "disk I/O err
3ff0: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
4000: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4010: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4020: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
4030: 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73   = "database dis
4040: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
4050: 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61  rmed";      brea
4060: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4070: 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a  TE_NOTFOUND:   z
4080: 20 3d 20 22 74 61 62 6c 65 20 6f 72 20 72 65 63   = "table or rec
4090: 6f 72 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20  ord not found"; 
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
40b0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
40c0: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
40d0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
40e0: 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20  full";          
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4100: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4110: 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a  TE_CANTOPEN:   z
4120: 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70   = "unable to op
4130: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
4140: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
4150: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4160: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
4170: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63   = "database loc
4180: 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61  king protocol fa
4190: 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61  ilure";     brea
41a0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
41b0: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
41c0: 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69   = "table contai
41d0: 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20  ns no data";    
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
41f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4200: 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a  TE_SCHEMA:     z
4210: 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68   = "database sch
4220: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
4230: 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;           brea
4240: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4250: 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a  TE_TOOBIG:     z
4260: 20 3d 20 22 74 6f 6f 20 6d 75 63 68 20 64 61 74   = "too much dat
4270: 61 20 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20  a for one table 
4280: 72 6f 77 22 3b 20 20 20 20 20 20 20 62 72 65 61  row";       brea
4290: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
42a0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
42b0: 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66   = "constraint f
42c0: 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20  ailed";         
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
42e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
42f0: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a  TE_MISMATCH:   z
4300: 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   = "datatype mis
4310: 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20  match";         
4320: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4330: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4340: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
4350: 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74   = "library rout
4360: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
4370: 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61  f sequence";brea
4380: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4390: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
43a0: 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73   = "kernel lacks
43b0: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
43c0: 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61  ort";       brea
43d0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
43e0: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a  TE_AUTH:       z
43f0: 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f   = "authorizatio
4400: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
4410: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4420: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4430: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
4440: 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61   = "auxiliary da
4450: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
4460: 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61  ror";       brea
4470: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4480: 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a  TE_RANGE:      z
4490: 20 3d 20 22 62 69 6e 64 20 69 6e 64 65 78 20 6f   = "bind index o
44a0: 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20  ut of range";   
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
44c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
44d0: 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a  TE_NOTADB:     z
44e0: 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72   = "file is encr
44f0: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
4500: 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61  a database";brea
4510: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
4530: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f   = "unknown erro
4540: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
4550: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4560: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
4570: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
4580: 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65   routine impleme
4590: 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62  nts a busy callb
45a0: 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20  ack that sleeps 
45b0: 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61  and tries.** aga
45c0: 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f  in until a timeo
45d0: 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63  ut value is reac
45e0: 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75  hed.  The timeou
45f0: 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e  t value is.** an
4600: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
4610: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
4620: 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
4630: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
4640: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
4650: 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  t sqliteDefaultB
4660: 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f  usyCallback(. vo
4670: 69 64 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20  id *Timeout,    
4680: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
4690: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
46a0: 20 74 6f 20 77 61 69 74 20 2a 2f 0a 20 63 6f 6e   to wait */. con
46b0: 73 74 20 63 68 61 72 20 2a 4e 6f 74 55 73 65 64  st char *NotUsed
46c0: 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d  ,     /* The nam
46d0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
46e0: 68 61 74 20 69 73 20 62 75 73 79 20 2a 2f 0a 20  hat is busy */. 
46f0: 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20  int count       
4700: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
4710: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c  er of times tabl
4720: 65 20 68 61 73 20 62 65 65 6e 20 62 75 73 79 20  e has been busy 
4730: 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45  */.){.#if SQLITE
4740: 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31  _MIN_SLEEP_MS==1
4750: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
4760: 63 68 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d 0a  char delays[] =.
4770: 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20       { 1, 2, 5, 
4780: 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20  10, 15, 20, 25, 
4790: 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35  25,  25,  50,  5
47a0: 30 2c 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20 20  0,  50, 100};.  
47b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 68 6f  static const sho
47c0: 72 74 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d 20  rt int totals[] 
47d0: 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33  =.     { 0, 1, 3
47e0: 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33  ,  8, 18, 33, 53
47f0: 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20  , 78, 103, 128, 
4800: 31 37 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b 0a  178, 228, 287};.
4810: 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20  # define NDELAY 
4820: 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f  (sizeof(delays)/
4830: 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d  sizeof(delays[0]
4840: 29 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  )).  int timeout
4850: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
4860: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
4870: 69 6f 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75 6e  ior;..  if( coun
4880: 74 20 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a 20  t <= NDELAY ){. 
4890: 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79     delay = delay
48a0: 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20 20  s[count-1];.    
48b0: 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63  prior = totals[c
48c0: 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65  ount-1];.  }else
48d0: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  {.    delay = de
48e0: 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a  lays[NDELAY-1];.
48f0: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
4900: 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64  ls[NDELAY-1] + d
4910: 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c  elay*(count-NDEL
4920: 41 59 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28  AY-1);.  }.  if(
4930: 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e   prior + delay >
4940: 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20   timeout ){.    
4950: 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20  delay = timeout 
4960: 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28  - prior;.    if(
4970: 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75   delay<=0 ) retu
4980: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rn 0;.  }.  sqli
4990: 74 65 33 4f 73 53 6c 65 65 70 28 64 65 6c 61 79  te3OsSleep(delay
49a0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
49b0: 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f  else.  int timeo
49c0: 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75  ut = (int)Timeou
49d0: 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b  t;.  if( (count+
49e0: 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75  1)*1000 > timeou
49f0: 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  t ){.    return 
4a00: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
4a10: 4f 73 53 6c 65 65 70 28 31 30 30 30 29 3b 0a 20  OsSleep(1000);. 
4a20: 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69   return 1;.#endi
4a30: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  f.}../*.** This 
4a40: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
4a50: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66   busy callback f
4a60: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
4a70: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
4a80: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
4a90: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
4aa0: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
4ab0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4ac0: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20  _busy_handler(. 
4ad0: 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20 20 69   sqlite *db,.  i
4ae0: 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64  nt (*xBusy)(void
4af0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
4b00: 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67  t),.  void *pArg
4b10: 0a 29 7b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61  .){.  db->busyHa
4b20: 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42  ndler.xFunc = xB
4b30: 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  usy;.  db->busyH
4b40: 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41  andler.pArg = pA
4b50: 72 67 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  rg;.}..#ifndef S
4b60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4b70: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f 2a 0a  ESS_CALLBACK./*.
4b80: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
4b90: 73 65 74 73 20 74 68 65 20 70 72 6f 67 72 65 73  sets the progres
4ba0: 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  s callback for a
4bb0: 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73  n Sqlite databas
4bc0: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65  e to the.** give
4bd0: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
4be0: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76  ion with the giv
4bf0: 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65  en argument. The
4c00: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
4c10: 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 69 6e  ck will.** be in
4c20: 76 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f 70 73  voked every nOps
4c30: 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76 6f 69   opcodes..*/.voi
4c40: 64 20 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65  d sqlite3_progre
4c50: 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71  ss_handler(.  sq
4c60: 6c 69 74 65 20 2a 64 62 2c 20 0a 20 20 69 6e 74  lite *db, .  int
4c70: 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20 28 2a 78   nOps,.  int (*x
4c80: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 2a 29  Progress)(void*)
4c90: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a  , .  void *pArg.
4ca0: 29 7b 0a 20 20 69 66 28 20 6e 4f 70 73 3e 30 20  ){.  if( nOps>0 
4cb0: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67  ){.    db->xProg
4cc0: 72 65 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73  ress = xProgress
4cd0: 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72  ;.    db->nProgr
4ce0: 65 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20  essOps = nOps;. 
4cf0: 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73     db->pProgress
4d00: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 7d 65  Arg = pArg;.  }e
4d10: 6c 73 65 7b 0a 20 20 20 20 64 62 2d 3e 78 50 72  lse{.    db->xPr
4d20: 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 20 20  ogress = 0;.    
4d30: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4d40: 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 70 50   = 0;.    db->pP
4d50: 72 6f 67 72 65 73 73 41 72 67 20 3d 20 30 3b 0a  rogressArg = 0;.
4d60: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f    }.}.#endif.../
4d70: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4d80: 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66  e installs a def
4d90: 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65  ault busy handle
4da0: 72 20 74 68 61 74 20 77 61 69 74 73 20 66 6f 72  r that waits for
4db0: 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65   the.** specifie
4dc0: 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  d number of mill
4dd0: 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20  iseconds before 
4de0: 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a  returning 0..*/.
4df0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 62 75 73  void sqlite3_bus
4e00: 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74 65  y_timeout(sqlite
4e10: 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20   *db, int ms){. 
4e20: 20 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20   if( ms>0 ){.   
4e30: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61   sqlite3_busy_ha
4e40: 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69 74 65  ndler(db, sqlite
4e50: 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62  DefaultBusyCallb
4e60: 61 63 6b 2c 20 28 76 6f 69 64 2a 29 6d 73 29 3b  ack, (void*)ms);
4e70: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
4e80: 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c  lite3_busy_handl
4e90: 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20  er(db, 0, 0);.  
4ea0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65  }.}../*.** Cause
4eb0: 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 6f 70 65   any pending ope
4ec0: 72 61 74 69 6f 6e 20 74 6f 20 73 74 6f 70 20 61  ration to stop a
4ed0: 74 20 69 74 73 20 65 61 72 6c 69 65 73 74 20 6f  t its earliest o
4ee0: 70 70 6f 72 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76  pportunity..*/.v
4ef0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  oid sqlite3_inte
4f00: 72 72 75 70 74 28 73 71 6c 69 74 65 20 2a 64 62  rrupt(sqlite *db
4f10: 29 7b 0a 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  ){.  db->flags |
4f20: 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75  = SQLITE_Interru
4f30: 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e  pt;.}../*.** Win
4f40: 64 6f 77 73 20 73 79 73 74 65 6d 73 20 73 68 6f  dows systems sho
4f50: 75 6c 64 20 63 61 6c 6c 20 74 68 69 73 20 72 6f  uld call this ro
4f60: 75 74 69 6e 65 20 74 6f 20 66 72 65 65 20 6d 65  utine to free me
4f70: 6d 6f 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  mory that.** is 
4f80: 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20  returned in the 
4f90: 69 6e 20 74 68 65 20 65 72 72 6d 73 67 20 70 61  in the errmsg pa
4fa0: 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
4fb0: 65 33 5f 6f 70 65 6e 28 29 20 77 68 65 6e 0a 2a  e3_open() when.*
4fc0: 2a 20 53 51 4c 69 74 65 20 69 73 20 61 20 44 4c  * SQLite is a DL
4fd0: 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20 72 65 61  L.  For some rea
4fe0: 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  son, it does not
4ff0: 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c 20 66 72   work to call fr
5000: 65 65 28 29 0a 2a 2a 20 64 69 72 65 63 74 6c 79  ee().** directly
5010: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
5020: 74 20 77 65 20 6e 65 65 64 20 74 6f 20 63 61 6c  t we need to cal
5030: 6c 20 66 72 65 65 28 29 20 6e 6f 74 20 73 71 6c  l free() not sql
5040: 69 74 65 46 72 65 65 28 29 20 68 65 72 65 2c 20  iteFree() here, 
5050: 73 69 6e 63 65 20 65 76 65 72 79 0a 2a 2a 20 73  since every.** s
5060: 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 65 78  tring that is ex
5070: 70 6f 72 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  ported from SQLi
5080: 74 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 61  te should have a
5090: 6c 72 65 61 64 79 20 70 61 73 73 65 64 20 74 68  lready passed th
50a0: 72 6f 75 67 68 0a 2a 2a 20 73 71 6c 69 74 65 33  rough.** sqlite3
50b0: 53 74 72 52 65 61 6c 6c 6f 63 28 29 2e 0a 2a 2f  StrRealloc()..*/
50c0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 66 72  .void sqlite3_fr
50d0: 65 65 28 63 68 61 72 20 2a 70 29 7b 20 66 72 65  ee(char *p){ fre
50e0: 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43  e(p); }../*.** C
50f0: 72 65 61 74 65 20 6e 65 77 20 75 73 65 72 20 66  reate new user f
5100: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74  unctions..*/.int
5110: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
5120: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  function(.  sqli
5130: 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74  te3 *db,.  const
5140: 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e   char *zFunction
5150: 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67  Name,.  int nArg
5160: 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70  ,.  int eTextRep
5170: 2c 0a 20 20 69 6e 74 20 69 43 6f 6c 6c 61 74 65  ,.  int iCollate
5180: 41 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73  Arg,.  void *pUs
5190: 65 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28  erData,.  void (
51a0: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
51b0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
51c0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
51d0: 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28    void (*xStep)(
51e0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
51f0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
5200: 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
5210: 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33  *xFinal)(sqlite3
5220: 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20  _context*).){.  
5230: 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e  FuncDef *p;.  in
5240: 74 20 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20  t nName;..  if( 
5250: 28 64 62 3d 3d 30 20 7c 7c 20 7a 46 75 6e 63 74  (db==0 || zFunct
5260: 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71  ionName==0 || sq
5270: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
5280: 28 64 62 29 29 20 7c 7c 0a 20 20 20 20 20 20 28  (db)) ||.      (
5290: 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c  xFunc && (xFinal
52a0: 20 7c 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a   || xStep)) || .
52b0: 20 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26        (!xFunc &&
52c0: 20 28 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74   (xFinal && !xSt
52d0: 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21  ep)) ||.      (!
52e0: 78 46 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61  xFunc && (!xFina
52f0: 6c 20 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a  l && xStep)) ||.
5300: 20 20 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c        (nArg<-1 |
5310: 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20  | nArg>127) ||. 
5320: 20 20 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65       (255<(nName
5330: 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74   = strlen(zFunct
5340: 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20  ionName))) ){.  
5350: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5360: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 20  ERROR;.  }..  p 
5370: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
5380: 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74  ction(db, zFunct
5390: 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20  ionName, nName, 
53a0: 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20  nArg, eTextRep, 
53b0: 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29  1);.  if( p==0 )
53c0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 2d 3e   return 1;.  p->
53d0: 78 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a 20  xFunc = xFunc;. 
53e0: 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74 65   p->xStep = xSte
53f0: 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a  p;.  p->xFinaliz
5400: 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 70 2d  e = xFinal;.  p-
5410: 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55 73  >pUserData = pUs
5420: 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75 72 6e  erData;.  return
5430: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 69 6e   SQLITE_OK;.}.in
5440: 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  t sqlite3_create
5450: 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a 20 20 73  _function16(.  s
5460: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f  qlite3 *db,.  co
5470: 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75 6e 63 74  nst void *zFunct
5480: 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e  ionName,.  int n
5490: 41 72 67 2c 0a 20 20 69 6e 74 20 65 54 65 78 74  Arg,.  int eText
54a0: 52 65 70 2c 0a 20 20 69 6e 74 20 69 43 6f 6c 6c  Rep,.  int iColl
54b0: 61 74 65 41 72 67 2c 0a 20 20 76 6f 69 64 20 2a  ateArg,.  void *
54c0: 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76 6f 69  pUserData,.  voi
54d0: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
54e0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
54f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
5500: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  ,.  void (*xStep
5510: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
5520: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
5530: 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  alue**),.  void 
5540: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
5550: 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20  3_context*).){. 
5560: 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
5570: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 3b  *zFunctionName8;
5580: 0a 20 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  .  zFunctionName
5590: 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36  8 = sqlite3utf16
55a0: 74 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  to8(zFunctionNam
55b0: 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 42 49  e, -1, SQLITE_BI
55c0: 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69 66 28 20  GENDIAN);.  if( 
55d0: 21 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 20  !zFunctionName8 
55e0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
55f0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
5600: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
5610: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
5620: 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  b, zFunctionName
5630: 38 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65  8, nArg, eTextRe
5640: 70 2c 20 0a 20 20 20 20 20 20 69 43 6f 6c 6c 61  p, .      iColla
5650: 74 65 41 72 67 2c 20 70 55 73 65 72 44 61 74 61  teArg, pUserData
5660: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
5670: 78 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74  xFinal);.  sqlit
5680: 65 46 72 65 65 28 7a 46 75 6e 63 74 69 6f 6e 4e  eFree(zFunctionN
5690: 61 6d 65 38 29 3b 0a 20 20 72 65 74 75 72 6e 20  ame8);.  return 
56a0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  rc;.}../*.** Reg
56b0: 69 73 74 65 72 20 61 20 74 72 61 63 65 20 66 75  ister a trace fu
56c0: 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 41 72  nction.  The pAr
56d0: 67 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69  g from the previ
56e0: 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72 65 64  ously registered
56f0: 20 74 72 61 63 65 0a 2a 2a 20 69 73 20 72 65 74   trace.** is ret
5700: 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41  urned.  .**.** A
5710: 20 4e 55 4c 4c 20 74 72 61 63 65 20 66 75 6e 63   NULL trace func
5720: 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20  tion means that 
5730: 6e 6f 20 74 72 61 63 69 6e 67 20 69 73 20 65 78  no tracing is ex
5740: 65 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e  ecutes.  A non-N
5750: 55 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73 20  ULL.** trace is 
5760: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66  a pointer to a f
5770: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  unction that is 
5780: 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20 73  invoked at the s
5790: 74 61 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20  tart of each.** 
57a0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a  sqlite3_exec()..
57b0: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
57c0: 5f 74 72 61 63 65 28 73 71 6c 69 74 65 20 2a 64  _trace(sqlite *d
57d0: 62 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  b, void (*xTrace
57e0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
57f0: 61 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72 67  ar*), void *pArg
5800: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
5810: 3d 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b  = db->pTraceArg;
5820: 0a 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d 20  .  db->xTrace = 
5830: 78 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54  xTrace;.  db->pT
5840: 72 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b 0a  raceArg = pArg;.
5850: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
5860: 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e  ../*** EXPERIMEN
5870: 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65  TAL ***.**.** Re
5880: 67 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f  gister a functio
5890: 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  n to be invoked 
58a0: 77 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  when a transacti
58b0: 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20  on comments..** 
58c0: 49 66 20 65 69 74 68 65 72 20 66 75 6e 63 74 69  If either functi
58d0: 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  on returns non-z
58e0: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ero, then the co
58f0: 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a  mmit becomes a.*
5900: 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76  * rollback..*/.v
5910: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d  oid *sqlite3_com
5920: 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69  mit_hook(.  sqli
5930: 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  te *db,         
5940: 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20        /* Attach 
5950: 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73  the hook to this
5960: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69   database */.  i
5970: 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  nt (*xCallback)(
5980: 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63  void*),  /* Func
5990: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f  tion to invoke o
59a0: 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f  n each commit */
59b0: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
59d0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
59e0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
59f0: 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62   void *pOld = db
5a00: 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20  ->pCommitArg;.  
5a10: 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  db->xCommitCallb
5a20: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
5a30: 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72  .  db->pCommitAr
5a40: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
5a50: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a 0a  rn pOld;.}.../*.
5a60: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
5a70: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
5a80: 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  ate a connection
5a90: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 42   to a database B
5aa0: 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20  Tree.** driver. 
5ab0: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
5ac0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66   the name of a f
5ad0: 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74 20 66  ile, then that f
5ae0: 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64  ile is.** opened
5af0: 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66 20 7a   and used.  If z
5b00: 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20  Filename is the 
5b10: 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d  magic name ":mem
5b20: 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68  ory:" then.** th
5b30: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 73 74  e database is st
5b40: 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28  ored in memory (
5b50: 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f 72 67  and is thus forg
5b60: 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73  otten as soon as
5b70: 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  .** the connecti
5b80: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29 20 20  on is closed.)  
5b90: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
5ba0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 64 61  NULL then the da
5bb0: 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 66 6f 72  tabase.** is for
5bc0: 20 74 65 6d 70 6f 72 61 72 79 20 75 73 65 20 6f   temporary use o
5bd0: 6e 6c 79 20 61 6e 64 20 69 73 20 64 65 6c 65 74  nly and is delet
5be0: 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  ed as soon as th
5bf0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a 20  e connection.** 
5c00: 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
5c10: 20 41 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74   A temporary dat
5c20: 61 62 61 73 65 20 63 61 6e 20 62 65 20 65 69 74  abase can be eit
5c30: 68 65 72 20 61 20 64 69 73 6b 20 66 69 6c 65 20  her a disk file 
5c40: 28 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74  (that is automat
5c50: 69 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65  ically.** delete
5c60: 64 20 77 68 65 6e 20 74 68 65 20 66 69 6c 65 20  d when the file 
5c70: 69 73 20 63 6c 6f 73 65 64 29 20 6f 72 20 61 20  is closed) or a 
5c80: 73 65 74 20 6f 66 20 72 65 64 2d 62 6c 61 63 6b  set of red-black
5c90: 20 74 72 65 65 73 20 68 65 6c 64 20 69 6e 20 6d   trees held in m
5ca0: 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64  emory,.** depend
5cb0: 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  ing on the value
5cc0: 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54  s of the TEMP_ST
5cd0: 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ORE compile-time
5ce0: 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a   macro and the.*
5cf0: 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  * db->temp_store
5d00: 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72   variable, accor
5d10: 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ding to the foll
5d20: 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a  owing chart:.**.
5d30: 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54  **       TEMP_ST
5d40: 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70  ORE     db->temp
5d50: 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74  _store     Locat
5d60: 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ion of temporary
5d70: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20   database.**    
5d80: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20     ----------   
5d90: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
5da0: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d       -----------
5db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5dc0: 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ---.**          
5dd0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
5de0: 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20   any            
5df0: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
5e00: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
5e10: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
5e20: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
5e30: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
5e40: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
5e50: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
5e60: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
5e70: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
5e80: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
5e90: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
5eb0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
5ec0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20                2 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
5ef0: 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ory.**          
5f00: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
5f10: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
5f20: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
5f30: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
5f40: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
5f50: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69       memory.*/.i
5f60: 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46  nt sqlite3BtreeF
5f70: 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20  actory(.  const 
5f80: 73 71 6c 69 74 65 20 2a 64 62 2c 09 20 20 20 20  sqlite *db,.    
5f90: 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61 73 65  /* Main database
5fa0: 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75   when opening au
5fb0: 78 20 6f 74 68 65 72 77 69 73 65 20 30 20 2a 2f  x otherwise 0 */
5fc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5fd0: 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20  Filename,    /* 
5fe0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65  Name of the file
5ff0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
6000: 42 54 72 65 65 20 64 61 74 61 62 61 73 65 20 2a  BTree database *
6010: 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72  /.  int omitJour
6020: 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  nal,          /*
6030: 20 69 66 20 54 52 55 45 20 74 68 65 6e 20 64 6f   if TRUE then do
6040: 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69   not journal thi
6050: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
6060: 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20 20 20  nCache,         
6070: 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e        /* How man
6080: 79 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70  y pages in the p
6090: 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20 20 42  age cache */.  B
60a0: 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65 20 20  tree **ppBtree  
60b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
60c0: 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72 65 65  ter to new Btree
60d0: 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65 6e 20   object written 
60e0: 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  here */.){.  int
60f0: 20 62 74 72 65 65 5f 66 6c 61 67 73 20 3d 20 30   btree_flags = 0
6100: 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20 70  ;.  .  assert( p
6110: 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20  pBtree != 0);.  
6120: 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20  if( omitJournal 
6130: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
6140: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54  gs |= BTREE_OMIT
6150: 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20  _JOURNAL;.  }.  
6160: 69 66 28 20 21 7a 46 69 6c 65 6e 61 6d 65 20 29  if( !zFilename )
6170: 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67  {.    btree_flag
6180: 73 20 7c 3d 20 42 54 52 45 45 5f 4d 45 4d 4f 52  s |= BTREE_MEMOR
6190: 59 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  Y;.  }..  return
61a0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
61b0: 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 42  n(zFilename, ppB
61c0: 74 72 65 65 2c 20 6e 43 61 63 68 65 2c 20 62 74  tree, nCache, bt
61d0: 72 65 65 5f 66 6c 61 67 73 2c 0a 20 20 20 20 20  ree_flags,.     
61e0: 20 26 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65   &db->busyHandle
61f0: 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  r);.}../*.** Ret
6200: 75 72 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  urn UTF-8 encode
6210: 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  d English langua
6220: 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f  ge explanation o
6230: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
6240: 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63  t.** error..*/.c
6250: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
6260: 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69 74 65  e3_errmsg(sqlite
6270: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 64  3 *db){.  if( !d
6280: 62 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 64  b ){.    /* If d
6290: 62 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  b is NULL, then 
62a0: 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 6d 61  assume that a ma
62b0: 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75  lloc() failed du
62c0: 72 69 6e 67 20 61 6e 0a 20 20 20 20 2a 2a 20 73  ring an.    ** s
62d0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 63 61  qlite3_open() ca
62e0: 6c 6c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72  ll..    */.    r
62f0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72  eturn sqlite3Err
6300: 53 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  Str(SQLITE_NOMEM
6310: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  );.  }.  if( db-
6320: 3e 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20  >zErrMsg ){.    
6330: 72 65 74 75 72 6e 20 64 62 2d 3e 7a 45 72 72 4d  return db->zErrM
6340: 73 67 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  sg;.  }.  return
6350: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
6360: 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 7d 0a 0a  b->errCode);.}..
6370: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
6380: 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  -16 encoded Engl
6390: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
63a0: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
63b0: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
63c0: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76  rror..*/.const v
63d0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  oid *sqlite3_err
63e0: 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20 2a 64  msg16(sqlite3 *d
63f0: 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20 29 7b  b){.  if( !db ){
6400: 0a 20 20 20 20 2f 2a 20 49 66 20 64 62 20 69 73  .    /* If db is
6410: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75   NULL, then assu
6420: 6d 65 20 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63  me that a malloc
6430: 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67  () failed during
6440: 20 61 6e 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74   an.    ** sqlit
6450: 65 33 5f 6f 70 65 6e 28 29 20 63 61 6c 6c 2e 20  e3_open() call. 
6460: 57 65 20 68 61 76 65 20 61 20 73 74 61 74 69 63  We have a static
6470: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
6480: 73 74 72 69 6e 67 20 0a 20 20 20 20 2a 2a 20 22  string .    ** "
6490: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 20 65  out of memory" e
64a0: 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 55 54 46  ncoded using UTF
64b0: 2d 31 36 20 6a 75 73 74 20 66 6f 72 20 74 68 69  -16 just for thi
64c0: 73 20 70 75 72 70 6f 73 65 2e 0a 20 20 20 20 2a  s purpose..    *
64d0: 2a 0a 20 20 20 20 2a 2a 20 42 65 63 61 75 73 65  *.    ** Because
64e0: 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61 63 74   all the charact
64f0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
6500: 67 20 61 72 65 20 69 6e 20 74 68 65 20 75 6e 69  g are in the uni
6510: 63 6f 64 65 0a 20 20 20 20 2a 2a 20 72 61 6e 67  code.    ** rang
6520: 65 20 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20  e 0x00-0xFF, if 
6530: 77 65 20 70 61 64 20 74 68 65 20 62 69 67 2d 65  we pad the big-e
6540: 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74  ndian string wit
6550: 68 20 61 20 0a 20 20 20 20 2a 2a 20 7a 65 72 6f  h a .    ** zero
6560: 20 62 79 74 65 2c 20 77 65 20 63 61 6e 20 6f 62   byte, we can ob
6570: 74 61 69 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d  tain the little-
6580: 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69  endian string wi
6590: 74 68 0a 20 20 20 20 2a 2a 20 26 62 69 67 5f 65  th.    ** &big_e
65a0: 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20 20 20 2a 2f  ndian[1]..    */
65b0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72  .    static char
65c0: 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20   outOfMemBe[] = 
65d0: 7b 0a 20 20 20 20 20 20 30 2c 20 27 6f 27 2c 20  {.      0, 'o', 
65e0: 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20  0, 'u', 0, 't', 
65f0: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 20 20 30  0, ' ', .      0
6600: 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30  , 'o', 0, 'f', 0
6610: 2c 20 27 20 27 2c 20 0a 20 20 20 20 20 20 30 2c  , ' ', .      0,
6620: 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'm', 0, 'e', 0,
6630: 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'm', 0, 'o', 0,
6640: 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c   'r', 0, 'y', 0,
6650: 20 30 2c 20 30 0a 20 20 20 20 7d 3b 0a 20 20 20   0, 0.    };.   
6660: 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 6f 75   static char *ou
6670: 74 4f 66 4d 65 6d 4c 65 20 3d 20 26 6f 75 74 4f  tOfMemLe = &outO
6680: 66 4d 65 6d 42 65 5b 31 5d 3b 0a 0a 20 20 20 20  fMemBe[1];..    
6690: 69 66 28 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  if( SQLITE_BIGEN
66a0: 44 49 41 4e 20 29 7b 0a 20 20 20 20 20 20 72 65  DIAN ){.      re
66b0: 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 6f 75 74  turn (void *)out
66c0: 4f 66 4d 65 6d 42 65 3b 0a 20 20 20 20 7d 65 6c  OfMemBe;.    }el
66d0: 73 65 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se{.      return
66e0: 20 28 76 6f 69 64 20 2a 29 6f 75 74 4f 66 4d 65   (void *)outOfMe
66f0: 6d 4c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mLe;.    }.  }. 
6700: 20 69 66 28 20 21 64 62 2d 3e 7a 45 72 72 4d 73   if( !db->zErrMs
6710: 67 31 36 20 29 7b 0a 20 20 20 20 63 68 61 72 20  g16 ){.    char 
6720: 63 6f 6e 73 74 20 2a 7a 45 72 72 38 20 3d 20 73  const *zErr8 = s
6730: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
6740: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
6750: 45 5f 42 49 47 45 4e 44 49 41 4e 20 29 7b 0a 20  E_BIGENDIAN ){. 
6760: 20 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d 73 67       db->zErrMsg
6770: 31 36 20 3d 20 73 71 6c 69 74 65 33 75 74 66 38  16 = sqlite3utf8
6780: 74 6f 31 36 62 65 28 7a 45 72 72 38 2c 20 2d 31  to16be(zErr8, -1
6790: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
67a0: 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31      db->zErrMsg1
67b0: 36 20 3d 20 73 71 6c 69 74 65 33 75 74 66 38 74  6 = sqlite3utf8t
67c0: 6f 31 36 6c 65 28 7a 45 72 72 38 2c 20 2d 31 29  o16le(zErr8, -1)
67d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
67e0: 74 75 72 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67  turn db->zErrMsg
67f0: 31 36 3b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74  16;.}..int sqlit
6800: 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74  e3_errcode(sqlit
6810: 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72  e3 *db){.  retur
6820: 6e 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d  n db->errCode;.}
6830: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 73 63  ../*.** Check sc
6840: 68 65 6d 61 20 63 6f 6f 6b 69 65 73 20 69 6e 20  hema cookies in 
6850: 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 65 78  all databases ex
6860: 63 65 70 74 20 54 45 4d 50 2e 20 20 49 66 20 61  cept TEMP.  If a
6870: 6e 79 20 63 6f 6f 6b 69 65 20 69 73 20 6f 75 74  ny cookie is out
6880: 0a 2a 2a 20 6f 66 20 64 61 74 65 2c 20 72 65 74  .** of date, ret
6890: 75 72 6e 20 30 2e 20 20 49 66 20 61 6c 6c 20 73  urn 0.  If all s
68a0: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 73 20 61 72  chema cookies ar
68b0: 65 20 63 75 72 72 65 6e 74 2c 20 72 65 74 75 72  e current, retur
68c0: 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  n 1..*/.static i
68d0: 6e 74 20 73 63 68 65 6d 61 49 73 56 61 6c 69 64  nt schemaIsValid
68e0: 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20  (sqlite *db){.  
68f0: 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 72  int iDb;.  int r
6900: 63 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 63  c;.  BtCursor *c
6910: 75 72 54 65 6d 70 3b 0a 20 20 69 6e 74 20 63 6f  urTemp;.  int co
6920: 6f 6b 69 65 3b 0a 20 20 69 6e 74 20 61 6c 6c 4f  okie;.  int allO
6930: 6b 20 3d 20 31 3b 0a 0a 20 20 66 6f 72 28 69 44  k = 1;..  for(iD
6940: 62 3d 30 3b 20 61 6c 6c 4f 6b 20 26 26 20 69 44  b=0; allOk && iD
6950: 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
6960: 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  ){.    Btree *pB
6970: 74 3b 0a 20 20 20 20 69 66 28 20 69 44 62 3d 3d  t;.    if( iDb==
6980: 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  1 ) continue;.  
6990: 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
69a0: 69 44 62 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66  iDb].pBt;.    if
69b0: 28 20 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69  ( pBt==0 ) conti
69c0: 6e 75 65 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  nue;.    rc = sq
69d0: 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
69e0: 28 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  (pBt, MASTER_ROO
69f0: 54 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72  T, 0, 0, 0, &cur
6a00: 54 65 6d 70 29 3b 0a 20 20 20 20 69 66 28 20 72  Temp);.    if( r
6a10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
6a20: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
6a30: 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
6a40: 42 74 2c 20 31 2c 20 26 63 6f 6f 6b 69 65 29 3b  Bt, 1, &cookie);
6a50: 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
6a60: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 63 6f 6f 6b  QLITE_OK && cook
6a70: 69 65 21 3d 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ie!=db->aDb[iDb]
6a80: 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 29  .schema_cookie )
6a90: 7b 0a 20 20 20 20 20 20 20 20 61 6c 6c 4f 6b 20  {.        allOk 
6aa0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
6ab0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
6ac0: 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 54 65  loseCursor(curTe
6ad0: 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mp);.    }.  }. 
6ae0: 20 72 65 74 75 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d   return allOk;.}
6af0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20  ../*.** Compile 
6b00: 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  the UTF-8 encode
6b10: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  d SQL statement 
6b20: 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74  zSql into a stat
6b30: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
6b40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65  .int sqlite3_pre
6b50: 70 61 72 65 28 0a 20 20 73 71 6c 69 74 65 33 20  pare(.  sqlite3 
6b60: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
6b70: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61    /* Database ha
6b80: 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74  ndle. */.  const
6b90: 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20   char *zSql,    
6ba0: 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e       /* UTF-8 en
6bb0: 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d  coded SQL statem
6bc0: 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  ent. */.  int nB
6bd0: 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20 20  ytes,           
6be0: 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
6bf0: 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20   zSql in bytes. 
6c00: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
6c10: 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f  t **ppStmt,    /
6c20: 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72  * OUT: A pointer
6c30: 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65 64   to the prepared
6c40: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
6c50: 63 6f 6e 73 74 20 63 68 61 72 2a 2a 20 70 7a 54  const char** pzT
6c60: 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ail       /* OUT
6c70: 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20  : End of parsed 
6c80: 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50  string */.){.  P
6c90: 61 72 73 65 20 73 50 61 72 73 65 3b 0a 20 20 63  arse sParse;.  c
6ca0: 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
6cb0: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
6cc0: 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 73  ITE_OK;..  if( s
6cd0: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
6ce0: 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  b) ){.    rc = S
6cf0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
6d00: 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f    goto prepare_o
6d10: 75 74 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64  ut;.  }..  if( d
6d20: 62 2d 3e 70 56 64 62 65 3d 3d 30 20 29 7b 20 64  b->pVdbe==0 ){ d
6d30: 62 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20  b->nChange = 0; 
6d40: 7d 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72  }.  memset(&sPar
6d50: 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50  se, 0, sizeof(sP
6d60: 61 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65  arse));.  sParse
6d70: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69  .db = db;.  sqli
6d80: 74 65 33 52 75 6e 50 61 72 73 65 72 28 26 73 50  te3RunParser(&sP
6d90: 61 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72  arse, zSql, &zEr
6da0: 72 4d 73 67 29 3b 0a 0a 20 20 69 66 28 20 64 62  rMsg);..  if( db
6db0: 2d 3e 78 54 72 61 63 65 20 26 26 20 21 64 62 2d  ->xTrace && !db-
6dc0: 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20  >init.busy ){.  
6dd0: 20 20 2f 2a 20 54 72 61 63 65 20 6f 6e 6c 79 20    /* Trace only 
6de0: 74 68 65 20 73 74 61 74 6d 65 6e 74 20 74 68 61  the statment tha
6df0: 74 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0a  t was compiled..
6e00: 20 20 20 20 2a 2a 20 4d 61 6b 65 20 61 20 63 6f      ** Make a co
6e10: 70 79 20 6f 66 20 74 68 61 74 20 70 61 72 74 20  py of that part 
6e20: 6f 66 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e  of the SQL strin
6e30: 67 20 73 69 6e 63 65 20 7a 53 51 4c 20 69 73 20  g since zSQL is 
6e40: 63 6f 6e 73 74 0a 20 20 20 20 2a 2a 20 61 6e 64  const.    ** and
6e50: 20 77 65 20 6d 75 73 74 20 70 61 73 73 20 61 20   we must pass a 
6e60: 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  zero terminated 
6e70: 73 74 72 69 6e 67 20 74 6f 20 74 68 65 20 74 72  string to the tr
6e80: 61 63 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  ace function.   
6e90: 20 2a 2a 20 54 68 65 20 63 6f 70 79 20 69 73 20   ** The copy is 
6ea0: 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20 74  unnecessary if t
6eb0: 68 65 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 20  he tail pointer 
6ec0: 69 73 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  is pointing at t
6ed0: 68 65 0a 20 20 20 20 2a 2a 20 62 65 67 69 6e 6e  he.    ** beginn
6ee0: 69 67 20 6f 72 20 65 6e 64 20 6f 66 20 74 68 65  ig or end of the
6ef0: 20 53 51 4c 20 73 74 72 69 6e 67 2e 0a 20 20 20   SQL string..   
6f00: 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 50 61 72   */.    if( sPar
6f10: 73 65 2e 7a 54 61 69 6c 20 26 26 20 73 50 61 72  se.zTail && sPar
6f20: 73 65 2e 7a 54 61 69 6c 21 3d 7a 53 71 6c 20 26  se.zTail!=zSql &
6f30: 26 20 2a 73 50 61 72 73 65 2e 7a 54 61 69 6c 20  & *sParse.zTail 
6f40: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 74  ){.      char *t
6f50: 6d 70 53 71 6c 20 3d 20 73 71 6c 69 74 65 53 74  mpSql = sqliteSt
6f60: 72 4e 44 75 70 28 7a 53 71 6c 2c 20 73 50 61 72  rNDup(zSql, sPar
6f70: 73 65 2e 7a 54 61 69 6c 20 2d 20 7a 53 71 6c 29  se.zTail - zSql)
6f80: 3b 0a 20 20 20 20 20 20 69 66 28 20 74 6d 70 53  ;.      if( tmpS
6f90: 71 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  ql ){.        db
6fa0: 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
6fb0: 61 63 65 41 72 67 2c 20 74 6d 70 53 71 6c 29 3b  aceArg, tmpSql);
6fc0: 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 74 6d  .        free(tm
6fd0: 70 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pSql);.      }el
6fe0: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
6ff0: 66 20 61 20 6d 65 6d 6f 72 79 20 65 72 72 6f 72  f a memory error
7000: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
7010: 20 74 68 65 20 63 6f 70 79 2c 0a 20 20 20 20 20   the copy,.     
7020: 20 20 20 2a 2a 20 74 72 61 63 65 20 65 6e 74 69     ** trace enti
7030: 72 65 20 53 51 4c 20 73 74 72 69 6e 67 20 61 6e  re SQL string an
7040: 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
7050: 6f 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  o the.        **
7060: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
7070: 66 61 69 6c 65 64 20 74 65 73 74 20 74 6f 20 72  failed test to r
7080: 65 70 6f 72 74 20 74 68 65 20 65 72 72 6f 72 2e  eport the error.
7090: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
70a0: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
70b0: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 53  b->pTraceArg, zS
70c0: 71 6c 29 3b 20 0a 20 20 20 20 20 20 7d 0a 20 20  ql); .      }.  
70d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
70e0: 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
70f0: 72 61 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20  raceArg, zSql); 
7100: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
7110: 20 50 72 69 6e 74 20 61 20 63 6f 70 79 20 6f 66   Print a copy of
7120: 20 53 51 4c 20 61 73 20 69 74 20 69 73 20 65 78   SQL as it is ex
7130: 65 63 75 74 65 64 20 69 66 20 74 68 65 20 53 51  ecuted if the SQ
7140: 4c 5f 54 52 41 43 45 20 70 72 61 67 6d 61 20 69  L_TRACE pragma i
7150: 73 20 74 75 72 6e 65 64 0a 20 20 2a 2a 20 6f 6e  s turned.  ** on
7160: 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f   in debugging mo
7170: 64 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  de..  */.#ifdef 
7180: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
7190: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
71a0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
71b0: 21 3d 30 20 26 26 20 73 50 61 72 73 65 2e 7a 54  !=0 && sParse.zT
71c0: 61 69 6c 20 26 26 20 73 50 61 72 73 65 2e 7a 54  ail && sParse.zT
71d0: 61 69 6c 21 3d 7a 53 71 6c 20 29 7b 0a 20 20 20  ail!=zSql ){.   
71e0: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
71f0: 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
7200: 25 2e 2a 73 5c 6e 22 2c 20 73 50 61 72 73 65 2e  %.*s\n", sParse.
7210: 7a 54 61 69 6c 20 2d 20 7a 53 71 6c 2c 20 7a 53  zTail - zSql, zS
7220: 71 6c 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ql);.  }.#endif 
7230: 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
7240: 2a 2f 0a 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  */...  if( sqlit
7250: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
7260: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
7270: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73  ITE_NOMEM;.    s
7280: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
7290: 6c 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74  l(db);.    sqlit
72a0: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
72b0: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
72c0: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
72d0: 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a  SQLITE_InTrans;.
72e0: 20 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65      goto prepare
72f0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
7300: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
7310: 45 5f 44 4f 4e 45 20 29 20 73 50 61 72 73 65 2e  E_DONE ) sParse.
7320: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
7330: 20 20 69 66 28 20 73 50 61 72 73 65 2e 63 68 65    if( sParse.che
7340: 63 6b 53 63 68 65 6d 61 20 26 26 20 21 73 63 68  ckSchema && !sch
7350: 65 6d 61 49 73 56 61 6c 69 64 28 64 62 29 20 29  emaIsValid(db) )
7360: 7b 0a 20 20 20 20 73 50 61 72 73 65 2e 72 63 20  {.    sParse.rc 
7370: 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
7380: 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73  .  }.  if( sPars
7390: 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48  e.rc==SQLITE_SCH
73a0: 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  EMA ){.    sqlit
73b0: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
73c0: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
73d0: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 70 53 74  }.  assert( ppSt
73e0: 6d 74 20 29 3b 0a 20 20 2a 70 70 53 74 6d 74 20  mt );.  *ppStmt 
73f0: 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  = (sqlite3_stmt*
7400: 29 73 50 61 72 73 65 2e 70 56 64 62 65 3b 0a 20  )sParse.pVdbe;. 
7410: 20 69 66 28 20 70 7a 54 61 69 6c 20 29 20 2a 70   if( pzTail ) *p
7420: 7a 54 61 69 6c 20 3d 20 73 50 61 72 73 65 2e 7a  zTail = sParse.z
7430: 54 61 69 6c 3b 0a 20 20 72 63 20 3d 20 73 50 61  Tail;.  rc = sPa
7440: 72 73 65 2e 72 63 3b 0a 0a 20 20 69 66 28 20 72  rse.rc;..  if( r
7450: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
7460: 73 50 61 72 73 65 2e 70 56 64 62 65 20 26 26 20  sParse.pVdbe && 
7470: 73 50 61 72 73 65 2e 65 78 70 6c 61 69 6e 20 29  sParse.explain )
7480: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
7490: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 73 50 61 72  eSetNumCols(sPar
74a0: 73 65 2e 70 56 64 62 65 2c 20 35 29 3b 0a 20 20  se.pVdbe, 5);.  
74b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
74c0: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
74d0: 56 64 62 65 2c 20 30 2c 20 22 61 64 64 72 22 2c  Vdbe, 0, "addr",
74e0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
74f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7500: 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56  olName(sParse.pV
7510: 64 62 65 2c 20 31 2c 20 22 6f 70 63 6f 64 65 22  dbe, 1, "opcode"
7520: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
7530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7540: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
7550: 56 64 62 65 2c 20 32 2c 20 22 70 31 22 2c 20 50  Vdbe, 2, "p1", P
7560: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  3_STATIC);.    s
7570: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
7580: 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62  Name(sParse.pVdb
7590: 65 2c 20 33 2c 20 22 70 32 22 2c 20 50 33 5f 53  e, 3, "p2", P3_S
75a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
75b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
75c0: 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20  e(sParse.pVdbe, 
75d0: 34 2c 20 22 70 33 22 2c 20 50 33 5f 53 54 41 54  4, "p3", P3_STAT
75e0: 49 43 29 3b 0a 20 20 7d 20 0a 0a 70 72 65 70 61  IC);.  } ..prepa
75f0: 72 65 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73 71  re_out:.  if( sq
7600: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
7610: 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  b) ){.    rc = S
7620: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
7630: 7d 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20  }.  if( zErrMsg 
7640: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
7650: 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73 22  ror(db, rc, "%s"
7660: 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 65  , zErrMsg);.  }e
7670: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
7680: 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29  Error(db, rc, 0)
7690: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
76a0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70  c;.}../*.** Comp
76b0: 69 6c 65 20 74 68 65 20 55 54 46 2d 31 36 20 65  ile the UTF-16 e
76c0: 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65  ncoded SQL state
76d0: 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61  ment zSql into a
76e0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
76f0: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
7700: 33 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20 73  3_prepare16(.  s
7710: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
7720: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
7730: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 20  base handle. */ 
7740: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
7750: 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  Sql,         /* 
7760: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51  UTF-8 encoded SQ
7770: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a  L statement. */.
7780: 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20 20    int nBytes,   
7790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
77a0: 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e  ength of zSql in
77b0: 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71 6c   bytes. */.  sql
77c0: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74  ite3_stmt **ppSt
77d0: 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41  mt,    /* OUT: A
77e0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
77f0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
7800: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f  nt */.  const vo
7810: 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20  id **pzTail     
7820: 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66    /* OUT: End of
7830: 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a   parsed string *
7840: 2f 0a 29 7b 0a 20 20 2f 2a 20 54 68 69 73 20 66  /.){.  /* This f
7850: 75 6e 63 74 69 6f 6e 20 63 75 72 72 65 6e 74 6c  unction currentl
7860: 79 20 77 6f 72 6b 73 20 62 79 20 66 69 72 73 74  y works by first
7870: 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 68   transforming th
7880: 65 20 55 54 46 2d 31 36 0a 20 20 2a 2a 20 65 6e  e UTF-16.  ** en
7890: 63 6f 64 65 64 20 73 74 72 69 6e 67 20 74 6f 20  coded string to 
78a0: 55 54 46 2d 38 2c 20 74 68 65 6e 20 69 6e 76 6f  UTF-8, then invo
78b0: 6b 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  king sqlite3_pre
78c0: 70 61 72 65 28 29 2e 20 54 68 65 0a 20 20 2a 2a  pare(). The.  **
78d0: 20 74 72 69 63 6b 79 20 62 69 74 20 69 73 20 66   tricky bit is f
78e0: 69 67 75 72 69 6e 67 20 6f 75 74 20 74 68 65 20  iguring out the 
78f0: 70 6f 69 6e 74 65 72 20 74 6f 20 72 65 74 75 72  pointer to retur
7900: 6e 20 69 6e 20 2a 70 7a 54 61 69 6c 2e 0a 20 20  n in *pzTail..  
7910: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 38  */.  char *zSql8
7920: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e   = 0;.  char con
7930: 73 74 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b 0a  st *zTail8 = 0;.
7940: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 7a 53 71    int rc;..  zSq
7950: 6c 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  l8 = sqlite3utf1
7960: 36 74 6f 38 28 7a 53 71 6c 2c 20 6e 42 79 74 65  6to8(zSql, nByte
7970: 73 2c 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  s, SQLITE_BIGEND
7980: 49 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a 53 71  IAN);.  if( !zSq
7990: 6c 38 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  l8 ){.    sqlite
79a0: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
79b0: 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20 20 20  E_NOMEM, 0);.   
79c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
79d0: 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  OMEM;.  }.  rc =
79e0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
79f0: 28 64 62 2c 20 7a 53 71 6c 38 2c 20 2d 31 2c 20  (db, zSql8, -1, 
7a00: 70 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 38 29  ppStmt, &zTail8)
7a10: 3b 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 38 20  ;..  if( zTail8 
7a20: 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a 20 20 20  && pzTail ){.   
7a30: 20 2f 2a 20 49 66 20 73 71 6c 69 74 65 33 5f 70   /* If sqlite3_p
7a40: 72 65 70 61 72 65 20 72 65 74 75 72 6e 73 20 61  repare returns a
7a50: 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 2c 20 77   tail pointer, w
7a60: 65 20 63 61 6c 63 75 6c 61 74 65 20 74 68 65 0a  e calculate the.
7a70: 20 20 20 20 2a 2a 20 65 71 75 69 76 61 6c 65 6e      ** equivalen
7a80: 74 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20 74  t pointer into t
7a90: 68 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  he UTF-16 string
7aa0: 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 74 68 65   by counting the
7ab0: 20 75 6e 69 63 6f 64 65 0a 20 20 20 20 2a 2a 20   unicode.    ** 
7ac0: 63 68 61 72 61 63 74 65 72 73 20 62 65 74 77 65  characters betwe
7ad0: 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20 7a 54 61  en zSql8 and zTa
7ae0: 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e 20 72 65  il8, and then re
7af0: 74 75 72 6e 69 6e 67 20 61 20 70 6f 69 6e 74 65  turning a pointe
7b00: 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 61 6d  r.    ** the sam
7b10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  e number of char
7b20: 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65 20  acters into the 
7b30: 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a 20  UTF-16 string.. 
7b40: 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 63 68     */.    int ch
7b50: 61 72 73 5f 70 61 72 73 65 64 20 3d 20 73 71 6c  ars_parsed = sql
7b60: 69 74 65 33 75 74 66 38 43 68 61 72 4c 65 6e 28  ite3utf8CharLen(
7b70: 7a 53 71 6c 38 2c 20 7a 54 61 69 6c 38 2d 7a 53  zSql8, zTail8-zS
7b80: 71 6c 38 29 3b 0a 20 20 20 20 2a 70 7a 54 61 69  ql8);.    *pzTai
7b90: 6c 20 3d 20 28 75 38 20 2a 29 7a 53 71 6c 20 2b  l = (u8 *)zSql +
7ba0: 20 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74   sqlite3utf16Byt
7bb0: 65 4c 65 6e 28 7a 53 71 6c 2c 20 63 68 61 72 73  eLen(zSql, chars
7bc0: 5f 70 61 72 73 65 64 29 3b 0a 20 20 7d 0a 20 0a  _parsed);.  }. .
7bd0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
7be0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
7bf0: 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b  ne does the work
7c00: 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20 64 61   of opening a da
7c10: 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61 6c 66  tabase on behalf
7c20: 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f   of.** sqlite3_o
7c30: 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69 74 65  pen() and sqlite
7c40: 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68 65 20  3_open16(). The 
7c50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d  database filenam
7c60: 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20 20 0a  e "zFilename"  .
7c70: 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e 63 6f  ** is UTF-8 enco
7c80: 64 65 64 2e 20 54 68 65 20 66 6f 75 72 74 68 20  ded. The fourth 
7c90: 61 72 67 75 6d 65 6e 74 2c 20 22 64 65 66 5f 65  argument, "def_e
7ca0: 6e 63 22 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  nc" is one of th
7cb0: 65 20 54 45 58 54 5f 2a 0a 2a 2a 20 6d 61 63 72  e TEXT_*.** macr
7cc0: 6f 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 49 6e  os from sqliteIn
7cd0: 74 2e 68 2e 20 49 66 20 77 65 20 65 6e 64 20 75  t.h. If we end u
7ce0: 70 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77  p creating a new
7cf0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
7d00: 2a 20 28 6e 6f 74 20 6f 70 65 6e 69 6e 67 20 61  * (not opening a
7d10: 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 29 2c  n existing one),
7d20: 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
7d30: 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
7d40: 73 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 73 65  se.** will be se
7d50: 74 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  t to this value.
7d60: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f  .*/.static int o
7d70: 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20 20 63  penDatabase(.  c
7d80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
7d90: 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61 73  name, /* Databas
7da0: 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38  e filename UTF-8
7db0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71   encoded */.  sq
7dc0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 20 20 20  lite3 **ppDb    
7dd0: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74       /* OUT: Ret
7de0: 75 72 6e 65 64 20 64 61 74 61 62 61 73 65 20 68  urned database h
7df0: 61 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71  andle */.){.  sq
7e00: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
7e10: 20 72 63 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a   rc, i;.  char *
7e20: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20  zErrMsg = 0;..  
7e30: 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20  /* Allocate the 
7e40: 73 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75  sqlite data stru
7e50: 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20  cture */.  db = 
7e60: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69  sqliteMalloc( si
7e70: 7a 65 6f 66 28 73 71 6c 69 74 65 29 20 29 3b 0a  zeof(sqlite) );.
7e80: 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f    if( db==0 ) go
7e90: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
7ea0: 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77   db->priorNewRow
7eb0: 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d 61  id = 0;.  db->ma
7ec0: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
7ed0: 49 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e 6e  IC_BUSY;.  db->n
7ee0: 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 61 44  Db = 2;.  db->aD
7ef0: 62 20 3d 20 64 62 2d 3e 61 44 62 53 74 61 74 69  b = db->aDbStati
7f00: 63 3b 0a 20 20 64 62 2d 3e 65 6e 63 20 3d 20 53  c;.  db->enc = S
7f10: 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 64 62  QLITE_UTF8;.  db
7f20: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
7f30: 3b 0a 20 20 2f 2a 20 64 62 2d 3e 66 6c 61 67 73  ;.  /* db->flags
7f40: 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74   |= SQLITE_Short
7f50: 43 6f 6c 4e 61 6d 65 73 3b 20 2a 2f 0a 20 20 73  ColNames; */.  s
7f60: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
7f70: 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54  db->aFunc, SQLIT
7f80: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
7f90: 29 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  );.  sqlite3Hash
7fa0: 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  Init(&db->aCollS
7fb0: 65 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  eq, SQLITE_HASH_
7fc0: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 66 6f  STRING, 0);.  fo
7fd0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
7fe0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
7ff0: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
8000: 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 2c  >aDb[i].tblHash,
8010: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
8020: 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ING, 0);.    sql
8030: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
8040: 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61 73 68  ->aDb[i].idxHash
8050: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
8060: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71  RING, 0);.    sq
8070: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
8080: 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67 48 61  b->aDb[i].trigHa
8090: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
80a0: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
80b0: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
80c0: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46 4b 65  &db->aDb[i].aFKe
80d0: 79 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  y, SQLITE_HASH_S
80e0: 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d 0a 20  TRING, 1);.  }. 
80f0: 20 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64   .  /* Add the d
8100: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
8110: 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59   sequence BINARY
8120: 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66  . BINARY works f
8130: 6f 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20  or both UTF-8.  
8140: 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73  ** and UTF-16, s
8150: 6f 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20  o add a version 
8160: 66 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69  for each to avoi
8170: 64 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72  d any unnecessar
8180: 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  y.  ** conversio
8190: 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72  ns. The only err
81a0: 6f 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75  or that can occu
81b0: 72 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c  r here is a mall
81c0: 6f 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20  oc() failure..  
81d0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65  */.  sqlite3_cre
81e0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
81f0: 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49  , "BINARY", SQLI
8200: 54 45 5f 55 54 46 38 2c 20 30 2c 62 69 6e 61 72  TE_UTF8, 0,binar
8210: 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b  yCollatingFunc);
8220: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
8230: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
8240: 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45  "BINARY", SQLITE
8250: 5f 55 54 46 31 36 4c 45 2c 20 30 2c 62 69 6e 61  _UTF16LE, 0,bina
8260: 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29  ryCollatingFunc)
8270: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61  ;.  sqlite3_crea
8280: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
8290: 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54   "BINARY", SQLIT
82a0: 45 5f 55 54 46 31 36 42 45 2c 20 30 2c 62 69 6e  E_UTF16BE, 0,bin
82b0: 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63  aryCollatingFunc
82c0: 29 3b 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f  );.  db->pDfltCo
82d0: 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ll = sqlite3Find
82e0: 43 6f 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d 3e  CollSeq(db, db->
82f0: 65 6e 63 2c 20 22 42 49 4e 41 52 59 22 2c 20 36  enc, "BINARY", 6
8300: 2c 20 30 29 3b 0a 20 20 69 66 28 20 21 64 62 2d  , 0);.  if( !db-
8310: 3e 70 44 66 6c 74 43 6f 6c 6c 20 29 7b 0a 20 20  >pDfltColl ){.  
8320: 20 20 72 63 20 3d 20 64 62 2d 3e 65 72 72 43 6f    rc = db->errCo
8330: 64 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  de;.    assert( 
8340: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc!=SQLITE_OK );
8350: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
8360: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
8370: 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  OSED;.    goto o
8380: 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  pendb_out;.  }..
8390: 20 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20 61 20    /* Also add a 
83a0: 55 54 46 2d 38 20 63 61 73 65 2d 69 6e 73 65 6e  UTF-8 case-insen
83b0: 73 69 74 69 76 65 20 63 6f 6c 6c 61 74 69 6f 6e  sitive collation
83c0: 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 20 20   sequence. */.  
83d0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
83e0: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f  ollation(db, "NO
83f0: 43 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54  CASE", SQLITE_UT
8400: 46 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c  F8, 0, nocaseCol
8410: 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a 20 20  latingFunc);..  
8420: 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b  /* Open the back
8430: 65 6e 64 20 64 61 74 61 62 61 73 65 20 64 72 69  end database dri
8440: 76 65 72 20 2a 2f 0a 20 20 69 66 28 20 7a 46 69  ver */.  if( zFi
8450: 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 27 3a 27 20 26  lename[0]==':' &
8460: 26 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e 61  & strcmp(zFilena
8470: 6d 65 2c 22 3a 6d 65 6d 6f 72 79 3a 22 29 3d 3d  me,":memory:")==
8480: 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 74 65 6d  0 ){.    db->tem
8490: 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 20  p_store = 2;.   
84a0: 20 64 62 2d 3e 6e 4d 61 73 74 65 72 20 3d 20 30   db->nMaster = 0
84b0: 3b 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20  ;    /* Disable 
84c0: 61 74 6f 6d 69 63 20 6d 75 6c 74 69 2d 66 69 6c  atomic multi-fil
84d0: 65 20 63 6f 6d 6d 69 74 20 66 6f 72 20 3a 6d 65  e commit for :me
84e0: 6d 6f 72 79 3a 20 2a 2f 0a 20 20 7d 65 6c 73 65  mory: */.  }else
84f0: 7b 0a 20 20 20 20 64 62 2d 3e 6e 4d 61 73 74 65  {.    db->nMaste
8500: 72 20 3d 20 2d 31 3b 20 20 20 2f 2a 20 53 69 7a  r = -1;   /* Siz
8510: 65 20 6f 66 20 6d 61 73 74 65 72 20 6a 6f 75 72  e of master jour
8520: 6e 61 6c 20 66 69 6c 65 6e 61 6d 65 20 69 6e 69  nal filename ini
8530: 74 69 61 6c 6c 79 20 75 6e 6b 6e 6f 77 6e 20 2a  tially unknown *
8540: 2f 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  /.  }.  rc = sql
8550: 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79  ite3BtreeFactory
8560: 28 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20  (db, zFilename, 
8570: 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20 26 64  0, MAX_PAGES, &d
8580: 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a  b->aDb[0].pBt);.
8590: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
85a0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 46 49  _OK ){.    /* FI
85b0: 58 20 4d 45 3a 20 73 71 6c 69 74 65 33 42 74 72  X ME: sqlite3Btr
85c0: 65 65 46 61 63 74 6f 72 79 28 29 20 73 68 6f 75  eeFactory() shou
85d0: 6c 64 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 45  ld call sqlite3E
85e0: 72 72 6f 72 28 29 2e 20 2a 2f 0a 20 20 20 20 73  rror(). */.    s
85f0: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
8600: 72 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e  rc, 0);.    db->
8610: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
8620: 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20  AGIC_CLOSED;.   
8630: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
8640: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b  ;.  }.  db->aDb[
8650: 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e  0].zName = "main
8660: 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e  ";.  db->aDb[1].
8670: 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a  zName = "temp";.
8680: 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61  .  /* Register a
8690: 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ll built-in func
86a0: 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e 6f  tions, but do no
86b0: 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61  t attempt to rea
86c0: 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  d the.  ** datab
86d0: 61 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e 20  ase schema yet. 
86e0: 54 68 69 73 20 69 73 20 64 65 6c 61 79 65 64 20  This is delayed 
86f0: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
8700: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
8710: 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73 73  e.  ** is access
8720: 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ed..  */.  sqlit
8730: 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
8740: 6e 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a  nFunctions(db);.
8750: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
8760: 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  _OK ){.    db->m
8770: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8780: 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73  GIC_OPEN;.  }els
8790: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  e{.    sqlite3Er
87a0: 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73 22  ror(db, rc, "%s"
87b0: 2c 20 7a 45 72 72 4d 73 67 2c 20 30 29 3b 0a 20  , zErrMsg, 0);. 
87c0: 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
87d0: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72 72   sqliteFree(zErr
87e0: 4d 73 67 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61  Msg);.    db->ma
87f0: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
8800: 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 0a 0a  IC_CLOSED;.  }..
8810: 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20 20 2a 70  opendb_out:.  *p
8820: 70 44 62 20 3d 20 64 62 3b 0a 20 20 72 65 74 75  pDb = db;.  retu
8830: 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  rn sqlite3_errco
8840: 64 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  de(db);.}../*.**
8850: 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61   Open a new data
8860: 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  base handle..*/.
8870: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
8880: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
8890: 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71  zFilename, .  sq
88a0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b  lite3 **ppDb .){
88b0: 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44 61  .  return openDa
88c0: 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65  tabase(zFilename
88d0: 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  , ppDb);.}../*.*
88e0: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
88f0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
8900: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
8910: 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69  n16(.  const voi
8920: 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20  d *zFilename, . 
8930: 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 0a   sqlite3 **ppDb.
8940: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c 65  ){.  char *zFile
8950: 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c  name8;   /* zFil
8960: 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e  ename encoded in
8970: 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20 6f   UTF-8 instead o
8980: 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 69 6e  f UTF-16 */.  in
8990: 74 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74 28  t rc;..  assert(
89a0: 20 70 70 44 62 20 29 3b 0a 0a 20 20 7a 46 69 6c   ppDb );..  zFil
89b0: 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33  ename8 = sqlite3
89c0: 75 74 66 31 36 74 6f 38 28 7a 46 69 6c 65 6e 61  utf16to8(zFilena
89d0: 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 42  me, -1, SQLITE_B
89e0: 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69 66 28  IGENDIAN);.  if(
89f0: 20 21 7a 46 69 6c 65 6e 61 6d 65 38 20 29 7b 0a   !zFilename8 ){.
8a00: 20 20 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20      *ppDb = 0;. 
8a10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8a20: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63  _NOMEM;.  }.  rc
8a30: 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28   = openDatabase(
8a40: 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62  zFilename8, ppDb
8a50: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
8a60: 49 54 45 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20  ITE_OK && *ppDb 
8a70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  ){.    sqlite3_e
8a80: 78 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41 47  xec(*ppDb, "PRAG
8a90: 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55  MA encoding = 'U
8aa0: 54 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20 30  TF-16'", 0, 0, 0
8ab0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 46  );.  }.  sqliteF
8ac0: 72 65 65 28 7a 46 69 6c 65 6e 61 6d 65 38 29 3b  ree(zFilename8);
8ad0: 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
8ae0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
8af0: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65  owing routine de
8b00: 73 74 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c  stroys a virtual
8b10: 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69 73   machine that is
8b20: 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
8b30: 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69  he sqlite3_compi
8b40: 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68  le() routine. Th
8b50: 65 20 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e  e integer return
8b60: 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f  ed is an SQLITE_
8b70: 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c  .** success/fail
8b80: 75 72 65 20 63 6f 64 65 20 74 68 61 74 20 64 65  ure code that de
8b90: 73 63 72 69 62 65 73 20 74 68 65 20 72 65 73 75  scribes the resu
8ba0: 6c 74 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20  lt of executing 
8bb0: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  the virtual.** m
8bc0: 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  achine..**.** Th
8bd0: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
8be0: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  the error code a
8bf0: 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  nd string return
8c00: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
8c10: 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69  _errcode(), sqli
8c20: 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64  te3_errmsg() and
8c30: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31   sqlite3_errmsg1
8c40: 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  6()..*/.int sqli
8c50: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c  te3_finalize(sql
8c60: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8c70: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
8c80: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
8c90: 28 56 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29  (Vdbe*)pStmt, 0)
8ca0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69  ;.}../*.** Termi
8cb0: 6e 61 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  nate the current
8cc0: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e   execution of an
8cd0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
8ce0: 6e 64 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62  nd reset it.** b
8cf0: 61 63 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74  ack to its start
8d00: 69 6e 67 20 73 74 61 74 65 20 73 6f 20 74 68 61  ing state so tha
8d10: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 75 73  t it can be reus
8d20: 65 64 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f  ed. A success co
8d30: 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70  de from.** the p
8d40: 72 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69  rior execution i
8d50: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a  s returned..**.*
8d60: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
8d70: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
8d80: 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65  de and string re
8d90: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
8da0: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20  ite3_errcode(), 
8db0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
8dc0: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
8dd0: 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20  msg16()..*/.int 
8de0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71  sqlite3_reset(sq
8df0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8e00: 74 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73  t){.  int rc = s
8e10: 71 6c 69 74 65 33 56 64 62 65 52 65 73 65 74 28  qlite3VdbeReset(
8e20: 28 56 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29  (Vdbe*)pStmt, 0)
8e30: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8e40: 61 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a 29  akeReady((Vdbe*)
8e50: 70 53 74 6d 74 2c 20 2d 31 2c 20 30 29 3b 0a 20  pStmt, -1, 0);. 
8e60: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 69   return rc;.}..i
8e70: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
8e80: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73  e_collation(.  s
8e90: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
8ea0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
8eb0: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
8ec0: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
8ed0: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
8ee0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
8ef0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
8f00: 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65  id*).){.  CollSe
8f10: 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20  q *pColl;.  int 
8f20: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
8f30: 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54    if( enc!=SQLIT
8f40: 45 5f 55 54 46 38 20 26 26 20 65 6e 63 21 3d 53  E_UTF8 && enc!=S
8f50: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 26 26  QLITE_UTF16LE &&
8f60: 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46   enc!=SQLITE_UTF
8f70: 31 36 42 45 20 29 7b 0a 20 20 20 20 73 71 6c 69  16BE ){.    sqli
8f80: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
8f90: 49 54 45 5f 45 52 52 4f 52 2c 20 0a 20 20 20 20  ITE_ERROR, .    
8fa0: 20 20 20 20 22 50 61 72 61 6d 20 33 20 74 6f 20      "Param 3 to 
8fb0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8fc0: 6f 6c 6c 61 74 69 6f 6e 28 29 20 6d 75 73 74 20  ollation() must 
8fd0: 62 65 20 6f 6e 65 20 6f 66 20 22 0a 20 20 20 20  be one of ".    
8fe0: 20 20 20 20 22 53 51 4c 49 54 45 5f 55 54 46 38      "SQLITE_UTF8
8ff0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
9000: 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36   or SQLITE_UTF16
9010: 42 45 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 72  BE".    );.    r
9020: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
9030: 4f 52 3b 0a 20 20 7d 0a 20 20 70 43 6f 6c 6c 20  OR;.  }.  pColl 
9040: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c  = sqlite3FindCol
9050: 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63  lSeq(db, (u8)enc
9060: 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28  , zName, strlen(
9070: 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66  zName), 1);.  if
9080: 28 20 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a 20 20  ( 0==pColl ){.  
9090: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
90a0: 45 4d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EM;.  }else{.   
90b0: 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78   pColl->xCmp = x
90c0: 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70 43 6f  Compare;.    pCo
90d0: 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43 74 78  ll->pUser = pCtx
90e0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
90f0: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
9100: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
9110: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65  .int sqlite3_cre
9120: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28  ate_collation16(
9130: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
9140: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
9150: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
9160: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
9170: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
9180: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
9190: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
91a0: 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e  t void*).){.  in
91b0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 4e  t rc;.  char *zN
91c0: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74  ame8 = sqlite3ut
91d0: 66 31 36 74 6f 38 28 7a 4e 61 6d 65 2c 20 2d 31  f16to8(zName, -1
91e0: 2c 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  , SQLITE_BIGENDI
91f0: 41 4e 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  AN);.  rc = sqli
9200: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
9210: 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38 2c  tion(db, zName8,
9220: 20 65 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d   enc, pCtx, xCom
9230: 70 61 72 65 29 3b 0a 20 20 73 71 6c 69 74 65 46  pare);.  sqliteF
9240: 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a 20 20 72  ree(zName8);.  r
9250: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74  eturn rc;.}..int
9260: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
9270: 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73 71 6c  on_needed(.  sql
9280: 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69  ite3 *db, .  voi
9290: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
92a0: 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  g, .  void(*xCol
92b0: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
92c0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
92d0: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
92e0: 29 0a 29 7b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  ).){.  db->xColl
92f0: 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65  Needed = xCollNe
9300: 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c  eded;.  db->xCol
9310: 6c 4e 65 65 64 65 64 31 36 20 3d 20 30 3b 0a 20  lNeeded16 = 0;. 
9320: 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64   db->pCollNeeded
9330: 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65  Arg = pCollNeede
9340: 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53  dArg;.  return S
9350: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 69 6e 74 20  QLITE_OK;.}.int 
9360: 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f  sqlite3_collatio
9370: 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73 71  n_needed16(.  sq
9380: 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f  lite3 *db, .  vo
9390: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
93a0: 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f  rg, .  void(*xCo
93b0: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
93c0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
93d0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
93e0: 69 64 2a 29 0a 29 7b 0a 20 20 64 62 2d 3e 78 43  id*).){.  db->xC
93f0: 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20  ollNeeded = 0;. 
9400: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
9410: 31 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64  16 = xCollNeeded
9420: 31 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e  16;.  db->pCollN
9430: 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c  eededArg = pColl
9440: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74  NeededArg;.  ret
9450: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
9460: 0a 0a                                            ..