/ Hex Artifact Content
Login

Artifact a6f3739a30d378128d424bb9add01103845ba6a5:


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 31 39 35 20 32 30 30 34 2f 30 35  ,v 1.195 2004/05
0280: 2f 32 37 20 32 33 3a 35 36 3a 31 36 20 64 61 6e  /27 23:56:16 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 33 5f   by the SQLITE3_
0420: 42 49 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a  BIGENDIAN and.**
0430: 20 53 51 4c 49 54 45 33 5f 4c 49 54 54 4c 45 45   SQLITE3_LITTLEE
0440: 4e 44 49 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f  NDIAN macros..*/
0450: 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74  .const int sqlit
0460: 65 33 6f 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a  e3one = 1;../*.*
0470: 2a 20 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44  * Fill the InitD
0480: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 77 69  ata structure wi
0490: 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  th an error mess
04a0: 61 67 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  age that indicat
04b0: 65 73 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  es.** that the d
04c0: 61 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75  atabase is corru
04d0: 70 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  pt..*/.static vo
04e0: 69 64 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61  id corruptSchema
04f0: 28 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61  (InitData *pData
0500: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45  , const char *zE
0510: 78 74 72 61 29 7b 0a 20 20 73 71 6c 69 74 65 33  xtra){.  sqlite3
0520: 53 65 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d  SetString(pData-
0530: 3e 70 7a 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66  >pzErrMsg, "malf
0540: 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73  ormed database s
0550: 63 68 65 6d 61 22 2c 0a 20 20 20 20 20 7a 45 78  chema",.     zEx
0560: 74 72 61 21 3d 30 20 26 26 20 7a 45 78 74 72 61  tra!=0 && zExtra
0570: 5b 30 5d 21 3d 30 20 3f 20 22 20 2d 20 22 20 3a  [0]!=0 ? " - " :
0580: 20 28 63 68 61 72 2a 29 30 2c 20 7a 45 78 74 72   (char*)0, zExtr
0590: 61 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 7d 0a  a, (char*)0);.}.
05a0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
05b0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  he callback rout
05c0: 69 6e 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ine for the code
05d0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
05e0: 73 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  s the.** databas
05f0: 65 2e 20 20 53 65 65 20 73 71 6c 69 74 65 33 49  e.  See sqlite3I
0600: 6e 69 74 28 29 20 62 65 6c 6f 77 20 66 6f 72 20  nit() below for 
0610: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
0620: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 61  mation..**.** Ea
0630: 63 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74  ch callback cont
0640: 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ains the followi
0650: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a  ng information:.
0660: 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30  **.**     argv[0
0670: 5d 20 3d 20 22 66 69 6c 65 2d 66 6f 72 6d 61 74  ] = "file-format
0680: 22 20 6f 72 20 22 73 63 68 65 6d 61 2d 63 6f 6f  " or "schema-coo
0690: 6b 69 65 22 20 6f 72 20 22 74 61 62 6c 65 22 20  kie" or "table" 
06a0: 6f 72 20 22 69 6e 64 65 78 22 0a 2a 2a 20 20 20  or "index".**   
06b0: 20 20 61 72 67 76 5b 31 5d 20 3d 20 74 61 62 6c    argv[1] = tabl
06c0: 65 20 6f 72 20 69 6e 64 65 78 20 6e 61 6d 65 20  e or index name 
06d0: 6f 72 20 6d 65 74 61 20 73 74 61 74 65 6d 65 6e  or meta statemen
06e0: 74 20 74 79 70 65 2e 0a 2a 2a 20 20 20 20 20 61  t type..**     a
06f0: 72 67 76 5b 32 5d 20 3d 20 72 6f 6f 74 20 70 61  rgv[2] = root pa
0700: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 61  ge number for ta
0710: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 4e  ble or index.  N
0720: 55 4c 4c 20 66 6f 72 20 6d 65 74 61 2e 0a 2a 2a  ULL for meta..**
0730: 20 20 20 20 20 61 72 67 76 5b 33 5d 20 3d 20 53       argv[3] = S
0740: 51 4c 20 74 65 78 74 20 66 6f 72 20 61 20 43 52  QL text for a CR
0750: 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
0760: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
0770: 6d 65 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67  ment..**     arg
0780: 76 5b 34 5d 20 3d 20 22 31 22 20 66 6f 72 20 74  v[4] = "1" for t
0790: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20  emporary files, 
07a0: 22 30 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  "0" for main dat
07b0: 61 62 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f  abase, "2" or mo
07c0: 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
07d0: 20 20 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72      for auxiliar
07e0: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  y database files
07f0: 2e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 0a 69  ..**.*/.static.i
0800: 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
0810: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e  llback(void *pIn
0820: 69 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  it, int argc, ch
0830: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
0840: 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20  **azColName){.  
0850: 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 20  InitData *pData 
0860: 3d 20 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e  = (InitData*)pIn
0870: 69 74 3b 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d  it;.  int nErr =
0880: 20 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61   0;..  assert( a
0890: 72 67 63 3d 3d 35 20 29 3b 0a 20 20 69 66 28 20  rgc==5 );.  if( 
08a0: 61 72 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e  argv==0 ) return
08b0: 20 30 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68   0;   /* Might h
08c0: 61 70 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52  appen if EMPTY_R
08d0: 45 53 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20  ESULT_CALLBACKS 
08e0: 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  are on */.  if( 
08f0: 61 72 67 76 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20  argv[0]==0 ){.  
0900: 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28    corruptSchema(
0910: 70 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 72  pData, 0);.    r
0920: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 73  eturn 1;.  }.  s
0930: 77 69 74 63 68 28 20 61 72 67 76 5b 30 5d 5b 30  witch( argv[0][0
0940: 5d 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27 76  ] ){.    case 'v
0950: 27 3a 0a 20 20 20 20 63 61 73 65 20 27 69 27 3a  ':.    case 'i':
0960: 0a 20 20 20 20 63 61 73 65 20 27 74 27 3a 20 7b  .    case 't': {
0970: 20 20 2f 2a 20 43 52 45 41 54 45 20 54 41 42 4c    /* CREATE TABL
0980: 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c  E, CREATE INDEX,
0990: 20 6f 72 20 43 52 45 41 54 45 20 56 49 45 57 20   or CREATE VIEW 
09a0: 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
09b0: 20 20 20 20 73 71 6c 69 74 65 20 2a 64 62 20 3d      sqlite *db =
09c0: 20 70 44 61 74 61 2d 3e 64 62 3b 0a 20 20 20 20   pData->db;.    
09d0: 20 20 69 66 28 20 61 72 67 76 5b 32 5d 3d 3d 30    if( argv[2]==0
09e0: 20 7c 7c 20 61 72 67 76 5b 34 5d 3d 3d 30 20 29   || argv[4]==0 )
09f0: 7b 0a 20 20 20 20 20 20 20 20 63 6f 72 72 75 70  {.        corrup
0a00: 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20 30  tSchema(pData, 0
0a10: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
0a20: 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
0a30: 20 20 20 69 66 28 20 61 72 67 76 5b 33 5d 20 26     if( argv[3] &
0a40: 26 20 61 72 67 76 5b 33 5d 5b 30 5d 20 29 7b 0a  & argv[3][0] ){.
0a50: 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20          /* Call 
0a60: 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 70 72  the parser to pr
0a70: 6f 63 65 73 73 20 61 20 43 52 45 41 54 45 20 54  ocess a CREATE T
0a80: 41 42 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20 56  ABLE, INDEX or V
0a90: 49 45 57 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20  IEW..        ** 
0aa0: 42 75 74 20 62 65 63 61 75 73 65 20 64 62 2d 3e  But because db->
0ab0: 69 6e 69 74 2e 62 75 73 79 20 69 73 20 73 65 74  init.busy is set
0ac0: 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42 45 20 63   to 1, no VDBE c
0ad0: 6f 64 65 20 69 73 20 67 65 6e 65 72 61 74 65 64  ode is generated
0ae0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65  .        ** or e
0af0: 78 65 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68  xecuted.  All th
0b00: 65 20 70 61 72 73 65 72 20 64 6f 65 73 20 69 73  e parser does is
0b10: 20 62 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72   build the inter
0b20: 6e 61 6c 20 64 61 74 61 0a 20 20 20 20 20 20 20  nal data.       
0b30: 20 2a 2a 20 73 74 72 75 63 74 75 72 65 73 20 74   ** structures t
0b40: 68 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65  hat describe the
0b50: 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f   table, index, o
0b60: 72 20 76 69 65 77 2e 0a 20 20 20 20 20 20 20 20  r view..        
0b70: 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  */.        char 
0b80: 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 61  *zErr;.        a
0b90: 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
0ba0: 62 75 73 79 20 29 3b 0a 20 20 20 20 20 20 20 20  busy );.        
0bb0: 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 61  db->init.iDb = a
0bc0: 74 6f 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20  toi(argv[4]);.  
0bd0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
0be0: 2d 3e 69 6e 69 74 2e 69 44 62 3e 3d 30 20 26 26  ->init.iDb>=0 &&
0bf0: 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 3c 64 62   db->init.iDb<db
0c00: 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 20 20 20  ->nDb );.       
0c10: 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e 75   db->init.newTnu
0c20: 6d 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d  m = atoi(argv[2]
0c30: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  );.        if( s
0c40: 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
0c50: 61 72 67 76 5b 33 5d 2c 20 30 2c 20 30 2c 20 26  argv[3], 0, 0, &
0c60: 7a 45 72 72 29 20 29 7b 0a 20 20 20 20 20 20 20  zErr) ){.       
0c70: 20 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61     corruptSchema
0c80: 28 70 44 61 74 61 2c 20 7a 45 72 72 29 3b 0a 20  (pData, zErr);. 
0c90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
0ca0: 5f 66 72 65 65 6d 65 6d 28 7a 45 72 72 29 3b 0a  _freemem(zErr);.
0cb0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0cc0: 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d    db->init.iDb =
0cd0: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
0ce0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
0cf0: 68 65 20 53 51 4c 20 63 6f 6c 75 6d 6e 20 69 73  he SQL column is
0d00: 20 62 6c 61 6e 6b 20 69 74 20 6d 65 61 6e 73 20   blank it means 
0d10: 74 68 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78  this is an index
0d20: 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a   that.        **
0d30: 20 77 61 73 20 63 72 65 61 74 65 64 20 74 6f 20   was created to 
0d40: 62 65 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  be the PRIMARY K
0d50: 45 59 20 6f 72 20 74 6f 20 66 75 6c 66 69 6c 6c  EY or to fulfill
0d60: 20 61 20 55 4e 49 51 55 45 0a 20 20 20 20 20 20   a UNIQUE.      
0d70: 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
0d80: 66 6f 72 20 61 20 43 52 45 41 54 45 20 54 41 42  for a CREATE TAB
0d90: 4c 45 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73  LE.  The index s
0da0: 68 6f 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61  hould have alrea
0db0: 64 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  dy.        ** be
0dc0: 65 6e 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  en created when 
0dd0: 77 65 20 70 72 6f 63 65 73 73 65 64 20 74 68 65  we processed the
0de0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 20 20   CREATE TABLE.  
0df0: 41 6c 6c 20 77 65 20 68 61 76 65 0a 20 20 20 20  All we have.    
0e00: 20 20 20 20 2a 2a 20 74 6f 20 64 6f 20 68 65 72      ** to do her
0e10: 65 20 69 73 20 72 65 63 6f 72 64 20 74 68 65 20  e is record the 
0e20: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
0e30: 20 66 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e   for that index.
0e40: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
0e50: 20 20 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 20      int iDb;.   
0e60: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64       Index *pInd
0e70: 65 78 3b 0a 0a 20 20 20 20 20 20 20 20 69 44 62  ex;..        iDb
0e80: 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 34 5d 29   = atoi(argv[4])
0e90: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
0ea0: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
0eb0: 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 20  db->nDb );.     
0ec0: 20 20 20 70 49 6e 64 65 78 20 3d 20 73 71 6c 69     pIndex = sqli
0ed0: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
0ee0: 20 61 72 67 76 5b 31 5d 2c 20 64 62 2d 3e 61 44   argv[1], db->aD
0ef0: 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  b[iDb].zName);. 
0f00: 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 64 65         if( pInde
0f10: 78 3d 3d 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e  x==0 || pIndex->
0f20: 74 6e 75 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20  tnum!=0 ){.     
0f30: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6e       /* This can
0f40: 20 6f 63 63 75 72 20 69 66 20 74 68 65 72 65 20   occur if there 
0f50: 65 78 69 73 74 73 20 61 6e 20 69 6e 64 65 78 20  exists an index 
0f60: 6f 6e 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20  on a TEMP table 
0f70: 77 68 69 63 68 0a 20 20 20 20 20 20 20 20 20 20  which.          
0f80: 2a 2a 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  ** has the same 
0f90: 6e 61 6d 65 20 61 73 20 61 6e 6f 74 68 65 72 20  name as another 
0fa0: 69 6e 64 65 78 20 6f 6e 20 61 20 70 65 72 6d 61  index on a perma
0fb0: 6e 65 6e 74 20 69 6e 64 65 78 2e 20 20 53 69 6e  nent index.  Sin
0fc0: 63 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  ce.          ** 
0fd0: 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20 74 61  the permanent ta
0fe0: 62 6c 65 20 69 73 20 68 69 64 64 65 6e 20 62 79  ble is hidden by
0ff0: 20 74 68 65 20 54 45 4d 50 20 74 61 62 6c 65 2c   the TEMP table,
1000: 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a 20 20 20   we can also.   
1010: 20 20 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79         ** safely
1020: 20 69 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65   ignore the inde
1030: 78 20 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65  x on the permane
1040: 6e 74 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20  nt table..      
1050: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20      */.         
1060: 20 2f 2a 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a   /* Do Nothing *
1070: 2f 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  /;.        }else
1080: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 49 6e 64  {.          pInd
1090: 65 78 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28  ex->tnum = atoi(
10a0: 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 20 20  argv[2]);.      
10b0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
10c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
10d0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
10e0: 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6e 20      /* This can 
10f0: 6e 6f 74 20 68 61 70 70 65 6e 21 20 2a 2f 0a 20  not happen! */. 
1100: 20 20 20 20 20 6e 45 72 72 20 3d 20 31 3b 0a 20       nErr = 1;. 
1110: 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 45 72       assert( nEr
1120: 72 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  r==0 );.    }.  
1130: 7d 0a 20 20 72 65 74 75 72 6e 20 6e 45 72 72 3b  }.  return nErr;
1140: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70  .}../*.** Attemp
1150: 74 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  t to read the da
1160: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e  tabase schema an
1170: 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74  d initialize int
1180: 65 72 6e 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74  ernal.** data st
1190: 72 75 63 74 75 72 65 73 20 66 6f 72 20 61 20 73  ructures for a s
11a0: 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20 66  ingle database f
11b0: 69 6c 65 2e 20 20 54 68 65 20 69 6e 64 65 78 20  ile.  The index 
11c0: 6f 66 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  of the.** databa
11d0: 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
11e0: 20 62 79 20 69 44 62 2e 20 20 69 44 62 3d 3d 30   by iDb.  iDb==0
11f0: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 65   is used for the
1200: 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73   main.** databas
1210: 65 2e 20 20 69 44 62 3d 3d 31 20 73 68 6f 75 6c  e.  iDb==1 shoul
1220: 64 20 6e 65 76 65 72 20 62 65 20 75 73 65 64 2e  d never be used.
1230: 20 20 69 44 62 3e 3d 32 20 69 73 20 75 73 65 64    iDb>=2 is used
1240: 20 66 6f 72 0a 2a 2a 20 61 75 78 69 6c 69 61 72   for.** auxiliar
1250: 79 20 64 61 74 61 62 61 73 65 73 2e 20 20 52 65  y databases.  Re
1260: 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  turn one of the 
1270: 53 51 4c 49 54 45 5f 20 65 72 72 6f 72 20 63 6f  SQLITE_ error co
1280: 64 65 73 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61  des to.** indica
1290: 74 65 20 73 75 63 63 65 73 73 20 6f 72 20 66 61  te success or fa
12a0: 69 6c 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  ilure..*/.static
12b0: 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74   int sqlite3Init
12c0: 4f 6e 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  One(sqlite *db, 
12d0: 69 6e 74 20 69 44 62 2c 20 63 68 61 72 20 2a 2a  int iDb, char **
12e0: 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74  pzErrMsg){.  int
12f0: 20 72 63 3b 0a 20 20 42 74 43 75 72 73 6f 72 20   rc;.  BtCursor 
1300: 2a 63 75 72 4d 61 69 6e 3b 0a 20 20 69 6e 74 20  *curMain;.  int 
1310: 73 69 7a 65 3b 0a 20 20 54 61 62 6c 65 20 2a 70  size;.  Table *p
1320: 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41  Tab;.  char *azA
1330: 72 67 5b 36 5d 3b 0a 20 20 63 68 61 72 20 7a 44  rg[6];.  char zD
1340: 62 4e 75 6d 5b 33 30 5d 3b 0a 20 20 69 6e 74 20  bNum[30];.  int 
1350: 6d 65 74 61 5b 31 30 5d 3b 0a 20 20 49 6e 69 74  meta[10];.  Init
1360: 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
1370: 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 61    /*.  ** The ma
1380: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
1390: 62 6c 65 20 68 61 73 20 61 20 73 74 72 75 63 74  ble has a struct
13a0: 75 72 65 20 6c 69 6b 65 20 74 68 69 73 0a 20 20  ure like this.  
13b0: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  */.  static char
13c0: 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d   master_schema[]
13d0: 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45   = .     "CREATE
13e0: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61   TABLE sqlite_ma
13f0: 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20 22 20  ster(\n".     " 
1400: 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20   type text,\n". 
1410: 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74      "  name text
1420: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62 6c  ,\n".     "  tbl
1430: 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
1440: 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20      "  rootpage 
1450: 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20  integer,\n".    
1460: 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
1470: 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 20 20 73       ")".  ;.  s
1480: 74 61 74 69 63 20 63 68 61 72 20 74 65 6d 70 5f  tatic char temp_
1490: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20  master_schema[] 
14a0: 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45 20  = .     "CREATE 
14b0: 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69 74  TEMP TABLE sqlit
14c0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28 5c 6e  e_temp_master(\n
14d0: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
14e0: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
14f0: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1500: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
1510: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1520: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1530: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
1540: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
1550: 22 0a 20 20 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ".  ;..  /* The 
1560: 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20 77 69  following SQL wi
1570: 6c 6c 20 72 65 61 64 20 74 68 65 20 73 63 68 65  ll read the sche
1580: 6d 61 20 66 72 6f 6d 20 74 68 65 20 6d 61 73 74  ma from the mast
1590: 65 72 20 74 61 62 6c 65 73 2e 0a 20 20 2a 2f 0a  er tables..  */.
15a0: 20 20 73 74 61 74 69 63 20 63 68 61 72 20 69 6e    static char in
15b0: 69 74 5f 73 63 72 69 70 74 31 5b 5d 20 3d 20 0a  it_script1[] = .
15c0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 79 70       "SELECT typ
15d0: 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  e, name, rootpag
15e0: 65 2c 20 73 71 6c 2c 20 31 20 46 52 4f 4d 20 73  e, sql, 1 FROM s
15f0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
1600: 72 22 3b 0a 20 20 73 74 61 74 69 63 20 63 68 61  r";.  static cha
1610: 72 20 69 6e 69 74 5f 73 63 72 69 70 74 32 5b 5d  r init_script2[]
1620: 20 3d 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54   = .     "SELECT
1630: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f   type, name, roo
1640: 74 70 61 67 65 2c 20 73 71 6c 2c 20 30 20 46 52  tpage, sql, 0 FR
1650: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1660: 22 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44  ";..  assert( iD
1670: 62 3e 3d 30 20 26 26 20 69 44 62 21 3d 31 20 26  b>=0 && iDb!=1 &
1680: 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1690: 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75 63 74  ..  /* Construct
16a0: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
16b0: 65 73 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  es: sqlite_maste
16c0: 72 20 61 6e 64 20 73 71 6c 69 74 65 5f 74 65 6d  r and sqlite_tem
16d0: 70 5f 6d 61 73 74 65 72 0a 20 20 2a 2f 0a 20 20  p_master.  */.  
16e0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
16f0: 28 64 62 29 3b 0a 20 20 61 7a 41 72 67 5b 30 5d  (db);.  azArg[0]
1700: 20 3d 20 22 74 61 62 6c 65 22 3b 0a 20 20 61 7a   = "table";.  az
1710: 41 72 67 5b 31 5d 20 3d 20 4d 41 53 54 45 52 5f  Arg[1] = MASTER_
1720: 4e 41 4d 45 3b 0a 20 20 61 7a 41 72 67 5b 32 5d  NAME;.  azArg[2]
1730: 20 3d 20 22 31 22 3b 0a 20 20 61 7a 41 72 67 5b   = "1";.  azArg[
1740: 33 5d 20 3d 20 6d 61 73 74 65 72 5f 73 63 68 65  3] = master_sche
1750: 6d 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 44  ma;.  sprintf(zD
1760: 62 4e 75 6d 2c 20 22 25 64 22 2c 20 69 44 62 29  bNum, "%d", iDb)
1770: 3b 0a 20 20 61 7a 41 72 67 5b 34 5d 20 3d 20 7a  ;.  azArg[4] = z
1780: 44 62 4e 75 6d 3b 0a 20 20 61 7a 41 72 67 5b 35  DbNum;.  azArg[5
1790: 5d 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61 74  ] = 0;.  initDat
17a0: 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69  a.db = db;.  ini
17b0: 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
17c0: 20 70 7a 45 72 72 4d 73 67 3b 0a 20 20 73 71 6c   pzErrMsg;.  sql
17d0: 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
17e0: 28 26 69 6e 69 74 44 61 74 61 2c 20 35 2c 20 61  (&initData, 5, a
17f0: 7a 41 72 67 2c 20 30 29 3b 0a 20 20 70 54 61 62  zArg, 0);.  pTab
1800: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
1810: 62 6c 65 28 64 62 2c 20 4d 41 53 54 45 52 5f 4e  ble(db, MASTER_N
1820: 41 4d 45 2c 20 22 6d 61 69 6e 22 29 3b 0a 20 20  AME, "main");.  
1830: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
1840: 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d  pTab->readOnly =
1850: 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 44   1;.  }.  if( iD
1860: 62 3d 3d 30 20 29 7b 0a 20 20 20 20 61 7a 41 72  b==0 ){.    azAr
1870: 67 5b 31 5d 20 3d 20 54 45 4d 50 5f 4d 41 53 54  g[1] = TEMP_MAST
1880: 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 61 7a 41  ER_NAME;.    azA
1890: 72 67 5b 33 5d 20 3d 20 74 65 6d 70 5f 6d 61 73  rg[3] = temp_mas
18a0: 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20  ter_schema;.    
18b0: 61 7a 41 72 67 5b 34 5d 20 3d 20 22 31 22 3b 0a  azArg[4] = "1";.
18c0: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 69 74 43      sqlite3InitC
18d0: 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44 61 74  allback(&initDat
18e0: 61 2c 20 35 2c 20 61 7a 41 72 67 2c 20 30 29 3b  a, 5, azArg, 0);
18f0: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
1900: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
1910: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
1920: 45 2c 20 22 74 65 6d 70 22 29 3b 0a 20 20 20 20  E, "temp");.    
1930: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
1940: 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79    pTab->readOnly
1950: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1960: 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f    sqlite3SafetyO
1970: 6e 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 72 65  n(db);..  /* Cre
1980: 61 74 65 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ate a cursor to 
1990: 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61 73  hold the databas
19a0: 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20 69 66  e open.  */.  if
19b0: 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
19c0: 42 74 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53  Bt==0 ) return S
19d0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 72 63 20 3d  QLITE_OK;.  rc =
19e0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
19f0: 73 6f 72 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  sor(db->aDb[iDb]
1a00: 2e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  .pBt, MASTER_ROO
1a10: 54 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72  T, 0, 0, 0, &cur
1a20: 4d 61 69 6e 29 3b 0a 20 20 69 66 28 20 72 63 21  Main);.  if( rc!
1a30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
1a40: 21 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29  !=SQLITE_EMPTY )
1a50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
1a60: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
1a70: 20 73 71 6c 69 74 65 33 5f 65 72 72 6f 72 5f 73   sqlite3_error_s
1a80: 74 72 69 6e 67 28 72 63 29 2c 20 28 63 68 61 72  tring(rc), (char
1a90: 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  *)0);.    return
1aa0: 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47   rc;.  }..  /* G
1ab0: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
1ac0: 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  meta information
1ad0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 74 61  ..  **.  ** Meta
1ae0: 20 76 61 6c 75 65 73 20 61 72 65 20 61 73 20 66   values are as f
1af0: 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 20 20 20 20  ollows:.  **    
1b00: 6d 65 74 61 5b 30 5d 20 20 20 53 63 68 65 6d 61  meta[0]   Schema
1b10: 20 63 6f 6f 6b 69 65 2e 20 20 43 68 61 6e 67 65   cookie.  Change
1b20: 73 20 77 69 74 68 20 65 61 63 68 20 73 63 68 65  s with each sche
1b30: 6d 61 20 63 68 61 6e 67 65 2e 0a 20 20 2a 2a 20  ma change..  ** 
1b40: 20 20 20 6d 65 74 61 5b 31 5d 20 20 20 46 69 6c     meta[1]   Fil
1b50: 65 20 66 6f 72 6d 61 74 20 6f 66 20 73 63 68 65  e format of sche
1b60: 6d 61 20 6c 61 79 65 72 2e 0a 20 20 2a 2a 20 20  ma layer..  **  
1b70: 20 20 6d 65 74 61 5b 32 5d 20 20 20 53 69 7a 65    meta[2]   Size
1b80: 20 6f 66 20 74 68 65 20 70 61 67 65 20 63 61 63   of the page cac
1b90: 68 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61  he..  **    meta
1ba0: 5b 33 5d 20 20 20 53 79 6e 63 68 72 6f 6e 6f 75  [3]   Synchronou
1bb0: 73 20 73 65 74 74 69 6e 67 2e 20 20 31 3a 6f 66  s setting.  1:of
1bc0: 66 2c 20 32 3a 6e 6f 72 6d 61 6c 2c 20 33 3a 66  f, 2:normal, 3:f
1bd0: 75 6c 6c 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61  ull.  **    meta
1be0: 5b 34 5d 20 20 20 44 62 20 74 65 78 74 20 65 6e  [4]   Db text en
1bf0: 63 6f 64 69 6e 67 2e 20 31 3a 55 54 46 2d 38 20  coding. 1:UTF-8 
1c00: 32 3a 55 54 46 2d 31 36 20 4c 45 20 33 3a 55 54  2:UTF-16 LE 3:UT
1c10: 46 2d 31 36 20 42 45 0a 20 20 2a 2a 20 20 20 20  F-16 BE.  **    
1c20: 6d 65 74 61 5b 35 5d 20 20 20 50 72 61 67 6d 61  meta[5]   Pragma
1c30: 20 74 65 6d 70 5f 73 74 6f 72 65 20 76 61 6c 75   temp_store valu
1c40: 65 2e 20 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73  e.  See comments
1c50: 20 6f 6e 20 42 74 72 65 65 46 61 63 74 6f 72 79   on BtreeFactory
1c60: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 36 5d  .  **    meta[6]
1c70: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 37 5d  .  **    meta[7]
1c80: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 38 5d  .  **    meta[8]
1c90: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 39 5d  .  **    meta[9]
1ca0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a  .  **.  ** Note:
1cb0: 20 54 68 65 20 68 61 73 68 20 64 65 66 69 6e 65   The hash define
1cc0: 64 20 54 45 58 54 5f 55 74 66 2a 20 73 79 6d 62  d TEXT_Utf* symb
1cd0: 6f 6c 73 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ols in sqliteInt
1ce0: 2e 68 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  .h correspond to
1cf0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 73 73 69 62  .  ** the possib
1d00: 6c 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 65 74  le values of met
1d10: 61 5b 34 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  a[4]..  */.  if(
1d20: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1d30: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
1d40: 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d 53 51   for(i=0; rc==SQ
1d50: 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 73 69 7a  LITE_OK && i<siz
1d60: 65 6f 66 28 6d 65 74 61 29 2f 73 69 7a 65 6f 66  eof(meta)/sizeof
1d70: 28 6d 65 74 61 5b 30 5d 29 3b 20 69 2b 2b 29 7b  (meta[0]); i++){
1d80: 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1d90: 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
1da0: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1db0: 2c 20 69 2b 31 2c 20 26 6d 65 74 61 5b 69 5d 29  , i+1, &meta[i])
1dc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1dd0: 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  rc ){.      sqli
1de0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45  te3SetString(pzE
1df0: 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33 5f 65  rrMsg, sqlite3_e
1e00: 72 72 6f 72 5f 73 74 72 69 6e 67 28 72 63 29 2c  rror_string(rc),
1e10: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
1e20: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1e30: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
1e40: 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n);.      return
1e50: 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   rc;.    }.  }el
1e60: 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 6d  se{.    memset(m
1e70: 65 74 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d  eta, 0, sizeof(m
1e80: 65 74 61 29 29 3b 0a 20 20 7d 0a 20 20 64 62 2d  eta));.  }.  db-
1e90: 3e 61 44 62 5b 69 44 62 5d 2e 73 63 68 65 6d 61  >aDb[iDb].schema
1ea0: 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30  _cookie = meta[0
1eb0: 5d 3b 0a 20 20 69 66 28 20 69 44 62 3d 3d 30 20  ];.  if( iDb==0 
1ec0: 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 65 78 74 5f  ){.    db->next_
1ed0: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d  cookie = meta[0]
1ee0: 3b 0a 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66  ;.    db->file_f
1ef0: 6f 72 6d 61 74 20 3d 20 6d 65 74 61 5b 31 5d 3b  ormat = meta[1];
1f00: 0a 20 20 20 20 69 66 28 20 6d 65 74 61 5b 34 5d  .    if( meta[4]
1f10: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
1f20: 6d 65 74 61 5b 34 5d 20 69 73 20 73 74 69 6c 6c  meta[4] is still
1f30: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 77 65 20 61   zero, then we a
1f40: 72 65 20 6f 70 65 6e 69 6e 67 20 61 20 70 72 65  re opening a pre
1f50: 76 69 6f 75 73 6c 79 20 65 6d 70 74 79 0a 20 20  viously empty.  
1f60: 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 4c 65 61      ** file. Lea
1f70: 76 65 20 64 62 2d 3e 65 6e 63 20 74 6f 20 74 68  ve db->enc to th
1f80: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
1f90: 73 65 74 20 62 79 20 74 68 65 20 73 71 6c 69 74  set by the sqlit
1fa0: 65 33 5f 6f 70 65 6e 28 29 0a 20 20 20 20 20 20  e3_open().      
1fb0: 2a 2a 20 63 61 6c 6c 20 69 6e 20 74 68 69 73 20  ** call in this 
1fc0: 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  case..      */. 
1fd0: 20 20 20 20 20 64 62 2d 3e 65 6e 63 20 3d 20 28       db->enc = (
1fe0: 75 38 29 6d 65 74 61 5b 34 5d 3b 0a 20 20 20 20  u8)meta[4];.    
1ff0: 7d 0a 20 20 20 20 73 69 7a 65 20 3d 20 6d 65 74  }.    size = met
2000: 61 5b 32 5d 3b 0a 20 20 20 20 69 66 28 20 73 69  a[2];.    if( si
2010: 7a 65 3d 3d 30 20 29 7b 20 73 69 7a 65 20 3d 20  ze==0 ){ size = 
2020: 4d 41 58 5f 50 41 47 45 53 3b 20 7d 0a 20 20 20  MAX_PAGES; }.   
2030: 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20   db->cache_size 
2040: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 64 62 2d 3e  = size;.    db->
2050: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 6d  safety_level = m
2060: 65 74 61 5b 33 5d 3b 0a 20 20 20 20 69 66 28 20  eta[3];.    if( 
2070: 6d 65 74 61 5b 35 5d 3e 30 20 26 26 20 6d 65 74  meta[5]>0 && met
2080: 61 5b 35 5d 3c 3d 32 20 26 26 20 64 62 2d 3e 74  a[5]<=2 && db->t
2090: 65 6d 70 5f 73 74 6f 72 65 3d 3d 30 20 29 7b 0a  emp_store==0 ){.
20a0: 20 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73        db->temp_s
20b0: 74 6f 72 65 20 3d 20 6d 65 74 61 5b 35 5d 3b 0a  tore = meta[5];.
20c0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
20d0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 3d 3d  ->safety_level==
20e0: 30 20 29 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c  0 ) db->safety_l
20f0: 65 76 65 6c 20 3d 20 32 3b 0a 0a 20 20 20 20 2f  evel = 2;..    /
2100: 2a 0a 20 20 20 20 2a 2a 20 20 66 69 6c 65 5f 66  *.    **  file_f
2110: 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56 65 72 73  ormat==1    Vers
2120: 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20 20 20 2a  ion 3.0.0..    *
2130: 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 69  /.    if( db->fi
2140: 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a  le_format==0 ){.
2150: 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61        /* This ha
2160: 70 70 65 6e 73 20 69 66 20 74 68 65 20 64 61 74  ppens if the dat
2170: 61 62 61 73 65 20 77 61 73 20 69 6e 69 74 69 61  abase was initia
2180: 6c 6c 79 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20  lly empty */.   
2190: 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d     db->file_form
21a0: 61 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  at = 1;.    }els
21b0: 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66  e if( db->file_f
21c0: 6f 72 6d 61 74 3e 31 20 29 7b 0a 20 20 20 20 20  ormat>1 ){.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
21e0: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
21f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2200: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
2210: 73 67 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  sg, "unsupported
2220: 20 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28   file format", (
2230: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20  char*)0);.      
2240: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
2250: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ROR;.    }.  }el
2260: 73 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f  se if( db->file_
2270: 66 6f 72 6d 61 74 21 3d 6d 65 74 61 5b 31 5d 20  format!=meta[1] 
2280: 29 7b 0a 20 20 20 20 69 66 28 20 6d 65 74 61 5b  ){.    if( meta[
2290: 31 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  1]==0 ){.      s
22a0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
22b0: 70 7a 45 72 72 4d 73 67 2c 20 22 63 61 6e 6e 6f  pzErrMsg, "canno
22c0: 74 20 61 74 74 61 63 68 20 65 6d 70 74 79 20 64  t attach empty d
22d0: 61 74 61 62 61 73 65 3a 20 22 2c 0a 20 20 20 20  atabase: ",.    
22e0: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
22f0: 5d 2e 7a 4e 61 6d 65 2c 20 28 63 68 61 72 2a 29  ].zName, (char*)
2300: 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  0);.    }else{. 
2310: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2320: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
2330: 22 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69  "incompatible fi
2340: 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 61 75 78  le format in aux
2350: 69 6c 69 61 72 79 20 22 0a 20 20 20 20 20 20 20  iliary ".       
2360: 20 20 22 64 61 74 61 62 61 73 65 3a 20 22 2c 20    "database: ", 
2370: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
2380: 6d 65 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  me, (char*)0);. 
2390: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
23a0: 42 74 72 65 65 43 6c 6f 73 65 28 64 62 2d 3e 61  BtreeClose(db->a
23b0: 44 62 5b 69 44 62 5d 2e 70 42 74 29 3b 0a 20 20  Db[iDb].pBt);.  
23c0: 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70    db->aDb[iDb].p
23d0: 42 74 20 3d 20 30 3b 0a 20 20 20 20 72 65 74 75  Bt = 0;.    retu
23e0: 72 6e 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  rn SQLITE_FORMAT
23f0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
2400: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
2410: 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2420: 74 2c 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a  t, db->cache_siz
2430: 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72  e);.  sqlite3Btr
2440: 65 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c  eeSetSafetyLevel
2450: 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2460: 74 2c 20 6d 65 74 61 5b 33 5d 3d 3d 30 20 3f 20  t, meta[3]==0 ? 
2470: 32 20 3a 20 6d 65 74 61 5b 33 5d 29 3b 0a 0a 20  2 : meta[3]);.. 
2480: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63 68   /* Read the sch
2490: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
24a0: 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d  out of the schem
24b0: 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20  a tables.  */.  
24c0: 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
24d0: 2e 62 75 73 79 20 29 3b 0a 20 20 73 71 6c 69 74  .busy );.  sqlit
24e0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
24f0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2500: 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 2f  E_EMPTY ){.    /
2510: 2a 20 46 6f 72 20 61 6e 20 65 6d 70 74 79 20 64  * For an empty d
2520: 61 74 61 62 61 73 65 2c 20 74 68 65 72 65 20 69  atabase, there i
2530: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 72 65 61  s nothing to rea
2540: 64 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53 51  d */.    rc = SQ
2550: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
2560: 7b 0a 20 20 20 20 69 66 28 20 69 44 62 3d 3d 30  {.    if( iDb==0
2570: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69   ){.      /* Thi
2580: 73 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  s SQL statement 
2590: 74 72 69 65 73 20 74 6f 20 72 65 61 64 20 74 68  tries to read th
25a0: 65 20 74 65 6d 70 2e 2a 20 73 63 68 65 6d 61 20  e temp.* schema 
25b0: 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a  from the.      *
25c0: 2a 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  * sqlite_temp_ma
25d0: 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74 20 6d  ster table. It m
25e0: 69 67 68 74 20 72 65 74 75 72 6e 20 53 51 4c 49  ight return SQLI
25f0: 54 45 5f 45 4d 50 54 59 2e 20 0a 20 20 20 20 20  TE_EMPTY. .     
2600: 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73   */.      rc = s
2610: 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
2620: 69 6e 69 74 5f 73 63 72 69 70 74 31 2c 20 73 71  init_script1, sq
2630: 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2640: 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
2650: 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
2660: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
2670: 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
2680: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2690: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 69  lite3_exec(db, i
26a0: 6e 69 74 5f 73 63 72 69 70 74 32 2c 20 73 71 6c  nit_script2, sql
26b0: 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
26c0: 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
26d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
26e0: 73 65 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  se{.      char *
26f0: 7a 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20  zSql = 0;.      
2700: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2710: 28 26 7a 53 71 6c 2c 20 0a 20 20 20 20 20 20 20  (&zSql, .       
2720: 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20    "SELECT type, 
2730: 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
2740: 73 71 6c 2c 20 22 2c 20 7a 44 62 4e 75 6d 2c 20  sql, ", zDbNum, 
2750: 22 20 46 52 4f 4d 20 5c 22 22 2c 0a 20 20 20 20  " FROM \"",.    
2760: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
2770: 5d 2e 7a 4e 61 6d 65 2c 20 22 5c 22 2e 73 71 6c  ].zName, "\".sql
2780: 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 28 63 68  ite_master", (ch
2790: 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 72 63  ar*)0);.      rc
27a0: 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
27b0: 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
27c0: 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
27d0: 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
27e0: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a      sqliteFree(z
27f0: 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
2800: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
2810: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  db);.    sqlite3
2820: 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72  BtreeCloseCursor
2830: 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 7d 0a 20  (curMain);.  }. 
2840: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c   if( sqlite3_mal
2850: 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20  loc_failed ){.  
2860: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2870: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75  ng(pzErrMsg, "ou
2880: 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63  t of memory", (c
2890: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 63 20  har*)0);.    rc 
28a0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
28b0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
28c0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
28d0: 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  b, 0);.  }.  if(
28e0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
28f0: 7b 0a 20 20 20 20 44 62 53 65 74 50 72 6f 70 65  {.    DbSetPrope
2900: 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2910: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20  SchemaLoaded);. 
2920: 20 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b     if( iDb==0 ){
2930: 0a 20 20 20 20 20 20 44 62 53 65 74 50 72 6f 70  .      DbSetProp
2940: 65 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f 53  erty(db, 1, DB_S
2950: 63 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20  chemaLoaded);.  
2960: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
2970: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
2980: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
2990: 69 44 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  iDb);.  }.  retu
29a0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
29b0: 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c 6c 20 64  Initialize all d
29c0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 2d 20  atabase files - 
29d0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
29e0: 65 20 66 69 6c 65 2c 20 74 68 65 20 66 69 6c 65  e file, the file
29f0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
2a00: 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
2a10: 65 73 2c 20 61 6e 64 20 61 6e 79 20 61 64 64 69  es, and any addi
2a20: 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
2a30: 66 69 6c 65 73 0a 2a 2a 20 63 72 65 61 74 65 64  files.** created
2a40: 20 75 73 69 6e 67 20 41 54 54 41 43 48 20 73 74   using ATTACH st
2a50: 61 74 65 6d 65 6e 74 73 2e 20 20 52 65 74 75 72  atements.  Retur
2a60: 6e 20 61 20 73 75 63 63 65 73 73 20 63 6f 64 65  n a success code
2a70: 2e 20 20 49 66 20 61 6e 0a 2a 2a 20 65 72 72 6f  .  If an.** erro
2a80: 72 20 6f 63 63 75 72 73 2c 20 77 72 69 74 65 20  r occurs, write 
2a90: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2aa0: 20 69 6e 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e   into *pzErrMsg.
2ab0: 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 65  .**.** After the
2ac0: 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 69   database is ini
2ad0: 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 20 53 51  tialized, the SQ
2ae0: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
2af0: 0a 2a 2a 20 62 69 74 20 69 73 20 73 65 74 20 69  .** bit is set i
2b00: 6e 20 74 68 65 20 66 6c 61 67 73 20 66 69 65 6c  n the flags fiel
2b10: 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  d of the sqlite 
2b20: 73 74 72 75 63 74 75 72 65 2e 20 20 41 6e 0a 2a  structure.  An.*
2b30: 2a 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  * attempt is mad
2b40: 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  e to initialize 
2b50: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20  the database as 
2b60: 73 6f 6f 6e 20 61 73 20 69 74 0a 2a 2a 20 69 73  soon as it.** is
2b70: 20 6f 70 65 6e 65 64 2e 20 20 49 66 20 74 68 61   opened.  If tha
2b80: 74 20 66 61 69 6c 73 20 28 70 65 72 68 61 70 73  t fails (perhaps
2b90: 20 62 65 63 61 75 73 65 20 61 6e 6f 74 68 65 72   because another
2ba0: 20 70 72 6f 63 65 73 73 0a 2a 2a 20 68 61 73 20   process.** has 
2bb0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
2bc0: 72 20 74 61 62 6c 65 20 6c 6f 63 6b 65 64 29 20  r table locked) 
2bd0: 74 68 61 6e 20 61 6e 6f 74 68 65 72 20 61 74 74  than another att
2be0: 65 6d 70 74 0a 2a 2a 20 69 73 20 6d 61 64 65 20  empt.** is made 
2bf0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74  the first time t
2c00: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 61  he database is a
2c10: 63 63 65 73 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20  ccessed..*/.int 
2c20: 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
2c30: 74 65 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 70  te *db, char **p
2c40: 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20  zErrMsg){.  int 
2c50: 69 2c 20 72 63 3b 0a 20 20 0a 20 20 69 66 28 20  i, rc;.  .  if( 
2c60: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 20  db->init.busy ) 
2c70: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2c80: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 64 62 2d  ;.  assert( (db-
2c90: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2ca0: 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20  Initialized)==0 
2cb0: 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2cc0: 5f 4f 4b 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e  _OK;.  db->init.
2cd0: 62 75 73 79 20 3d 20 31 3b 0a 20 20 66 6f 72 28  busy = 1;.  for(
2ce0: 69 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  i=0; rc==SQLITE_
2cf0: 4f 4b 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 3b  OK && i<db->nDb;
2d00: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 44   i++){.    if( D
2d10: 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
2d20: 20 69 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   i, DB_SchemaLoa
2d30: 64 65 64 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b  ded) ) continue;
2d40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 21 3d  .    assert( i!=
2d50: 31 20 29 3b 20 20 2f 2a 20 53 68 6f 75 6c 64 20  1 );  /* Should 
2d60: 68 61 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61  have been initia
2d70: 6c 69 7a 65 64 20 74 6f 67 65 74 68 65 72 20 77  lized together w
2d80: 69 74 68 20 30 20 2a 2f 0a 20 20 20 20 72 63 20  ith 0 */.    rc 
2d90: 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  = sqlite3InitOne
2da0: 28 64 62 2c 20 69 2c 20 70 7a 45 72 72 4d 73 67  (db, i, pzErrMsg
2db0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
2dc0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
2dd0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
2de0: 61 28 64 62 2c 20 69 29 3b 0a 20 20 20 20 7d 0a  a(db, i);.    }.
2df0: 20 20 7d 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62    }.  db->init.b
2e00: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 72  usy = 0;.  if( r
2e10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2e20: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
2e30: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
2e40: 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  zed;.    sqlite3
2e50: 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
2e60: 61 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d 0a 0a  anges(db);.  }..
2e70: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2e80: 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66  _OK ){.    db->f
2e90: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f  lags &= ~SQLITE_
2ea0: 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 7d  Initialized;.  }
2eb0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
2ec0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73 69  ./*.** The versi
2ed0: 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  on of the librar
2ee0: 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  y.*/.const char 
2ef0: 72 63 73 69 64 5b 5d 20 3d 20 22 40 28 23 29 20  rcsid[] = "@(#) 
2f00: 5c 30 34 34 49 64 3a 20 53 51 4c 69 74 65 20 76  \044Id: SQLite v
2f10: 65 72 73 69 6f 6e 20 22 20 53 51 4c 49 54 45 5f  ersion " SQLITE_
2f20: 56 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a 63 6f  VERSION " $";.co
2f30: 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2f40: 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c  _version[] = SQL
2f50: 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a  ITE_VERSION;../*
2f60: 0a 2a 2a 20 44 6f 65 73 20 74 68 65 20 6c 69 62  .** Does the lib
2f70: 72 61 72 79 20 65 78 70 65 63 74 20 64 61 74 61  rary expect data
2f80: 20 74 6f 20 62 65 20 65 6e 63 6f 64 65 64 20 61   to be encoded a
2f90: 73 20 55 54 46 2d 38 20 6f 72 20 69 73 6f 38 38  s UTF-8 or iso88
2fa0: 35 39 3f 20 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c  59?  The.** foll
2fb0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  owing global con
2fc0: 73 74 61 6e 74 20 61 6c 77 61 79 73 20 6c 65 74  stant always let
2fd0: 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69  s us know..*/.#i
2fe0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38  fdef SQLITE_UTF8
2ff0: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
3000: 74 65 33 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d  te3_encoding[] =
3010: 20 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73 65 0a   "UTF-8";.#else.
3020: 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
3030: 65 33 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20  e3_encoding[] = 
3040: 22 69 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64 69  "iso8859";.#endi
3050: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  f../*.** This is
3060: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
3070: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
3080: 6e 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77  named "BINARY" w
3090: 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a  hich is always.*
30a0: 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a  * available..*/.
30b0: 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 61 72  static int binar
30c0: 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a  yCollatingFunc(.
30d0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
30e0: 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f  .  int nKey1, co
30f0: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c  nst void *pKey1,
3100: 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f  .  int nKey2, co
3110: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a  nst void *pKey2.
3120: 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a  ){.  int rc, n;.
3130: 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79    n = nKey1<nKey
3140: 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79  2 ? nKey1 : nKey
3150: 32 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70  2;.  rc = memcmp
3160: 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e  (pKey1, pKey2, n
3170: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29  );.  if( rc==0 )
3180: 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31  {.    rc = nKey1
3190: 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20   - nKey2;.  }.  
31a0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
31b0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52  .** Return the R
31c0: 4f 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74  OWID of the most
31d0: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a   recent insert.*
31e0: 2f 0a 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 20  /.long long int 
31f0: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
3200: 65 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65  ert_rowid(sqlite
3210: 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20   *db){.  return 
3220: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d  db->lastRowid;.}
3230: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
3240: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
3250: 6e 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74  nges in the most
3260: 20 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20   recent call to 
3270: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a  sqlite3_exec()..
3280: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
3290: 68 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64  hanges(sqlite *d
32a0: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
32b0: 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  >nChange;.}../*.
32c0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
32d0: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
32e0: 70 72 6f 64 75 63 65 64 20 62 79 20 74 68 65 20  produced by the 
32f0: 6c 61 73 74 20 49 4e 53 45 52 54 2c 20 55 50 44  last INSERT, UPD
3300: 41 54 45 2c 20 6f 72 0a 2a 2a 20 44 45 4c 45 54  ATE, or.** DELET
3310: 45 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63  E statement to c
3320: 6f 6d 70 6c 65 74 65 20 65 78 65 63 75 74 69 6f  omplete executio
3330: 6e 2e 20 54 68 65 20 63 6f 75 6e 74 20 64 6f 65  n. The count doe
3340: 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 0a 2a 2a  s not include.**
3350: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
3360: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 65  SQL statements e
3370: 78 65 63 75 74 65 64 20 69 6e 20 74 72 69 67 67  xecuted in trigg
3380: 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74  er programs that
3390: 20 77 65 72 65 0a 2a 2a 20 74 72 69 67 67 65 72   were.** trigger
33a0: 65 64 20 62 79 20 74 68 61 74 20 73 74 61 74 65  ed by that state
33b0: 6d 65 6e 74 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ment.*/.int sqli
33c0: 74 65 33 5f 6c 61 73 74 5f 73 74 61 74 65 6d 65  te3_last_stateme
33d0: 6e 74 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74  nt_changes(sqlit
33e0: 65 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e  e *db){.  return
33f0: 20 64 62 2d 3e 6c 73 43 68 61 6e 67 65 3b 0a 7d   db->lsChange;.}
3400: 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e  ../*.** Close an
3410: 20 65 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65   existing SQLite
3420: 20 64 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69   database.*/.voi
3430: 64 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  d sqlite3_close(
3440: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 48  sqlite *db){.  H
3450: 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e  ashElem *i;.  in
3460: 74 20 6a 3b 0a 20 20 64 62 2d 3e 77 61 6e 74 5f  t j;.  db->want_
3470: 74 6f 5f 63 6c 6f 73 65 20 3d 20 31 3b 0a 20 20  to_close = 1;.  
3480: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
3490: 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 73 71  yCheck(db) || sq
34a0: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
34b0: 29 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e  ) ){.    /* prin
34c0: 74 66 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53  tf("DID NOT CLOS
34d0: 45 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74  E\n"); fflush(st
34e0: 64 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65  dout); */.    re
34f0: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  turn;.  }.  db->
3500: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
3510: 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 66  AGIC_CLOSED;.  f
3520: 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44  or(j=0; j<db->nD
3530: 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72  b; j++){.    str
3540: 75 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64  uct Db *pDb = &d
3550: 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69  b->aDb[j];.    i
3560: 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20  f( pDb->pBt ){. 
3570: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
3580: 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29  eClose(pDb->pBt)
3590: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74  ;.      pDb->pBt
35a0: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
35b0: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
35c0: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
35d0: 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64   0);.  assert( d
35e0: 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61  b->nDb<=2 );.  a
35f0: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d  ssert( db->aDb==
3600: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b  db->aDbStatic );
3610: 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48  .  for(i=sqliteH
3620: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46  ashFirst(&db->aF
3630: 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74  unc); i; i=sqlit
3640: 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20  eHashNext(i)){. 
3650: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
3660: 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66  c, *pNext;.    f
3670: 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63  or(pFunc = (Func
3680: 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44  Def*)sqliteHashD
3690: 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70  ata(i); pFunc; p
36a0: 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20  Func=pNext){.   
36b0: 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63     pNext = pFunc
36c0: 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73  ->pNext;.      s
36d0: 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63 29  qliteFree(pFunc)
36e0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
36f0: 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26  lite3HashClear(&
3700: 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71  db->aFunc);.  sq
3710: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
3720: 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a  QLITE_OK, 0); /*
3730: 20 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79   Deallocates any
3740: 20 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74   cached error st
3750: 72 69 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c 69  rings. */.  sqli
3760: 74 65 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f  teFree(db);.}../
3770: 2a 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c  *.** Rollback al
3780: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
3790: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
37a0: 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
37b0: 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  ite *db){.  int 
37c0: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
37d0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
37e0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
37f0: 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73  ].pBt ){.      s
3800: 71 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62  qlite3BtreeRollb
3810: 61 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ack(db->aDb[i].p
3820: 42 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Bt);.      db->a
3830: 44 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20  Db[i].inTrans = 
3840: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  0;.    }.  }.  s
3850: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
3860: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
3870: 3b 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 52 6f  ;.  /* sqlite3Ro
3880: 6c 6c 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68  llbackInternalCh
3890: 61 6e 67 65 73 28 64 62 29 3b 20 2a 2f 0a 7d 0a  anges(db); */.}.
38a0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
38b0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 68  static string th
38c0: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
38d0: 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73   kind of error s
38e0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
38f0: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
3900: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
3910: 74 65 33 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67  te3_error_string
3920: 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73  (int rc){.  cons
3930: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69  t char *z;.  swi
3940: 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
3950: 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20  ase SQLITE_OK:  
3960: 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74 20         z = "not 
3970: 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20  an error";      
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3990: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
39a0: 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  ase SQLITE_ERROR
39b0: 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c 20  :      z = "SQL 
39c0: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
39d0: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 22  issing database"
39e0: 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  ;   break;.    c
39f0: 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  ase SQLITE_INTER
3a00: 4e 41 4c 3a 20 20 20 7a 20 3d 20 22 69 6e 74 65  NAL:   z = "inte
3a10: 72 6e 61 6c 20 53 51 4c 69 74 65 20 69 6d 70 6c  rnal SQLite impl
3a20: 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6c 61 77 22  ementation flaw"
3a30: 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  ;   break;.    c
3a40: 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a  ase SQLITE_PERM:
3a50: 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63 65         z = "acce
3a60: 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65  ss permission de
3a70: 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  nied";          
3a80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3a90: 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ase SQLITE_ABORT
3aa0: 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c 6c  :      z = "call
3ab0: 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71  back requested q
3ac0: 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20 20  uery abort";    
3ad0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3ae0: 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a  ase SQLITE_BUSY:
3af0: 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61         z = "data
3b00: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b  base is locked";
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3b30: 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  ase SQLITE_LOCKE
3b40: 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61  D:     z = "data
3b50: 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
3b60: 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  cked";          
3b70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3b80: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ase SQLITE_NOMEM
3b90: 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74 20  :      z = "out 
3ba0: 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20 20  of memory";     
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bc0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3bd0: 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  ase SQLITE_READO
3be0: 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74 65  NLY:   z = "atte
3bf0: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
3c00: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
3c10: 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  ";  break;.    c
3c20: 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  ase SQLITE_INTER
3c30: 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74 65  RUPT:  z = "inte
3c40: 72 72 75 70 74 65 64 22 3b 20 20 20 20 20 20 20  rrupted";       
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3c70: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
3c80: 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73 6b  :      z = "disk
3c90: 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20 20   I/O error";    
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3cc0: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ase SQLITE_CORRU
3cd0: 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74 61  PT:    z = "data
3ce0: 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20  base disk image 
3cf0: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20 20  is malformed";  
3d00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3d10: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  ase SQLITE_NOTFO
3d20: 55 4e 44 3a 20 20 20 7a 20 3d 20 22 74 61 62 6c  UND:   z = "tabl
3d30: 65 20 6f 72 20 72 65 63 6f 72 64 20 6e 6f 74 20  e or record not 
3d40: 66 6f 75 6e 64 22 3b 20 20 20 20 20 20 20 20 20  found";         
3d50: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3d60: 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a  ase SQLITE_FULL:
3d70: 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61         z = "data
3d80: 62 61 73 65 20 69 73 20 66 75 6c 6c 22 3b 20 20  base is full";  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3db0: 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ase SQLITE_CANTO
3dc0: 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61 62  PEN:   z = "unab
3dd0: 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
3de0: 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20 20  ase file";      
3df0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3e00: 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f  ase SQLITE_PROTO
3e10: 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74 61  COL:   z = "data
3e20: 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72 6f  base locking pro
3e30: 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b 20  tocol failure"; 
3e40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3e50: 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  ase SQLITE_EMPTY
3e60: 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62 6c  :      z = "tabl
3e70: 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61  e contains no da
3e80: 74 61 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ta";            
3e90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3ea0: 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ase SQLITE_SCHEM
3eb0: 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61  A:     z = "data
3ec0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
3ed0: 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20 20  changed";       
3ee0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3ef0: 61 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  ase SQLITE_TOOBI
3f00: 47 3a 20 20 20 20 20 7a 20 3d 20 22 74 6f 6f 20  G:     z = "too 
3f10: 6d 75 63 68 20 64 61 74 61 20 66 6f 72 20 6f 6e  much data for on
3f20: 65 20 74 61 62 6c 65 20 72 6f 77 22 3b 20 20 20  e table row";   
3f30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3f40: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ase SQLITE_CONST
3f50: 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e 73  RAINT: z = "cons
3f60: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b 20  traint failed"; 
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3f90: 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41  ase SQLITE_MISMA
3fa0: 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74 61  TCH:   z = "data
3fb0: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b 20  type mismatch"; 
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
3fe0: 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ase SQLITE_MISUS
3ff0: 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62 72  E:     z = "libr
4000: 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c  ary routine call
4010: 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e  ed out of sequen
4020: 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63  ce";break;.    c
4030: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53  ase SQLITE_NOLFS
4040: 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72 6e  :      z = "kern
4050: 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20 66  el lacks large f
4060: 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20 20  ile support";   
4070: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
4080: 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a  ase SQLITE_AUTH:
4090: 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74 68         z = "auth
40a0: 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64  orization denied
40b0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
40c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
40d0: 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  ase SQLITE_FORMA
40e0: 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78 69  T:     z = "auxi
40f0: 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
4100: 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20 20  ormat error";   
4110: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
4120: 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45  ase SQLITE_RANGE
4130: 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e 64  :      z = "bind
4140: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
4150: 6e 67 65 22 3b 20 20 20 20 20 20 20 20 20 20 20  nge";           
4160: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
4170: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44  ase SQLITE_NOTAD
4180: 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c 65  B:     z = "file
4190: 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72   is encrypted or
41a0: 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61   is not a databa
41b0: 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 64  se";break;.    d
41c0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
41d0: 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b 6e         z = "unkn
41e0: 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20  own error";     
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
4210: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
4220: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
4230: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75   implements a bu
4240: 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74  sy callback that
4250: 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65   sleeps and trie
4260: 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c  s.** again until
4270: 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65   a timeout value
4280: 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54 68   is reached.  Th
4290: 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20  e timeout value 
42a0: 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  is.** an integer
42b0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
42c0: 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69  seconds passed i
42d0: 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  n as the first.*
42e0: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  * argument..*/.s
42f0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
4300: 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62  DefaultBusyCallb
4310: 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69 6d 65  ack(. void *Time
4320: 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f  out,           /
4330: 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74  * Maximum amount
4340: 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61 69 74   of time to wait
4350: 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68 61 72 20   */. const char 
4360: 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20 20 2f 2a  *NotUsed,     /*
4370: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
4380: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 62   table that is b
4390: 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e  usy */. int coun
43a0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
43b0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
43c0: 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62 65  mes table has be
43d0: 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69  en busy */.){.#i
43e0: 66 20 53 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45  f SQLITE_MIN_SLE
43f0: 45 50 5f 4d 53 3d 3d 31 0a 20 20 73 74 61 74 69  EP_MS==1.  stati
4400: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 64 65 6c  c const char del
4410: 61 79 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 31  ays[] =.     { 1
4420: 2c 20 32 2c 20 35 2c 20 31 30 2c 20 31 35 2c 20  , 2, 5, 10, 15, 
4430: 32 30 2c 20 32 35 2c 20 32 35 2c 20 20 32 35 2c  20, 25, 25,  25,
4440: 20 20 35 30 2c 20 20 35 30 2c 20 20 35 30 2c 20    50,  50,  50, 
4450: 31 30 30 7d 3b 0a 20 20 73 74 61 74 69 63 20 63  100};.  static c
4460: 6f 6e 73 74 20 73 68 6f 72 74 20 69 6e 74 20 74  onst short int t
4470: 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  otals[] =.     {
4480: 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38   0, 1, 3,  8, 18
4490: 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30  , 33, 53, 78, 10
44a0: 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38  3, 128, 178, 228
44b0: 2c 20 32 38 37 7d 3b 0a 23 20 64 65 66 69 6e 65  , 287};.# define
44c0: 20 4e 44 45 4c 41 59 20 28 73 69 7a 65 6f 66 28   NDELAY (sizeof(
44d0: 64 65 6c 61 79 73 29 2f 73 69 7a 65 6f 66 28 64  delays)/sizeof(d
44e0: 65 6c 61 79 73 5b 30 5d 29 29 0a 20 20 69 6e 74  elays[0])).  int
44f0: 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29   timeout = (int)
4500: 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64  Timeout;.  int d
4510: 65 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20  elay, prior;..  
4520: 69 66 28 20 63 6f 75 6e 74 20 3c 3d 20 4e 44 45  if( count <= NDE
4530: 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61 79  LAY ){.    delay
4540: 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74 2d   = delays[count-
4550: 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20  1];.    prior = 
4560: 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 2d 31 5d 3b  totals[count-1];
4570: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65  .  }else{.    de
4580: 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45  lay = delays[NDE
4590: 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f  LAY-1];.    prio
45a0: 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41  r = totals[NDELA
45b0: 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f  Y-1] + delay*(co
45c0: 75 6e 74 2d 4e 44 45 4c 41 59 2d 31 29 3b 0a 20  unt-NDELAY-1);. 
45d0: 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b   }.  if( prior +
45e0: 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74   delay > timeout
45f0: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
4600: 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b  timeout - prior;
4610: 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d  .    if( delay<=
4620: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
4630: 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65  }.  sqlite3OsSle
4640: 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74  ep(delay);.  ret
4650: 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69  urn 1;.#else.  i
4660: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e  nt timeout = (in
4670: 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28  t)Timeout;.  if(
4680: 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20   (count+1)*1000 
4690: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
46a0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
46b0: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
46c0: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
46d0: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
46e0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
46f0: 73 65 74 73 20 74 68 65 20 62 75 73 79 20 63 61  sets the busy ca
4700: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71  llback for an Sq
4710: 6c 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f  lite database to
4720: 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61   the.** given ca
4730: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
4740: 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61  with the given a
4750: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64  rgument..*/.void
4760: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61   sqlite3_busy_ha
4770: 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20  ndler(.  sqlite 
4780: 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75  *db,.  int (*xBu
4790: 73 79 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  sy)(void*,const 
47a0: 63 68 61 72 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f  char*,int),.  vo
47b0: 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 64 62  id *pArg.){.  db
47c0: 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 20  ->xBusyCallback 
47d0: 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 70  = xBusy;.  db->p
47e0: 42 75 73 79 41 72 67 20 3d 20 70 41 72 67 3b 0a  BusyArg = pArg;.
47f0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
4800: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4810: 43 41 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54  CALLBACK./*.** T
4820: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
4830: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
4840: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71  llback for an Sq
4850: 6c 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f  lite database to
4860: 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61   the.** given ca
4870: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
4880: 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61  with the given a
4890: 72 67 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f  rgument. The pro
48a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
48b0: 69 6c 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65  ill.** be invoke
48c0: 64 20 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63  d every nOps opc
48d0: 6f 64 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  odes..*/.void sq
48e0: 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68  lite3_progress_h
48f0: 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65  andler(.  sqlite
4900: 20 2a 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70   *db, .  int nOp
4910: 73 2c 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  s,.  int (*xProg
4920: 72 65 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20  ress)(void*), . 
4930: 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20   void *pArg.){. 
4940: 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20   if( nOps>0 ){. 
4950: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
4960: 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20   = xProgress;.  
4970: 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f    db->nProgressO
4980: 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 64  ps = nOps;.    d
4990: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20  b->pProgressArg 
49a0: 3d 20 70 41 72 67 3b 0a 20 20 7d 65 6c 73 65 7b  = pArg;.  }else{
49b0: 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65  .    db->xProgre
49c0: 73 73 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e  ss = 0;.    db->
49d0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
49e0: 3b 0a 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72  ;.    db->pProgr
49f0: 65 73 73 41 72 67 20 3d 20 30 3b 0a 20 20 7d 0a  essArg = 0;.  }.
4a00: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
4a10: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e   This routine in
4a20: 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74  stalls a default
4a30: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68   busy handler th
4a40: 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68 65  at waits for the
4a50: 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75  .** specified nu
4a60: 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63  mber of millisec
4a70: 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74 75  onds before retu
4a80: 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64  rning 0..*/.void
4a90: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
4aa0: 6d 65 6f 75 74 28 73 71 6c 69 74 65 20 2a 64 62  meout(sqlite *db
4ab0: 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28  , int ms){.  if(
4ac0: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c   ms>0 ){.    sql
4ad0: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
4ae0: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
4af0: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
4b00: 20 28 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d   (void*)ms);.  }
4b10: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
4b20: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64  3_busy_handler(d
4b30: 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a  b, 0, 0);.  }.}.
4b40: 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79  ./*.** Cause any
4b50: 20 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69   pending operati
4b60: 6f 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74  on to stop at it
4b70: 73 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72  s earliest oppor
4b80: 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20  tunity..*/.void 
4b90: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4ba0: 74 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20  t(sqlite *db){. 
4bb0: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
4bc0: 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a  LITE_Interrupt;.
4bd0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73  }../*.** Windows
4be0: 20 73 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20   systems should 
4bf0: 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e  call this routin
4c00: 65 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79  e to free memory
4c10: 20 74 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75   that.** is retu
4c20: 72 6e 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74  rned in the in t
4c30: 68 65 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65  he errmsg parame
4c40: 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6f  ter of sqlite3_o
4c50: 70 65 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51  pen() when.** SQ
4c60: 4c 69 74 65 20 69 73 20 61 20 44 4c 4c 2e 20 20  Lite is a DLL.  
4c70: 46 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c  For some reason,
4c80: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72   it does not wor
4c90: 6b 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29  k to call free()
4ca0: 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a  .** directly..**
4cb0: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65  .** Note that we
4cc0: 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20 66 72   need to call fr
4cd0: 65 65 28 29 20 6e 6f 74 20 73 71 6c 69 74 65 46  ee() not sqliteF
4ce0: 72 65 65 28 29 20 68 65 72 65 2c 20 73 69 6e 63  ree() here, sinc
4cf0: 65 20 65 76 65 72 79 0a 2a 2a 20 73 74 72 69 6e  e every.** strin
4d00: 67 20 74 68 61 74 20 69 73 20 65 78 70 6f 72 74  g that is export
4d10: 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 73  ed from SQLite s
4d20: 68 6f 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61  hould have alrea
4d30: 64 79 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  dy passed throug
4d40: 68 0a 2a 2a 20 73 71 6c 69 74 65 33 53 74 72 52  h.** sqlite3StrR
4d50: 65 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69  ealloc()..*/.voi
4d60: 64 20 73 71 6c 69 74 65 33 5f 66 72 65 65 6d 65  d sqlite3_freeme
4d70: 6d 28 76 6f 69 64 20 2a 70 29 7b 20 66 72 65 65  m(void *p){ free
4d80: 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69  (p); }../*.** Wi
4d90: 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20 6e 65  ndows systems ne
4da0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  ed functions to 
4db0: 63 61 6c 6c 20 74 6f 20 72 65 74 75 72 6e 20 74  call to return t
4dc0: 68 65 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69  he sqlite3_versi
4dd0: 6f 6e 0a 2a 2a 20 61 6e 64 20 73 71 6c 69 74 65  on.** and sqlite
4de0: 33 5f 65 6e 63 6f 64 69 6e 67 20 73 74 72 69 6e  3_encoding strin
4df0: 67 73 20 73 69 6e 63 65 20 74 68 65 79 20 61 72  gs since they ar
4e00: 65 20 75 6e 61 62 6c 65 20 74 6f 20 61 63 63 65  e unable to acce
4e10: 73 73 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ss constants.** 
4e20: 77 69 74 68 69 6e 20 44 4c 4c 73 2e 0a 2a 2f 0a  within DLLs..*/.
4e30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
4e40: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76  te3_libversion(v
4e50: 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c  oid){ return sql
4e60: 69 74 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a  ite3_version; }.
4e70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
4e80: 74 65 33 5f 6c 69 62 65 6e 63 6f 64 69 6e 67 28  te3_libencoding(
4e90: 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71  void){ return sq
4ea0: 6c 69 74 65 33 5f 65 6e 63 6f 64 69 6e 67 3b 20  lite3_encoding; 
4eb0: 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  }..int sqlite3_c
4ec0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a  reate_function(.
4ed0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
4ee0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75   const char *zFu
4ef0: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e  nctionName,.  in
4f00: 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54  t nArg,.  int eT
4f10: 65 78 74 52 65 70 2c 0a 20 20 69 6e 74 20 69 43  extRep,.  int iC
4f20: 6f 6c 6c 61 74 65 41 72 67 2c 0a 20 20 76 6f 69  ollateArg,.  voi
4f30: 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20  d *pUserData,.  
4f40: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
4f50: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
4f60: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
4f70: 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78   **),.  void (*x
4f80: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
4f90: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
4fa0: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
4fb0: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73  void (*xFinal)(s
4fc0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
4fd0: 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70  .){.  FuncDef *p
4fe0: 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 0a  ;.  int nName;..
4ff0: 20 20 69 66 28 20 28 64 62 3d 3d 30 20 7c 7c 20    if( (db==0 || 
5000: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30  zFunctionName==0
5010: 20 7c 7c 20 73 71 6c 69 74 65 33 53 61 66 65 74   || sqlite3Safet
5020: 79 43 68 65 63 6b 28 64 62 29 29 20 7c 7c 0a 20  yCheck(db)) ||. 
5030: 20 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28       (xFunc && (
5040: 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29  xFinal || xStep)
5050: 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46  ) || .      (!xF
5060: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
5070: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
5080: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
5090: 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70  !xFinal && xStep
50a0: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72  )) ||.      (nAr
50b0: 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37  g<-1 || nArg>127
50c0: 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c  ) ||.      (255<
50d0: 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28  (nName = strlen(
50e0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29  zFunctionName)))
50f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
5100: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
5110: 0a 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46  ..  p = sqlite3F
5120: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20  indFunction(db, 
5130: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
5140: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 31 29 3b 0a  Name, nArg, 1);.
5150: 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74    if( p==0 ) ret
5160: 75 72 6e 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e  urn 1;.  p->xFun
5170: 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e  c = xFunc;.  p->
5180: 78 53 74 65 70 20 3d 20 78 53 74 65 70 3b 0a 20  xStep = xStep;. 
5190: 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20   p->xFinalize = 
51a0: 78 46 69 6e 61 6c 3b 0a 20 20 70 2d 3e 70 55 73  xFinal;.  p->pUs
51b0: 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44 61  erData = pUserDa
51c0: 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ta;.  return SQL
51d0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 69 6e 74 20 73 71  ITE_OK;.}.int sq
51e0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
51f0: 63 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74  ction16(.  sqlit
5200: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
5210: 76 6f 69 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e  void *zFunctionN
5220: 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c  ame,.  int nArg,
5230: 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c  .  int eTextRep,
5240: 0a 20 20 69 6e 74 20 69 43 6f 6c 6c 61 74 65 41  .  int iCollateA
5250: 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  rg,.  void *pUse
5260: 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a  rData,.  void (*
5270: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
5280: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
5290: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
52a0: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
52b0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
52c0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
52d0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
52e0: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
52f0: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74  ntext*).){.  int
5300: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75   rc;.  char *zFu
5310: 6e 63 74 69 6f 6e 4e 61 6d 65 38 3b 0a 20 20 7a  nctionName8;.  z
5320: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 20 3d 20  FunctionName8 = 
5330: 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28  sqlite3utf16to8(
5340: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d  zFunctionName, -
5350: 31 2c 20 53 51 4c 49 54 45 33 5f 42 49 47 45 4e  1, SQLITE3_BIGEN
5360: 44 49 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a 46  DIAN);.  if( !zF
5370: 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 20 29 7b 0a  unctionName8 ){.
5380: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5390: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72  E_NOMEM;.  }.  r
53a0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
53b0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
53c0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 38 2c 20  zFunctionName8, 
53d0: 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20  nArg, eTextRep, 
53e0: 0a 20 20 20 20 20 20 69 43 6f 6c 6c 61 74 65 41  .      iCollateA
53f0: 72 67 2c 20 70 55 73 65 72 44 61 74 61 2c 20 78  rg, pUserData, x
5400: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
5410: 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  nal);.  sqliteFr
5420: 65 65 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  ee(zFunctionName
5430: 38 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  8);.  return rc;
5440: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  .}../*.** Regist
5450: 65 72 20 61 20 74 72 61 63 65 20 66 75 6e 63 74  er a trace funct
5460: 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66  ion.  The pArg f
5470: 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73  rom the previous
5480: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 74 72  ly registered tr
5490: 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ace.** is return
54a0: 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ed.  .**.** A NU
54b0: 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  LL trace functio
54c0: 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  n means that no 
54d0: 74 72 61 63 69 6e 67 20 69 73 20 65 78 65 63 75  tracing is execu
54e0: 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c  tes.  A non-NULL
54f0: 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20 70  .** trace is a p
5500: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
5510: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
5520: 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74 61 72  oked at the star
5530: 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 73 71 6c  t of each.** sql
5540: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
5550: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74 72  void *sqlite3_tr
5560: 61 63 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  ace(sqlite *db, 
5570: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
5580: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
5590: 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  ), void *pArg){.
55a0: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
55b0: 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20  b->pTraceArg;.  
55c0: 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72  db->xTrace = xTr
55d0: 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63  ace;.  db->pTrac
55e0: 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  eArg = pArg;.  r
55f0: 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f  eturn pOld;.}../
5600: 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c  *** EXPERIMENTAL
5610: 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   ***.**.** Regis
5620: 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74  ter a function t
5630: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65  o be invoked whe
5640: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
5650: 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20  comments..** If 
5660: 65 69 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 20  either function 
5670: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
5680: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 69  , then the commi
5690: 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a 20 72  t becomes a.** r
56a0: 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64  ollback..*/.void
56b0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74   *sqlite3_commit
56c0: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 20  _hook(.  sqlite 
56d0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
56e0: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
56f0: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
5700: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
5710: 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  (*xCallback)(voi
5720: 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f  d*),  /* Functio
5730: 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20 65  n to invoke on e
5740: 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20  ach commit */.  
5750: 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20  void *pArg      
5760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
5770: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e  ument to the fun
5780: 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f  ction */.){.  vo
5790: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
57a0: 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64 62 2d  CommitArg;.  db-
57b0: 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  >xCommitCallback
57c0: 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20   = xCallback;.  
57d0: 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 20 3d  db->pCommitArg =
57e0: 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20   pArg;.  return 
57f0: 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  pOld;.}.../*.** 
5800: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
5810: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
5820: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f   a connection to
5830: 20 61 20 64 61 74 61 62 61 73 65 20 42 54 72 65   a database BTre
5840: 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20 20 49 66  e.** driver.  If
5850: 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68   zFilename is th
5860: 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 69 6c 65  e name of a file
5870: 2c 20 74 68 65 6e 20 74 68 61 74 20 66 69 6c 65  , then that file
5880: 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64 20 61 6e   is.** opened an
5890: 64 20 75 73 65 64 2e 20 20 49 66 20 7a 46 69 6c  d used.  If zFil
58a0: 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6d 61 67  ename is the mag
58b0: 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79  ic name ":memory
58c0: 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  :" then.** the d
58d0: 61 74 61 62 61 73 65 20 69 73 20 73 74 6f 72 65  atabase is store
58e0: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28 61 6e 64  d in memory (and
58f0: 20 69 73 20 74 68 75 73 20 66 6f 72 67 6f 74 74   is thus forgott
5900: 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a  en as soon as.**
5910: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
5920: 69 73 20 63 6c 6f 73 65 64 2e 29 20 20 49 66 20  is closed.)  If 
5930: 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 4e 55 4c  zFilename is NUL
5940: 4c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  L then the datab
5950: 61 73 65 0a 2a 2a 20 69 73 20 66 6f 72 20 74 65  ase.** is for te
5960: 6d 70 6f 72 61 72 79 20 75 73 65 20 6f 6e 6c 79  mporary use only
5970: 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20   and is deleted 
5980: 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
5990: 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a 20 69 73 20  onnection.** is 
59a0: 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
59b0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
59c0: 73 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  se can be either
59d0: 20 61 20 64 69 73 6b 20 66 69 6c 65 20 28 74 68   a disk file (th
59e0: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
59f0: 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77  lly.** deleted w
5a00: 68 65 6e 20 74 68 65 20 66 69 6c 65 20 69 73 20  hen the file is 
5a10: 63 6c 6f 73 65 64 29 20 6f 72 20 61 20 73 65 74  closed) or a set
5a20: 20 6f 66 20 72 65 64 2d 62 6c 61 63 6b 20 74 72   of red-black tr
5a30: 65 65 73 20 68 65 6c 64 20 69 6e 20 6d 65 6d 6f  ees held in memo
5a40: 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ry,.** depending
5a50: 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73 20 6f   on the values o
5a60: 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f 52 45  f the TEMP_STORE
5a70: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
5a80: 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a 20 64  cro and the.** d
5a90: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 76 61  b->temp_store va
5aa0: 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64 69 6e  riable, accordin
5ab0: 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  g to the followi
5ac0: 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20  ng chart:.**.** 
5ad0: 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f 52 45        TEMP_STORE
5ae0: 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74       db->temp_st
5af0: 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e  ore     Location
5b00: 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64 61   of temporary da
5b10: 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20 20 20  tabase.**       
5b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d  ----------     -
5b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20  -------------   
5b40: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
5b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b60: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 30 20  .**           0 
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
5b80: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69  y             fi
5b90: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
5ba0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
5bb0: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
5bc0: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
5bd0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
5be0: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
5bf0: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
5c00: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
5c10: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
5c20: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
5c30: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
5c40: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
5c50: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
5c60: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
5c70: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
5c80: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
5c90: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20  .**           2 
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
5cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
5cc0: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
5cd0: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
5ce0: 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20    any           
5cf0: 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20    memory.*/.int 
5d00: 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74  sqlite3BtreeFact
5d10: 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ory(.  const sql
5d20: 69 74 65 20 2a 64 62 2c 09 20 20 20 20 2f 2a 20  ite *db,.    /* 
5d30: 4d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77 68  Main database wh
5d40: 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f  en opening aux o
5d50: 74 68 65 72 77 69 73 65 20 30 20 2a 2f 0a 20 20  therwise 0 */.  
5d60: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
5d70: 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d  ename,    /* Nam
5d80: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f  e of the file co
5d90: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 42 54 72  ntaining the BTr
5da0: 65 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ee database */. 
5db0: 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   int omitJournal
5dc0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66  ,          /* if
5dd0: 20 54 52 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f   TRUE then do no
5de0: 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69 73 20 66  t journal this f
5df0: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61  ile */.  int nCa
5e00: 63 68 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  che,            
5e10: 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70     /* How many p
5e20: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
5e30: 20 63 61 63 68 65 20 2a 2f 0a 20 20 42 74 72 65   cache */.  Btre
5e40: 65 20 2a 2a 70 70 42 74 72 65 65 20 20 20 20 20  e **ppBtree     
5e50: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
5e60: 20 74 6f 20 6e 65 77 20 42 74 72 65 65 20 6f 62   to new Btree ob
5e70: 6a 65 63 74 20 77 72 69 74 74 65 6e 20 68 65 72  ject written her
5e80: 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74  e */.){.  int bt
5e90: 72 65 65 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20  ree_flags = 0;. 
5ea0: 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74   .  assert( ppBt
5eb0: 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28  ree != 0);.  if(
5ec0: 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a   omitJournal ){.
5ed0: 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20      btree_flags 
5ee0: 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  |= BTREE_OMIT_JO
5ef0: 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28  URNAL;.  }.  if(
5f00: 20 21 7a 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20   !zFilename ){. 
5f10: 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c     btree_flags |
5f20: 3d 20 42 54 52 45 45 5f 4d 45 4d 4f 52 59 3b 0a  = BTREE_MEMORY;.
5f30: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71    }..  return sq
5f40: 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a  lite3BtreeOpen(z
5f50: 46 69 6c 65 6e 61 6d 65 2c 20 70 70 42 74 72 65  Filename, ppBtre
5f60: 65 2c 20 6e 43 61 63 68 65 2c 20 62 74 72 65 65  e, nCache, btree
5f70: 5f 66 6c 61 67 73 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  _flags);.}../*.*
5f80: 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65  * Return UTF-8 e
5f90: 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c  ncoded English l
5fa0: 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74  anguage explanat
5fb0: 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  ion of the most 
5fc0: 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  recent.** error.
5fd0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
5fe0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73  sqlite3_errmsg(s
5ff0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
6000: 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 2f 2a  f( !db ){.    /*
6010: 20 49 66 20 64 62 20 69 73 20 4e 55 4c 4c 2c 20   If db is NULL, 
6020: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
6030: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
6040: 65 64 20 64 75 72 69 6e 67 20 61 6e 0a 20 20 20  ed during an.   
6050: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e   ** sqlite3_open
6060: 28 29 20 63 61 6c 6c 2e 0a 20 20 20 20 2a 2f 0a  () call..    */.
6070: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
6080: 65 33 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28  e3_error_string(
6090: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20  SQLITE_NOMEM);. 
60a0: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 7a 45 72   }.  if( db->zEr
60b0: 72 4d 73 67 20 29 7b 0a 20 20 20 20 72 65 74 75  rMsg ){.    retu
60c0: 72 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  rn db->zErrMsg;.
60d0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c    }.  return sql
60e0: 69 74 65 33 5f 65 72 72 6f 72 5f 73 74 72 69 6e  ite3_error_strin
60f0: 67 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a  g(db->errCode);.
6100: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
6110: 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 45  UTF-16 encoded E
6120: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
6130: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74  explanation of t
6140: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
6150: 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73  * error..*/.cons
6160: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
6170: 65 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65 33  errmsg16(sqlite3
6180: 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62   *db){.  if( !db
6190: 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 64 62   ){.    /* If db
61a0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61   is NULL, then a
61b0: 73 73 75 6d 65 20 74 68 61 74 20 61 20 6d 61 6c  ssume that a mal
61c0: 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72  loc() failed dur
61d0: 69 6e 67 20 61 6e 0a 20 20 20 20 2a 2a 20 73 71  ing an.    ** sq
61e0: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 63 61 6c  lite3_open() cal
61f0: 6c 2e 20 57 65 20 68 61 76 65 20 61 20 73 74 61  l. We have a sta
6200: 74 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  tic version of t
6210: 68 65 20 73 74 72 69 6e 67 20 0a 20 20 20 20 2a  he string .    *
6220: 2a 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  * "out of memory
6230: 22 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20  " encoded using 
6240: 55 54 46 2d 31 36 20 6a 75 73 74 20 66 6f 72 20  UTF-16 just for 
6250: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 0a 20 20  this purpose..  
6260: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 42 65 63 61    **.    ** Beca
6270: 75 73 65 20 61 6c 6c 20 74 68 65 20 63 68 61 72  use all the char
6280: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74  acters in the st
6290: 72 69 6e 67 20 61 72 65 20 69 6e 20 74 68 65 20  ring are in the 
62a0: 75 6e 69 63 6f 64 65 0a 20 20 20 20 2a 2a 20 72  unicode.    ** r
62b0: 61 6e 67 65 20 30 78 30 30 2d 30 78 46 46 2c 20  ange 0x00-0xFF, 
62c0: 69 66 20 77 65 20 70 61 64 20 74 68 65 20 62 69  if we pad the bi
62d0: 67 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20  g-endian string 
62e0: 77 69 74 68 20 61 20 0a 20 20 20 20 2a 2a 20 7a  with a .    ** z
62f0: 65 72 6f 20 62 79 74 65 2c 20 77 65 20 63 61 6e  ero byte, we can
6300: 20 6f 62 74 61 69 6e 20 74 68 65 20 6c 69 74 74   obtain the litt
6310: 6c 65 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67  le-endian string
6320: 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 26 62 69   with.    ** &bi
6330: 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20 20  g_endian[1]..   
6340: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
6350: 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d  har outOfMemBe[]
6360: 20 3d 20 7b 0a 20 20 20 20 20 20 30 2c 20 27 6f   = {.      0, 'o
6370: 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74  ', 0, 'u', 0, 't
6380: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
6390: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27    0, 'o', 0, 'f'
63a0: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 20  , 0, ' ', .     
63b0: 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c   0, 'm', 0, 'e',
63c0: 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c   0, 'm', 0, 'o',
63d0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c   0, 'r', 0, 'y',
63e0: 20 30 2c 20 30 2c 20 30 0a 20 20 20 20 7d 3b 0a   0, 0, 0.    };.
63f0: 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20      static char 
6400: 2a 6f 75 74 4f 66 4d 65 6d 4c 65 20 3d 20 26 6f  *outOfMemLe = &o
6410: 75 74 4f 66 4d 65 6d 42 65 5b 31 5d 3b 0a 0a 20  utOfMemBe[1];.. 
6420: 20 20 20 69 66 28 20 53 51 4c 49 54 45 33 5f 42     if( SQLITE3_B
6430: 49 47 45 4e 44 49 41 4e 20 29 7b 0a 20 20 20 20  IGENDIAN ){.    
6440: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a    return (void *
6450: 29 6f 75 74 4f 66 4d 65 6d 42 65 3b 0a 20 20 20  )outOfMemBe;.   
6460: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
6470: 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 6f 75 74  turn (void *)out
6480: 4f 66 4d 65 6d 4c 65 3b 0a 20 20 20 20 7d 0a 20  OfMemLe;.    }. 
6490: 20 7d 0a 20 20 69 66 28 20 21 64 62 2d 3e 7a 45   }.  if( !db->zE
64a0: 72 72 4d 73 67 31 36 20 29 7b 0a 20 20 20 20 63  rrMsg16 ){.    c
64b0: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 45 72 72 38  har const *zErr8
64c0: 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
64d0: 67 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 53  g(db);.    if( S
64e0: 51 4c 49 54 45 33 5f 42 49 47 45 4e 44 49 41 4e  QLITE3_BIGENDIAN
64f0: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 7a 45   ){.      db->zE
6500: 72 72 4d 73 67 31 36 20 3d 20 73 71 6c 69 74 65  rrMsg16 = sqlite
6510: 33 75 74 66 38 74 6f 31 36 62 65 28 7a 45 72 72  3utf8to16be(zErr
6520: 38 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  8, -1);.    }els
6530: 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 7a 45 72  e{.      db->zEr
6540: 72 4d 73 67 31 36 20 3d 20 73 71 6c 69 74 65 33  rMsg16 = sqlite3
6550: 75 74 66 38 74 6f 31 36 6c 65 28 7a 45 72 72 38  utf8to16le(zErr8
6560: 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  , -1);.    }.  }
6570: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 7a 45  .  return db->zE
6580: 72 72 4d 73 67 31 36 3b 0a 7d 0a 0a 69 6e 74 20  rrMsg16;.}..int 
6590: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
65a0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
65b0: 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f  return db->errCo
65c0: 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d  de;.}../*.** Com
65d0: 70 69 6c 65 20 74 68 65 20 55 54 46 2d 38 20 65  pile the UTF-8 e
65e0: 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65  ncoded SQL state
65f0: 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61  ment zSql into a
6600: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
6610: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
6620: 33 5f 70 72 65 70 61 72 65 28 0a 20 20 73 71 6c  3_prepare(.  sql
6630: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
6640: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
6650: 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20  se handle. */.  
6660: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
6670: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46  ,         /* UTF
6680: 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73  -8 encoded SQL s
6690: 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69  tatement. */.  i
66a0: 6e 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20  nt nBytes,      
66b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
66c0: 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79  th of zSql in by
66d0: 74 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tes. */.  sqlite
66e0: 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c  3_stmt **ppStmt,
66f0: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f      /* OUT: A po
6700: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65  inter to the pre
6710: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
6720: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 2a  */.  const char*
6730: 2a 20 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f  * pzTail       /
6740: 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61  * OUT: End of pa
6750: 72 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29  rsed string */.)
6760: 7b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73 65  {.  Parse sParse
6770: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
6780: 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20  g = 0;.  int rc 
6790: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20  = SQLITE_OK;..  
67a0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
67b0: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 72  yOn(db) ){.    r
67c0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
67d0: 45 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 65 70  E;.    goto prep
67e0: 61 72 65 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  are_out;.  }..  
67f0: 69 66 28 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75  if( !db->init.bu
6800: 73 79 20 29 7b 0a 20 20 20 20 69 66 28 20 28 64  sy ){.    if( (d
6810: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
6820: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d  E_Initialized)==
6830: 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 63  0 ){.      int c
6840: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77 68  nt = 1;.      wh
6850: 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74  ile( (rc = sqlit
6860: 65 33 49 6e 69 74 28 64 62 2c 20 26 7a 45 72 72  e3Init(db, &zErr
6870: 4d 73 67 29 29 3d 3d 53 51 4c 49 54 45 5f 42 55  Msg))==SQLITE_BU
6880: 53 59 0a 20 20 20 20 20 20 20 20 20 26 26 20 64  SY.         && d
6890: 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b  b->xBusyCallback
68a0: 0a 20 20 20 20 20 20 20 20 20 26 26 20 64 62 2d  .         && db-
68b0: 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 28 64  >xBusyCallback(d
68c0: 62 2d 3e 70 42 75 73 79 41 72 67 2c 20 22 22 2c  b->pBusyArg, "",
68d0: 20 63 6e 74 2b 2b 29 21 3d 30 20 29 7b 7d 0a 20   cnt++)!=0 ){}. 
68e0: 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
68f0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
6900: 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f    goto prepare_o
6910: 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
6920: 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
6930: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 46  .        sqliteF
6940: 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
6950: 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d 20        zErrMsg = 
6960: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
6970: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28  .  }.  assert( (
6980: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
6990: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 21  TE_Initialized)!
69a0: 3d 30 20 7c 7c 20 64 62 2d 3e 69 6e 69 74 2e 62  =0 || db->init.b
69b0: 75 73 79 20 29 3b 0a 0a 20 20 69 66 28 20 64 62  usy );..  if( db
69c0: 2d 3e 70 56 64 62 65 3d 3d 30 20 29 7b 20 64 62  ->pVdbe==0 ){ db
69d0: 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20 7d  ->nChange = 0; }
69e0: 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73  .  memset(&sPars
69f0: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61  e, 0, sizeof(sPa
6a00: 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e  rse));.  sParse.
6a10: 64 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74  db = db;.  sqlit
6a20: 65 33 52 75 6e 50 61 72 73 65 72 28 26 73 50 61  e3RunParser(&sPa
6a30: 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72 72  rse, zSql, &zErr
6a40: 4d 73 67 29 3b 0a 0a 20 20 69 66 28 20 64 62 2d  Msg);..  if( db-
6a50: 3e 78 54 72 61 63 65 20 26 26 20 21 64 62 2d 3e  >xTrace && !db->
6a60: 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20  init.busy ){.   
6a70: 20 2f 2a 20 54 72 61 63 65 20 6f 6e 6c 79 20 74   /* Trace only t
6a80: 68 65 20 73 74 61 74 6d 65 6e 74 20 74 68 61 74  he statment that
6a90: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0a 20   was compiled.. 
6aa0: 20 20 20 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70     ** Make a cop
6ab0: 79 20 6f 66 20 74 68 61 74 20 70 61 72 74 20 6f  y of that part o
6ac0: 66 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e 67  f the SQL string
6ad0: 20 73 69 6e 63 65 20 7a 53 51 4c 20 69 73 20 63   since zSQL is c
6ae0: 6f 6e 73 74 0a 20 20 20 20 2a 2a 20 61 6e 64 20  onst.    ** and 
6af0: 77 65 20 6d 75 73 74 20 70 61 73 73 20 61 20 7a  we must pass a z
6b00: 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 73  ero terminated s
6b10: 74 72 69 6e 67 20 74 6f 20 74 68 65 20 74 72 61  tring to the tra
6b20: 63 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  ce function.    
6b30: 2a 2a 20 54 68 65 20 63 6f 70 79 20 69 73 20 75  ** The copy is u
6b40: 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68  nnecessary if th
6b50: 65 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 20 69  e tail pointer i
6b60: 73 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  s pointing at th
6b70: 65 0a 20 20 20 20 2a 2a 20 62 65 67 69 6e 6e 69  e.    ** beginni
6b80: 67 20 6f 72 20 65 6e 64 20 6f 66 20 74 68 65 20  g or end of the 
6b90: 53 51 4c 20 73 74 72 69 6e 67 2e 0a 20 20 20 20  SQL string..    
6ba0: 2a 2f 0a 20 20 20 20 69 66 28 20 73 50 61 72 73  */.    if( sPars
6bb0: 65 2e 7a 54 61 69 6c 20 26 26 20 73 50 61 72 73  e.zTail && sPars
6bc0: 65 2e 7a 54 61 69 6c 21 3d 7a 53 71 6c 20 26 26  e.zTail!=zSql &&
6bd0: 20 2a 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 29   *sParse.zTail )
6be0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 74 6d  {.      char *tm
6bf0: 70 53 71 6c 20 3d 20 73 71 6c 69 74 65 53 74 72  pSql = sqliteStr
6c00: 4e 44 75 70 28 7a 53 71 6c 2c 20 73 50 61 72 73  NDup(zSql, sPars
6c10: 65 2e 7a 54 61 69 6c 20 2d 20 7a 53 71 6c 29 3b  e.zTail - zSql);
6c20: 0a 20 20 20 20 20 20 69 66 28 20 74 6d 70 53 71  .      if( tmpSq
6c30: 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  l ){.        db-
6c40: 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
6c50: 63 65 41 72 67 2c 20 74 6d 70 53 71 6c 29 3b 0a  ceArg, tmpSql);.
6c60: 20 20 20 20 20 20 20 20 66 72 65 65 28 74 6d 70          free(tmp
6c70: 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Sql);.      }els
6c80: 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  e{.        /* If
6c90: 20 61 20 6d 65 6d 6f 72 79 20 65 72 72 6f 72 20   a memory error 
6ca0: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
6cb0: 74 68 65 20 63 6f 70 79 2c 0a 20 20 20 20 20 20  the copy,.      
6cc0: 20 20 2a 2a 20 74 72 61 63 65 20 65 6e 74 69 72    ** trace entir
6cd0: 65 20 53 51 4c 20 73 74 72 69 6e 67 20 61 6e 64  e SQL string and
6ce0: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
6cf0: 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
6d00: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
6d10: 61 69 6c 65 64 20 74 65 73 74 20 74 6f 20 72 65  ailed test to re
6d20: 70 6f 72 74 20 74 68 65 20 65 72 72 6f 72 2e 0a  port the error..
6d30: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
6d40: 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
6d50: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 53 71  ->pTraceArg, zSq
6d60: 6c 29 3b 20 0a 20 20 20 20 20 20 7d 0a 20 20 20  l); .      }.   
6d70: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
6d80: 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
6d90: 61 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a  aceArg, zSql); .
6da0: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28      }.  }..  if(
6db0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
6dc0: 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 63  failed ){.    rc
6dd0: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
6de0: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c  .    sqlite3Roll
6df0: 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20  backAll(db);.   
6e00: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
6e10: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
6e20: 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  0);.    db->flag
6e30: 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 54  s &= ~SQLITE_InT
6e40: 72 61 6e 73 3b 0a 20 20 20 20 67 6f 74 6f 20 70  rans;.    goto p
6e50: 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20 7d 0a  repare_out;.  }.
6e60: 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63 3d    if( sParse.rc=
6e70: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 73  =SQLITE_DONE ) s
6e80: 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54  Parse.rc = SQLIT
6e90: 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73 50 61 72  E_OK;.  if( sPar
6ea0: 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43  se.rc==SQLITE_SC
6eb0: 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69  HEMA ){.    sqli
6ec0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
6ed0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
6ee0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 70 53   }.  assert( ppS
6ef0: 74 6d 74 20 29 3b 0a 20 20 2a 70 70 53 74 6d 74  tmt );.  *ppStmt
6f00: 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74   = (sqlite3_stmt
6f10: 2a 29 73 50 61 72 73 65 2e 70 56 64 62 65 3b 0a  *)sParse.pVdbe;.
6f20: 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29 20 2a    if( pzTail ) *
6f30: 70 7a 54 61 69 6c 20 3d 20 73 50 61 72 73 65 2e  pzTail = sParse.
6f40: 7a 54 61 69 6c 3b 0a 20 20 72 63 20 3d 20 73 50  zTail;.  rc = sP
6f50: 61 72 73 65 2e 72 63 3b 0a 0a 20 20 69 66 28 20  arse.rc;..  if( 
6f60: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
6f70: 20 73 50 61 72 73 65 2e 70 56 64 62 65 20 26 26   sParse.pVdbe &&
6f80: 20 73 50 61 72 73 65 2e 65 78 70 6c 61 69 6e 20   sParse.explain 
6f90: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
6fa0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 73 50 61  beSetNumCols(sPa
6fb0: 72 73 65 2e 70 56 64 62 65 2c 20 35 29 3b 0a 20  rse.pVdbe, 5);. 
6fc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6fd0: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
6fe0: 70 56 64 62 65 2c 20 30 2c 20 22 61 64 64 72 22  pVdbe, 0, "addr"
6ff0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
7000: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7010: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
7020: 56 64 62 65 2c 20 31 2c 20 22 6f 70 63 6f 64 65  Vdbe, 1, "opcode
7030: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
7040: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7050: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
7060: 70 56 64 62 65 2c 20 32 2c 20 22 70 31 22 2c 20  pVdbe, 2, "p1", 
7070: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
7080: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
7090: 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64  lName(sParse.pVd
70a0: 62 65 2c 20 33 2c 20 22 70 32 22 2c 20 50 33 5f  be, 3, "p2", P3_
70b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
70c0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
70d0: 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c  me(sParse.pVdbe,
70e0: 20 34 2c 20 22 70 33 22 2c 20 50 33 5f 53 54 41   4, "p3", P3_STA
70f0: 54 49 43 29 3b 0a 20 20 7d 20 0a 0a 70 72 65 70  TIC);.  } ..prep
7100: 61 72 65 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73  are_out:.  if( s
7110: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
7120: 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  db) ){.    rc = 
7130: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
7140: 20 7d 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67   }.  if( zErrMsg
7150: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
7160: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73  rror(db, rc, "%s
7170: 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  ", zErrMsg);.  }
7180: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
7190: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
71a0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
71b0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d  rc;.}../*.** Com
71c0: 70 69 6c 65 20 74 68 65 20 55 54 46 2d 31 36 20  pile the UTF-16 
71d0: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
71e0: 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20  ement zSql into 
71f0: 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64  a statement hand
7200: 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
7210: 65 33 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20  e3_prepare16(.  
7220: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
7230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
7240: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f  abase handle. */
7250: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
7260: 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a  zSql,         /*
7270: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
7280: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f  QL statement. */
7290: 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20  .  int nBytes,  
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
72b0: 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69  Length of zSql i
72c0: 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71  n bytes. */.  sq
72d0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
72e0: 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20  tmt,    /* OUT: 
72f0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
7300: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
7310: 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76  ent */.  const v
7320: 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20  oid **pzTail    
7330: 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f     /* OUT: End o
7340: 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20  f parsed string 
7350: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 54 68 69 73 20  */.){.  /* This 
7360: 66 75 6e 63 74 69 6f 6e 20 63 75 72 72 65 6e 74  function current
7370: 6c 79 20 77 6f 72 6b 73 20 62 79 20 66 69 72 73  ly works by firs
7380: 74 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74  t transforming t
7390: 68 65 20 55 54 46 2d 31 36 0a 20 20 2a 2a 20 65  he UTF-16.  ** e
73a0: 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20 74 6f  ncoded string to
73b0: 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 69 6e 76   UTF-8, then inv
73c0: 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  oking sqlite3_pr
73d0: 65 70 61 72 65 28 29 2e 20 54 68 65 0a 20 20 2a  epare(). The.  *
73e0: 2a 20 74 72 69 63 6b 79 20 62 69 74 20 69 73 20  * tricky bit is 
73f0: 66 69 67 75 72 69 6e 67 20 6f 75 74 20 74 68 65  figuring out the
7400: 20 70 6f 69 6e 74 65 72 20 74 6f 20 72 65 74 75   pointer to retu
7410: 72 6e 20 69 6e 20 2a 70 7a 54 61 69 6c 2e 0a 20  rn in *pzTail.. 
7420: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c   */.  char *zSql
7430: 38 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f  8 = 0;.  char co
7440: 6e 73 74 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b  nst *zTail8 = 0;
7450: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 7a 53  .  int rc;..  zS
7460: 71 6c 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66  ql8 = sqlite3utf
7470: 31 36 74 6f 38 28 7a 53 71 6c 2c 20 6e 42 79 74  16to8(zSql, nByt
7480: 65 73 2c 20 53 51 4c 49 54 45 33 5f 42 49 47 45  es, SQLITE3_BIGE
7490: 4e 44 49 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a  NDIAN);.  if( !z
74a0: 53 71 6c 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  Sql8 ){.    sqli
74b0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
74c0: 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20  ITE_NOMEM, 0);. 
74d0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
74e0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63  _NOMEM;.  }.  rc
74f0: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
7500: 72 65 28 64 62 2c 20 7a 53 71 6c 38 2c 20 2d 31  re(db, zSql8, -1
7510: 2c 20 70 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c  , ppStmt, &zTail
7520: 38 29 3b 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c  8);..  if( zTail
7530: 38 20 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a 20  8 && pzTail ){. 
7540: 20 20 20 2f 2a 20 49 66 20 73 71 6c 69 74 65 33     /* If sqlite3
7550: 5f 70 72 65 70 61 72 65 20 72 65 74 75 72 6e 73  _prepare returns
7560: 20 61 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 2c   a tail pointer,
7570: 20 77 65 20 63 61 6c 63 75 6c 61 74 65 20 74 68   we calculate th
7580: 65 0a 20 20 20 20 2a 2a 20 65 71 75 69 76 61 6c  e.    ** equival
7590: 65 6e 74 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f  ent pointer into
75a0: 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72 69   the UTF-16 stri
75b0: 6e 67 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 74  ng by counting t
75c0: 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 20 20 2a  he unicode.    *
75d0: 2a 20 63 68 61 72 61 63 74 65 72 73 20 62 65 74  * characters bet
75e0: 77 65 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20 7a  ween zSql8 and z
75f0: 54 61 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e 20  Tail8, and then 
7600: 72 65 74 75 72 6e 69 6e 67 20 61 20 70 6f 69 6e  returning a poin
7610: 74 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 73  ter.    ** the s
7620: 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  ame number of ch
7630: 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68  aracters into th
7640: 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e  e UTF-16 string.
7650: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20  .    */.    int 
7660: 63 68 61 72 73 5f 70 61 72 73 65 64 20 3d 20 73  chars_parsed = s
7670: 71 6c 69 74 65 33 75 74 66 38 43 68 61 72 4c 65  qlite3utf8CharLe
7680: 6e 28 7a 53 71 6c 38 2c 20 7a 54 61 69 6c 38 2d  n(zSql8, zTail8-
7690: 7a 53 71 6c 38 29 3b 0a 20 20 20 20 2a 70 7a 54  zSql8);.    *pzT
76a0: 61 69 6c 20 3d 20 28 75 38 20 2a 29 7a 53 71 6c  ail = (u8 *)zSql
76b0: 20 2b 20 73 71 6c 69 74 65 33 75 74 66 31 36 42   + sqlite3utf16B
76c0: 79 74 65 4c 65 6e 28 7a 53 71 6c 2c 20 63 68 61  yteLen(zSql, cha
76d0: 72 73 5f 70 61 72 73 65 64 29 3b 0a 20 20 7d 0a  rs_parsed);.  }.
76e0: 20 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d   .  return rc;.}
76f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
7700: 74 69 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f  tine does the wo
7710: 72 6b 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20  rk of opening a 
7720: 64 61 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61  database on beha
7730: 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33  lf of.** sqlite3
7740: 5f 6f 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69  _open() and sqli
7750: 74 65 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68  te3_open16(). Th
7760: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  e database filen
7770: 61 6d 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20  ame "zFilename" 
7780: 20 0a 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e   .** is UTF-8 en
7790: 63 6f 64 65 64 2e 20 54 68 65 20 66 6f 75 72 74  coded. The fourt
77a0: 68 20 61 72 67 75 6d 65 6e 74 2c 20 22 64 65 66  h argument, "def
77b0: 5f 65 6e 63 22 20 69 73 20 6f 6e 65 20 6f 66 20  _enc" is one of 
77c0: 74 68 65 20 54 45 58 54 5f 2a 0a 2a 2a 20 6d 61  the TEXT_*.** ma
77d0: 63 72 6f 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  cros from sqlite
77e0: 49 6e 74 2e 68 2e 20 49 66 20 77 65 20 65 6e 64  Int.h. If we end
77f0: 20 75 70 20 63 72 65 61 74 69 6e 67 20 61 20 6e   up creating a n
7800: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
7810: 0a 2a 2a 20 28 6e 6f 74 20 6f 70 65 6e 69 6e 67  .** (not opening
7820: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
7830: 29 2c 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ), the text enco
7840: 64 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ding of the data
7850: 62 61 73 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  base.** will be 
7860: 73 65 74 20 74 6f 20 74 68 69 73 20 76 61 6c 75  set to this valu
7870: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
7880: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20   openDatabase(. 
7890: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
78a0: 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62  lename, /* Datab
78b0: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46  ase filename UTF
78c0: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
78d0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20  sqlite3 **ppDb, 
78e0: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52         /* OUT: R
78f0: 65 74 75 72 6e 65 64 20 64 61 74 61 62 61 73 65  eturned database
7900: 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e   handle */.  con
7910: 73 74 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e  st char **option
7920: 73 2c 20 20 2f 2a 20 4e 75 6c 6c 20 74 65 72 6d  s,  /* Null term
7930: 69 6e 61 74 65 64 20 6c 69 73 74 20 6f 66 20 64  inated list of d
7940: 62 20 6f 70 74 69 6f 6e 73 2c 20 6f 72 20 6e 75  b options, or nu
7950: 6c 6c 20 2a 2f 0a 20 20 75 38 20 64 65 66 5f 65  ll */.  u8 def_e
7960: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc             /
7970: 2a 20 4f 6e 65 20 6f 66 20 54 45 58 54 5f 55 74  * One of TEXT_Ut
7980: 66 38 2c 20 54 45 58 54 5f 55 74 66 31 36 6c 65  f8, TEXT_Utf16le
7990: 20 6f 72 20 54 45 58 54 5f 55 74 66 31 36 62 65   or TEXT_Utf16be
79a0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
79b0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20   *db;.  int rc, 
79c0: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  i;.  char *zErrM
79d0: 73 67 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20  sg = 0;..#ifdef 
79e0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 66 6f  SQLITE_TEST.  fo
79f0: 72 28 69 3d 30 3b 20 6f 70 74 69 6f 6e 73 20 26  r(i=0; options &
7a00: 26 20 6f 70 74 69 6f 6e 73 5b 69 5d 3b 20 69 2b  & options[i]; i+
7a10: 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 63 6f 6e  +){.    char con
7a20: 73 74 20 2a 7a 4f 70 74 20 3d 20 6f 70 74 69 6f  st *zOpt = optio
7a30: 6e 73 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 30  ns[i];.    if( 0
7a40: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
7a50: 28 7a 4f 70 74 2c 20 22 2d 75 74 66 38 22 29 20  (zOpt, "-utf8") 
7a60: 29 7b 0a 20 20 20 20 20 20 64 65 66 5f 65 6e 63  ){.      def_enc
7a70: 20 3d 20 54 45 58 54 5f 55 74 66 38 3b 0a 20 20   = TEXT_Utf8;.  
7a80: 20 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73    }else if( 0==s
7a90: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4f  qlite3StrICmp(zO
7aa0: 70 74 2c 20 22 2d 75 74 66 31 36 6c 65 22 29 20  pt, "-utf16le") 
7ab0: 29 7b 0a 20 20 20 20 20 20 64 65 66 5f 65 6e 63  ){.      def_enc
7ac0: 20 3d 20 54 45 58 54 5f 55 74 66 31 36 6c 65 3b   = TEXT_Utf16le;
7ad0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 30  .    }else if( 0
7ae0: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
7af0: 28 7a 4f 70 74 2c 20 22 2d 75 74 66 31 36 62 65  (zOpt, "-utf16be
7b00: 22 29 20 29 7b 0a 20 20 20 20 20 20 64 65 66 5f  ") ){.      def_
7b10: 65 6e 63 20 3d 20 54 45 58 54 5f 55 74 66 31 36  enc = TEXT_Utf16
7b20: 62 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  be;.    }.  }.#e
7b30: 6e 64 69 66 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63  ndif..  /* Alloc
7b40: 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 20 64  ate the sqlite d
7b50: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ata structure */
7b60: 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65 4d 61  .  db = sqliteMa
7b70: 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28 73 71 6c  lloc( sizeof(sql
7b80: 69 74 65 29 20 29 3b 0a 20 20 69 66 28 20 64 62  ite) );.  if( db
7b90: 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64  ==0 ) goto opend
7ba0: 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e 6f 6e 45  b_out;.  db->onE
7bb0: 72 72 6f 72 20 3d 20 4f 45 5f 44 65 66 61 75 6c  rror = OE_Defaul
7bc0: 74 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65  t;.  db->priorNe
7bd0: 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62  wRowid = 0;.  db
7be0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
7bf0: 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64  _MAGIC_BUSY;.  d
7c00: 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62  b->nDb = 2;.  db
7c10: 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53  ->aDb = db->aDbS
7c20: 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65 6e 63  tatic;.  db->enc
7c30: 20 3d 20 64 65 66 5f 65 6e 63 3b 0a 20 20 2f 2a   = def_enc;.  /*
7c40: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
7c50: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
7c60: 65 73 3b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  es; */.  sqlite3
7c70: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 46  HashInit(&db->aF
7c80: 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  unc, SQLITE_HASH
7c90: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73  _STRING, 0);.  s
7ca0: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
7cb0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51  db->aCollSeq, SQ
7cc0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
7cd0: 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  , 0);.  for(i=0;
7ce0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
7cf0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73  {.    sqlite3Has
7d00: 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69  hInit(&db->aDb[i
7d10: 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54  ].tblHash, SQLIT
7d20: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
7d30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  );.    sqlite3Ha
7d40: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
7d50: 69 5d 2e 69 64 78 48 61 73 68 2c 20 53 51 4c 49  i].idxHash, SQLI
7d60: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
7d70: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
7d80: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
7d90: 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c 20 53 51  [i].trigHash, SQ
7da0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
7db0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
7dc0: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
7dd0: 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51 4c  Db[i].aFKey, SQL
7de0: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
7df0: 20 31 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 70   1);.  }.  db->p
7e00: 44 66 6c 74 43 6f 6c 6c 20 3d 0a 20 20 20 20 20  DfltColl =.     
7e10: 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6c  sqlite3ChangeCol
7e20: 6c 61 74 69 6e 67 46 75 6e 63 74 69 6f 6e 28 64  latingFunction(d
7e30: 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20  b, "BINARY", 6, 
7e40: 30 2c 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69  0, binaryCollati
7e50: 6e 67 46 75 6e 63 29 3b 0a 20 20 0a 20 20 2f 2a  ngFunc);.  .  /*
7e60: 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e   Open the backen
7e70: 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65  d database drive
7e80: 72 20 2a 2f 0a 20 20 69 66 28 20 7a 46 69 6c 65  r */.  if( zFile
7e90: 6e 61 6d 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20  name[0]==':' && 
7ea0: 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65  strcmp(zFilename
7eb0: 2c 22 3a 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20  ,":memory:")==0 
7ec0: 29 7b 0a 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f  ){.    db->temp_
7ed0: 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 7d 0a 20  store = 2;.  }. 
7ee0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
7ef0: 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46  eeFactory(db, zF
7f00: 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f  ilename, 0, MAX_
7f10: 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b  PAGES, &db->aDb[
7f20: 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72  0].pBt);.  if( r
7f30: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
7f40: 20 20 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 73      /* FIX ME: s
7f50: 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f  qlite3BtreeFacto
7f60: 72 79 28 29 20 73 68 6f 75 6c 64 20 63 61 6c 6c  ry() should call
7f70: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29 2e   sqlite3Error().
7f80: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
7f90: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
7fa0: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
7fb0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
7fc0: 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f  OSED;.    goto o
7fd0: 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20  pendb_out;.  }. 
7fe0: 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d   db->aDb[0].zNam
7ff0: 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62  e = "main";.  db
8000: 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d  ->aDb[1].zName =
8010: 20 22 74 65 6d 70 22 3b 0a 0a 20 20 2f 2a 20 41   "temp";..  /* A
8020: 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74  ttempt to read t
8030: 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 73  he schema */.  s
8040: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
8050: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 64  iltinFunctions(d
8060: 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  b);.  rc = sqlit
8070: 65 33 49 6e 69 74 28 64 62 2c 20 26 7a 45 72 72  e3Init(db, &zErr
8080: 4d 73 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Msg);.  if( sqli
8090: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
80a0: 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  d ){.    sqlite3
80b0: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20  _close(db);.    
80c0: 64 62 20 3d 20 30 3b 0a 20 20 20 20 67 6f 74 6f  db = 0;.    goto
80d0: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
80e0: 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c  else if( rc!=SQL
80f0: 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51  ITE_OK && rc!=SQ
8100: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
8110: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
8120: 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45 72 72  , rc, "%s", zErr
8130: 4d 73 67 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d  Msg, 0);.    db-
8140: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
8150: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20  MAGIC_CLOSED;.  
8160: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62 2d 3e 6d  }else{.    db->m
8170: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8180: 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 0a 20 20  GIC_OPEN;.  }.  
8190: 69 66 28 20 7a 45 72 72 4d 73 67 20 29 20 73 71  if( zErrMsg ) sq
81a0: 6c 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67  liteFree(zErrMsg
81b0: 29 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a  );..opendb_out:.
81c0: 20 20 2a 70 70 44 62 20 3d 20 64 62 3b 0a 20 20    *ppDb = db;.  
81d0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65  return sqlite3_e
81e0: 72 72 63 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a 2f  rrcode(db);.}../
81f0: 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
8200: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
8210: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8220: 6f 70 65 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68  open(.  const ch
8230: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a  ar *zFilename, .
8240: 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62    sqlite3 **ppDb
8250: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
8260: 2a 2a 6f 70 74 69 6f 6e 73 0a 29 7b 0a 20 20 72  **options.){.  r
8270: 65 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61  eturn openDataba
8280: 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70  se(zFilename, pp
8290: 44 62 2c 20 6f 70 74 69 6f 6e 73 2c 20 54 45 58  Db, options, TEX
82a0: 54 5f 55 74 66 38 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  T_Utf8);.}../*.*
82b0: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
82c0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
82d0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
82e0: 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69  n16(.  const voi
82f0: 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20  d *zFilename, . 
8300: 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c   sqlite3 **ppDb,
8310: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   .  const char *
8320: 2a 6f 70 74 69 6f 6e 73 0a 29 7b 0a 20 20 63 68  *options.){.  ch
8330: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20  ar *zFilename8; 
8340: 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65    /* zFilename e
8350: 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 20  ncoded in UTF-8 
8360: 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46 2d 31  instead of UTF-1
8370: 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  6 */.  int rc;..
8380: 20 20 61 73 73 65 72 74 28 20 70 70 44 62 20 29    assert( ppDb )
8390: 3b 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20  ;..  zFilename8 
83a0: 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f  = sqlite3utf16to
83b0: 38 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 2d 31 2c  8(zFilename, -1,
83c0: 20 53 51 4c 49 54 45 33 5f 42 49 47 45 4e 44 49   SQLITE3_BIGENDI
83d0: 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a 46 69 6c  AN);.  if( !zFil
83e0: 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20 2a 70  ename8 ){.    *p
83f0: 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 72 65 74  pDb = 0;.    ret
8400: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
8410: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46 49 58 20  ;.  }..  /* FIX 
8420: 4d 45 3a 20 41 6c 73 6f 20 6e 65 65 64 20 74 6f  ME: Also need to
8430: 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65 20 6f   translate the o
8440: 70 74 69 6f 6e 20 73 74 72 69 6e 67 73 20 2a 2f  ption strings */
8450: 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 33 5f  ..  if( SQLITE3_
8460: 42 49 47 45 4e 44 49 41 4e 20 29 7b 0a 20 20 20  BIGENDIAN ){.   
8470: 20 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61   rc = openDataba
8480: 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70  se(zFilename8, p
8490: 70 44 62 2c 20 6f 70 74 69 6f 6e 73 2c 20 54 45  pDb, options, TE
84a0: 58 54 5f 55 74 66 31 36 62 65 29 3b 0a 20 20 7d  XT_Utf16be);.  }
84b0: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 6f  else{.    rc = o
84c0: 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c  penDatabase(zFil
84d0: 65 6e 61 6d 65 38 2c 20 70 70 44 62 2c 20 6f 70  ename8, ppDb, op
84e0: 74 69 6f 6e 73 2c 20 54 45 58 54 5f 55 74 66 31  tions, TEXT_Utf1
84f0: 36 6c 65 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c  6le);.  }..  sql
8500: 69 74 65 46 72 65 65 28 7a 46 69 6c 65 6e 61 6d  iteFree(zFilenam
8510: 65 38 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  e8);.  return rc
8520: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  ;.}../*.** Open 
8530: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68  a new database h
8540: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
8550: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 61 72 61 72  lite3_open_varar
8560: 67 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  g(.  const char 
8570: 2a 66 69 6c 65 6e 61 6d 65 2c 20 20 20 2f 2a 20  *filename,   /* 
8580: 44 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d  Database filenam
8590: 65 20 28 55 54 46 2d 38 29 20 2a 2f 0a 20 20 73  e (UTF-8) */.  s
85a0: 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20 20  qlite3 **ppDb,  
85b0: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 53         /* OUT: S
85c0: 51 4c 69 74 65 20 64 62 20 68 61 6e 64 6c 65 20  QLite db handle 
85d0: 2a 2f 0a 20 20 2e 2e 2e 20 20 20 20 20 20 20 20  */.  ...        
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85f0: 4f 70 74 69 6f 6e 20 73 74 72 69 6e 67 73 20 2a  Option strings *
8600: 2f 0a 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  /.){.  va_list a
8610: 70 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  p;.  const char 
8620: 2a 2a 61 4f 70 74 73 20 3d 20 30 3b 0a 20 20 69  **aOpts = 0;.  i
8630: 6e 74 20 6e 4f 70 74 73 20 3d 20 30 3b 0a 20 20  nt nOpts = 0;.  
8640: 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a 20 43 6f  int rc;..  /* Co
8650: 75 6e 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  unt the argument
8660: 73 20 2a 2f 0a 20 20 76 61 5f 73 74 61 72 74 28  s */.  va_start(
8670: 61 70 2c 20 70 70 44 62 29 3b 0a 20 20 77 68 69  ap, ppDb);.  whi
8680: 6c 65 28 20 76 61 5f 61 72 67 28 61 70 2c 20 63  le( va_arg(ap, c
8690: 6f 6e 73 74 20 63 68 61 72 20 2a 29 20 29 20 6e  onst char *) ) n
86a0: 4f 70 74 73 2b 2b 3b 0a 20 20 76 61 5f 65 6e 64  Opts++;.  va_end
86b0: 28 61 70 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  (ap);..  /* If t
86c0: 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 74 68  here are more th
86d0: 61 6e 20 7a 65 72 6f 20 61 72 67 75 6d 65 6e 74  an zero argument
86e0: 73 2c 20 63 6f 6e 73 74 72 75 63 74 20 61 6e 20  s, construct an 
86f0: 61 72 72 61 79 20 2a 2f 0a 20 20 69 66 28 20 6e  array */.  if( n
8700: 4f 70 74 73 20 29 7b 0a 20 20 20 20 61 4f 70 74  Opts ){.    aOpt
8710: 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20  s = (const char 
8720: 2a 2a 29 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  **)sqliteMalloc(
8730: 73 69 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61  sizeof(const cha
8740: 72 20 2a 29 2a 6e 4f 70 74 73 2b 31 29 3b 0a 20  r *)*nOpts+1);. 
8750: 20 20 20 69 66 28 20 21 61 4f 70 74 73 20 29 7b     if( !aOpts ){
8760: 0a 20 20 20 20 20 20 2a 70 70 44 62 20 3d 20 30  .      *ppDb = 0
8770: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ;.      return S
8780: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
8790: 20 7d 0a 20 20 20 20 76 61 5f 73 74 61 72 74 28   }.    va_start(
87a0: 61 70 2c 20 70 70 44 62 29 3b 0a 20 20 20 20 6e  ap, ppDb);.    n
87b0: 4f 70 74 73 20 3d 20 30 3b 0a 20 20 20 20 77 68  Opts = 0;.    wh
87c0: 69 6c 65 28 20 76 61 5f 61 72 67 28 61 70 2c 20  ile( va_arg(ap, 
87d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 20 29 7b  const char *) ){
87e0: 0a 20 20 20 20 20 20 61 4f 70 74 73 5b 6e 4f 70  .      aOpts[nOp
87f0: 74 73 5d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  ts] = va_arg(ap,
8800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
8810: 20 20 20 20 20 20 6e 4f 70 74 73 2b 2b 3b 0a 20        nOpts++;. 
8820: 20 20 20 7d 0a 20 20 20 20 61 4f 70 74 73 5b 6e     }.    aOpts[n
8830: 4f 70 74 73 5d 20 3d 20 30 3b 0a 20 20 20 20 76  Opts] = 0;.    v
8840: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 7d 0a 20  a_end(ap);.  }. 
8850: 20 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20   .  /* Call the 
8860: 72 65 67 75 6c 61 72 20 73 71 6c 69 74 65 33 5f  regular sqlite3_
8870: 6f 70 65 6e 28 29 20 2a 2f 0a 20 20 72 63 20 3d  open() */.  rc =
8880: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 66 69   sqlite3_open(fi
8890: 6c 65 6e 61 6d 65 2c 20 70 70 44 62 2c 20 61 4f  lename, ppDb, aO
88a0: 70 74 73 29 3b 0a 20 20 69 66 28 20 61 4f 70 74  pts);.  if( aOpt
88b0: 73 20 29 20 73 71 6c 69 74 65 46 72 65 65 28 61  s ) sqliteFree(a
88c0: 4f 70 74 73 29 3b 0a 20 20 72 65 74 75 72 6e 20  Opts);.  return 
88d0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  rc;.}../*.** Ope
88e0: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
88f0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
8900: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 76  sqlite3_open16_v
8910: 61 72 61 72 67 28 0a 20 20 63 6f 6e 73 74 20 76  ararg(.  const v
8920: 6f 69 64 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 20  oid *filename,  
8930: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
8940: 65 6e 61 6d 65 20 28 55 54 46 2d 31 36 29 20 2a  ename (UTF-16) *
8950: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70  /.  sqlite3 **pp
8960: 44 62 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  Db,         /* O
8970: 55 54 3a 20 53 51 4c 69 74 65 20 64 62 20 68 61  UT: SQLite db ha
8980: 6e 64 6c 65 20 2a 2f 0a 20 20 2e 2e 2e 20 20 20  ndle */.  ...   
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89a0: 20 20 2f 2a 20 4f 70 74 69 6f 6e 20 73 74 72 69    /* Option stri
89b0: 6e 67 73 20 2a 2f 0a 29 7b 0a 20 20 76 61 5f 6c  ngs */.){.  va_l
89c0: 69 73 74 20 61 70 3b 0a 20 20 63 6f 6e 73 74 20  ist ap;.  const 
89d0: 63 68 61 72 20 2a 2a 61 4f 70 74 73 20 3d 20 30  char **aOpts = 0
89e0: 3b 0a 20 20 69 6e 74 20 6e 4f 70 74 73 20 3d 20  ;.  int nOpts = 
89f0: 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  0;.  int rc;..  
8a00: 2f 2a 20 43 6f 75 6e 74 20 74 68 65 20 61 72 67  /* Count the arg
8a10: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 76 61 5f 73  uments */.  va_s
8a20: 74 61 72 74 28 61 70 2c 20 70 70 44 62 29 3b 0a  tart(ap, ppDb);.
8a30: 20 20 77 68 69 6c 65 28 20 76 61 5f 61 72 67 28    while( va_arg(
8a40: 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ap, const char *
8a50: 29 20 29 20 6e 4f 70 74 73 2b 2b 3b 0a 20 20 76  ) ) nOpts++;.  v
8a60: 61 5f 65 6e 64 28 61 70 29 3b 0a 0a 20 20 2f 2a  a_end(ap);..  /*
8a70: 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   If there are mo
8a80: 72 65 20 74 68 61 6e 20 7a 65 72 6f 20 61 72 67  re than zero arg
8a90: 75 6d 65 6e 74 73 2c 20 63 6f 6e 73 74 72 75 63  uments, construc
8aa0: 74 20 61 6e 20 61 72 72 61 79 20 2a 2f 0a 20 20  t an array */.  
8ab0: 69 66 28 20 6e 4f 70 74 73 20 29 7b 0a 20 20 20  if( nOpts ){.   
8ac0: 20 61 4f 70 74 73 20 3d 20 28 63 6f 6e 73 74 20   aOpts = (const 
8ad0: 63 68 61 72 20 2a 2a 29 73 71 6c 69 74 65 4d 61  char **)sqliteMa
8ae0: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 63 6f 6e 73  lloc(sizeof(cons
8af0: 74 20 63 68 61 72 20 2a 29 2a 6e 4f 70 74 73 2b  t char *)*nOpts+
8b00: 31 29 3b 0a 20 20 20 20 69 66 28 20 21 61 4f 70  1);.    if( !aOp
8b10: 74 73 20 29 7b 0a 20 20 20 20 20 20 2a 70 70 44  ts ){.      *ppD
8b20: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 74  b = 0;.      ret
8b30: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
8b40: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 61 5f 73  ;.    }.    va_s
8b50: 74 61 72 74 28 61 70 2c 20 70 70 44 62 29 3b 0a  tart(ap, ppDb);.
8b60: 20 20 20 20 6e 4f 70 74 73 20 3d 20 30 3b 0a 20      nOpts = 0;. 
8b70: 20 20 20 77 68 69 6c 65 28 20 76 61 5f 61 72 67     while( va_arg
8b80: 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  (ap, const char 
8b90: 2a 29 20 29 7b 0a 20 20 20 20 20 20 61 4f 70 74  *) ){.      aOpt
8ba0: 73 5b 6e 4f 70 74 73 5d 20 3d 20 76 61 5f 61 72  s[nOpts] = va_ar
8bb0: 67 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  g(ap, const char
8bc0: 20 2a 29 3b 0a 20 20 20 20 20 20 6e 4f 70 74 73   *);.      nOpts
8bd0: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  ++;.    }.    aO
8be0: 70 74 73 5b 6e 4f 70 74 73 5d 20 3d 20 30 3b 0a  pts[nOpts] = 0;.
8bf0: 20 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a      va_end(ap);.
8c00: 20 20 7d 0a 20 20 0a 20 20 2f 2a 20 43 61 6c 6c    }.  .  /* Call
8c10: 20 74 68 65 20 72 65 67 75 6c 61 72 20 73 71 6c   the regular sql
8c20: 69 74 65 33 5f 6f 70 65 6e 31 36 28 29 20 2a 2f  ite3_open16() */
8c30: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
8c40: 6f 70 65 6e 31 36 28 66 69 6c 65 6e 61 6d 65 2c  open16(filename,
8c50: 20 70 70 44 62 2c 20 61 4f 70 74 73 29 3b 0a 20   ppDb, aOpts);. 
8c60: 20 69 66 28 20 61 4f 70 74 73 20 29 20 73 71 6c   if( aOpts ) sql
8c70: 69 74 65 46 72 65 65 28 61 4f 70 74 73 29 3b 0a  iteFree(aOpts);.
8c80: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
8c90: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8ca0: 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73 74  ing routine dest
8cb0: 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20 6d  roys a virtual m
8cc0: 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20 63  achine that is c
8cd0: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
8ce0: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
8cf0: 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68 65 20  () routine. The 
8d00: 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65 64  integer returned
8d10: 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a   is an SQLITE_.*
8d20: 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  * success/failur
8d30: 65 20 63 6f 64 65 20 74 68 61 74 20 64 65 73 63  e code that desc
8d40: 72 69 62 65 73 20 74 68 65 20 72 65 73 75 6c 74  ribes the result
8d50: 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68   of executing th
8d60: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  e virtual.** mac
8d70: 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  hine..**.** This
8d80: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
8d90: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  e error code and
8da0: 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
8db0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65   by.** sqlite3_e
8dc0: 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65  rrcode(), sqlite
8dd0: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
8de0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
8df0: 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
8e00: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74  3_finalize(sqlit
8e10: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
8e20: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
8e30: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56  3VdbeFinalize((V
8e40: 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a  dbe*)pStmt, 0);.
8e50: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
8e60: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
8e70: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
8e80: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
8e90: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
8ea0: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
8eb0: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
8ec0: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
8ed0: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
8ee0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
8ef0: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
8f00: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
8f10: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
8f20: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
8f30: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
8f40: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
8f50: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
8f60: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
8f70: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
8f80: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
8f90: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
8fa0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
8fb0: 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c  {.  int rc = sql
8fc0: 69 74 65 33 56 64 62 65 52 65 73 65 74 28 28 56  ite3VdbeReset((V
8fd0: 64 62 65 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a  dbe*)pStmt, 0);.
8fe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b    sqlite3VdbeMak
8ff0: 65 52 65 61 64 79 28 28 56 64 62 65 2a 29 70 53  eReady((Vdbe*)pS
9000: 74 6d 74 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 72  tmt, -1, 0);.  r
9010: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a              eturn rc;.}.