/ Hex Artifact Content
Login

Artifact 35b6917da56ff1abdfab7fc53d10b815dd4cac16:


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 36 34 2e 32 2e 31 20 32 30 30  ,v 1.164.2.1 200
0280: 34 2f 30 36 2f 31 39 20 30 34 3a 32 33 3a 32 35  4/06/19 04:23:25
0290: 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70   danielk1977 Exp
02a0: 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22   $.*/.#include "
02b0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e  sqliteInt.h".#in
02c0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
02d0: 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
02e0: 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
02f0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
0300: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
0310: 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
0320: 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
0330: 6c 69 74 65 49 6e 69 74 20 69 6e 74 6f 20 74 68  liteInit into th
0340: 65 20 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c  e sqliteInitCall
0350: 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
0360: 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
0370: 74 65 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  te *db;         
0380: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
0390: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
03a0: 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
03b0: 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
03c0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
03d0: 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
03e0: 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69  tData;../*.** Fi
03f0: 6c 6c 20 74 68 65 20 49 6e 69 74 44 61 74 61 20  ll the InitData 
0400: 73 74 72 75 63 74 75 72 65 20 77 69 74 68 20 61  structure with a
0410: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
0420: 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 0a 2a  that indicates.*
0430: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
0440: 61 73 65 20 69 73 20 63 6f 72 72 75 70 74 2e 0a  ase is corrupt..
0450: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63  */.static void c
0460: 6f 72 72 75 70 74 53 63 68 65 6d 61 28 49 6e 69  orruptSchema(Ini
0470: 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20 63 6f  tData *pData, co
0480: 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74 72 61  nst char *zExtra
0490: 29 7b 0a 20 20 73 71 6c 69 74 65 53 65 74 53 74  ){.  sqliteSetSt
04a0: 72 69 6e 67 28 70 44 61 74 61 2d 3e 70 7a 45 72  ring(pData->pzEr
04b0: 72 4d 73 67 2c 20 22 6d 61 6c 66 6f 72 6d 65 64  rMsg, "malformed
04c0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
04d0: 22 2c 0a 20 20 20 20 20 7a 45 78 74 72 61 21 3d  ",.     zExtra!=
04e0: 30 20 26 26 20 7a 45 78 74 72 61 5b 30 5d 21 3d  0 && zExtra[0]!=
04f0: 30 20 3f 20 22 20 2d 20 22 20 3a 20 28 63 68 61  0 ? " - " : (cha
0500: 72 2a 29 30 2c 20 7a 45 78 74 72 61 2c 20 28 63  r*)0, zExtra, (c
0510: 68 61 72 2a 29 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  har*)0);.}../*.*
0520: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 61  * This is the ca
0530: 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 66  llback routine f
0540: 6f 72 20 74 68 65 20 63 6f 64 65 20 74 68 61 74  or the code that
0550: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65   initializes the
0560: 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 53  .** database.  S
0570: 65 65 20 73 71 6c 69 74 65 49 6e 69 74 28 29 20  ee sqliteInit() 
0580: 62 65 6c 6f 77 20 66 6f 72 20 61 64 64 69 74 69  below for additi
0590: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
05a0: 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 63 61 6c  ..**.** Each cal
05b0: 6c 62 61 63 6b 20 63 6f 6e 74 61 69 6e 73 20 74  lback contains t
05c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
05d0: 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20  ormation:.**.** 
05e0: 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20 22 66      argv[0] = "f
05f0: 69 6c 65 2d 66 6f 72 6d 61 74 22 20 6f 72 20 22  ile-format" or "
0600: 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 22 20 6f  schema-cookie" o
0610: 72 20 22 74 61 62 6c 65 22 20 6f 72 20 22 69 6e  r "table" or "in
0620: 64 65 78 22 0a 2a 2a 20 20 20 20 20 61 72 67 76  dex".**     argv
0630: 5b 31 5d 20 3d 20 74 61 62 6c 65 20 6f 72 20 69  [1] = table or i
0640: 6e 64 65 78 20 6e 61 6d 65 20 6f 72 20 6d 65 74  ndex name or met
0650: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 79 70 65  a statement type
0660: 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 32 5d  ..**     argv[2]
0670: 20 3d 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d   = root page num
0680: 62 65 72 20 66 6f 72 20 74 61 62 6c 65 20 6f 72  ber for table or
0690: 20 69 6e 64 65 78 2e 20 20 4e 55 4c 4c 20 66 6f   index.  NULL fo
06a0: 72 20 6d 65 74 61 2e 0a 2a 2a 20 20 20 20 20 61  r meta..**     a
06b0: 72 67 76 5b 33 5d 20 3d 20 53 51 4c 20 74 65 78  rgv[3] = SQL tex
06c0: 74 20 66 6f 72 20 61 20 43 52 45 41 54 45 20 54  t for a CREATE T
06d0: 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
06e0: 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 2e 0a  NDEX statement..
06f0: 2a 2a 20 20 20 20 20 61 72 67 76 5b 34 5d 20 3d  **     argv[4] =
0700: 20 22 31 22 20 66 6f 72 20 74 65 6d 70 6f 72 61   "1" for tempora
0710: 72 79 20 66 69 6c 65 73 2c 20 22 30 22 20 66 6f  ry files, "0" fo
0720: 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  r main database,
0730: 20 22 32 22 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20   "2" or more.** 
0740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
0750: 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  r auxiliary data
0760: 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a  base files..**.*
0770: 2f 0a 73 74 61 74 69 63 0a 69 6e 74 20 73 71 6c  /.static.int sql
0780: 69 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  iteInitCallback(
0790: 76 6f 69 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74  void *pInit, int
07a0: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
07b0: 67 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  gv, char **azCol
07c0: 4e 61 6d 65 29 7b 0a 20 20 49 6e 69 74 44 61 74  Name){.  InitDat
07d0: 61 20 2a 70 44 61 74 61 20 3d 20 28 49 6e 69 74  a *pData = (Init
07e0: 44 61 74 61 2a 29 70 49 6e 69 74 3b 0a 20 20 69  Data*)pInit;.  i
07f0: 6e 74 20 6e 45 72 72 20 3d 20 30 3b 0a 0a 20 20  nt nErr = 0;..  
0800: 61 73 73 65 72 74 28 20 61 72 67 63 3d 3d 35 20  assert( argc==5 
0810: 29 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30  );.  if( argv==0
0820: 20 29 20 72 65 74 75 72 6e 20 30 3b 20 20 20 2f   ) return 0;   /
0830: 2a 20 4d 69 67 68 74 20 68 61 70 70 65 6e 20 69  * Might happen i
0840: 66 20 45 4d 50 54 59 5f 52 45 53 55 4c 54 5f 43  f EMPTY_RESULT_C
0850: 41 4c 4c 42 41 43 4b 53 20 61 72 65 20 6f 6e 20  ALLBACKS are on 
0860: 2a 2f 0a 20 20 69 66 28 20 61 72 67 76 5b 30 5d  */.  if( argv[0]
0870: 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 72 72 75  ==0 ){.    corru
0880: 70 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20  ptSchema(pData, 
0890: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  0);.    return 1
08a0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
08b0: 61 72 67 76 5b 30 5d 5b 30 5d 20 29 7b 0a 20 20  argv[0][0] ){.  
08c0: 20 20 63 61 73 65 20 27 76 27 3a 0a 20 20 20 20    case 'v':.    
08d0: 63 61 73 65 20 27 69 27 3a 0a 20 20 20 20 63 61  case 'i':.    ca
08e0: 73 65 20 27 74 27 3a 20 7b 20 20 2f 2a 20 43 52  se 't': {  /* CR
08f0: 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52 45 41  EATE TABLE, CREA
0900: 54 45 20 49 4e 44 45 58 2c 20 6f 72 20 43 52 45  TE INDEX, or CRE
0910: 41 54 45 20 56 49 45 57 20 73 74 61 74 65 6d 65  ATE VIEW stateme
0920: 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  nts */.      sql
0930: 69 74 65 20 2a 64 62 20 3d 20 70 44 61 74 61 2d  ite *db = pData-
0940: 3e 64 62 3b 0a 20 20 20 20 20 20 69 66 28 20 61  >db;.      if( a
0950: 72 67 76 5b 32 5d 3d 3d 30 20 7c 7c 20 61 72 67  rgv[2]==0 || arg
0960: 76 5b 34 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  v[4]==0 ){.     
0970: 20 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61     corruptSchema
0980: 28 70 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  (pData, 0);.    
0990: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
09a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
09b0: 61 72 67 76 5b 33 5d 20 26 26 20 61 72 67 76 5b  argv[3] && argv[
09c0: 33 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  3][0] ){.       
09d0: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 61 72   /* Call the par
09e0: 73 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 61  ser to process a
09f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 49   CREATE TABLE, I
0a00: 4e 44 45 58 20 6f 72 20 56 49 45 57 2e 0a 20 20  NDEX or VIEW..  
0a10: 20 20 20 20 20 20 2a 2a 20 42 75 74 20 62 65 63        ** But bec
0a20: 61 75 73 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ause db->init.bu
0a30: 73 79 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20  sy is set to 1, 
0a40: 6e 6f 20 56 44 42 45 20 63 6f 64 65 20 69 73 20  no VDBE code is 
0a50: 67 65 6e 65 72 61 74 65 64 0a 20 20 20 20 20 20  generated.      
0a60: 20 20 2a 2a 20 6f 72 20 65 78 65 63 75 74 65 64    ** or executed
0a70: 2e 20 20 41 6c 6c 20 74 68 65 20 70 61 72 73 65  .  All the parse
0a80: 72 20 64 6f 65 73 20 69 73 20 62 75 69 6c 64 20  r does is build 
0a90: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 61 74  the internal dat
0aa0: 61 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 74 72  a.        ** str
0ab0: 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
0ac0: 63 72 69 62 65 20 74 68 65 20 74 61 62 6c 65 2c  cribe the table,
0ad0: 20 69 6e 64 65 78 2c 20 6f 72 20 76 69 65 77 2e   index, or view.
0ae0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
0af0: 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a      char *zErr;.
0b00: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
0b10: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
0b20: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  .        db->ini
0b30: 74 2e 69 44 62 20 3d 20 61 74 6f 69 28 61 72 67  t.iDb = atoi(arg
0b40: 76 5b 34 5d 29 3b 0a 20 20 20 20 20 20 20 20 61  v[4]);.        a
0b50: 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
0b60: 69 44 62 3e 3d 30 20 26 26 20 64 62 2d 3e 69 6e  iDb>=0 && db->in
0b70: 69 74 2e 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  it.iDb<db->nDb )
0b80: 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e  ;.        db->in
0b90: 69 74 2e 6e 65 77 54 6e 75 6d 20 3d 20 61 74 6f  it.newTnum = ato
0ba0: 69 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20  i(argv[2]);.    
0bb0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 5f 65      if( sqlite_e
0bc0: 78 65 63 28 64 62 2c 20 61 72 67 76 5b 33 5d 2c  xec(db, argv[3],
0bd0: 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 20 29 7b   0, 0, &zErr) ){
0be0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 72 72 75  .          corru
0bf0: 70 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20  ptSchema(pData, 
0c00: 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20 20  zErr);.         
0c10: 20 73 71 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28   sqlite_freemem(
0c20: 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  zErr);.        }
0c30: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  .        db->ini
0c40: 74 2e 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20  t.iDb = 0;.     
0c50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
0c60: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63 6f  /* If the SQL co
0c70: 6c 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69 74  lumn is blank it
0c80: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 61   means this is a
0c90: 6e 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20 20  n index that.   
0ca0: 20 20 20 20 20 2a 2a 20 77 61 73 20 63 72 65 61       ** was crea
0cb0: 74 65 64 20 74 6f 20 62 65 20 74 68 65 20 50 52  ted to be the PR
0cc0: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 74 6f 20  IMARY KEY or to 
0cd0: 66 75 6c 66 69 6c 6c 20 61 20 55 4e 49 51 55 45  fulfill a UNIQUE
0ce0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  .        ** cons
0cf0: 74 72 61 69 6e 74 20 66 6f 72 20 61 20 43 52 45  traint for a CRE
0d00: 41 54 45 20 54 41 42 4c 45 2e 20 20 54 68 65 20  ATE TABLE.  The 
0d10: 69 6e 64 65 78 20 73 68 6f 75 6c 64 20 68 61 76  index should hav
0d20: 65 20 61 6c 72 65 61 64 79 0a 20 20 20 20 20 20  e already.      
0d30: 20 20 2a 2a 20 62 65 65 6e 20 63 72 65 61 74 65    ** been create
0d40: 64 20 77 68 65 6e 20 77 65 20 70 72 6f 63 65 73  d when we proces
0d50: 73 65 64 20 74 68 65 20 43 52 45 41 54 45 20 54  sed the CREATE T
0d60: 41 42 4c 45 2e 20 20 41 6c 6c 20 77 65 20 68 61  ABLE.  All we ha
0d70: 76 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ve.        ** to
0d80: 20 64 6f 20 68 65 72 65 20 69 73 20 72 65 63 6f   do here is reco
0d90: 72 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  rd the root page
0da0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
0db0: 20 69 6e 64 65 78 2e 0a 20 20 20 20 20 20 20 20   index..        
0dc0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  */.        int i
0dd0: 44 62 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  Db;.        Inde
0de0: 78 20 2a 70 49 6e 64 65 78 3b 0a 0a 20 20 20 20  x *pIndex;..    
0df0: 20 20 20 20 69 44 62 20 3d 20 61 74 6f 69 28 61      iDb = atoi(a
0e00: 72 67 76 5b 34 5d 29 3b 0a 20 20 20 20 20 20 20  rgv[4]);.       
0e10: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
0e20: 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
0e30: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 64 65 78  ;.        pIndex
0e40: 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 49 6e 64   = sqliteFindInd
0e50: 65 78 28 64 62 2c 20 61 72 67 76 5b 31 5d 2c 20  ex(db, argv[1], 
0e60: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
0e70: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  me);.        if(
0e80: 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20 70 49   pIndex==0 || pI
0e90: 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20 29 7b  ndex->tnum!=0 ){
0ea0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
0eb0: 69 73 20 63 61 6e 20 6f 63 63 75 72 20 69 66 20  is can occur if 
0ec0: 74 68 65 72 65 20 65 78 69 73 74 73 20 61 6e 20  there exists an 
0ed0: 69 6e 64 65 78 20 6f 6e 20 61 20 54 45 4d 50 20  index on a TEMP 
0ee0: 74 61 62 6c 65 20 77 68 69 63 68 0a 20 20 20 20  table which.    
0ef0: 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68 65        ** has the
0f00: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e   same name as an
0f10: 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20 61  other index on a
0f20: 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78   permanent index
0f30: 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20 20  .  Since.       
0f40: 20 20 20 2a 2a 20 74 68 65 20 70 65 72 6d 61 6e     ** the perman
0f50: 65 6e 74 20 74 61 62 6c 65 20 69 73 20 68 69 64  ent table is hid
0f60: 64 65 6e 20 62 79 20 74 68 65 20 54 45 4d 50 20  den by the TEMP 
0f70: 74 61 62 6c 65 2c 20 77 65 20 63 61 6e 20 61 6c  table, we can al
0f80: 73 6f 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  so.          ** 
0f90: 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20 74 68  safely ignore th
0fa0: 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65 20 70  e index on the p
0fb0: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e 0a  ermanent table..
0fc0: 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20            */.   
0fd0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f 74         /* Do Not
0fe0: 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 20 20 20  hing */;.       
0ff0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1000: 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 20 3d    pIndex->tnum =
1010: 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29 3b 0a   atoi(argv[2]);.
1020: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1030: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
1040: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
1050: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  : {.      /* Thi
1060: 73 20 63 61 6e 20 6e 6f 74 20 68 61 70 70 65 6e  s can not happen
1070: 21 20 2a 2f 0a 20 20 20 20 20 20 6e 45 72 72 20  ! */.      nErr 
1080: 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
1090: 74 28 20 6e 45 72 72 3d 3d 30 20 29 3b 0a 20 20  t( nErr==0 );.  
10a0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
10b0: 20 6e 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   nErr;.}../*.** 
10c0: 54 68 69 73 20 69 73 20 61 20 63 61 6c 6c 62 61  This is a callba
10d0: 63 6b 20 70 72 6f 63 65 64 75 72 65 20 75 73 65  ck procedure use
10e0: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
10f0: 20 61 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 2a   a table.  The.*
1100: 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * name of the ta
1110: 62 6c 65 20 74 6f 20 62 65 20 72 65 63 6f 6e 73  ble to be recons
1120: 74 72 75 63 74 65 64 20 69 73 20 70 61 73 73 65  tructed is passe
1130: 64 20 69 6e 20 61 73 20 61 72 67 76 5b 30 5d 2e  d in as argv[0].
1140: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
1150: 69 6e 65 20 69 73 20 75 73 65 64 20 74 6f 20 61  ine is used to a
1160: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 67  utomatically upg
1170: 72 61 64 65 20 61 20 64 61 74 61 62 61 73 65 20  rade a database 
1180: 66 72 6f 6d 0a 2a 2a 20 66 6f 72 6d 61 74 20 76  from.** format v
1190: 65 72 73 69 6f 6e 20 31 20 6f 72 20 32 20 74 6f  ersion 1 or 2 to
11a0: 20 76 65 72 73 69 6f 6e 20 33 2e 20 20 54 68 65   version 3.  The
11b0: 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69   correct operati
11c0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 69 73 20 72 6f  on of.** this ro
11d0: 75 74 69 6e 65 20 72 65 6c 79 73 20 6f 6e 20 74  utine relys on t
11e0: 68 65 20 66 61 63 74 20 74 68 61 74 20 6e 6f 20  he fact that no 
11f0: 69 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64  indices are used
1200: 20 77 68 65 6e 0a 2a 2a 20 63 6f 70 79 69 6e 67   when.** copying
1210: 20 61 20 74 61 62 6c 65 20 6f 75 74 20 74 6f 20   a table out to 
1220: 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  a temporary file
1230: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 68 61 6e  ..**.** The chan
1240: 67 65 20 66 72 6f 6d 20 76 65 72 73 69 6f 6e 20  ge from version 
1250: 32 20 74 6f 20 76 65 72 73 69 6f 6e 20 33 20 6f  2 to version 3 o
1260: 63 63 75 72 72 65 64 20 62 65 74 77 65 65 6e 20  ccurred between 
1270: 53 51 4c 69 74 65 0a 2a 2a 20 76 65 72 73 69 6f  SQLite.** versio
1280: 6e 20 32 2e 35 2e 36 20 61 6e 64 20 32 2e 36 2e  n 2.5.6 and 2.6.
1290: 30 20 6f 6e 20 32 30 30 32 2d 4a 75 6c 79 2d 31  0 on 2002-July-1
12a0: 38 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63 0a 69  8.  .*/.static.i
12b0: 6e 74 20 75 70 67 72 61 64 65 5f 33 5f 63 61 6c  nt upgrade_3_cal
12c0: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69  lback(void *pIni
12d0: 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61  t, int argc, cha
12e0: 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a  r **argv, char *
12f0: 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 49 6e 69  *NotUsed){.  Ini
1300: 74 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20 28  tData *pData = (
1310: 49 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74 3b  InitData*)pInit;
1320: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 61 62  .  int rc;.  Tab
1330: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 54 72 69 67  le *pTab;.  Trig
1340: 67 65 72 20 2a 70 54 72 69 67 3b 0a 20 20 63 68  ger *pTrig;.  ch
1350: 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20  ar *zErr = 0;.. 
1360: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46 69   pTab = sqliteFi
1370: 6e 64 54 61 62 6c 65 28 70 44 61 74 61 2d 3e 64  ndTable(pData->d
1380: 62 2c 20 61 72 67 76 5b 30 5d 2c 20 30 29 3b 0a  b, argv[0], 0);.
1390: 20 20 61 73 73 65 72 74 28 20 70 54 61 62 21 3d    assert( pTab!=
13a0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
13b0: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 70 54 61  qliteStrICmp(pTa
13c0: 62 2d 3e 7a 4e 61 6d 65 2c 20 61 72 67 76 5b 30  b->zName, argv[0
13d0: 5d 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  ])==0 );.  if( p
13e0: 54 61 62 20 29 7b 0a 20 20 20 20 70 54 72 69 67  Tab ){.    pTrig
13f0: 20 3d 20 70 54 61 62 2d 3e 70 54 72 69 67 67 65   = pTab->pTrigge
1400: 72 3b 0a 20 20 20 20 70 54 61 62 2d 3e 70 54 72  r;.    pTab->pTr
1410: 69 67 67 65 72 20 3d 20 30 3b 20 20 2f 2a 20 44  igger = 0;  /* D
1420: 69 73 61 62 6c 65 20 61 6c 6c 20 74 72 69 67 67  isable all trigg
1430: 65 72 73 20 62 65 66 6f 72 65 20 72 65 62 75 69  ers before rebui
1440: 6c 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  lding the table 
1450: 2a 2f 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  */.  }.  rc = sq
1460: 6c 69 74 65 5f 65 78 65 63 5f 70 72 69 6e 74 66  lite_exec_printf
1470: 28 70 44 61 74 61 2d 3e 64 62 2c 0a 20 20 20 20  (pData->db,.    
1480: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
1490: 4c 45 20 73 71 6c 69 74 65 5f 78 20 41 53 20 53  LE sqlite_x AS S
14a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 27 25 71  ELECT * FROM '%q
14b0: 27 3b 20 22 0a 20 20 20 20 22 44 45 4c 45 54 45  '; ".    "DELETE
14c0: 20 46 52 4f 4d 20 27 25 71 27 3b 20 22 0a 20 20   FROM '%q'; ".  
14d0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 27    "INSERT INTO '
14e0: 25 71 27 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  %q' SELECT * FRO
14f0: 4d 20 73 71 6c 69 74 65 5f 78 3b 20 22 0a 20 20  M sqlite_x; ".  
1500: 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 73 71    "DROP TABLE sq
1510: 6c 69 74 65 5f 78 3b 22 2c 0a 20 20 20 20 30 2c  lite_x;",.    0,
1520: 20 30 2c 20 26 7a 45 72 72 2c 20 61 72 67 76 5b   0, &zErr, argv[
1530: 30 5d 2c 20 61 72 67 76 5b 30 5d 2c 20 61 72 67  0], argv[0], arg
1540: 76 5b 30 5d 29 3b 0a 20 20 69 66 28 20 7a 45 72  v[0]);.  if( zEr
1550: 72 20 29 7b 0a 20 20 20 20 69 66 28 20 2a 70 44  r ){.    if( *pD
1560: 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 20 29 20  ata->pzErrMsg ) 
1570: 73 71 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28 2a  sqlite_freemem(*
1580: 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 29  pData->pzErrMsg)
1590: 3b 0a 20 20 20 20 2a 70 44 61 74 61 2d 3e 70 7a  ;.    *pData->pz
15a0: 45 72 72 4d 73 67 20 3d 20 7a 45 72 72 3b 0a 20  ErrMsg = zErr;. 
15b0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 20 65   }..  /* If an e
15c0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 69 6e  rror occurred in
15d0: 20 74 68 65 20 53 51 4c 20 61 62 6f 76 65 2c 20   the SQL above, 
15e0: 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  then the transac
15f0: 74 69 6f 6e 20 77 69 6c 6c 0a 20 20 2a 2a 20 72  tion will.  ** r
1600: 6f 6c 6c 62 61 63 6b 20 77 68 69 63 68 20 77 69  ollback which wi
1610: 6c 6c 20 64 65 6c 65 74 65 20 74 68 65 20 69 6e  ll delete the in
1620: 74 65 72 6e 61 6c 20 73 79 6d 62 6f 6c 20 74 61  ternal symbol ta
1630: 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c  bles.  This will
1640: 0a 20 20 2a 2a 20 63 61 75 73 65 20 74 68 65 20  .  ** cause the 
1650: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 70  structure that p
1660: 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 62 65  Tab points to be
1670: 20 64 65 6c 65 74 65 64 2e 20 20 49 6e 20 63 61   deleted.  In ca
1680: 73 65 20 74 68 61 74 0a 20 20 2a 2a 20 68 61 70  se that.  ** hap
1690: 70 65 6e 65 64 2c 20 77 65 20 6e 65 65 64 20 74  pened, we need t
16a0: 6f 20 72 65 66 65 74 63 68 20 70 54 61 62 2e 0a  o refetch pTab..
16b0: 20 20 2a 2f 0a 20 20 70 54 61 62 20 3d 20 73 71    */.  pTab = sq
16c0: 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 70 44  liteFindTable(pD
16d0: 61 74 61 2d 3e 64 62 2c 20 61 72 67 76 5b 30 5d  ata->db, argv[0]
16e0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 54 61 62  , 0);.  if( pTab
16f0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1700: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 70 54  sqliteStrICmp(pT
1710: 61 62 2d 3e 7a 4e 61 6d 65 2c 20 61 72 67 76 5b  ab->zName, argv[
1720: 30 5d 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 54  0])==0 );.    pT
1730: 61 62 2d 3e 70 54 72 69 67 67 65 72 20 3d 20 70  ab->pTrigger = p
1740: 54 72 69 67 3b 20 20 2f 2a 20 52 65 2d 65 6e 61  Trig;  /* Re-ena
1750: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1760: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 21    }.  return rc!
1770: 3d 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a  =SQLITE_OK;.}...
1780: 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74  ./*.** Attempt t
1790: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
17a0: 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 69  ase schema and i
17b0: 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74 65 72 6e  nitialize intern
17c0: 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  al.** data struc
17d0: 74 75 72 65 73 20 66 6f 72 20 61 20 73 69 6e 67  tures for a sing
17e0: 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  le database file
17f0: 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6f 66 20  .  The index of 
1800: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
1810: 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1820: 20 69 44 62 2e 20 20 69 44 62 3d 3d 30 20 69 73   iDb.  iDb==0 is
1830: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
1840: 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  in.** database. 
1850: 20 69 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20 6e   iDb==1 should n
1860: 65 76 65 72 20 62 65 20 75 73 65 64 2e 20 20 69  ever be used.  i
1870: 44 62 3e 3d 32 20 69 73 20 75 73 65 64 20 66 6f  Db>=2 is used fo
1880: 72 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  r.** auxiliary d
1890: 61 74 61 62 61 73 65 73 2e 20 20 52 65 74 75 72  atabases.  Retur
18a0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  n one of the SQL
18b0: 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65 73  ITE_ error codes
18c0: 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65 20   to.** indicate 
18d0: 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75  success or failu
18e0: 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  re..*/.static in
18f0: 74 20 73 71 6c 69 74 65 49 6e 69 74 4f 6e 65 28  t sqliteInitOne(
1900: 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20  sqlite *db, int 
1910: 69 44 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72  iDb, char **pzEr
1920: 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72 63 3b  rMsg){.  int rc;
1930: 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72  .  BtCursor *cur
1940: 4d 61 69 6e 3b 0a 20 20 69 6e 74 20 73 69 7a 65  Main;.  int size
1950: 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
1960: 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 61  .  char const *a
1970: 7a 41 72 67 5b 36 5d 3b 0a 20 20 63 68 61 72 20  zArg[6];.  char 
1980: 7a 44 62 4e 75 6d 5b 33 30 5d 3b 0a 20 20 69 6e  zDbNum[30];.  in
1990: 74 20 6d 65 74 61 5b 53 51 4c 49 54 45 5f 4e 5f  t meta[SQLITE_N_
19a0: 42 54 52 45 45 5f 4d 45 54 41 5d 3b 0a 20 20 49  BTREE_META];.  I
19b0: 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
19c0: 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ;.  char const *
19d0: 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 3b 0a 20  zMasterSchema;. 
19e0: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4d 61   char const *zMa
19f0: 73 74 65 72 4e 61 6d 65 3b 0a 20 20 63 68 61 72  sterName;.  char
1a00: 20 2a 7a 53 71 6c 20 3d 20 30 3b 0a 0a 20 20 2f   *zSql = 0;..  /
1a10: 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65  *.  ** The maste
1a20: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
1a30: 20 68 61 73 20 61 20 73 74 72 75 63 74 75 72 65   has a structure
1a40: 20 6c 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a   like this.  */.
1a50: 20 20 73 74 61 74 69 63 20 63 68 61 72 20 6d 61    static char ma
1a60: 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20  ster_schema[] = 
1a70: 0a 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41  .     "CREATE TA
1a80: 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  BLE sqlite_maste
1a90: 72 28 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79  r(\n".     "  ty
1aa0: 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  pe text,\n".    
1ab0: 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
1ac0: 22 0a 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61  ".     "  tbl_na
1ad0: 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  me text,\n".    
1ae0: 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74   "  rootpage int
1af0: 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20  eger,\n".     " 
1b00: 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20   sql text\n".   
1b10: 20 20 22 29 22 0a 20 20 3b 0a 20 20 73 74 61 74    ")".  ;.  stat
1b20: 69 63 20 63 68 61 72 20 74 65 6d 70 5f 6d 61 73  ic char temp_mas
1b30: 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a  ter_schema[] = .
1b40: 20 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d       "CREATE TEM
1b50: 50 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 74  P TABLE sqlite_t
1b60: 65 6d 70 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20  emp_master(\n". 
1b70: 20 20 20 20 22 20 20 74 79 70 65 20 74 65 78 74      "  type text
1b80: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 6e 61 6d  ,\n".     "  nam
1b90: 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
1ba0: 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74  "  tbl_name text
1bb0: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 72 6f 6f  ,\n".     "  roo
1bc0: 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e  tpage integer,\n
1bd0: 22 0a 20 20 20 20 20 22 20 20 73 71 6c 20 74 65  ".     "  sql te
1be0: 78 74 5c 6e 22 0a 20 20 20 20 20 22 29 22 0a 20  xt\n".     ")". 
1bf0: 20 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44   ;..  assert( iD
1c00: 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1c10: 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 7a 4d 61  nDb );..  /* zMa
1c20: 73 74 65 72 53 63 68 65 6d 61 20 61 6e 64 20 7a  sterSchema and z
1c30: 49 6e 69 74 53 63 72 69 70 74 20 61 72 65 20 73  InitScript are s
1c40: 65 74 20 74 6f 20 70 6f 69 6e 74 20 61 74 20 74  et to point at t
1c50: 68 65 20 6d 61 73 74 65 72 20 73 63 68 65 6d 61  he master schema
1c60: 0a 20 20 2a 2a 20 61 6e 64 20 69 6e 69 74 69 61  .  ** and initia
1c70: 6c 69 73 61 74 69 6f 6e 20 73 63 72 69 70 74 20  lisation script 
1c80: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1c90: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  the database bei
1ca0: 6e 67 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69  ng.  ** initiali
1cb0: 73 65 64 2e 20 7a 4d 61 73 74 65 72 4e 61 6d 65  sed. zMasterName
1cc0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
1cd0: 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c 65  the master table
1ce0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62  ..  */.  if( iDb
1cf0: 3d 3d 31 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74  ==1 ){.    zMast
1d00: 65 72 53 63 68 65 6d 61 20 3d 20 74 65 6d 70 5f  erSchema = temp_
1d10: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1d20: 20 20 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d     zMasterName =
1d30: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
1d40: 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  E;.  }else{.    
1d50: 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 20 3d 20  zMasterSchema = 
1d60: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1d70: 20 20 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d     zMasterName =
1d80: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20   MASTER_NAME;.  
1d90: 7d 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75 63  }..  /* Construc
1da0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  t the schema tab
1db0: 6c 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  le..  */.  sqlit
1dc0: 65 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a  eSafetyOff(db);.
1dd0: 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74 61    azArg[0] = "ta
1de0: 62 6c 65 22 3b 0a 20 20 61 7a 41 72 67 5b 31 5d  ble";.  azArg[1]
1df0: 20 3d 20 7a 4d 61 73 74 65 72 4e 61 6d 65 3b 0a   = zMasterName;.
1e00: 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 22 32 22    azArg[2] = "2"
1e10: 3b 0a 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20 7a  ;.  azArg[3] = z
1e20: 4d 61 73 74 65 72 53 63 68 65 6d 61 3b 0a 20 20  MasterSchema;.  
1e30: 73 70 72 69 6e 74 66 28 7a 44 62 4e 75 6d 2c 20  sprintf(zDbNum, 
1e40: 22 25 64 22 2c 20 69 44 62 29 3b 0a 20 20 61 7a  "%d", iDb);.  az
1e50: 41 72 67 5b 34 5d 20 3d 20 7a 44 62 4e 75 6d 3b  Arg[4] = zDbNum;
1e60: 0a 20 20 61 7a 41 72 67 5b 35 5d 20 3d 20 30 3b  .  azArg[5] = 0;
1e70: 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d  .  initData.db =
1e80: 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e   db;.  initData.
1e90: 70 7a 45 72 72 4d 73 67 20 3d 20 70 7a 45 72 72  pzErrMsg = pzErr
1ea0: 4d 73 67 3b 0a 20 20 73 71 6c 69 74 65 49 6e 69  Msg;.  sqliteIni
1eb0: 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44  tCallback(&initD
1ec0: 61 74 61 2c 20 35 2c 20 28 63 68 61 72 20 2a 2a  ata, 5, (char **
1ed0: 29 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 70 54  )azArg, 0);.  pT
1ee0: 61 62 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 54  ab = sqliteFindT
1ef0: 61 62 6c 65 28 64 62 2c 20 7a 4d 61 73 74 65 72  able(db, zMaster
1f00: 4e 61 6d 65 2c 20 64 62 2d 3e 61 44 62 5b 69 44  Name, db->aDb[iD
1f10: 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28  b].zName);.  if(
1f20: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 70 54 61   pTab ){.    pTa
1f30: 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b  b->readOnly = 1;
1f40: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
1f50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
1f60: 4d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 53  M;.  }.  sqliteS
1f70: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 0a 20 20  afetyOn(db);..  
1f80: 2f 2a 20 43 72 65 61 74 65 20 61 20 63 75 72 73  /* Create a curs
1f90: 6f 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  or to hold the d
1fa0: 61 74 61 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a  atabase open.  *
1fb0: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  /.  if( db->aDb[
1fc0: 69 44 62 5d 2e 70 42 74 3d 3d 30 20 29 20 72 65  iDb].pBt==0 ) re
1fd0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1fe0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 42 74 72    rc = sqliteBtr
1ff0: 65 65 43 75 72 73 6f 72 28 64 62 2d 3e 61 44 62  eeCursor(db->aDb
2000: 5b 69 44 62 5d 2e 70 42 74 2c 20 32 2c 20 30 2c  [iDb].pBt, 2, 0,
2010: 20 26 63 75 72 4d 61 69 6e 29 3b 0a 20 20 69 66   &curMain);.  if
2020: 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2030: 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  teSetString(pzEr
2040: 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65 72 72  rMsg, sqlite_err
2050: 6f 72 5f 73 74 72 69 6e 67 28 72 63 29 2c 20 28  or_string(rc), (
2060: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
2070: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20  turn rc;.  }..  
2080: 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61 62  /* Get the datab
2090: 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  ase meta informa
20a0: 74 69 6f 6e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d  tion.  */.  rc =
20b0: 20 73 71 6c 69 74 65 42 74 72 65 65 47 65 74 4d   sqliteBtreeGetM
20c0: 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
20d0: 2e 70 42 74 2c 20 6d 65 74 61 29 3b 0a 20 20 69  .pBt, meta);.  i
20e0: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
20f0: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
2100: 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65 72  rrMsg, sqlite_er
2110: 72 6f 72 5f 73 74 72 69 6e 67 28 72 63 29 2c 20  ror_string(rc), 
2120: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 73  (char*)0);.    s
2130: 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65 43  qliteBtreeCloseC
2140: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
2150: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
2160: 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 69 44 62   }.  db->aDb[iDb
2170: 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ].schema_cookie 
2180: 3d 20 6d 65 74 61 5b 31 5d 3b 0a 20 20 69 66 28  = meta[1];.  if(
2190: 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 64   iDb==0 ){.    d
21a0: 62 2d 3e 6e 65 78 74 5f 63 6f 6f 6b 69 65 20 3d  b->next_cookie =
21b0: 20 6d 65 74 61 5b 31 5d 3b 0a 20 20 20 20 64 62   meta[1];.    db
21c0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
21d0: 6d 65 74 61 5b 32 5d 3b 0a 20 20 20 20 73 69 7a  meta[2];.    siz
21e0: 65 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a 20 20 20  e = meta[3];.   
21f0: 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20   if( size==0 ){ 
2200: 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45 53  size = MAX_PAGES
2210: 3b 20 7d 0a 20 20 20 20 64 62 2d 3e 63 61 63 68  ; }.    db->cach
2220: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
2230: 20 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65     db->safety_le
2240: 76 65 6c 20 3d 20 6d 65 74 61 5b 34 5d 3b 0a 20  vel = meta[4];. 
2250: 20 20 20 69 66 28 20 6d 65 74 61 5b 36 5d 3e 30     if( meta[6]>0
2260: 20 26 26 20 6d 65 74 61 5b 36 5d 3c 3d 32 20 26   && meta[6]<=2 &
2270: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
2280: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ==0 ){.      db-
2290: 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 6d 65  >temp_store = me
22a0: 74 61 5b 36 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  ta[6];.    }.   
22b0: 20 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79 5f   if( db->safety_
22c0: 6c 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e 73  level==0 ) db->s
22d0: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32 3b  afety_level = 2;
22e0: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20  ..    /*.    ** 
22f0: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20   file_format==1 
2300: 20 20 20 56 65 72 73 69 6f 6e 20 32 2e 31 2e 30     Version 2.1.0
2310: 2e 0a 20 20 20 20 2a 2a 20 20 66 69 6c 65 5f 66  ..    **  file_f
2320: 6f 72 6d 61 74 3d 3d 32 20 20 20 20 56 65 72 73  ormat==2    Vers
2330: 69 6f 6e 20 32 2e 32 2e 30 2e 20 41 64 64 20 73  ion 2.2.0. Add s
2340: 75 70 70 6f 72 74 20 66 6f 72 20 49 4e 54 45 47  upport for INTEG
2350: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a  ER PRIMARY KEY..
2360: 20 20 20 20 2a 2a 20 20 66 69 6c 65 5f 66 6f 72      **  file_for
2370: 6d 61 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f  mat==3    Versio
2380: 6e 20 32 2e 36 2e 30 2e 20 46 69 78 20 65 6d 70  n 2.6.0. Fix emp
2390: 74 79 2d 73 74 72 69 6e 67 20 69 6e 64 65 78 20  ty-string index 
23a0: 62 75 67 2e 0a 20 20 20 20 2a 2a 20 20 66 69 6c  bug..    **  fil
23b0: 65 5f 66 6f 72 6d 61 74 3d 3d 34 20 20 20 20 56  e_format==4    V
23c0: 65 72 73 69 6f 6e 20 32 2e 37 2e 30 2e 20 41 64  ersion 2.7.0. Ad
23d0: 64 20 73 75 70 70 6f 72 74 20 66 6f 72 20 73 65  d support for se
23e0: 70 61 72 61 74 65 20 6e 75 6d 65 72 69 63 20 61  parate numeric a
23f0: 6e 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  nd.    **       
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78               tex
2410: 74 20 64 61 74 61 74 79 70 65 73 2e 0a 20 20 20  t datatypes..   
2420: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
2430: 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29  file_format==0 )
2440: 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
2450: 68 61 70 70 65 6e 73 20 69 66 20 74 68 65 20 64  happens if the d
2460: 61 74 61 62 61 73 65 20 77 61 73 20 69 6e 69 74  atabase was init
2470: 69 61 6c 6c 79 20 65 6d 70 74 79 20 2a 2f 0a 20  ially empty */. 
2480: 20 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f       db->file_fo
2490: 72 6d 61 74 20 3d 20 34 3b 0a 20 20 20 20 7d 65  rmat = 4;.    }e
24a0: 6c 73 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65  lse if( db->file
24b0: 5f 66 6f 72 6d 61 74 3e 34 20 29 7b 0a 20 20 20  _format>4 ){.   
24c0: 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 43 6c     sqliteBtreeCl
24d0: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
24e0: 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
24f0: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
2500: 73 67 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  sg, "unsupported
2510: 20 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28   file format", (
2520: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20  char*)0);.      
2530: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
2540: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ROR;.    }.  }el
2550: 73 65 20 69 66 28 20 69 44 62 21 3d 31 20 26 26  se if( iDb!=1 &&
2560: 20 28 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61   (db->file_forma
2570: 74 21 3d 6d 65 74 61 5b 32 5d 20 7c 7c 20 64 62  t!=meta[2] || db
2580: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c 34 29  ->file_format<4)
2590: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
25a0: 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3e  db->file_format>
25b0: 3d 34 20 29 3b 0a 20 20 20 20 69 66 28 20 6d 65  =4 );.    if( me
25c0: 74 61 5b 32 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  ta[2]==0 ){.    
25d0: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
25e0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 63 61 6e  g(pzErrMsg, "can
25f0: 6e 6f 74 20 61 74 74 61 63 68 20 65 6d 70 74 79  not attach empty
2600: 20 64 61 74 61 62 61 73 65 3a 20 22 2c 0a 20 20   database: ",.  
2610: 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
2620: 44 62 5d 2e 7a 4e 61 6d 65 2c 20 28 63 68 61 72  Db].zName, (char
2630: 2a 29 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  *)0);.    }else{
2640: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74  .      sqliteSet
2650: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
2660: 20 22 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66   "incompatible f
2670: 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 61 75  ile format in au
2680: 78 69 6c 69 61 72 79 20 22 0a 20 20 20 20 20 20  xiliary ".      
2690: 20 20 20 22 64 61 74 61 62 61 73 65 3a 20 22 2c     "database: ",
26a0: 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
26b0: 61 6d 65 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  ame, (char*)0);.
26c0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
26d0: 42 74 72 65 65 43 6c 6f 73 65 28 64 62 2d 3e 61  BtreeClose(db->a
26e0: 44 62 5b 69 44 62 5d 2e 70 42 74 29 3b 0a 20 20  Db[iDb].pBt);.  
26f0: 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70    db->aDb[iDb].p
2700: 42 74 20 3d 20 30 3b 0a 20 20 20 20 72 65 74 75  Bt = 0;.    retu
2710: 72 6e 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  rn SQLITE_FORMAT
2720: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 42 74  ;.  }.  sqliteBt
2730: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
2740: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
2750: 2c 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65  , db->cache_size
2760: 29 3b 0a 20 20 73 71 6c 69 74 65 42 74 72 65 65  );.  sqliteBtree
2770: 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 64  SetSafetyLevel(d
2780: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
2790: 20 6d 65 74 61 5b 34 5d 3d 3d 30 20 3f 20 32 20   meta[4]==0 ? 2 
27a0: 3a 20 6d 65 74 61 5b 34 5d 29 3b 0a 0a 20 20 2f  : meta[4]);..  /
27b0: 2a 20 52 65 61 64 20 74 68 65 20 73 63 68 65 6d  * Read the schem
27c0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75  a information ou
27d0: 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  t of the schema 
27e0: 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20 61 73  tables.  */.  as
27f0: 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
2800: 75 73 79 20 29 3b 0a 20 20 73 71 6c 69 74 65 53  usy );.  sqliteS
2810: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 0a 20  afetyOff(db);.. 
2820: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
2830: 67 20 53 51 4c 20 77 69 6c 6c 20 72 65 61 64 20  g SQL will read 
2840: 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
2850: 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c 65  the master table
2860: 73 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  s..  ** The firs
2870: 74 20 76 65 72 73 69 6f 6e 20 77 6f 72 6b 73 20  t version works 
2880: 77 69 74 68 20 53 51 4c 69 74 65 20 66 69 6c 65  with SQLite file
2890: 20 66 6f 72 6d 61 74 73 20 32 20 6f 72 20 67 72   formats 2 or gr
28a0: 65 61 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20  eater..  ** The 
28b0: 73 65 63 6f 6e 64 20 76 65 72 73 69 6f 6e 20 69  second version i
28c0: 73 20 66 6f 72 20 66 6f 72 6d 61 74 20 31 20 66  s for format 1 f
28d0: 69 6c 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  iles..  **.  ** 
28e0: 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 66  Beginning with f
28f0: 69 6c 65 20 66 6f 72 6d 61 74 20 32 2c 20 74 68  ile format 2, th
2900: 65 20 72 6f 77 69 64 20 66 6f 72 20 6e 65 77 20  e rowid for new 
2910: 74 61 62 6c 65 20 65 6e 74 72 69 65 73 0a 20 20  table entries.  
2920: 2a 2a 20 28 69 6e 63 6c 75 64 69 6e 67 20 65 6e  ** (including en
2930: 74 72 69 65 73 20 69 6e 20 73 71 6c 69 74 65 5f  tries in sqlite_
2940: 6d 61 73 74 65 72 29 20 69 73 20 61 6e 20 69 6e  master) is an in
2950: 63 72 65 61 73 69 6e 67 20 69 6e 74 65 67 65 72  creasing integer
2960: 2e 0a 20 20 2a 2a 20 53 6f 20 66 6f 72 20 66 69  ..  ** So for fi
2970: 6c 65 20 66 6f 72 6d 61 74 20 32 20 61 6e 64 20  le format 2 and 
2980: 6c 61 74 65 72 2c 20 77 65 20 63 61 6e 20 70 6c  later, we can pl
2990: 61 79 20 62 61 63 6b 20 73 71 6c 69 74 65 5f 6d  ay back sqlite_m
29a0: 61 73 74 65 72 0a 20 20 2a 2a 20 61 6e 64 20 61  aster.  ** and a
29b0: 6c 6c 20 74 68 65 20 43 52 45 41 54 45 20 73 74  ll the CREATE st
29c0: 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 61 70  atements will ap
29d0: 70 65 61 72 20 69 6e 20 74 68 65 20 72 69 67 68  pear in the righ
29e0: 74 20 6f 72 64 65 72 2e 0a 20 20 2a 2a 20 42 75  t order..  ** Bu
29f0: 74 20 77 69 74 68 20 66 69 6c 65 20 66 6f 72 6d  t with file form
2a00: 61 74 20 31 2c 20 74 61 62 6c 65 20 65 6e 74 72  at 1, table entr
2a10: 69 65 73 20 77 65 72 65 20 72 61 6e 64 6f 6d 20  ies were random 
2a20: 61 6e 64 20 73 6f 20 77 65 0a 20 20 2a 2a 20 68  and so we.  ** h
2a30: 61 76 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  ave to make sure
2a40: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
2a50: 45 73 20 6f 63 63 75 72 20 62 65 66 6f 72 65 20  Es occur before 
2a60: 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e 64  their correspond
2a70: 69 6e 67 0a 20 20 2a 2a 20 43 52 45 41 54 45 20  ing.  ** CREATE 
2a80: 49 4e 44 45 58 73 2e 20 20 28 57 65 20 64 6f 6e  INDEXs.  (We don
2a90: 27 74 20 68 61 76 65 20 74 6f 20 64 65 61 6c 20  't have to deal 
2aa0: 77 69 74 68 20 43 52 45 41 54 45 20 56 49 45 57  with CREATE VIEW
2ab0: 20 6f 72 0a 20 20 2a 2a 20 43 52 45 41 54 45 20   or.  ** CREATE 
2ac0: 54 52 49 47 47 45 52 20 69 6e 20 66 69 6c 65 20  TRIGGER in file 
2ad0: 66 6f 72 6d 61 74 20 31 20 62 65 63 61 75 73 65  format 1 because
2ae0: 20 74 68 6f 73 65 20 63 6f 6e 73 74 72 75 63 74   those construct
2af0: 73 20 64 69 64 0a 20 20 2a 2a 20 6e 6f 74 20 65  s did.  ** not e
2b00: 78 69 73 74 20 74 68 65 6e 2e 29 20 0a 20 20 2a  xist then.) .  *
2b10: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 66 69 6c 65  /.  if( db->file
2b20: 5f 66 6f 72 6d 61 74 3e 3d 32 20 29 7b 0a 20 20  _format>=2 ){.  
2b30: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
2b40: 67 28 26 7a 53 71 6c 2c 20 0a 20 20 20 20 20 20  g(&zSql, .      
2b50: 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20    "SELECT type, 
2b60: 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
2b70: 73 71 6c 2c 20 22 2c 20 7a 44 62 4e 75 6d 2c 20  sql, ", zDbNum, 
2b80: 22 20 46 52 4f 4d 20 5c 22 22 2c 0a 20 20 20 20  " FROM \"",.    
2b90: 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2ba0: 7a 4e 61 6d 65 2c 20 22 5c 22 2e 22 2c 20 7a 4d  zName, "\".", zM
2bb0: 61 73 74 65 72 4e 61 6d 65 2c 20 28 63 68 61 72  asterName, (char
2bc0: 2a 29 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  *)0);.  }else{. 
2bd0: 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69     sqliteSetStri
2be0: 6e 67 28 26 7a 53 71 6c 2c 20 0a 20 20 20 20 20  ng(&zSql, .     
2bf0: 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c     "SELECT type,
2c00: 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2c10: 20 73 71 6c 2c 20 22 2c 20 7a 44 62 4e 75 6d 2c   sql, ", zDbNum,
2c20: 20 22 20 46 52 4f 4d 20 5c 22 22 2c 0a 20 20 20   " FROM \"",.   
2c30: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
2c40: 2e 7a 4e 61 6d 65 2c 20 22 5c 22 2e 22 2c 20 7a  .zName, "\".", z
2c50: 4d 61 73 74 65 72 4e 61 6d 65 2c 20 0a 20 20 20  MasterName, .   
2c60: 20 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65      " WHERE type
2c70: 20 49 4e 20 28 27 74 61 62 6c 65 27 2c 20 27 69   IN ('table', 'i
2c80: 6e 64 65 78 27 29 22 0a 20 20 20 20 20 20 20 22  ndex')".       "
2c90: 20 4f 52 44 45 52 20 42 59 20 43 41 53 45 20 74   ORDER BY CASE t
2ca0: 79 70 65 20 57 48 45 4e 20 27 74 61 62 6c 65 27  ype WHEN 'table'
2cb0: 20 54 48 45 4e 20 30 20 45 4c 53 45 20 31 20 45   THEN 0 ELSE 1 E
2cc0: 4e 44 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  ND", (char*)0);.
2cd0: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2ce0: 65 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  e_exec(db, zSql,
2cf0: 20 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62   sqliteInitCallb
2d00: 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
2d10: 30 29 3b 0a 0a 20 20 73 71 6c 69 74 65 46 72 65  0);..  sqliteFre
2d20: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74  e(zSql);.  sqlit
2d30: 65 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20  eSafetyOn(db);. 
2d40: 20 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73   sqliteBtreeClos
2d50: 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29  eCursor(curMain)
2d60: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 5f 6d  ;.  if( sqlite_m
2d70: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
2d80: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
2d90: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f  ing(pzErrMsg, "o
2da0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28  ut of memory", (
2db0: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 63  char*)0);.    rc
2dc0: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2dd0: 0a 20 20 20 20 73 71 6c 69 74 65 52 65 73 65 74  .    sqliteReset
2de0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
2df0: 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  b, 0);.  }.  if(
2e00: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2e10: 7b 0a 20 20 20 20 44 62 53 65 74 50 72 6f 70 65  {.    DbSetPrope
2e20: 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2e30: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20  SchemaLoaded);. 
2e40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2e50: 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  teResetInternalS
2e60: 63 68 65 6d 61 28 64 62 2c 20 69 44 62 29 3b 0a  chema(db, iDb);.
2e70: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
2e80: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
2e90: 6c 69 7a 65 20 61 6c 6c 20 64 61 74 61 62 61 73  lize all databas
2ea0: 65 20 66 69 6c 65 73 20 2d 20 74 68 65 20 6d 61  e files - the ma
2eb0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2ec0: 2c 20 74 68 65 20 66 69 6c 65 0a 2a 2a 20 75 73  , the file.** us
2ed0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
2ee0: 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
2ef0: 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c  d any additional
2f00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 0a   database files.
2f10: 2a 2a 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ** created using
2f20: 20 41 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e   ATTACH statemen
2f30: 74 73 2e 20 20 52 65 74 75 72 6e 20 61 20 73 75  ts.  Return a su
2f40: 63 63 65 73 73 20 63 6f 64 65 2e 20 20 49 66 20  ccess code.  If 
2f50: 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75  an.** error occu
2f60: 72 73 2c 20 77 72 69 74 65 20 61 6e 20 65 72 72  rs, write an err
2f70: 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20  or message into 
2f80: 2a 70 7a 45 72 72 4d 73 67 2e 0a 2a 2a 0a 2a 2a  *pzErrMsg..**.**
2f90: 20 41 66 74 65 72 20 74 68 65 20 64 61 74 61 62   After the datab
2fa0: 61 73 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  ase is initializ
2fb0: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49  ed, the SQLITE_I
2fc0: 6e 69 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69  nitialized.** bi
2fd0: 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  t is set in the 
2fe0: 66 6c 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74  flags field of t
2ff0: 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74  he sqlite struct
3000: 75 72 65 2e 20 20 41 6e 0a 2a 2a 20 61 74 74 65  ure.  An.** atte
3010: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
3020: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 64 61  nitialize the da
3030: 74 61 62 61 73 65 20 61 73 20 73 6f 6f 6e 20 61  tabase as soon a
3040: 73 20 69 74 0a 2a 2a 20 69 73 20 6f 70 65 6e 65  s it.** is opene
3050: 64 2e 20 20 49 66 20 74 68 61 74 20 66 61 69 6c  d.  If that fail
3060: 73 20 28 70 65 72 68 61 70 73 20 62 65 63 61 75  s (perhaps becau
3070: 73 65 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  se another proce
3080: 73 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 73 71  ss.** has the sq
3090: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
30a0: 65 20 6c 6f 63 6b 65 64 29 20 74 68 61 6e 20 61  e locked) than a
30b0: 6e 6f 74 68 65 72 20 61 74 74 65 6d 70 74 0a 2a  nother attempt.*
30c0: 2a 20 69 73 20 6d 61 64 65 20 74 68 65 20 66 69  * is made the fi
30d0: 72 73 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  rst time the dat
30e0: 61 62 61 73 65 20 69 73 20 61 63 63 65 73 73 65  abase is accesse
30f0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
3100: 49 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c  Init(sqlite *db,
3110: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
3120: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a  ){.  int i, rc;.
3130: 20 20 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69    .  if( db->ini
3140: 74 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e 20  t.busy ) return 
3150: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73  SQLITE_OK;.  ass
3160: 65 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20  ert( (db->flags 
3170: 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  & SQLITE_Initial
3180: 69 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63  ized)==0 );.  rc
3190: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
31a0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
31b0: 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63  1;.  for(i=0; rc
31c0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
31d0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
31e0: 20 20 20 20 69 66 28 20 44 62 48 61 73 50 72 6f      if( DbHasPro
31f0: 70 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f  perty(db, i, DB_
3200: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c  SchemaLoaded) ||
3210: 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65   i==1 ) continue
3220: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
3230: 65 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20  eInitOne(db, i, 
3240: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
3250: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73  f( rc ){.      s
3260: 71 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e  qliteResetIntern
3270: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29 3b  alSchema(db, i);
3280: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
3290: 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f 74   Once all the ot
32a0: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68 61  her databases ha
32b0: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
32c0: 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73 63  sed, load the sc
32d0: 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74 68  hema.  ** for th
32e0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2e  e TEMP database.
32f0: 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64 20   This is loaded 
3300: 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45 4d  last, as the TEM
3310: 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  P database.  ** 
3320: 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74 61  schema may conta
3330: 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  in references to
3340: 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68 65   objects in othe
3350: 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20 2a  r databases..  *
3360: 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
3370: 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 6e 44 62  TE_OK && db->nDb
3380: 3e 31 20 26 26 20 21 44 62 48 61 73 50 72 6f 70  >1 && !DbHasProp
3390: 65 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f 53  erty(db, 1, DB_S
33a0: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a  chemaLoaded) ){.
33b0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 49      rc = sqliteI
33c0: 6e 69 74 4f 6e 65 28 64 62 2c 20 31 2c 20 70 7a  nitOne(db, 1, pz
33d0: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28  ErrMsg);.    if(
33e0: 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c   rc ){.      sql
33f0: 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  iteResetInternal
3400: 53 63 68 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20  Schema(db, 1);. 
3410: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e     }.  }..  db->
3420: 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
3430: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
3440: 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66 6c  OK ){.    db->fl
3450: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
3460: 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20 20 73  itialized;.    s
3470: 71 6c 69 74 65 43 6f 6d 6d 69 74 49 6e 74 65 72  qliteCommitInter
3480: 6e 61 6c 43 68 61 6e 67 65 73 28 64 62 29 3b 0a  nalChanges(db);.
3490: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
34a0: 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 20   database is in 
34b0: 66 6f 72 6d 61 74 73 20 31 20 6f 72 20 32 2c 20  formats 1 or 2, 
34c0: 74 68 65 6e 20 75 70 67 72 61 64 65 20 69 74 20  then upgrade it 
34d0: 74 6f 0a 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20  to.  ** version 
34e0: 33 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 72 65  3.  This will re
34f0: 63 6f 6e 73 74 72 75 63 74 20 61 6c 6c 20 69 6e  construct all in
3500: 64 69 63 65 73 2e 20 20 49 66 20 74 68 65 0a 20  dices.  If the. 
3510: 20 2a 2a 20 75 70 67 72 61 64 65 20 66 61 69 6c   ** upgrade fail
3520: 73 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e  s for any reason
3530: 20 28 65 78 3a 20 6f 75 74 20 6f 66 20 64 69 73   (ex: out of dis
3540: 6b 20 73 70 61 63 65 2c 20 64 61 74 61 62 61 73  k space, databas
3550: 65 0a 20 20 2a 2a 20 69 73 20 72 65 61 64 20 6f  e.  ** is read o
3560: 6e 6c 79 2c 20 69 6e 74 65 72 72 75 70 74 20 72  nly, interrupt r
3570: 65 63 65 69 76 65 64 2c 20 65 74 63 2e 29 20 74  eceived, etc.) t
3580: 68 65 6e 20 66 61 69 6c 20 74 68 65 20 69 6e 69  hen fail the ini
3590: 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63  t..  */.  if( rc
35a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
35b0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c 33  b->file_format<3
35c0: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45   ){.    char *zE
35d0: 72 72 20 3d 20 30 3b 0a 20 20 20 20 49 6e 69 74  rr = 0;.    Init
35e0: 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 20  Data initData;. 
35f0: 20 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c 49     int meta[SQLI
3600: 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 5d  TE_N_BTREE_META]
3610: 3b 0a 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ;..    db->magic
3620: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
3630: 4f 50 45 4e 3b 0a 20 20 20 20 69 6e 69 74 44 61  OPEN;.    initDa
3640: 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
3650: 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
3660: 67 20 3d 20 26 7a 45 72 72 3b 0a 20 20 20 20 64  g = &zErr;.    d
3670: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
3680: 20 33 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   3;.    rc = sql
3690: 69 74 65 5f 65 78 65 63 28 64 62 2c 0a 20 20 20  ite_exec(db,.   
36a0: 20 20 20 22 42 45 47 49 4e 3b 20 53 45 4c 45 43     "BEGIN; SELEC
36b0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
36c0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
36d0: 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 22 2c 0a  type='table';",.
36e0: 20 20 20 20 20 20 75 70 67 72 61 64 65 5f 33 5f        upgrade_3_
36f0: 63 61 6c 6c 62 61 63 6b 2c 0a 20 20 20 20 20 20  callback,.      
3700: 26 69 6e 69 74 44 61 74 61 2c 0a 20 20 20 20 20  &initData,.     
3710: 20 26 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28   &zErr);.    if(
3720: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
3730: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74  {.      sqliteBt
3740: 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
3750: 44 62 5b 30 5d 2e 70 42 74 2c 20 6d 65 74 61 29  Db[0].pBt, meta)
3760: 3b 0a 20 20 20 20 20 20 6d 65 74 61 5b 32 5d 20  ;.      meta[2] 
3770: 3d 20 34 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 4;.      sqlit
3780: 65 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  eBtreeUpdateMeta
3790: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c  (db->aDb[0].pBt,
37a0: 20 6d 65 74 61 29 3b 0a 20 20 20 20 20 20 73 71   meta);.      sq
37b0: 6c 69 74 65 5f 65 78 65 63 28 64 62 2c 20 22 43  lite_exec(db, "C
37c0: 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29  OMMIT", 0, 0, 0)
37d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
37e0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
37f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74  .      sqliteSet
3800: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
3810: 20 0a 20 20 20 20 20 20 20 20 22 75 6e 61 62 6c   .        "unabl
3820: 65 20 74 6f 20 75 70 67 72 61 64 65 20 64 61 74  e to upgrade dat
3830: 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 65 72  abase to the ver
3840: 73 69 6f 6e 20 32 2e 36 20 66 6f 72 6d 61 74 22  sion 2.6 format"
3850: 2c 0a 20 20 20 20 20 20 20 20 7a 45 72 72 20 3f  ,.        zErr ?
3860: 20 22 3a 20 22 20 3a 20 30 2c 20 7a 45 72 72 2c   ": " : 0, zErr,
3870: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
3880: 7d 0a 20 20 20 20 73 71 6c 69 74 65 5f 66 72 65  }.    sqlite_fre
3890: 65 6d 65 6d 28 7a 45 72 72 29 3b 0a 20 20 7d 0a  emem(zErr);.  }.
38a0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
38b0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e  E_OK ){.    db->
38c0: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
38d0: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20  _Initialized;.  
38e0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
38f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73  ../*.** The vers
3900: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
3910: 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  ry.*/.const char
3920: 20 72 63 73 69 64 5b 5d 20 3d 20 22 40 28 23 29   rcsid[] = "@(#)
3930: 20 5c 30 34 34 49 64 3a 20 53 51 4c 69 74 65 20   \044Id: SQLite 
3940: 76 65 72 73 69 6f 6e 20 22 20 53 51 4c 49 54 45  version " SQLITE
3950: 5f 56 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a 63  _VERSION " $";.c
3960: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
3970: 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c  _version[] = SQL
3980: 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a  ITE_VERSION;../*
3990: 0a 2a 2a 20 44 6f 65 73 20 74 68 65 20 6c 69 62  .** Does the lib
39a0: 72 61 72 79 20 65 78 70 65 63 74 20 64 61 74 61  rary expect data
39b0: 20 74 6f 20 62 65 20 65 6e 63 6f 64 65 64 20 61   to be encoded a
39c0: 73 20 55 54 46 2d 38 20 6f 72 20 69 73 6f 38 38  s UTF-8 or iso88
39d0: 35 39 3f 20 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c  59?  The.** foll
39e0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  owing global con
39f0: 73 74 61 6e 74 20 61 6c 77 61 79 73 20 6c 65 74  stant always let
3a00: 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69  s us know..*/.#i
3a10: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38  fdef SQLITE_UTF8
3a20: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
3a30: 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20  te_encoding[] = 
3a40: 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73 65 0a 63  "UTF-8";.#else.c
3a50: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
3a60: 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20 22 69  _encoding[] = "i
3a70: 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64 69 66 0a  so8859";.#endif.
3a80: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
3a90: 77 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  w SQLite databas
3aa0: 65 2e 20 20 43 6f 6e 73 74 72 75 63 74 20 61 6e  e.  Construct an
3ab0: 20 22 73 71 6c 69 74 65 22 20 73 74 72 75 63 74   "sqlite" struct
3ac0: 75 72 65 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a  ure to define.**
3ad0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
3ae0: 69 73 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  is database and 
3af0: 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
3b00: 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74 75   to that structu
3b10: 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 74 74  re..**.** An att
3b20: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
3b30: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
3b40: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 20 73 74  n-memory data st
3b50: 72 75 63 74 75 72 65 73 20 74 68 61 74 0a 2a 2a  ructures that.**
3b60: 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61   hold the databa
3b70: 73 65 20 73 63 68 65 6d 61 2e 20 20 42 75 74 20  se schema.  But 
3b80: 69 66 20 74 68 69 73 20 66 61 69 6c 73 20 28 62  if this fails (b
3b90: 65 63 61 75 73 65 20 74 68 65 20 73 63 68 65 6d  ecause the schem
3ba0: 61 20 66 69 6c 65 0a 2a 2a 20 69 73 20 6c 6f 63  a file.** is loc
3bb0: 6b 65 64 29 20 74 68 65 6e 20 74 68 61 74 20 73  ked) then that s
3bc0: 74 65 70 20 69 73 20 64 65 66 65 72 72 65 64 20  tep is deferred 
3bd0: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
3be0: 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  call to.** sqlit
3bf0: 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 73 71 6c  e_exec()..*/.sql
3c00: 69 74 65 20 2a 73 71 6c 69 74 65 5f 6f 70 65 6e  ite *sqlite_open
3c10: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69  (const char *zFi
3c20: 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 6d 6f 64 65  lename, int mode
3c30: 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73  , char **pzErrMs
3c40: 67 29 7b 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  g){.  sqlite *db
3c50: 3b 0a 20 20 69 6e 74 20 72 63 2c 20 69 3b 0a 0a  ;.  int rc, i;..
3c60: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68    /* Allocate th
3c70: 65 20 73 71 6c 69 74 65 20 64 61 74 61 20 73 74  e sqlite data st
3c80: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20  ructure */.  db 
3c90: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20  = sqliteMalloc( 
3ca0: 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 29 20 29  sizeof(sqlite) )
3cb0: 3b 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67  ;.  if( pzErrMsg
3cc0: 20 29 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30   ) *pzErrMsg = 0
3cd0: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20  ;.  if( db==0 ) 
3ce0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f  goto no_mem_on_o
3cf0: 70 65 6e 3b 0a 20 20 64 62 2d 3e 6f 6e 45 72 72  pen;.  db->onErr
3d00: 6f 72 20 3d 20 4f 45 5f 44 65 66 61 75 6c 74 3b  or = OE_Default;
3d10: 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52  .  db->priorNewR
3d20: 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  owid = 0;.  db->
3d30: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
3d40: 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d  AGIC_BUSY;.  db-
3d50: 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e  >nDb = 2;.  db->
3d60: 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74 61  aDb = db->aDbSta
3d70: 74 69 63 3b 0a 20 20 2f 2a 20 64 62 2d 3e 66 6c  tic;.  /* db->fl
3d80: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68  ags |= SQLITE_Sh
3d90: 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 20 2a 2f 0a  ortColNames; */.
3da0: 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e 69 74    sqliteHashInit
3db0: 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c  (&db->aFunc, SQL
3dc0: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
3dd0: 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20   1);.  for(i=0; 
3de0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
3df0: 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68 49  .    sqliteHashI
3e00: 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  nit(&db->aDb[i].
3e10: 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  tblHash, SQLITE_
3e20: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
3e30: 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68 49  .    sqliteHashI
3e40: 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  nit(&db->aDb[i].
3e50: 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  idxHash, SQLITE_
3e60: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
3e70: 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68 49  .    sqliteHashI
3e80: 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  nit(&db->aDb[i].
3e90: 74 72 69 67 48 61 73 68 2c 20 53 51 4c 49 54 45  trigHash, SQLITE
3ea0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
3eb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68  ;.    sqliteHash
3ec0: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
3ed0: 2e 61 46 4b 65 79 2c 20 53 51 4c 49 54 45 5f 48  .aFKey, SQLITE_H
3ee0: 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a  ASH_STRING, 1);.
3ef0: 20 20 7d 0a 20 20 0a 20 20 2f 2a 20 4f 70 65 6e    }.  .  /* Open
3f00: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74   the backend dat
3f10: 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a  abase driver */.
3f20: 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 5b    if( zFilename[
3f30: 30 5d 3d 3d 27 3a 27 20 26 26 20 73 74 72 63 6d  0]==':' && strcm
3f40: 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a 6d 65  p(zFilename,":me
3f50: 6d 6f 72 79 3a 22 29 3d 3d 30 20 29 7b 0a 20 20  mory:")==0 ){.  
3f60: 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65    db->temp_store
3f70: 20 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 63 20 3d   = 2;.  }.  rc =
3f80: 20 73 71 6c 69 74 65 42 74 72 65 65 46 61 63 74   sqliteBtreeFact
3f90: 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61 6d  ory(db, zFilenam
3fa0: 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c  e, 0, MAX_PAGES,
3fb0: 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74   &db->aDb[0].pBt
3fc0: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
3fd0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 77  ITE_OK ){.    sw
3fe0: 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
3ff0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
4000: 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74       sqliteSetSt
4010: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
4020: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
4030: 61 74 61 62 61 73 65 3a 20 22 2c 0a 20 20 20 20  atabase: ",.    
4040: 20 20 20 20 20 20 20 7a 46 69 6c 65 6e 61 6d 65         zFilename
4050: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
4060: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
4070: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20  qliteFree(db);. 
4080: 20 20 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c     sqliteStrReal
4090: 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20  loc(pzErrMsg);. 
40a0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
40b0: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e  .  db->aDb[0].zN
40c0: 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20  ame = "main";.  
40d0: 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65  db->aDb[1].zName
40e0: 20 3d 20 22 74 65 6d 70 22 3b 0a 0a 20 20 2f 2a   = "temp";..  /*
40f0: 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64   Attempt to read
4100: 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20   the schema */. 
4110: 20 73 71 6c 69 74 65 52 65 67 69 73 74 65 72 42   sqliteRegisterB
4120: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
4130: 64 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  db);.  rc = sqli
4140: 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45 72 72  teInit(db, pzErr
4150: 4d 73 67 29 3b 0a 20 20 64 62 2d 3e 6d 61 67 69  Msg);.  db->magi
4160: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
4170: 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20 73 71 6c  _OPEN;.  if( sql
4180: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  ite_malloc_faile
4190: 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f  d ){.    sqlite_
41a0: 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 67  close(db);.    g
41b0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70  oto no_mem_on_op
41c0: 65 6e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  en;.  }else if( 
41d0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc!=SQLITE_OK &&
41e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc!=SQLITE_BUSY
41f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 63   ){.    sqlite_c
4200: 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 73 71  lose(db);.    sq
4210: 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70  liteStrRealloc(p
4220: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 72 65  zErrMsg);.    re
4230: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
4240: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a  if( pzErrMsg ){.
4250: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a      sqliteFree(*
4260: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a  pzErrMsg);.    *
4270: 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  pzErrMsg = 0;.  
4280: 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 61  }..  /* Return a
4290: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
42a0: 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74  newly opened dat
42b0: 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
42c0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 64 62 3b 0a  */.  return db;.
42d0: 0a 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a  .no_mem_on_open:
42e0: 0a 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69  .  sqliteSetStri
42f0: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75  ng(pzErrMsg, "ou
4300: 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63  t of memory", (c
4310: 68 61 72 2a 29 30 29 3b 0a 20 20 73 71 6c 69 74  har*)0);.  sqlit
4320: 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72  eStrRealloc(pzEr
4330: 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20  rMsg);.  return 
4340: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  0;.}../*.** Retu
4350: 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20  rn the ROWID of 
4360: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
4370: 69 6e 73 65 72 74 0a 2a 2f 0a 69 6e 74 20 73 71  insert.*/.int sq
4380: 6c 69 74 65 5f 6c 61 73 74 5f 69 6e 73 65 72 74  lite_last_insert
4390: 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 20 2a 64  _rowid(sqlite *d
43a0: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
43b0: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f  >lastRowid;.}../
43c0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
43d0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
43e0: 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s in the most re
43f0: 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c  cent call to sql
4400: 69 74 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69  ite_exec()..*/.i
4410: 6e 74 20 73 71 6c 69 74 65 5f 63 68 61 6e 67 65  nt sqlite_change
4420: 73 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20  s(sqlite *db){. 
4430: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61   return db->nCha
4440: 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  nge;.}../*.** Re
4450: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
4460: 6f 66 20 63 68 61 6e 67 65 73 20 70 72 6f 64 75  of changes produ
4470: 63 65 64 20 62 79 20 74 68 65 20 6c 61 73 74 20  ced by the last 
4480: 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
4490: 6f 72 0a 2a 2a 20 44 45 4c 45 54 45 20 73 74 61  or.** DELETE sta
44a0: 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6d 70 6c 65  tement to comple
44b0: 74 65 20 65 78 65 63 75 74 69 6f 6e 2e 20 54 68  te execution. Th
44c0: 65 20 63 6f 75 6e 74 20 64 6f 65 73 20 6e 6f 74  e count does not
44d0: 20 69 6e 63 6c 75 64 65 0a 2a 2a 20 63 68 61 6e   include.** chan
44e0: 67 65 73 20 64 75 65 20 74 6f 20 53 51 4c 20 73  ges due to SQL s
44f0: 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74  tatements execut
4500: 65 64 20 69 6e 20 74 72 69 67 67 65 72 20 70 72  ed in trigger pr
4510: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 65 72 65  ograms that were
4520: 0a 2a 2a 20 74 72 69 67 67 65 72 65 64 20 62 79  .** triggered by
4530: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 0a   that statement.
4540: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 6c 61  */.int sqlite_la
4550: 73 74 5f 73 74 61 74 65 6d 65 6e 74 5f 63 68 61  st_statement_cha
4560: 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29  nges(sqlite *db)
4570: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c  {.  return db->l
4580: 73 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  sChange;.}../*.*
4590: 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74  * Close an exist
45a0: 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62  ing SQLite datab
45b0: 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ase.*/.void sqli
45c0: 74 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20  te_close(sqlite 
45d0: 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d  *db){.  HashElem
45e0: 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20   *i;.  int j;.  
45f0: 64 62 2d 3e 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73  db->want_to_clos
4600: 65 20 3d 20 31 3b 0a 20 20 69 66 28 20 73 71 6c  e = 1;.  if( sql
4610: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
4620: 62 29 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65  b) || sqliteSafe
4630: 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20  tyOn(db) ){.    
4640: 2f 2a 20 70 72 69 6e 74 66 28 22 44 49 44 20 4e  /* printf("DID N
4650: 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66  OT CLOSE\n"); ff
4660: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f  lush(stdout); */
4670: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
4680: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
4690: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
46a0: 45 44 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  ED;.  for(j=0; j
46b0: 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a  <db->nDb; j++){.
46c0: 20 20 20 20 73 74 72 75 63 74 20 44 62 20 2a 70      struct Db *p
46d0: 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a 5d  Db = &db->aDb[j]
46e0: 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
46f0: 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  Bt ){.      sqli
4700: 74 65 42 74 72 65 65 43 6c 6f 73 65 28 70 44 62  teBtreeClose(pDb
4710: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 70 44  ->pBt);.      pD
4720: 62 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20  b->pBt = 0;.    
4730: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 52 65  }.  }.  sqliteRe
4740: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
4750: 61 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65  a(db, 0);.  asse
4760: 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29  rt( db->nDb<=2 )
4770: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
4780: 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74  aDb==db->aDbStat
4790: 69 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71  ic );.  for(i=sq
47a0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
47b0: 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d  b->aFunc); i; i=
47c0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
47d0: 29 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  )){.    FuncDef 
47e0: 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a  *pFunc, *pNext;.
47f0: 20 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20      for(pFunc = 
4800: 28 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65  (FuncDef*)sqlite
4810: 48 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75  HashData(i); pFu
4820: 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29  nc; pFunc=pNext)
4830: 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20  {.      pNext = 
4840: 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20  pFunc->pNext;.  
4850: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
4860: 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Func);.    }.  }
4870: 0a 20 20 73 71 6c 69 74 65 48 61 73 68 43 6c 65  .  sqliteHashCle
4880: 61 72 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a  ar(&db->aFunc);.
4890: 20 20 73 71 6c 69 74 65 46 72 65 65 28 64 62 29    sqliteFree(db)
48a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62  ;.}../*.** Rollb
48b0: 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65  ack all database
48c0: 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20   files..*/.void 
48d0: 73 71 6c 69 74 65 52 6f 6c 6c 62 61 63 6b 41 6c  sqliteRollbackAl
48e0: 6c 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20  l(sqlite *db){. 
48f0: 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d   int i;.  for(i=
4900: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
4910: 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  +){.    if( db->
4920: 61 44 62 5b 69 5d 2e 70 42 74 20 29 7b 0a 20 20  aDb[i].pBt ){.  
4930: 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 52      sqliteBtreeR
4940: 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e 61 44 62 5b  ollback(db->aDb[
4950: 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 64  i].pBt);.      d
4960: 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e 54 72 61 6e  b->aDb[i].inTran
4970: 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
4980: 0a 20 20 73 71 6c 69 74 65 52 65 73 65 74 49 6e  .  sqliteResetIn
4990: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
49a0: 20 30 29 3b 0a 20 20 2f 2a 20 73 71 6c 69 74 65   0);.  /* sqlite
49b0: 52 6f 6c 6c 62 61 63 6b 49 6e 74 65 72 6e 61 6c  RollbackInternal
49c0: 43 68 61 6e 67 65 73 28 64 62 29 3b 20 2a 2f 0a  Changes(db); */.
49d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  }../*.** Execute
49e0: 20 53 51 4c 20 63 6f 64 65 2e 20 20 52 65 74 75   SQL code.  Retu
49f0: 72 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51  rn one of the SQ
4a00: 4c 49 54 45 5f 20 73 75 63 63 65 73 73 2f 66 61  LITE_ success/fa
4a10: 69 6c 75 72 65 0a 2a 2a 20 63 6f 64 65 73 2e 20  ilure.** codes. 
4a20: 20 41 6c 73 6f 20 77 72 69 74 65 20 61 6e 20 65   Also write an e
4a30: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74  rror message int
4a40: 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
4a50: 64 20 66 72 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63  d from.** malloc
4a60: 28 29 20 61 6e 64 20 6d 61 6b 65 20 2a 70 7a 45  () and make *pzE
4a70: 72 72 4d 73 67 20 70 6f 69 6e 74 20 74 6f 20 74  rrMsg point to t
4a80: 68 61 74 20 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a  hat message..**.
4a90: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 20 69 73  ** If the SQL is
4aa0: 20 61 20 71 75 65 72 79 2c 20 74 68 65 6e 20 66   a query, then f
4ab0: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
4ac0: 68 65 20 71 75 65 72 79 20 72 65 73 75 6c 74 0a  he query result.
4ad0: 2a 2a 20 74 68 65 20 78 43 61 6c 6c 62 61 63 6b  ** the xCallback
4ae0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63  () function is c
4af0: 61 6c 6c 65 64 2e 20 20 70 41 72 67 20 62 65 63  alled.  pArg bec
4b00: 6f 6d 65 73 20 74 68 65 20 66 69 72 73 74 0a 2a  omes the first.*
4b10: 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * argument to xC
4b20: 61 6c 6c 62 61 63 6b 28 29 2e 20 20 49 66 20 78  allback().  If x
4b30: 43 61 6c 6c 62 61 63 6b 3d 4e 55 4c 4c 20 74 68  Callback=NULL th
4b40: 65 6e 20 6e 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a  en no callback.*
4b50: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 65 76  * is invoked, ev
4b60: 65 6e 20 66 6f 72 20 71 75 65 72 69 65 73 2e 0a  en for queries..
4b70: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 65 78  */.int sqlite_ex
4b80: 65 63 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  ec(.  sqlite *db
4b90: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
4ba0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4bb0: 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 53  e on which the S
4bc0: 51 4c 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 20  QL executes */. 
4bd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
4be0: 6c 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l,           /* 
4bf0: 54 68 65 20 53 51 4c 20 74 6f 20 62 65 20 65 78  The SQL to be ex
4c00: 65 63 75 74 65 64 20 2a 2f 0a 20 20 73 71 6c 69  ecuted */.  sqli
4c10: 74 65 5f 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c  te_callback xCal
4c20: 6c 62 61 63 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b  lback,  /* Invok
4c30: 65 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20  e this callback 
4c40: 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 76 6f 69  routine */.  voi
4c50: 64 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  d *pArg,        
4c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
4c70: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
4c80: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 63  allback() */.  c
4c90: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20  har **pzErrMsg  
4ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72             /* Wr
4cb0: 69 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ite error messag
4cc0: 65 73 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20  es here */.){.  
4cd0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
4ce0: 4f 4b 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  OK;.  const char
4cf0: 20 2a 7a 4c 65 66 74 6f 76 65 72 3b 0a 20 20 73   *zLeftover;.  s
4d00: 71 6c 69 74 65 5f 76 6d 20 2a 70 56 6d 3b 0a 20  qlite_vm *pVm;. 
4d10: 20 69 6e 74 20 6e 52 65 74 72 79 20 3d 20 30 3b   int nRetry = 0;
4d20: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 20 3d  .  int nChange =
4d30: 20 30 3b 0a 20 20 69 6e 74 20 6e 43 61 6c 6c 62   0;.  int nCallb
4d40: 61 63 6b 3b 0a 0a 20 20 69 66 28 20 7a 53 71 6c  ack;..  if( zSql
4d50: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c  ==0 ) return SQL
4d60: 49 54 45 5f 4f 4b 3b 0a 20 20 77 68 69 6c 65 28  ITE_OK;.  while(
4d70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
4d80: 26 20 7a 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20  & zSql[0] ){.   
4d90: 20 70 56 6d 20 3d 20 30 3b 0a 20 20 20 20 72 63   pVm = 0;.    rc
4da0: 20 3d 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c   = sqlite_compil
4db0: 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 7a 4c 65  e(db, zSql, &zLe
4dc0: 66 74 6f 76 65 72 2c 20 26 70 56 6d 2c 20 70 7a  ftover, &pVm, pz
4dd0: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28  ErrMsg);.    if(
4de0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
4df0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
4e00: 70 56 6d 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  pVm==0 || sqlite
4e10: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
4e20: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 72  ;.      return r
4e30: 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  c;.    }.    if(
4e40: 20 70 56 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pVm==0 ){.     
4e50: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4e60: 20 69 66 20 74 68 65 20 7a 53 71 6c 20 69 6e 70   if the zSql inp
4e70: 75 74 20 63 6f 6e 74 61 69 6e 65 64 20 6f 6e 6c  ut contained onl
4e80: 79 20 77 68 69 74 65 73 70 61 63 65 20 2a 2f 0a  y whitespace */.
4e90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4ea0: 20 7d 0a 20 20 20 20 64 62 2d 3e 6e 43 68 61 6e   }.    db->nChan
4eb0: 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
4ec0: 20 20 20 6e 43 61 6c 6c 62 61 63 6b 20 3d 20 30     nCallback = 0
4ed0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 31 29 7b 0a  ;.    while(1){.
4ee0: 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 3b 0a        int nArg;.
4ef0: 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 41        char **azA
4f00: 72 67 2c 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20  rg, **azCol;.   
4f10: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 5f 73     rc = sqlite_s
4f20: 74 65 70 28 70 56 6d 2c 20 26 6e 41 72 67 2c 20  tep(pVm, &nArg, 
4f30: 28 63 6f 6e 73 74 20 63 68 61 72 2a 2a 2a 29 26  (const char***)&
4f40: 61 7a 41 72 67 2c 28 63 6f 6e 73 74 20 63 68 61  azArg,(const cha
4f50: 72 2a 2a 2a 29 26 61 7a 43 6f 6c 29 3b 0a 20 20  r***)&azCol);.  
4f60: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
4f70: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20  TE_ROW ){.      
4f80: 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 21    if( xCallback!
4f90: 3d 30 20 26 26 20 78 43 61 6c 6c 62 61 63 6b 28  =0 && xCallback(
4fa0: 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41 72  pArg, nArg, azAr
4fb0: 67 2c 20 61 7a 43 6f 6c 29 20 29 7b 0a 20 20 20  g, azCol) ){.   
4fc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 5f 66 69         sqlite_fi
4fd0: 6e 61 6c 69 7a 65 28 70 56 6d 2c 20 30 29 3b 0a  nalize(pVm, 0);.
4fe0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4ff0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20   SQLITE_ABORT;. 
5000: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5010: 20 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b 0a 20 20   nCallback++;.  
5020: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5030: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
5040: 45 5f 44 4f 4e 45 20 26 26 20 6e 43 61 6c 6c 62  E_DONE && nCallb
5050: 61 63 6b 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  ack==0.         
5060: 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
5070: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
5080: 62 61 63 6b 29 21 3d 30 20 26 26 20 78 43 61 6c  back)!=0 && xCal
5090: 6c 62 61 63 6b 21 3d 30 20 29 7b 0a 20 20 20 20  lback!=0 ){.    
50a0: 20 20 20 20 20 20 78 43 61 6c 6c 62 61 63 6b 28        xCallback(
50b0: 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41 72  pArg, nArg, azAr
50c0: 67 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20  g, azCol);.     
50d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 63 20     }.        rc 
50e0: 3d 20 73 71 6c 69 74 65 5f 66 69 6e 61 6c 69 7a  = sqlite_finaliz
50f0: 65 28 70 56 6d 2c 20 70 7a 45 72 72 4d 73 67 29  e(pVm, pzErrMsg)
5100: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
5110: 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  ==SQLITE_SCHEMA 
5120: 26 26 20 6e 52 65 74 72 79 3c 32 20 29 7b 0a 20  && nRetry<2 ){. 
5130: 20 20 20 20 20 20 20 20 20 6e 52 65 74 72 79 2b           nRetry+
5140: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  +;.          rc 
5150: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
5160: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5170: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5180: 69 66 28 20 64 62 2d 3e 70 56 64 62 65 3d 3d 30  if( db->pVdbe==0
5190: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 43   ){.          nC
51a0: 68 61 6e 67 65 20 3d 20 64 62 2d 3e 6e 43 68 61  hange = db->nCha
51b0: 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nge;.        }. 
51c0: 20 20 20 20 20 20 20 6e 52 65 74 72 79 20 3d 20         nRetry = 
51d0: 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  0;.        zSql 
51e0: 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20  = zLeftover;.   
51f0: 20 20 20 20 20 77 68 69 6c 65 28 20 69 73 73 70       while( issp
5200: 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a  ace(zSql[0]) ) z
5210: 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62  Sql++;.        b
5220: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
5230: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
5240: 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43   rc;.}.../*.** C
5250: 6f 6d 70 69 6c 65 20 61 20 73 69 6e 67 6c 65 20  ompile a single 
5260: 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 53 51 4c  statement of SQL
5270: 20 69 6e 74 6f 20 61 20 76 69 72 74 75 61 6c 20   into a virtual 
5280: 6d 61 63 68 69 6e 65 2e 20 20 52 65 74 75 72 6e  machine.  Return
5290: 20 6f 6e 65 0a 2a 2a 20 6f 66 20 74 68 65 20 53   one.** of the S
52a0: 51 4c 49 54 45 5f 20 73 75 63 63 65 73 73 2f 66  QLITE_ success/f
52b0: 61 69 6c 75 72 65 20 63 6f 64 65 73 2e 20 20 41  ailure codes.  A
52c0: 6c 73 6f 20 77 72 69 74 65 20 61 6e 20 65 72 72  lso write an err
52d0: 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 0a  or message into.
52e0: 2a 2a 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  ** memory obtain
52f0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
5300: 20 61 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72   and make *pzErr
5310: 4d 73 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61  Msg point to tha
5320: 74 20 6d 65 73 73 61 67 65 2e 0a 2a 2f 0a 69 6e  t message..*/.in
5330: 74 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  t sqlite_compile
5340: 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20  (.  sqlite *db, 
5350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5360: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5370: 6f 6e 20 77 68 69 63 68 20 74 68 65 20 53 51 4c  on which the SQL
5380: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63   executes */.  c
5390: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c  onst char *zSql,
53a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
53b0: 65 20 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63  e SQL to be exec
53c0: 75 74 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  uted */.  const 
53d0: 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c 2c 20 20  char **pzTail,  
53e0: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 4e 65        /* OUT: Ne
53f0: 78 74 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74  xt statement aft
5400: 65 72 20 74 68 65 20 66 69 72 73 74 20 2a 2f 0a  er the first */.
5410: 20 20 73 71 6c 69 74 65 5f 76 6d 20 2a 2a 70 70    sqlite_vm **pp
5420: 56 6d 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  Vm,           /*
5430: 20 4f 55 54 3a 20 54 68 65 20 76 69 72 74 75 61   OUT: The virtua
5440: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 63  l machine */.  c
5450: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20  har **pzErrMsg  
5460: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
5470: 54 3a 20 57 72 69 74 65 20 65 72 72 6f 72 20 6d  T: Write error m
5480: 65 73 73 61 67 65 73 20 68 65 72 65 20 2a 2f 0a  essages here */.
5490: 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73  ){.  Parse sPars
54a0: 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45 72 72 4d  e;..  if( pzErrM
54b0: 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67 20 3d  sg ) *pzErrMsg =
54c0: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
54d0: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
54e0: 6f 74 6f 20 65 78 65 63 5f 6d 69 73 75 73 65 3b  oto exec_misuse;
54f0: 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69 74  .  if( !db->init
5500: 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69 66 28  .busy ){.    if(
5510: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
5520: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
5530: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
5540: 74 20 72 63 2c 20 63 6e 74 20 3d 20 31 3b 0a 20  t rc, cnt = 1;. 
5550: 20 20 20 20 20 77 68 69 6c 65 28 20 28 72 63 20       while( (rc 
5560: 3d 20 73 71 6c 69 74 65 49 6e 69 74 28 64 62 2c  = sqliteInit(db,
5570: 20 70 7a 45 72 72 4d 73 67 29 29 3d 3d 53 51 4c   pzErrMsg))==SQL
5580: 49 54 45 5f 42 55 53 59 0a 20 20 20 20 20 20 20  ITE_BUSY.       
5590: 20 20 26 26 20 64 62 2d 3e 78 42 75 73 79 43 61    && db->xBusyCa
55a0: 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20  llback.         
55b0: 26 26 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c  && db->xBusyCall
55c0: 62 61 63 6b 28 64 62 2d 3e 70 42 75 73 79 41 72  back(db->pBusyAr
55d0: 67 2c 20 22 22 2c 20 63 6e 74 2b 2b 29 21 3d 30  g, "", cnt++)!=0
55e0: 20 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 72   ){}.      if( r
55f0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
5600: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 53 74          sqliteSt
5610: 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73  rRealloc(pzErrMs
5620: 67 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  g);.        sqli
5630: 74 65 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  teSafetyOff(db);
5640: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5650: 72 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rc;.      }.    
5660: 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29    if( pzErrMsg )
5670: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5680: 46 72 65 65 28 2a 70 7a 45 72 72 4d 73 67 29 3b  Free(*pzErrMsg);
5690: 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d  .        *pzErrM
56a0: 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
56b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
56c0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c 33 20  ->file_format<3 
56d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53  ){.      sqliteS
56e0: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20  afetyOff(db);.  
56f0: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
5700: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f  ing(pzErrMsg, "o
5710: 62 73 6f 6c 65 74 65 20 64 61 74 61 62 61 73 65  bsolete database
5720: 20 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28   file format", (
5730: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20  char*)0);.      
5740: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5750: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ROR;.    }.  }. 
5760: 20 61 73 73 65 72 74 28 20 28 64 62 2d 3e 66 6c   assert( (db->fl
5770: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69  ags & SQLITE_Ini
5780: 74 69 61 6c 69 7a 65 64 29 21 3d 30 20 7c 7c 20  tialized)!=0 || 
5790: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
57a0: 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65  .  if( db->pVdbe
57b0: 3d 3d 30 20 29 7b 20 64 62 2d 3e 6e 43 68 61 6e  ==0 ){ db->nChan
57c0: 67 65 20 3d 20 30 3b 20 7d 0a 20 20 6d 65 6d 73  ge = 0; }.  mems
57d0: 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73  et(&sParse, 0, s
57e0: 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a  izeof(sParse));.
57f0: 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62    sParse.db = db
5800: 3b 0a 20 20 73 71 6c 69 74 65 52 75 6e 50 61 72  ;.  sqliteRunPar
5810: 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71  ser(&sParse, zSq
5820: 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  l, pzErrMsg);.  
5830: 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20 26  if( db->xTrace &
5840: 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  & !db->init.busy
5850: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 72 61 63 65   ){.    /* Trace
5860: 20 6f 6e 6c 79 20 74 68 65 20 73 74 61 74 6d 65   only the statme
5870: 6e 74 20 74 68 61 74 20 77 61 73 20 63 6f 6d 70  nt that was comp
5880: 69 6c 65 64 2e 0a 20 20 20 20 2a 2a 20 4d 61 6b  iled..    ** Mak
5890: 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 61 74  e a copy of that
58a0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 53 51 4c   part of the SQL
58b0: 20 73 74 72 69 6e 67 20 73 69 6e 63 65 20 7a 53   string since zS
58c0: 51 4c 20 69 73 20 63 6f 6e 73 74 0a 20 20 20 20  QL is const.    
58d0: 2a 2a 20 61 6e 64 20 77 65 20 6d 75 73 74 20 70  ** and we must p
58e0: 61 73 73 20 61 20 7a 65 72 6f 20 74 65 72 6d 69  ass a zero termi
58f0: 6e 61 74 65 64 20 73 74 72 69 6e 67 20 74 6f 20  nated string to 
5900: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
5910: 6f 6e 0a 20 20 20 20 2a 2a 20 54 68 65 20 63 6f  on.    ** The co
5920: 70 79 20 69 73 20 75 6e 6e 65 63 65 73 73 61 72  py is unnecessar
5930: 79 20 69 66 20 74 68 65 20 74 61 69 6c 20 70 6f  y if the tail po
5940: 69 6e 74 65 72 20 69 73 20 70 6f 69 6e 74 69 6e  inter is pointin
5950: 67 20 61 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  g at the.    ** 
5960: 62 65 67 69 6e 6e 69 67 20 6f 72 20 65 6e 64 20  beginnig or end 
5970: 6f 66 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e  of the SQL strin
5980: 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  g..    */.    if
5990: 28 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 26  ( sParse.zTail &
59a0: 26 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 21 3d  & sParse.zTail!=
59b0: 7a 53 71 6c 20 26 26 20 2a 73 50 61 72 73 65 2e  zSql && *sParse.
59c0: 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 63  zTail ){.      c
59d0: 68 61 72 20 2a 74 6d 70 53 71 6c 20 3d 20 73 71  har *tmpSql = sq
59e0: 6c 69 74 65 53 74 72 4e 44 75 70 28 7a 53 71 6c  liteStrNDup(zSql
59f0: 2c 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 2d  , sParse.zTail -
5a00: 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 69 66   zSql);.      if
5a10: 28 20 74 6d 70 53 71 6c 20 29 7b 0a 20 20 20 20  ( tmpSql ){.    
5a20: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
5a30: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 74 6d  b->pTraceArg, tm
5a40: 70 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 66  pSql);.        f
5a50: 72 65 65 28 74 6d 70 53 71 6c 29 3b 0a 20 20 20  ree(tmpSql);.   
5a60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5a70: 20 20 2f 2a 20 49 66 20 61 20 6d 65 6d 6f 72 79    /* If a memory
5a80: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
5a90: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 70 79 2c  during the copy,
5aa0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 72 61 63  .        ** trac
5ab0: 65 20 65 6e 74 69 72 65 20 53 51 4c 20 73 74 72  e entire SQL str
5ac0: 69 6e 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ing and fall thr
5ad0: 6f 75 67 68 20 74 6f 20 74 68 65 0a 20 20 20 20  ough to the.    
5ae0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61      ** sqlite_ma
5af0: 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 74 65 73 74  lloc_failed test
5b00: 20 74 6f 20 72 65 70 6f 72 74 20 74 68 65 20 65   to report the e
5b10: 72 72 6f 72 2e 0a 20 20 20 20 20 20 20 20 2a 2f  rror..        */
5b20: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 78 54 72  .        db->xTr
5b30: 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
5b40: 67 2c 20 7a 53 71 6c 29 3b 20 0a 20 20 20 20 20  g, zSql); .     
5b50: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
5b60: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
5b70: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 53  b->pTraceArg, zS
5b80: 71 6c 29 3b 20 0a 20 20 20 20 7d 0a 20 20 7d 0a  ql); .    }.  }.
5b90: 20 20 69 66 28 20 73 71 6c 69 74 65 5f 6d 61 6c    if( sqlite_mal
5ba0: 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20  loc_failed ){.  
5bb0: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
5bc0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74  g(pzErrMsg, "out
5bd0: 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63 68   of memory", (ch
5be0: 61 72 2a 29 30 29 3b 0a 20 20 20 20 73 50 61 72  ar*)0);.    sPar
5bf0: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  se.rc = SQLITE_N
5c00: 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65  OMEM;.    sqlite
5c10: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b  RollbackAll(db);
5c20: 0a 20 20 20 20 73 71 6c 69 74 65 52 65 73 65 74  .    sqliteReset
5c30: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
5c40: 62 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66  b, 0);.    db->f
5c50: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f  lags &= ~SQLITE_
5c60: 49 6e 54 72 61 6e 73 3b 0a 20 20 7d 0a 20 20 69  InTrans;.  }.  i
5c70: 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51  f( sParse.rc==SQ
5c80: 4c 49 54 45 5f 44 4f 4e 45 20 29 20 73 50 61 72  LITE_DONE ) sPar
5c90: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  se.rc = SQLITE_O
5ca0: 4b 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e  K;.  if( sParse.
5cb0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc!=SQLITE_OK &&
5cc0: 20 70 7a 45 72 72 4d 73 67 20 26 26 20 2a 70 7a   pzErrMsg && *pz
5cd0: 45 72 72 4d 73 67 3d 3d 30 20 29 7b 0a 20 20 20  ErrMsg==0 ){.   
5ce0: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
5cf0: 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74  (pzErrMsg, sqlit
5d00: 65 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 73  e_error_string(s
5d10: 50 61 72 73 65 2e 72 63 29 2c 20 28 63 68 61 72  Parse.rc), (char
5d20: 2a 29 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  *)0);.  }.  sqli
5d30: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
5d40: 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 73 50  rrMsg);.  if( sP
5d50: 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f  arse.rc==SQLITE_
5d60: 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71  SCHEMA ){.    sq
5d70: 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61  liteResetInterna
5d80: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
5d90: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 70    }.  assert( pp
5da0: 56 6d 20 29 3b 0a 20 20 2a 70 70 56 6d 20 3d 20  Vm );.  *ppVm = 
5db0: 28 73 71 6c 69 74 65 5f 76 6d 2a 29 73 50 61 72  (sqlite_vm*)sPar
5dc0: 73 65 2e 70 56 64 62 65 3b 0a 20 20 69 66 28 20  se.pVdbe;.  if( 
5dd0: 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61 69 6c  pzTail ) *pzTail
5de0: 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 3b   = sParse.zTail;
5df0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 61 66  .  if( sqliteSaf
5e00: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
5e10: 6f 20 65 78 65 63 5f 6d 69 73 75 73 65 3b 0a 20  o exec_misuse;. 
5e20: 20 72 65 74 75 72 6e 20 73 50 61 72 73 65 2e 72   return sParse.r
5e30: 63 3b 0a 0a 65 78 65 63 5f 6d 69 73 75 73 65 3a  c;..exec_misuse:
5e40: 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20  .  if( pzErrMsg 
5e50: 29 7b 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67  ){.    *pzErrMsg
5e60: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
5e70: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
5e80: 73 67 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72  sg, sqlite_error
5e90: 5f 73 74 72 69 6e 67 28 53 51 4c 49 54 45 5f 4d  _string(SQLITE_M
5ea0: 49 53 55 53 45 29 2c 20 28 63 68 61 72 2a 29 30  ISUSE), (char*)0
5eb0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 53 74 72  );.    sqliteStr
5ec0: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
5ed0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5ee0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 7d  SQLITE_MISUSE;.}
5ef0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  .../*.** The fol
5f00: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64  lowing routine d
5f10: 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75 61  estroys a virtua
5f20: 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69  l machine that i
5f30: 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
5f40: 74 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69  the sqlite_compi
5f50: 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 0a 2a 2a  le() routine..**
5f60: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20  .** The integer 
5f70: 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53  returned is an S
5f80: 51 4c 49 54 45 5f 20 73 75 63 63 65 73 73 2f 66  QLITE_ success/f
5f90: 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74  ailure code that
5fa0: 20 64 65 73 63 72 69 62 65 73 0a 2a 2a 20 74 68   describes.** th
5fb0: 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63  e result of exec
5fc0: 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75 61  uting the virtua
5fd0: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 41 6e 20 65  l machine.  An e
5fe0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 0a  rror message is.
5ff0: 2a 2a 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  ** written into 
6000: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
6010: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20  from malloc and 
6020: 2a 70 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64  *pzErrMsg is mad
6030: 65 20 74 6f 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f  e to.** point to
6040: 20 74 68 61 74 20 65 72 72 6f 72 20 69 66 20 70   that error if p
6050: 7a 45 72 72 4d 73 67 20 69 73 20 6e 6f 74 20 4e  zErrMsg is not N
6060: 55 4c 4c 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e  ULL.  The callin
6070: 67 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 73 68 6f  g routine.** sho
6080: 75 6c 64 20 75 73 65 20 73 71 6c 69 74 65 5f 66  uld use sqlite_f
6090: 72 65 65 6d 65 6d 28 29 20 74 6f 20 64 65 6c 65  reemem() to dele
60a0: 74 65 20 74 68 65 20 6d 65 73 73 61 67 65 20 77  te the message w
60b0: 68 65 6e 20 69 74 20 68 61 73 20 66 69 6e 69 73  hen it has finis
60c0: 68 65 64 0a 2a 2a 20 77 69 74 68 20 69 74 2e 0a  hed.** with it..
60d0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 66 69  */.int sqlite_fi
60e0: 6e 61 6c 69 7a 65 28 0a 20 20 73 71 6c 69 74 65  nalize(.  sqlite
60f0: 5f 76 6d 20 2a 70 56 6d 2c 20 20 20 20 20 20 20  _vm *pVm,       
6100: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
6110: 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 6f 20 62  ual machine to b
6120: 65 20 64 65 73 74 72 6f 79 65 64 20 2a 2f 0a 20  e destroyed */. 
6130: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
6140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
6150: 55 54 3a 20 57 72 69 74 65 20 65 72 72 6f 72 20  UT: Write error 
6160: 6d 65 73 73 61 67 65 73 20 68 65 72 65 20 2a 2f  messages here */
6170: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73  .){.  int rc = s
6180: 71 6c 69 74 65 56 64 62 65 46 69 6e 61 6c 69 7a  qliteVdbeFinaliz
6190: 65 28 28 56 64 62 65 2a 29 70 56 6d 2c 20 70 7a  e((Vdbe*)pVm, pz
61a0: 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
61b0: 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72  eStrRealloc(pzEr
61c0: 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20  rMsg);.  return 
61d0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72  rc;.}../*.** Ter
61e0: 6d 69 6e 61 74 65 20 74 68 65 20 63 75 72 72 65  minate the curre
61f0: 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  nt execution of 
6200: 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  a virtual machin
6210: 65 20 74 68 65 6e 0a 2a 2a 20 72 65 73 65 74 20  e then.** reset 
6220: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
6230: 69 6e 65 20 62 61 63 6b 20 74 6f 20 69 74 73 20  ine back to its 
6240: 73 74 61 72 74 69 6e 67 20 73 74 61 74 65 20 73  starting state s
6250: 6f 20 74 68 61 74 20 69 74 0a 2a 2a 20 63 61 6e  o that it.** can
6260: 20 62 65 20 72 65 75 73 65 64 2e 20 20 41 6e 79   be reused.  Any
6270: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 72   error message r
6280: 65 73 75 6c 74 69 6e 67 20 66 72 6f 6d 20 74 68  esulting from th
6290: 65 20 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f  e prior executio
62a0: 6e 0a 2a 2a 20 69 73 20 77 72 69 74 74 65 6e 20  n.** is written 
62b0: 69 6e 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 20  into *pzErrMsg. 
62c0: 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65 20   A success code 
62d0: 66 72 6f 6d 20 74 68 65 20 70 72 69 6f 72 20 65  from the prior e
62e0: 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 69 73 20 72  xecution.** is r
62f0: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20  eturned..*/.int 
6300: 73 71 6c 69 74 65 5f 72 65 73 65 74 28 0a 20 20  sqlite_reset(.  
6310: 73 71 6c 69 74 65 5f 76 6d 20 2a 70 56 6d 2c 20  sqlite_vm *pVm, 
6320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
6330: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
6340: 65 20 74 6f 20 62 65 20 64 65 73 74 72 6f 79 65  e to be destroye
6350: 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
6360: 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20  ErrMsg          
6370: 20 20 2f 2a 20 4f 55 54 3a 20 57 72 69 74 65 20    /* OUT: Write 
6380: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 68  error messages h
6390: 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ere */.){.  int 
63a0: 72 63 20 3d 20 73 71 6c 69 74 65 56 64 62 65 52  rc = sqliteVdbeR
63b0: 65 73 65 74 28 28 56 64 62 65 2a 29 70 56 6d 2c  eset((Vdbe*)pVm,
63c0: 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71   pzErrMsg);.  sq
63d0: 6c 69 74 65 56 64 62 65 4d 61 6b 65 52 65 61 64  liteVdbeMakeRead
63e0: 79 28 28 56 64 62 65 2a 29 70 56 6d 2c 20 2d 31  y((Vdbe*)pVm, -1
63f0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 53 74  , 0);.  sqliteSt
6400: 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73  rRealloc(pzErrMs
6410: 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  g);.  return rc;
6420: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
6430: 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
6440: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
6450: 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f  the kind of erro
6460: 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  r specified in t
6470: 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  he.** argument..
6480: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
6490: 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72 69  qlite_error_stri
64a0: 6e 67 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f  ng(int rc){.  co
64b0: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73  nst char *z;.  s
64c0: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
64d0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a   case SQLITE_OK:
64e0: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f           z = "no
64f0: 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  t an error";    
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6510: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6520: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52   case SQLITE_ERR
6530: 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51  OR:      z = "SQ
6540: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
6550: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
6560: 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  e";   break;.   
6570: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
6580: 45 52 4e 41 4c 3a 20 20 20 7a 20 3d 20 22 69 6e  ERNAL:   z = "in
6590: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 20 69 6d  ternal SQLite im
65a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6c 61  plementation fla
65b0: 77 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  w";   break;.   
65c0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52   case SQLITE_PER
65d0: 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63  M:       z = "ac
65e0: 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20  cess permission 
65f0: 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20  denied";        
6600: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6610: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f   case SQLITE_ABO
6620: 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61  RT:      z = "ca
6630: 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64  llback requested
6640: 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20   query abort";  
6650: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6660: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
6670: 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  Y:       z = "da
6680: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
6690: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
66a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
66b0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43   case SQLITE_LOC
66c0: 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  KED:     z = "da
66d0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
66e0: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
66f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6700: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d   case SQLITE_NOM
6710: 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75  EM:      z = "ou
6720: 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20  t of memory";   
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6750: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
6760: 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74  DONLY:   z = "at
6770: 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
6780: 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61   readonly databa
6790: 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  se";  break;.   
67a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
67b0: 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e  ERRUPT:  z = "in
67c0: 74 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20  terrupted";     
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
67f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
6800: 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69  RR:      z = "di
6810: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20  sk I/O error";  
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6840: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52   case SQLITE_COR
6850: 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61  RUPT:    z = "da
6860: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
6870: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b  e is malformed";
6880: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6890: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
68a0: 46 4f 55 4e 44 3a 20 20 20 7a 20 3d 20 22 74 61  FOUND:   z = "ta
68b0: 62 6c 65 20 6f 72 20 72 65 63 6f 72 64 20 6e 6f  ble or record no
68c0: 74 20 66 6f 75 6e 64 22 3b 20 20 20 20 20 20 20  t found";       
68d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
68e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c   case SQLITE_FUL
68f0: 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61  L:       z = "da
6900: 74 61 62 61 73 65 20 69 73 20 66 75 6c 6c 22 3b  tabase is full";
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6920: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6930: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
6940: 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e  TOPEN:   z = "un
6950: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
6960: 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20  abase file";    
6970: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6980: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f   case SQLITE_PRO
6990: 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61  TOCOL:   z = "da
69a0: 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70  tabase locking p
69b0: 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22  rotocol failure"
69c0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
69d0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50   case SQLITE_EMP
69e0: 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61  TY:      z = "ta
69f0: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
6a00: 64 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20  data";          
6a10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6a20: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48   case SQLITE_SCH
6a30: 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61  EMA:     z = "da
6a40: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
6a50: 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20  s changed";     
6a60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6a70: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f   case SQLITE_TOO
6a80: 42 49 47 3a 20 20 20 20 20 7a 20 3d 20 22 74 6f  BIG:     z = "to
6a90: 6f 20 6d 75 63 68 20 64 61 74 61 20 66 6f 72 20  o much data for 
6aa0: 6f 6e 65 20 74 61 62 6c 65 20 72 6f 77 22 3b 20  one table row"; 
6ab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6ac0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
6ad0: 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f  STRAINT: z = "co
6ae0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
6af0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6b00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6b10: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
6b20: 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61  MATCH:   z = "da
6b30: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
6b40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6b50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6b60: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
6b70: 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69  USE:     z = "li
6b80: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61  brary routine ca
6b90: 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75  lled out of sequ
6ba0: 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  ence";break;.   
6bb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c   case SQLITE_NOL
6bc0: 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65  FS:      z = "ke
6bd0: 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65  rnel lacks large
6be0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20   file support"; 
6bf0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6c00: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54   case SQLITE_AUT
6c10: 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75  H:       z = "au
6c20: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69  thorization deni
6c30: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
6c40: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6c50: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52   case SQLITE_FOR
6c60: 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75  MAT:     z = "au
6c70: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
6c80: 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20   format error"; 
6c90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6ca0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e   case SQLITE_RAN
6cb0: 47 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69  GE:      z = "bi
6cc0: 6e 64 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  nd index out of 
6cd0: 72 61 6e 67 65 22 3b 20 20 20 20 20 20 20 20 20  range";         
6ce0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6cf0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
6d00: 41 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69  ADB:     z = "fi
6d10: 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20  le is encrypted 
6d20: 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  or is not a data
6d30: 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20  base";break;.   
6d40: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
6d50: 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e           z = "un
6d60: 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20  known error";   
6d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d80: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d        break;.  }
6d90: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
6da0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
6db0: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  ne implements a 
6dc0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68  busy callback th
6dd0: 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72  at sleeps and tr
6de0: 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74  ies.** again unt
6df0: 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c  il a timeout val
6e00: 75 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20  ue is reached.  
6e10: 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  The timeout valu
6e20: 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  e is.** an integ
6e30: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c  er number of mil
6e40: 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64  liseconds passed
6e50: 20 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74   in as the first
6e60: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  .** argument..*/
6e70: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
6e80: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
6e90: 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69  lback(. void *Ti
6ea0: 6d 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20  meout,          
6eb0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75   /* Maximum amou
6ec0: 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61  nt of time to wa
6ed0: 69 74 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68 61  it */. const cha
6ee0: 72 20 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20 20  r *NotUsed,     
6ef0: 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
6f00: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
6f10: 20 62 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63 6f   busy */. int co
6f20: 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  unt             
6f30: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6f40: 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20  times table has 
6f50: 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a  been busy */.){.
6f60: 23 69 66 20 53 51 4c 49 54 45 5f 4d 49 4e 5f 53  #if SQLITE_MIN_S
6f70: 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20 20 73 74 61  LEEP_MS==1.  sta
6f80: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 64  tic const char d
6f90: 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  elays[] =.     {
6fa0: 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20 31 35   1, 2, 5, 10, 15
6fb0: 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20 20 32  , 20, 25, 25,  2
6fc0: 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 20 35 30  5,  50,  50,  50
6fd0: 2c 20 31 30 30 7d 3b 0a 20 20 73 74 61 74 69 63  , 100};.  static
6fe0: 20 63 6f 6e 73 74 20 73 68 6f 72 74 20 69 6e 74   const short int
6ff0: 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20   totals[] =.    
7000: 20 7b 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20   { 0, 1, 3,  8, 
7010: 31 38 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20  18, 33, 53, 78, 
7020: 31 30 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32  103, 128, 178, 2
7030: 32 38 2c 20 32 38 37 7d 3b 0a 23 20 64 65 66 69  28, 287};.# defi
7040: 6e 65 20 4e 44 45 4c 41 59 20 28 73 69 7a 65 6f  ne NDELAY (sizeo
7050: 66 28 64 65 6c 61 79 73 29 2f 73 69 7a 65 6f 66  f(delays)/sizeof
7060: 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a 20 20 69  (delays[0])).  i
7070: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e  nt timeout = (in
7080: 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74  t)Timeout;.  int
7090: 20 64 65 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a   delay, prior;..
70a0: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 3d 20 4e    if( count <= N
70b0: 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c  DELAY ){.    del
70c0: 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e  ay = delays[coun
70d0: 74 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  t-1];.    prior 
70e0: 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 2d 31  = totals[count-1
70f0: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
7100: 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e  delay = delays[N
7110: 44 45 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72  DELAY-1];.    pr
7120: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45  ior = totals[NDE
7130: 4c 41 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28  LAY-1] + delay*(
7140: 63 6f 75 6e 74 2d 4e 44 45 4c 41 59 2d 31 29 3b  count-NDELAY-1);
7150: 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72  .  }.  if( prior
7160: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
7170: 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  ut ){.    delay 
7180: 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f  = timeout - prio
7190: 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  r;.    if( delay
71a0: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
71b0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 4f 73 53 6c    }.  sqliteOsSl
71c0: 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65  eep(delay);.  re
71d0: 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20  turn 1;.#else.  
71e0: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
71f0: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66  nt)Timeout;.  if
7200: 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30  ( (count+1)*1000
7210: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
7220: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
7230: 20 20 73 71 6c 69 74 65 4f 73 53 6c 65 65 70 28    sqliteOsSleep(
7240: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
7250: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
7260: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
7270: 73 65 74 73 20 74 68 65 20 62 75 73 79 20 63 61  sets the busy ca
7280: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71  llback for an Sq
7290: 6c 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f  lite database to
72a0: 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61   the.** given ca
72b0: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
72c0: 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61  with the given a
72d0: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64  rgument..*/.void
72e0: 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e   sqlite_busy_han
72f0: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a  dler(.  sqlite *
7300: 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  db,.  int (*xBus
7310: 79 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  y)(void*,const c
7320: 68 61 72 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69  har*,int),.  voi
7330: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 64 62 2d  d *pArg.){.  db-
7340: 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 20 3d  >xBusyCallback =
7350: 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 70 42   xBusy;.  db->pB
7360: 75 73 79 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d  usyArg = pArg;.}
7370: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7380: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
7390: 41 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68  ALLBACK./*.** Th
73a0: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
73b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
73c0: 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c  lback for an Sql
73d0: 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  ite database to 
73e0: 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c  the.** given cal
73f0: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77  lback function w
7400: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72  ith the given ar
7410: 67 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67  gument. The prog
7420: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69  ress callback wi
7430: 6c 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64  ll.** be invoked
7440: 20 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f   every nOps opco
7450: 64 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  des..*/.void sql
7460: 69 74 65 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e  ite_progress_han
7470: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a  dler(.  sqlite *
7480: 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c  db, .  int nOps,
7490: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
74a0: 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76  ss)(void*), .  v
74b0: 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69  oid *pArg.){.  i
74c0: 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20  f( nOps>0 ){.   
74d0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
74e0: 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20   xProgress;.    
74f0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
7500: 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d   = nOps;.    db-
7510: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20  >pProgressArg = 
7520: 70 41 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  pArg;.  }else{. 
7530: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
7540: 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50   = 0;.    db->nP
7550: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
7560: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
7570: 73 41 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  sArg = 0;.  }.}.
7580: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
7590: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
75a0: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
75b0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
75c0: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
75d0: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
75e0: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
75f0: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
7600: 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ing 0..*/.void s
7610: 71 6c 69 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f  qlite_busy_timeo
7620: 75 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69  ut(sqlite *db, i
7630: 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73  nt ms){.  if( ms
7640: 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
7650: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62  _busy_handler(db
7660: 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  , sqliteDefaultB
7670: 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f  usyCallback, (vo
7680: 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65  id*)ms);.  }else
7690: 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62 75 73  {.    sqlite_bus
76a0: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c  y_handler(db, 0,
76b0: 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a   0);.  }.}../*.*
76c0: 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64  * Cause any pend
76d0: 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f  ing operation to
76e0: 20 73 74 6f 70 20 61 74 20 69 74 73 20 65 61 72   stop at its ear
76f0: 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74  liest opportunit
7700: 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  y..*/.void sqlit
7710: 65 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69  e_interrupt(sqli
7720: 74 65 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66  te *db){.  db->f
7730: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
7740: 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a  nterrupt;.}../*.
7750: 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  ** Windows syste
7760: 6d 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74  ms should call t
7770: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66  his routine to f
7780: 72 65 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a  ree memory that.
7790: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  ** is returned i
77a0: 6e 20 74 68 65 20 69 6e 20 74 68 65 20 65 72 72  n the in the err
77b0: 6d 73 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66  msg parameter of
77c0: 20 73 71 6c 69 74 65 5f 6f 70 65 6e 28 29 20 77   sqlite_open() w
77d0: 68 65 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73  hen.** SQLite is
77e0: 20 61 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d   a DLL.  For som
77f0: 65 20 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65  e reason, it doe
7800: 73 20 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61  s not work to ca
7810: 6c 6c 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72  ll free().** dir
7820: 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ectly..**.** Not
7830: 65 20 74 68 61 74 20 77 65 20 6e 65 65 64 20 74  e that we need t
7840: 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f  o call free() no
7850: 74 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 68  t sqliteFree() h
7860: 65 72 65 2c 20 73 69 6e 63 65 20 65 76 65 72 79  ere, since every
7870: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
7880: 69 73 20 65 78 70 6f 72 74 65 64 20 66 72 6f 6d  is exported from
7890: 20 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 68   SQLite should h
78a0: 61 76 65 20 61 6c 72 65 61 64 79 20 70 61 73 73  ave already pass
78b0: 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71  ed through.** sq
78c0: 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 29  liteStrRealloc()
78d0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
78e0: 5f 66 72 65 65 6d 65 6d 28 76 6f 69 64 20 2a 70  _freemem(void *p
78f0: 29 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f  ){ free(p); }../
7900: 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73  *.** Windows sys
7910: 74 65 6d 73 20 6e 65 65 64 20 66 75 6e 63 74 69  tems need functi
7920: 6f 6e 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20 72  ons to call to r
7930: 65 74 75 72 6e 20 74 68 65 20 73 71 6c 69 74 65  eturn the sqlite
7940: 5f 76 65 72 73 69 6f 6e 0a 2a 2a 20 61 6e 64 20  _version.** and 
7950: 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 20  sqlite_encoding 
7960: 73 74 72 69 6e 67 73 20 73 69 6e 63 65 20 74 68  strings since th
7970: 65 79 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f  ey are unable to
7980: 20 61 63 63 65 73 73 20 63 6f 6e 73 74 61 6e 74   access constant
7990: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 44 4c 4c 73  s.** within DLLs
79a0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
79b0: 2a 73 71 6c 69 74 65 5f 6c 69 62 76 65 72 73 69  *sqlite_libversi
79c0: 6f 6e 28 76 6f 69 64 29 7b 20 72 65 74 75 72 6e  on(void){ return
79d0: 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 3b   sqlite_version;
79e0: 20 7d 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73   }.const char *s
79f0: 71 6c 69 74 65 5f 6c 69 62 65 6e 63 6f 64 69 6e  qlite_libencodin
7a00: 67 28 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20  g(void){ return 
7a10: 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 3b  sqlite_encoding;
7a20: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65   }../*.** Create
7a30: 20 6e 65 77 20 75 73 65 72 2d 64 65 66 69 6e 65   new user-define
7a40: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  d functions.  Th
7a50: 65 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f  e sqlite_create_
7a60: 66 75 6e 63 74 69 6f 6e 28 29 0a 2a 2a 20 72 6f  function().** ro
7a70: 75 74 69 6e 65 20 63 72 65 61 74 65 73 20 61 20  utine creates a 
7a80: 72 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  regular function
7a90: 20 61 6e 64 20 73 71 6c 69 74 65 5f 63 72 65 61   and sqlite_crea
7aa0: 74 65 5f 61 67 67 72 65 67 61 74 65 28 29 0a 2a  te_aggregate().*
7ab0: 2a 20 63 72 65 61 74 65 73 20 61 6e 20 61 67 67  * creates an agg
7ac0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
7ad0: 0a 2a 2a 0a 2a 2a 20 50 61 73 73 69 6e 67 20 61  .**.** Passing a
7ae0: 20 4e 55 4c 4c 20 78 46 75 6e 63 20 61 72 67 75   NULL xFunc argu
7af0: 6d 65 6e 74 20 6f 72 20 4e 55 4c 4c 20 78 53 74  ment or NULL xSt
7b00: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 69 7a 65  ep and xFinalize
7b10: 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 64 69   arguments.** di
7b20: 73 61 62 6c 65 73 20 74 68 65 20 66 75 6e 63 74  sables the funct
7b30: 69 6f 6e 2e 20 20 43 61 6c 6c 69 6e 67 20 73 71  ion.  Calling sq
7b40: 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e 63  lite_create_func
7b50: 74 69 6f 6e 28 29 20 77 69 74 68 20 74 68 65 0a  tion() with the.
7b60: 2a 2a 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64  ** same name and
7b70: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
7b80: 65 6e 74 73 20 61 73 20 61 20 70 72 69 6f 72 20  ents as a prior 
7b90: 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  call to.** sqlit
7ba0: 65 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  e_create_aggrega
7bb0: 74 65 28 29 20 64 69 73 61 62 6c 65 73 20 74 68  te() disables th
7bc0: 65 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 0a  e prior call to.
7bd0: 2a 2a 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65  ** sqlite_create
7be0: 5f 61 67 67 72 65 67 61 74 65 28 29 2c 20 61 6e  _aggregate(), an
7bf0: 64 20 76 69 63 65 20 76 65 72 73 61 2e 0a 2a 2a  d vice versa..**
7c00: 0a 2a 2a 20 49 66 20 6e 41 72 67 20 69 73 20 2d  .** If nArg is -
7c10: 31 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  1 it means that 
7c20: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69  this function wi
7c30: 6c 6c 20 61 63 63 65 70 74 20 61 6e 79 20 6e 75  ll accept any nu
7c40: 6d 62 65 72 0a 2a 2a 20 6f 66 20 61 72 67 75 6d  mber.** of argum
7c50: 65 6e 74 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ents, including 
7c60: 30 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  0.  The maximum 
7c70: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 20 6f 66  allowed value of
7c80: 20 6e 41 72 67 20 69 73 20 31 32 37 2e 0a 2a 2f   nArg is 127..*/
7c90: 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 72 65 61  .int sqlite_crea
7ca0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73  te_function(.  s
7cb0: 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20  qlite *db,      
7cc0: 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 66      /* Add the f
7cd0: 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  unction to this 
7ce0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7cf0: 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ion */.  const c
7d00: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 2f 2a  har *zName,   /*
7d10: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   Name of the fun
7d20: 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a 2f 0a  ction to add */.
7d30: 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 20    int nArg,     
7d40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7d50: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
7d60: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
7d70: 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c 69 6e  (sqlite_func*,in
7d80: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 2c  t,const char**),
7d90: 20 20 2f 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65    /* The impleme
7da0: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  ntation */.  voi
7db0: 64 20 2a 70 55 73 65 72 44 61 74 61 20 20 20 20  d *pUserData    
7dc0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 2a    /* User data *
7dd0: 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  /.){.  FuncDef *
7de0: 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  p;.  int nName;.
7df0: 20 20 69 66 28 20 64 62 3d 3d 30 20 7c 7c 20 7a    if( db==0 || z
7e00: 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  Name==0 || sqlit
7e10: 65 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  eSafetyCheck(db)
7e20: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 69   ) return 1;.  i
7e30: 66 28 20 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41  f( nArg<-1 || nA
7e40: 72 67 3e 31 32 37 20 29 20 72 65 74 75 72 6e 20  rg>127 ) return 
7e50: 31 3b 0a 20 20 6e 4e 61 6d 65 20 3d 20 73 74 72  1;.  nName = str
7e60: 6c 65 6e 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66  len(zName);.  if
7e70: 28 20 6e 4e 61 6d 65 3e 32 35 35 20 29 20 72 65  ( nName>255 ) re
7e80: 74 75 72 6e 20 31 3b 0a 20 20 70 20 3d 20 73 71  turn 1;.  p = sq
7e90: 6c 69 74 65 46 69 6e 64 46 75 6e 63 74 69 6f 6e  liteFindFunction
7ea0: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  (db, zName, nNam
7eb0: 65 2c 20 6e 41 72 67 2c 20 31 29 3b 0a 20 20 69  e, nArg, 1);.  i
7ec0: 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( p==0 ) return
7ed0: 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d   1;.  p->xFunc =
7ee0: 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e 78 53 74   xFunc;.  p->xSt
7ef0: 65 70 20 3d 20 30 3b 0a 20 20 70 2d 3e 78 46 69  ep = 0;.  p->xFi
7f00: 6e 61 6c 69 7a 65 20 3d 20 30 3b 0a 20 20 70 2d  nalize = 0;.  p-
7f10: 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55 73  >pUserData = pUs
7f20: 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75 72 6e  erData;.  return
7f30: 20 30 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65   0;.}.int sqlite
7f40: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
7f50: 65 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c  e(.  sqlite *db,
7f60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
7f70: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
7f80: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
7f90: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 63  onnection */.  c
7fa0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
7fb0: 2c 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ,   /* Name of t
7fc0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61  he function to a
7fd0: 64 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  dd */.  int nArg
7fe0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ,            /* 
7ff0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
8000: 6e 74 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  nts */.  void (*
8010: 78 53 74 65 70 29 28 73 71 6c 69 74 65 5f 66 75  xStep)(sqlite_fu
8020: 6e 63 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  nc*,int,const ch
8030: 61 72 2a 2a 29 2c 20 2f 2a 20 54 68 65 20 73 74  ar**), /* The st
8040: 65 70 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ep function */. 
8050: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
8060: 65 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 29  e)(sqlite_func*)
8070: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
8080: 2a 20 54 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  * The finalizer 
8090: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
80a0: 44 61 74 61 20 20 20 20 20 20 2f 2a 20 55 73 65  Data      /* Use
80b0: 72 20 64 61 74 61 20 2a 2f 0a 29 7b 0a 20 20 46  r data */.){.  F
80c0: 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74  uncDef *p;.  int
80d0: 20 6e 4e 61 6d 65 3b 0a 20 20 69 66 28 20 64 62   nName;.  if( db
80e0: 3d 3d 30 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20  ==0 || zName==0 
80f0: 7c 7c 20 73 71 6c 69 74 65 53 61 66 65 74 79 43  || sqliteSafetyC
8100: 68 65 63 6b 28 64 62 29 20 29 20 72 65 74 75 72  heck(db) ) retur
8110: 6e 20 31 3b 0a 20 20 69 66 28 20 6e 41 72 67 3c  n 1;.  if( nArg<
8120: 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 20 29  -1 || nArg>127 )
8130: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 6e 4e 61   return 1;.  nNa
8140: 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e 61 6d  me = strlen(zNam
8150: 65 29 3b 0a 20 20 69 66 28 20 6e 4e 61 6d 65 3e  e);.  if( nName>
8160: 32 35 35 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  255 ) return 1;.
8170: 20 20 70 20 3d 20 73 71 6c 69 74 65 46 69 6e 64    p = sqliteFind
8180: 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 4e 61  Function(db, zNa
8190: 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  me, nName, nArg,
81a0: 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20   1);.  if( p==0 
81b0: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 2d  ) return 1;.  p-
81c0: 3e 78 46 75 6e 63 20 3d 20 30 3b 0a 20 20 70 2d  >xFunc = 0;.  p-
81d0: 3e 78 53 74 65 70 20 3d 20 78 53 74 65 70 3b 0a  >xStep = xStep;.
81e0: 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d    p->xFinalize =
81f0: 20 78 46 69 6e 61 6c 69 7a 65 3b 0a 20 20 70 2d   xFinalize;.  p-
8200: 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55 73  >pUserData = pUs
8210: 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75 72 6e  erData;.  return
8220: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61   0;.}../*.** Cha
8230: 6e 67 65 20 74 68 65 20 64 61 74 61 74 79 70 65  nge the datatype
8240: 20 66 6f 72 20 61 6c 6c 20 66 75 6e 63 74 69 6f   for all functio
8250: 6e 73 20 77 69 74 68 20 61 20 67 69 76 65 6e 20  ns with a given 
8260: 6e 61 6d 65 2e 20 20 53 65 65 20 74 68 65 0a 2a  name.  See the.*
8270: 2a 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  * header comment
8280: 20 66 6f 72 20 74 68 65 20 70 72 6f 74 6f 74 79   for the prototy
8290: 70 65 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74  pe of this funct
82a0: 69 6f 6e 20 69 6e 20 73 71 6c 69 74 65 2e 68 20  ion in sqlite.h 
82b0: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
82c0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
82d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 66 75 6e  /.int sqlite_fun
82e0: 63 74 69 6f 6e 5f 74 79 70 65 28 73 71 6c 69 74  ction_type(sqlit
82f0: 65 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  e *db, const cha
8300: 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 64 61  r *zName, int da
8310: 74 61 54 79 70 65 29 7b 0a 20 20 46 75 6e 63 44  taType){.  FuncD
8320: 65 66 20 2a 70 20 3d 20 28 46 75 6e 63 44 65 66  ef *p = (FuncDef
8330: 2a 29 73 71 6c 69 74 65 48 61 73 68 46 69 6e 64  *)sqliteHashFind
8340: 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 7a 4e 61  (&db->aFunc, zNa
8350: 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65  me, strlen(zName
8360: 29 29 3b 0a 20 20 77 68 69 6c 65 28 20 70 20 29  ));.  while( p )
8370: 7b 0a 20 20 20 20 70 2d 3e 64 61 74 61 54 79 70  {.    p->dataTyp
8380: 65 20 3d 20 64 61 74 61 54 79 70 65 3b 20 0a 20  e = dataType; . 
8390: 20 20 20 70 20 3d 20 70 2d 3e 70 4e 65 78 74 3b     p = p->pNext;
83a0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
83b0: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
83c0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61  * Register a tra
83d0: 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  ce function.  Th
83e0: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
83f0: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
8400: 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69  tered trace.** i
8410: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
8420: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65  .** A NULL trace
8430: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
8440: 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20  that no tracing 
8450: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
8460: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63  non-NULL.** trac
8470: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
8480: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
8490: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
84a0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63  the start of eac
84b0: 68 0a 2a 2a 20 73 71 6c 69 74 65 5f 65 78 65 63  h.** sqlite_exec
84c0: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ()..*/.void *sql
84d0: 69 74 65 5f 74 72 61 63 65 28 73 71 6c 69 74 65  ite_trace(sqlite
84e0: 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78 54 72   *db, void (*xTr
84f0: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
8500: 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20 2a 70   char*), void *p
8510: 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f  Arg){.  void *pO
8520: 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63 65 41  ld = db->pTraceA
8530: 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63 65  rg;.  db->xTrace
8540: 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62 2d   = xTrace;.  db-
8550: 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70 41 72  >pTraceArg = pAr
8560: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  g;.  return pOld
8570: 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52 49  ;.}../*** EXPERI
8580: 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a  MENTAL ***.**.**
8590: 20 52 65 67 69 73 74 65 72 20 61 20 66 75 6e 63   Register a func
85a0: 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
85b0: 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e 73 61  ed when a transa
85c0: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a  ction comments..
85d0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66 75 6e  ** If either fun
85e0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f  ction returns no
85f0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
8600: 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20   commit becomes 
8610: 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a  a.** rollback..*
8620: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 5f 63  /.void *sqlite_c
8630: 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71  ommit_hook(.  sq
8640: 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20  lite *db,       
8650: 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63          /* Attac
8660: 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68  h the hook to th
8670: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
8680: 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b   int (*xCallback
8690: 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75  )(void*),  /* Fu
86a0: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
86b0: 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20   on each commit 
86c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20  */.  void *pArg 
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
86e0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
86f0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  e function */.){
8700: 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20  .  void *pOld = 
8710: 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a  db->pCommitArg;.
8720: 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c    db->xCommitCal
8730: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
8740: 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74  k;.  db->pCommit
8750: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
8760: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f  turn pOld;.}.../
8770: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8780: 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  e is called to c
8790: 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69  reate a connecti
87a0: 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  on to a database
87b0: 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72   BTree.** driver
87c0: 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20  .  If zFilename 
87d0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
87e0: 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74   file, then that
87f0: 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e   file is.** open
8800: 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66  ed and used.  If
8810: 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68   zFilename is th
8820: 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d  e magic name ":m
8830: 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20  emory:" then.** 
8840: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
8850: 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79  stored in memory
8860: 20 28 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f   (and is thus fo
8870: 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20  rgotten as soon 
8880: 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63  as.** the connec
8890: 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29  tion is closed.)
88a0: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
88b0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
88c0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 66  database.** is f
88d0: 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 75 73 65  or temporary use
88e0: 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20 64 65 6c   only and is del
88f0: 65 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20  eted as soon as 
8900: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a  the connection.*
8910: 2a 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  * is closed..**.
8920: 2a 2a 20 41 20 74 65 6d 70 6f 72 61 72 79 20 64  ** A temporary d
8930: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 65  atabase can be e
8940: 69 74 68 65 72 20 61 20 64 69 73 6b 20 66 69 6c  ither a disk fil
8950: 65 20 28 74 68 61 74 20 69 73 20 61 75 74 6f 6d  e (that is autom
8960: 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c 65  atically.** dele
8970: 74 65 64 20 77 68 65 6e 20 74 68 65 20 66 69 6c  ted when the fil
8980: 65 20 69 73 20 63 6c 6f 73 65 64 29 20 6f 72 20  e is closed) or 
8990: 61 20 73 65 74 20 6f 66 20 72 65 64 2d 62 6c 61  a set of red-bla
89a0: 63 6b 20 74 72 65 65 73 20 68 65 6c 64 20 69 6e  ck trees held in
89b0: 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65   memory,.** depe
89c0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c  nding on the val
89d0: 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f  ues of the TEMP_
89e0: 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69  STORE compile-ti
89f0: 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65  me macro and the
8a00: 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  .** db->temp_sto
8a10: 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63  re variable, acc
8a20: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
8a30: 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a  llowing chart:.*
8a40: 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f  *.**       TEMP_
8a50: 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65  STORE     db->te
8a60: 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63  mp_store     Loc
8a70: 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61  ation of tempora
8a80: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20  ry database.**  
8a90: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20       ---------- 
8aa0: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
8ab0: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
8ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8ad0: 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20  -----.**        
8ae0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
8af0: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
8b00: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
8b10: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
8b20: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
8b30: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
8b40: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
8b50: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
8b60: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
8b70: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20              0   
8b90: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
8ba0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
8bd0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  2              m
8c00: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
8c10: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
8c20: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
8c30: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
8c40: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
8c50: 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20         any      
8c60: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f         memory.*/
8c70: 0a 69 6e 74 20 73 71 6c 69 74 65 42 74 72 65 65  .int sqliteBtree
8c80: 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74  Factory(.  const
8c90: 20 73 71 6c 69 74 65 20 2a 64 62 2c 09 20 20 20   sqlite *db,.   
8ca0: 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61 73   /* Main databas
8cb0: 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61  e when opening a
8cc0: 75 78 20 6f 74 68 65 72 77 69 73 65 20 30 20 2a  ux otherwise 0 *
8cd0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
8ce0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f 2a  zFilename,    /*
8cf0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c   Name of the fil
8d00: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
8d10: 20 42 54 72 65 65 20 64 61 74 61 62 61 73 65 20   BTree database 
8d20: 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75  */.  int omitJou
8d30: 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f  rnal,          /
8d40: 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e 20 64  * if TRUE then d
8d50: 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74 68  o not journal th
8d60: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
8d70: 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20 20   nCache,        
8d80: 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 61         /* How ma
8d90: 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ny pages in the 
8da0: 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20 20  page cache */.  
8db0: 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65 29  Btree **ppBtree)
8dc0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  {         /* Poi
8dd0: 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72 65  nter to new Btre
8de0: 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65 6e  e object written
8df0: 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
8e00: 72 74 28 20 70 70 42 74 72 65 65 20 21 3d 20 30  rt( ppBtree != 0
8e10: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
8e20: 54 45 5f 4f 4d 49 54 5f 49 4e 4d 45 4d 4f 52 59  TE_OMIT_INMEMORY
8e30: 44 42 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61  DB.  if( zFilena
8e40: 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 20  me==0 ){.    if 
8e50: 28 54 45 4d 50 5f 53 54 4f 52 45 20 3d 3d 20 30  (TEMP_STORE == 0
8e60: 29 20 7b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 77  ) {.      /* Alw
8e70: 61 79 73 20 75 73 65 20 66 69 6c 65 20 62 61 73  ays use file bas
8e80: 65 64 20 74 65 6d 70 6f 72 61 72 79 20 44 42 20  ed temporary DB 
8e90: 2a 2f 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  */.      return 
8ea0: 73 71 6c 69 74 65 42 74 72 65 65 4f 70 65 6e 28  sqliteBtreeOpen(
8eb0: 30 2c 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20  0, omitJournal, 
8ec0: 6e 43 61 63 68 65 2c 20 70 70 42 74 72 65 65 29  nCache, ppBtree)
8ed0: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  ;.    } else if 
8ee0: 28 54 45 4d 50 5f 53 54 4f 52 45 20 3d 3d 20 31  (TEMP_STORE == 1
8ef0: 20 7c 7c 20 54 45 4d 50 5f 53 54 4f 52 45 20 3d   || TEMP_STORE =
8f00: 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 2f 2a 20  = 2) {.      /* 
8f10: 53 77 69 74 63 68 20 64 65 70 65 6e 64 69 6e 67  Switch depending
8f20: 20 6f 6e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   on compile-time
8f30: 20 61 6e 64 2f 6f 72 20 72 75 6e 74 69 6d 65 20   and/or runtime 
8f40: 73 65 74 74 69 6e 67 73 2e 20 2a 2f 0a 20 20 20  settings. */.   
8f50: 20 20 20 69 6e 74 20 6c 6f 63 61 74 69 6f 6e 20     int location 
8f60: 3d 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  = db->temp_store
8f70: 3d 3d 30 20 3f 20 54 45 4d 50 5f 53 54 4f 52 45  ==0 ? TEMP_STORE
8f80: 20 3a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72   : db->temp_stor
8f90: 65 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 6c 6f  e;..      if (lo
8fa0: 63 61 74 69 6f 6e 20 3d 3d 20 31 29 20 7b 0a 20  cation == 1) {. 
8fb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71         return sq
8fc0: 6c 69 74 65 42 74 72 65 65 4f 70 65 6e 28 7a 46  liteBtreeOpen(zF
8fd0: 69 6c 65 6e 61 6d 65 2c 20 6f 6d 69 74 4a 6f 75  ilename, omitJou
8fe0: 72 6e 61 6c 2c 20 6e 43 61 63 68 65 2c 20 70 70  rnal, nCache, pp
8ff0: 42 74 72 65 65 29 3b 0a 20 20 20 20 20 20 7d 20  Btree);.      } 
9000: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72  else {.        r
9010: 65 74 75 72 6e 20 73 71 6c 69 74 65 52 62 74 72  eturn sqliteRbtr
9020: 65 65 4f 70 65 6e 28 30 2c 20 30 2c 20 30 2c 20  eeOpen(0, 0, 0, 
9030: 70 70 42 74 72 65 65 29 3b 0a 20 20 20 20 20 20  ppBtree);.      
9040: 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  }.    } else {. 
9050: 20 20 20 20 20 2f 2a 20 41 6c 77 61 79 73 20 75       /* Always u
9060: 73 65 20 69 6e 2d 63 6f 72 65 20 44 42 20 2a 2f  se in-core DB */
9070: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71  .      return sq
9080: 6c 69 74 65 52 62 74 72 65 65 4f 70 65 6e 28 30  liteRbtreeOpen(0
9090: 2c 20 30 2c 20 30 2c 20 70 70 42 74 72 65 65 29  , 0, 0, ppBtree)
90a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
90b0: 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d  if( zFilename[0]
90c0: 3d 3d 27 3a 27 20 26 26 20 73 74 72 63 6d 70 28  ==':' && strcmp(
90d0: 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a 6d 65 6d 6f  zFilename,":memo
90e0: 72 79 3a 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ry:")==0 ){.    
90f0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 52 62 74  return sqliteRbt
9100: 72 65 65 4f 70 65 6e 28 30 2c 20 30 2c 20 30 2c  reeOpen(0, 0, 0,
9110: 20 70 70 42 74 72 65 65 29 3b 0a 20 20 7d 65 6c   ppBtree);.  }el
9120: 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20  se.#endif.  {.  
9130: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 42    return sqliteB
9140: 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61  treeOpen(zFilena
9150: 6d 65 2c 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c  me, omitJournal,
9160: 20 6e 43 61 63 68 65 2c 20 70 70 42 74 72 65 65   nCache, ppBtree
9170: 29 3b 0a 20 20 7d 0a 7d 0a                       );.  }.}.