/ Hex Artifact Content
Login

Artifact 808ea1bda0798f4a714479aee8289d65f04cf29b:


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 34 36 20 32 30 30 34 2f 30 31  ,v 1.146 2004/01
0280: 2f 31 35 20 31 33 3a 32 39 3a 33 32 20 64 72 68  /15 13:29:32 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  .h>../*.** A poi
02e0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
02f0: 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
0300: 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
0310: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
0320: 6d 20 73 71 6c 69 74 65 49 6e 69 74 20 69 6e 74  m sqliteInit int
0330: 6f 20 74 68 65 20 73 71 6c 69 74 65 49 6e 69 74  o the sqliteInit
0340: 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
0350: 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
0360: 73 71 6c 69 74 65 20 2a 64 62 3b 20 20 20 20 20  sqlite *db;     
0370: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
0380: 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
0390: 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
03a0: 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
03b0: 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
03c0: 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
03d0: 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
03e0: 2a 20 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44  * Fill the InitD
03f0: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 77 69  ata structure wi
0400: 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  th an error mess
0410: 61 67 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  age that indicat
0420: 65 73 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  es.** that the d
0430: 61 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75  atabase is corru
0440: 70 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  pt..*/.static vo
0450: 69 64 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61  id corruptSchema
0460: 28 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61  (InitData *pData
0470: 29 7b 0a 20 20 73 71 6c 69 74 65 53 65 74 53 74  ){.  sqliteSetSt
0480: 72 69 6e 67 28 70 44 61 74 61 2d 3e 70 7a 45 72  ring(pData->pzEr
0490: 72 4d 73 67 2c 20 22 6d 61 6c 66 6f 72 6d 65 64  rMsg, "malformed
04a0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
04b0: 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 7d 0a  ", (char*)0);.}.
04c0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
04d0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  he callback rout
04e0: 69 6e 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ine for the code
04f0: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
0500: 73 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  s the.** databas
0510: 65 2e 20 20 53 65 65 20 73 71 6c 69 74 65 49 6e  e.  See sqliteIn
0520: 69 74 28 29 20 62 65 6c 6f 77 20 66 6f 72 20 61  it() below for a
0530: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
0540: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ation..**.** Eac
0550: 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61  h callback conta
0560: 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ins the followin
0570: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a  g information:.*
0580: 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d  *.**     argv[0]
0590: 20 3d 20 22 66 69 6c 65 2d 66 6f 72 6d 61 74 22   = "file-format"
05a0: 20 6f 72 20 22 73 63 68 65 6d 61 2d 63 6f 6f 6b   or "schema-cook
05b0: 69 65 22 20 6f 72 20 22 74 61 62 6c 65 22 20 6f  ie" or "table" o
05c0: 72 20 22 69 6e 64 65 78 22 0a 2a 2a 20 20 20 20  r "index".**    
05d0: 20 61 72 67 76 5b 31 5d 20 3d 20 74 61 62 6c 65   argv[1] = table
05e0: 20 6f 72 20 69 6e 64 65 78 20 6e 61 6d 65 20 6f   or index name o
05f0: 72 20 6d 65 74 61 20 73 74 61 74 65 6d 65 6e 74  r meta statement
0600: 20 74 79 70 65 2e 0a 2a 2a 20 20 20 20 20 61 72   type..**     ar
0610: 67 76 5b 32 5d 20 3d 20 72 6f 6f 74 20 70 61 67  gv[2] = root pag
0620: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 61 62  e number for tab
0630: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 4e 55  le or index.  NU
0640: 4c 4c 20 66 6f 72 20 6d 65 74 61 2e 0a 2a 2a 20  LL for meta..** 
0650: 20 20 20 20 61 72 67 76 5b 33 5d 20 3d 20 53 51      argv[3] = SQ
0660: 4c 20 74 65 78 74 20 66 6f 72 20 61 20 43 52 45  L text for a CRE
0670: 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45  ATE TABLE or CRE
0680: 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
0690: 65 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76  ent..**     argv
06a0: 5b 34 5d 20 3d 20 22 31 22 20 66 6f 72 20 74 65  [4] = "1" for te
06b0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20 22  mporary files, "
06c0: 30 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61  0" for main data
06d0: 62 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f 72  base, "2" or mor
06e0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
06f0: 20 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79     for auxiliary
0700: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
0710: 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 0a 69 6e  .**.*/.static.in
0720: 74 20 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c  t sqliteInitCall
0730: 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74  back(void *pInit
0740: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
0750: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
0760: 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20 49 6e  azColName){.  In
0770: 69 74 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20  itData *pData = 
0780: 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74  (InitData*)pInit
0790: 3b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73 65  ;.  Parse sParse
07a0: 3b 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30  ;.  int nErr = 0
07b0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  ;..  assert( arg
07c0: 63 3d 3d 35 20 29 3b 0a 20 20 69 66 28 20 61 72  c==5 );.  if( ar
07d0: 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  gv==0 ) return 0
07e0: 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 70  ;   /* Might hap
07f0: 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52 45 53  pen if EMPTY_RES
0800: 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20 61 72  ULT_CALLBACKS ar
0810: 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 61 72  e on */.  if( ar
0820: 67 76 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[0]==0 ){.    
0830: 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44  corruptSchema(pD
0840: 61 74 61 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ata);.    return
0850: 20 31 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68   1;.  }.  switch
0860: 28 20 61 72 67 76 5b 30 5d 5b 30 5d 20 29 7b 0a  ( argv[0][0] ){.
0870: 20 20 20 20 63 61 73 65 20 27 76 27 3a 0a 20 20      case 'v':.  
0880: 20 20 63 61 73 65 20 27 69 27 3a 0a 20 20 20 20    case 'i':.    
0890: 63 61 73 65 20 27 74 27 3a 20 7b 20 20 2f 2a 20  case 't': {  /* 
08a0: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52  CREATE TABLE, CR
08b0: 45 41 54 45 20 49 4e 44 45 58 2c 20 6f 72 20 43  EATE INDEX, or C
08c0: 52 45 41 54 45 20 56 49 45 57 20 73 74 61 74 65  REATE VIEW state
08d0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 69  ments */.      i
08e0: 66 28 20 61 72 67 76 5b 32 5d 3d 3d 30 20 7c 7c  f( argv[2]==0 ||
08f0: 20 61 72 67 76 5b 34 5d 3d 3d 30 20 29 7b 0a 20   argv[4]==0 ){. 
0900: 20 20 20 20 20 20 20 63 6f 72 72 75 70 74 53 63         corruptSc
0910: 68 65 6d 61 28 70 44 61 74 61 29 3b 0a 20 20 20  hema(pData);.   
0920: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
0930: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
0940: 20 61 72 67 76 5b 33 5d 20 26 26 20 61 72 67 76   argv[3] && argv
0950: 5b 33 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  [3][0] ){.      
0960: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 61    /* Call the pa
0970: 72 73 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20  rser to process 
0980: 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20  a CREATE TABLE, 
0990: 49 4e 44 45 58 20 6f 72 20 56 49 45 57 2e 0a 20  INDEX or VIEW.. 
09a0: 20 20 20 20 20 20 20 2a 2a 20 42 75 74 20 62 65         ** But be
09b0: 63 61 75 73 65 20 73 50 61 72 73 65 2e 69 6e 69  cause sParse.ini
09c0: 74 46 6c 61 67 20 69 73 20 73 65 74 20 74 6f 20  tFlag is set to 
09d0: 31 2c 20 6e 6f 20 56 44 42 45 20 63 6f 64 65 20  1, no VDBE code 
09e0: 69 73 20 67 65 6e 65 72 61 74 65 64 0a 20 20 20  is generated.   
09f0: 20 20 20 20 20 2a 2a 20 6f 72 20 65 78 65 63 75       ** or execu
0a00: 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20 70 61  ted.  All the pa
0a10: 72 73 65 72 20 64 6f 65 73 20 69 73 20 62 75 69  rser does is bui
0a20: 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ld the internal 
0a30: 64 61 74 61 0a 20 20 20 20 20 20 20 20 2a 2a 20  data.        ** 
0a40: 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
0a50: 64 65 73 63 72 69 62 65 20 74 68 65 20 74 61 62  describe the tab
0a60: 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 76 69  le, index, or vi
0a70: 65 77 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  ew..        */. 
0a80: 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
0a90: 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66  Parse, 0, sizeof
0aa0: 28 73 50 61 72 73 65 29 29 3b 0a 20 20 20 20 20  (sParse));.     
0ab0: 20 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20 70     sParse.db = p
0ac0: 44 61 74 61 2d 3e 64 62 3b 0a 20 20 20 20 20 20  Data->db;.      
0ad0: 20 20 73 50 61 72 73 65 2e 69 6e 69 74 46 6c 61    sParse.initFla
0ae0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73  g = 1;.        s
0af0: 50 61 72 73 65 2e 69 44 62 20 3d 20 61 74 6f 69  Parse.iDb = atoi
0b00: 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20 20 20  (argv[4]);.     
0b10: 20 20 20 73 50 61 72 73 65 2e 6e 65 77 54 6e 75     sParse.newTnu
0b20: 6d 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d  m = atoi(argv[2]
0b30: 29 3b 0a 20 20 20 20 20 20 20 20 73 50 61 72 73  );.        sPars
0b40: 65 2e 75 73 65 43 61 6c 6c 62 61 63 6b 20 3d 20  e.useCallback = 
0b50: 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  1;.        sqlit
0b60: 65 52 75 6e 50 61 72 73 65 72 28 26 73 50 61 72  eRunParser(&sPar
0b70: 73 65 2c 20 61 72 67 76 5b 33 5d 2c 20 70 44 61  se, argv[3], pDa
0b80: 74 61 2d 3e 70 7a 45 72 72 4d 73 67 29 3b 0a 20  ta->pzErrMsg);. 
0b90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
0ba0: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51      /* If the SQ
0bb0: 4c 20 63 6f 6c 75 6d 6e 20 69 73 20 62 6c 61 6e  L column is blan
0bc0: 6b 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  k it means this 
0bd0: 69 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  is an index that
0be0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 61 73 20  .        ** was 
0bf0: 63 72 65 61 74 65 64 20 74 6f 20 62 65 20 74 68  created to be th
0c00: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
0c10: 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e   to fulfill a UN
0c20: 49 51 55 45 0a 20 20 20 20 20 20 20 20 2a 2a 20  IQUE.        ** 
0c30: 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 61  constraint for a
0c40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 20 20   CREATE TABLE.  
0c50: 54 68 65 20 69 6e 64 65 78 20 73 68 6f 75 6c 64  The index should
0c60: 20 68 61 76 65 20 61 6c 72 65 61 64 79 0a 20 20   have already.  
0c70: 20 20 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72        ** been cr
0c80: 65 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72  eated when we pr
0c90: 6f 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41  ocessed the CREA
0ca0: 54 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77  TE TABLE.  All w
0cb0: 65 20 68 61 76 65 0a 20 20 20 20 20 20 20 20 2a  e have.        *
0cc0: 2a 20 74 6f 20 64 6f 20 68 65 72 65 20 69 73 20  * to do here is 
0cd0: 72 65 63 6f 72 64 20 74 68 65 20 72 6f 6f 74 20  record the root 
0ce0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0cf0: 74 68 61 74 20 69 6e 64 65 78 2e 0a 20 20 20 20  that index..    
0d00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
0d10: 6e 74 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20  nt iDb;.        
0d20: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 0a 0a  Index *pIndex;..
0d30: 20 20 20 20 20 20 20 20 69 44 62 20 3d 20 61 74          iDb = at
0d40: 6f 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20  oi(argv[4]);.   
0d50: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62       assert( iDb
0d60: 3e 3d 30 20 26 26 20 69 44 62 3c 70 44 61 74 61  >=0 && iDb<pData
0d70: 2d 3e 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  ->db->nDb );.   
0d80: 20 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73 71       pIndex = sq
0d90: 6c 69 74 65 46 69 6e 64 49 6e 64 65 78 28 70 44  liteFindIndex(pD
0da0: 61 74 61 2d 3e 64 62 2c 20 61 72 67 76 5b 31 5d  ata->db, argv[1]
0db0: 2c 20 70 44 61 74 61 2d 3e 64 62 2d 3e 61 44 62  , pData->db->aDb
0dc0: 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [iDb].zName);.  
0dd0: 20 20 20 20 20 20 69 66 28 20 70 49 6e 64 65 78        if( pIndex
0de0: 3d 3d 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e 74  ==0 || pIndex->t
0df0: 6e 75 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  num!=0 ){.      
0e00: 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6e 20      /* This can 
0e10: 6f 63 63 75 72 20 69 66 20 74 68 65 72 65 20 65  occur if there e
0e20: 78 69 73 74 73 20 61 6e 20 69 6e 64 65 78 20 6f  xists an index o
0e30: 6e 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 77  n a TEMP table w
0e40: 68 69 63 68 0a 20 20 20 20 20 20 20 20 20 20 2a  hich.          *
0e50: 2a 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  * has the same n
0e60: 61 6d 65 20 61 73 20 61 6e 6f 74 68 65 72 20 69  ame as another i
0e70: 6e 64 65 78 20 6f 6e 20 61 20 70 65 72 6d 61 6e  ndex on a perman
0e80: 65 6e 74 20 69 6e 64 65 78 2e 20 20 53 69 6e 63  ent index.  Sinc
0e90: 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  e.          ** t
0ea0: 68 65 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62  he permanent tab
0eb0: 6c 65 20 69 73 20 68 69 64 64 65 6e 20 62 79 20  le is hidden by 
0ec0: 74 68 65 20 54 45 4d 50 20 74 61 62 6c 65 2c 20  the TEMP table, 
0ed0: 77 65 20 63 61 6e 20 61 6c 73 6f 0a 20 20 20 20  we can also.    
0ee0: 20 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20        ** safely 
0ef0: 69 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78  ignore the index
0f00: 20 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e   on the permanen
0f10: 74 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 20  t table..       
0f20: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20     */.          
0f30: 2f 2a 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f  /* Do Nothing */
0f40: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
0f50: 0a 20 20 20 20 20 20 20 20 20 20 70 49 6e 64 65  .          pInde
0f60: 78 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28 61  x->tnum = atoi(a
0f70: 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20  rgv[2]);.       
0f80: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
0f90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
0fa0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
0fb0: 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6e 20 6e     /* This can n
0fc0: 6f 74 20 68 61 70 70 65 6e 21 20 2a 2f 0a 20 20  ot happen! */.  
0fd0: 20 20 20 20 6e 45 72 72 20 3d 20 31 3b 0a 20 20      nErr = 1;.  
0fe0: 20 20 20 20 61 73 73 65 72 74 28 20 6e 45 72 72      assert( nErr
0ff0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ==0 );.    }.  }
1000: 0a 20 20 72 65 74 75 72 6e 20 6e 45 72 72 3b 0a  .  return nErr;.
1010: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
1020: 20 61 20 63 61 6c 6c 62 61 63 6b 20 70 72 6f 63   a callback proc
1030: 65 64 75 72 65 20 75 73 65 64 20 74 6f 20 72 65  edure used to re
1040: 63 6f 6e 73 74 72 75 63 74 20 61 20 74 61 62 6c  construct a tabl
1050: 65 2e 20 20 54 68 65 0a 2a 2a 20 6e 61 6d 65 20  e.  The.** name 
1060: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1070: 62 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64  be reconstructed
1080: 20 69 73 20 70 61 73 73 65 64 20 69 6e 20 61 73   is passed in as
1090: 20 61 72 67 76 5b 30 5d 2e 0a 2a 2a 0a 2a 2a 20   argv[0]..**.** 
10a0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
10b0: 75 73 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 69  used to automati
10c0: 63 61 6c 6c 79 20 75 70 67 72 61 64 65 20 61 20  cally upgrade a 
10d0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 0a 2a 2a  database from.**
10e0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
10f0: 31 20 6f 72 20 32 20 74 6f 20 76 65 72 73 69 6f  1 or 2 to versio
1100: 6e 20 33 2e 20 20 54 68 65 20 63 6f 72 72 65 63  n 3.  The correc
1110: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  t operation of.*
1120: 2a 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * this routine r
1130: 65 6c 79 73 20 6f 6e 20 74 68 65 20 66 61 63 74  elys on the fact
1140: 20 74 68 61 74 20 6e 6f 20 69 6e 64 69 63 65 73   that no indices
1150: 20 61 72 65 20 75 73 65 64 20 77 68 65 6e 0a 2a   are used when.*
1160: 2a 20 63 6f 70 79 69 6e 67 20 61 20 74 61 62 6c  * copying a tabl
1170: 65 20 6f 75 74 20 74 6f 20 61 20 74 65 6d 70 6f  e out to a tempo
1180: 72 61 72 79 20 66 69 6c 65 2e 0a 2a 2f 0a 73 74  rary file..*/.st
1190: 61 74 69 63 0a 69 6e 74 20 75 70 67 72 61 64 65  atic.int upgrade
11a0: 5f 33 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64  _3_callback(void
11b0: 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20 61 72 67   *pInit, int arg
11c0: 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20  c, char **argv, 
11d0: 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29 7b  char **NotUsed){
11e0: 0a 20 20 49 6e 69 74 44 61 74 61 20 2a 70 44 61  .  InitData *pDa
11f0: 74 61 20 3d 20 28 49 6e 69 74 44 61 74 61 2a 29  ta = (InitData*)
1200: 70 49 6e 69 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pInit;.  int rc;
1210: 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
1220: 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1230: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
1240: 20 30 3b 0a 0a 20 20 70 54 61 62 20 3d 20 73 71   0;..  pTab = sq
1250: 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 70 44  liteFindTable(pD
1260: 61 74 61 2d 3e 64 62 2c 20 61 72 67 76 5b 30 5d  ata->db, argv[0]
1270: 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
1280: 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 61 73 73  pTab!=0 );.  ass
1290: 65 72 74 28 20 73 71 6c 69 74 65 53 74 72 49 43  ert( sqliteStrIC
12a0: 6d 70 28 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  mp(pTab->zName, 
12b0: 61 72 67 76 5b 30 5d 29 3d 3d 30 20 29 3b 0a 20  argv[0])==0 );. 
12c0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
12d0: 20 70 54 72 69 67 20 3d 20 70 54 61 62 2d 3e 70   pTrig = pTab->p
12e0: 54 72 69 67 67 65 72 3b 0a 20 20 20 20 70 54 61  Trigger;.    pTa
12f0: 62 2d 3e 70 54 72 69 67 67 65 72 20 3d 20 30 3b  b->pTrigger = 0;
1300: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c    /* Disable all
1310: 20 74 72 69 67 67 65 72 73 20 62 65 66 6f 72 65   triggers before
1320: 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20   rebuilding the 
1330: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20 72  table */.  }.  r
1340: 63 20 3d 20 73 71 6c 69 74 65 5f 65 78 65 63 5f  c = sqlite_exec_
1350: 70 72 69 6e 74 66 28 70 44 61 74 61 2d 3e 64 62  printf(pData->db
1360: 2c 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 45  ,.    "CREATE TE
1370: 4d 50 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  MP TABLE sqlite_
1380: 78 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  x AS SELECT * FR
1390: 4f 4d 20 27 25 71 27 3b 20 22 0a 20 20 20 20 22  OM '%q'; ".    "
13a0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 27 25 71 27  DELETE FROM '%q'
13b0: 3b 20 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  ; ".    "INSERT 
13c0: 49 4e 54 4f 20 27 25 71 27 20 53 45 4c 45 43 54  INTO '%q' SELECT
13d0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 78   * FROM sqlite_x
13e0: 3b 20 22 0a 20 20 20 20 22 44 52 4f 50 20 54 41  ; ".    "DROP TA
13f0: 42 4c 45 20 73 71 6c 69 74 65 5f 78 3b 22 2c 0a  BLE sqlite_x;",.
1400: 20 20 20 20 30 2c 20 30 2c 20 26 7a 45 72 72 2c      0, 0, &zErr,
1410: 20 61 72 67 76 5b 30 5d 2c 20 61 72 67 76 5b 30   argv[0], argv[0
1420: 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 69  ], argv[0]);.  i
1430: 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 73  f( zErr ){.    s
1440: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
1450: 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 2c 20  Data->pzErrMsg, 
1460: 7a 45 72 72 2c 20 28 63 68 61 72 2a 29 30 29 3b  zErr, (char*)0);
1470: 0a 20 20 20 20 73 71 6c 69 74 65 5f 66 72 65 65  .    sqlite_free
1480: 6d 65 6d 28 7a 45 72 72 29 3b 0a 20 20 7d 0a 0a  mem(zErr);.  }..
1490: 20 20 2f 2a 20 49 66 20 61 6e 20 65 72 72 6f 72    /* If an error
14a0: 20 6f 63 63 75 72 72 65 64 20 69 6e 20 74 68 65   occurred in the
14b0: 20 53 51 4c 20 61 62 6f 76 65 2c 20 74 68 65 6e   SQL above, then
14c0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14d0: 20 77 69 6c 6c 0a 20 20 2a 2a 20 72 6f 6c 6c 62   will.  ** rollb
14e0: 61 63 6b 20 77 68 69 63 68 20 77 69 6c 6c 20 64  ack which will d
14f0: 65 6c 65 74 65 20 74 68 65 20 69 6e 74 65 72 6e  elete the intern
1500: 61 6c 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 73  al symbol tables
1510: 2e 20 20 54 68 69 73 20 77 69 6c 6c 0a 20 20 2a  .  This will.  *
1520: 2a 20 63 61 75 73 65 20 74 68 65 20 73 74 72 75  * cause the stru
1530: 63 74 75 72 65 20 74 68 61 74 20 70 54 61 62 20  cture that pTab 
1540: 70 6f 69 6e 74 73 20 74 6f 20 62 65 20 64 65 6c  points to be del
1550: 65 74 65 64 2e 20 20 49 6e 20 63 61 73 65 20 74  eted.  In case t
1560: 68 61 74 0a 20 20 2a 2a 20 68 61 70 70 65 6e 65  hat.  ** happene
1570: 64 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65  d, we need to re
1580: 66 65 74 63 68 20 70 54 61 62 2e 0a 20 20 2a 2f  fetch pTab..  */
1590: 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65  .  pTab = sqlite
15a0: 46 69 6e 64 54 61 62 6c 65 28 70 44 61 74 61 2d  FindTable(pData-
15b0: 3e 64 62 2c 20 61 72 67 76 5b 30 5d 2c 20 30 29  >db, argv[0], 0)
15c0: 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a  ;.  if( pTab ){.
15d0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
15e0: 74 65 53 74 72 49 43 6d 70 28 70 54 61 62 2d 3e  teStrICmp(pTab->
15f0: 7a 4e 61 6d 65 2c 20 61 72 67 76 5b 30 5d 29 3d  zName, argv[0])=
1600: 3d 30 20 29 3b 0a 20 20 20 20 70 54 61 62 2d 3e  =0 );.    pTab->
1610: 70 54 72 69 67 67 65 72 20 3d 20 70 54 72 69 67  pTrigger = pTrig
1620: 3b 20 20 2f 2a 20 52 65 2d 65 6e 61 62 6c 65 20  ;  /* Re-enable 
1630: 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 7d 0a  triggers */.  }.
1640: 20 20 72 65 74 75 72 6e 20 72 63 21 3d 53 51 4c    return rc!=SQL
1650: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a  ITE_OK;.}..../*.
1660: 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
1670: 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
1680: 73 63 68 65 6d 61 20 61 6e 64 20 69 6e 69 74 69  schema and initi
1690: 61 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a  alize internal.*
16a0: 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
16b0: 73 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64  s for a single d
16c0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
16d0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 0a  he index of the.
16e0: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
16f0: 20 69 73 20 67 69 76 65 6e 20 62 79 20 69 44 62   is given by iDb
1700: 2e 20 20 69 44 62 3d 3d 30 20 69 73 20 75 73 65  .  iDb==0 is use
1710: 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 0a 2a  d for the main.*
1720: 2a 20 64 61 74 61 62 61 73 65 2e 20 20 69 44 62  * database.  iDb
1730: 3d 3d 31 20 73 68 6f 75 6c 64 20 6e 65 76 65 72  ==1 should never
1740: 20 62 65 20 75 73 65 64 2e 20 20 69 44 62 3e 3d   be used.  iDb>=
1750: 32 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a  2 is used for.**
1760: 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
1770: 61 73 65 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e  ases.  Return on
1780: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
1790: 20 65 72 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a   error codes to.
17a0: 2a 2a 20 69 6e 64 69 63 61 74 65 20 73 75 63 63  ** indicate succ
17b0: 65 73 73 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a  ess or failure..
17c0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
17d0: 6c 69 74 65 49 6e 69 74 4f 6e 65 28 73 71 6c 69  liteInitOne(sqli
17e0: 74 65 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c  te *db, int iDb,
17f0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1800: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42  ){.  int rc;.  B
1810: 74 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e  tCursor *curMain
1820: 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20  ;.  int size;.  
1830: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63  Table *pTab;.  c
1840: 68 61 72 20 2a 61 7a 41 72 67 5b 36 5d 3b 0a 20  har *azArg[6];. 
1850: 20 63 68 61 72 20 7a 44 62 4e 75 6d 5b 33 30 5d   char zDbNum[30]
1860: 3b 0a 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c  ;.  int meta[SQL
1870: 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1880: 5d 3b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73  ];.  Parse sPars
1890: 65 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  e;.  InitData in
18a0: 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 0a 20 20  itData;..  /*.  
18b0: 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  ** The master da
18c0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 68 61 73  tabase table has
18d0: 20 61 20 73 74 72 75 63 74 75 72 65 20 6c 69 6b   a structure lik
18e0: 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73 74  e this.  */.  st
18f0: 61 74 69 63 20 63 68 61 72 20 6d 61 73 74 65 72  atic char master
1900: 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20  _schema[] = .   
1910: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1920: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e  sqlite_master(\n
1930: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
1940: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1950: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1960: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
1970: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1980: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1990: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
19a0: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
19b0: 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63 20 63  ".  ;.  static c
19c0: 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  har temp_master_
19d0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
19e0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
19f0: 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  BLE sqlite_temp_
1a00: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1a10: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
1a20: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
1a30: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
1a40: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
1a50: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
1a60: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
1a70: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
1a80: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a  ".     ")".  ;..
1a90: 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
1aa0: 6e 67 20 53 51 4c 20 77 69 6c 6c 20 72 65 61 64  ng SQL will read
1ab0: 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1ac0: 20 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c   the master tabl
1ad0: 65 73 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 72  es..  ** The fir
1ae0: 73 74 20 76 65 72 73 69 6f 6e 20 77 6f 72 6b 73  st version works
1af0: 20 77 69 74 68 20 53 51 4c 69 74 65 20 66 69 6c   with SQLite fil
1b00: 65 20 66 6f 72 6d 61 74 73 20 32 20 6f 72 20 67  e formats 2 or g
1b10: 72 65 61 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  reater..  ** The
1b20: 20 73 65 63 6f 6e 64 20 76 65 72 73 69 6f 6e 20   second version 
1b30: 69 73 20 66 6f 72 20 66 6f 72 6d 61 74 20 31 20  is for format 1 
1b40: 66 69 6c 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  files..  **.  **
1b50: 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   Beginning with 
1b60: 66 69 6c 65 20 66 6f 72 6d 61 74 20 32 2c 20 74  file format 2, t
1b70: 68 65 20 72 6f 77 69 64 20 66 6f 72 20 6e 65 77  he rowid for new
1b80: 20 74 61 62 6c 65 20 65 6e 74 72 69 65 73 0a 20   table entries. 
1b90: 20 2a 2a 20 28 69 6e 63 6c 75 64 69 6e 67 20 65   ** (including e
1ba0: 6e 74 72 69 65 73 20 69 6e 20 73 71 6c 69 74 65  ntries in sqlite
1bb0: 5f 6d 61 73 74 65 72 29 20 69 73 20 61 6e 20 69  _master) is an i
1bc0: 6e 63 72 65 61 73 69 6e 67 20 69 6e 74 65 67 65  ncreasing intege
1bd0: 72 2e 0a 20 20 2a 2a 20 53 6f 20 66 6f 72 20 66  r..  ** So for f
1be0: 69 6c 65 20 66 6f 72 6d 61 74 20 32 20 61 6e 64  ile format 2 and
1bf0: 20 6c 61 74 65 72 2c 20 77 65 20 63 61 6e 20 70   later, we can p
1c00: 6c 61 79 20 62 61 63 6b 20 73 71 6c 69 74 65 5f  lay back sqlite_
1c10: 6d 61 73 74 65 72 0a 20 20 2a 2a 20 61 6e 64 20  master.  ** and 
1c20: 61 6c 6c 20 74 68 65 20 43 52 45 41 54 45 20 73  all the CREATE s
1c30: 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 61  tatements will a
1c40: 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 69 67  ppear in the rig
1c50: 68 74 20 6f 72 64 65 72 2e 0a 20 20 2a 2a 20 42  ht order..  ** B
1c60: 75 74 20 77 69 74 68 20 66 69 6c 65 20 66 6f 72  ut with file for
1c70: 6d 61 74 20 31 2c 20 74 61 62 6c 65 20 65 6e 74  mat 1, table ent
1c80: 72 69 65 73 20 77 65 72 65 20 72 61 6e 64 6f 6d  ries were random
1c90: 20 61 6e 64 20 73 6f 20 77 65 0a 20 20 2a 2a 20   and so we.  ** 
1ca0: 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 73 75 72  have to make sur
1cb0: 65 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  e the CREATE TAB
1cc0: 4c 45 73 20 6f 63 63 75 72 20 62 65 66 6f 72 65  LEs occur before
1cd0: 20 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e   their correspon
1ce0: 64 69 6e 67 0a 20 20 2a 2a 20 43 52 45 41 54 45  ding.  ** CREATE
1cf0: 20 49 4e 44 45 58 73 2e 20 20 28 57 65 20 64 6f   INDEXs.  (We do
1d00: 6e 27 74 20 68 61 76 65 20 74 6f 20 64 65 61 6c  n't have to deal
1d10: 20 77 69 74 68 20 43 52 45 41 54 45 20 56 49 45   with CREATE VIE
1d20: 57 20 6f 72 0a 20 20 2a 2a 20 43 52 45 41 54 45  W or.  ** CREATE
1d30: 20 54 52 49 47 47 45 52 20 69 6e 20 66 69 6c 65   TRIGGER in file
1d40: 20 66 6f 72 6d 61 74 20 31 20 62 65 63 61 75 73   format 1 becaus
1d50: 65 20 74 68 6f 73 65 20 63 6f 6e 73 74 72 75 63  e those construc
1d60: 74 73 20 64 69 64 0a 20 20 2a 2a 20 6e 6f 74 20  ts did.  ** not 
1d70: 65 78 69 73 74 20 74 68 65 6e 2e 29 20 0a 20 20  exist then.) .  
1d80: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  */.  static char
1d90: 20 69 6e 69 74 5f 73 63 72 69 70 74 5b 5d 20 3d   init_script[] =
1da0: 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74   .     "SELECT t
1db0: 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  ype, name, rootp
1dc0: 61 67 65 2c 20 73 71 6c 2c 20 31 20 46 52 4f 4d  age, sql, 1 FROM
1dd0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
1de0: 74 65 72 20 22 0a 20 20 20 20 20 22 55 4e 49 4f  ter ".     "UNIO
1df0: 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 22 53 45  N ALL ".     "SE
1e00: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
1e10: 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20   rootpage, sql, 
1e20: 30 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  0 FROM sqlite_ma
1e30: 73 74 65 72 22 3b 0a 20 20 73 74 61 74 69 63 20  ster";.  static 
1e40: 63 68 61 72 20 6f 6c 64 65 72 5f 69 6e 69 74 5f  char older_init_
1e50: 73 63 72 69 70 74 5b 5d 20 3d 20 0a 20 20 20 20  script[] = .    
1e60: 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e   "SELECT type, n
1e70: 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
1e80: 71 6c 2c 20 31 20 46 52 4f 4d 20 73 71 6c 69 74  ql, 1 FROM sqlit
1e90: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 22 0a  e_temp_master ".
1ea0: 20 20 20 20 20 22 55 4e 49 4f 4e 20 41 4c 4c 20       "UNION ALL 
1eb0: 22 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74  ".     "SELECT t
1ec0: 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  ype, name, rootp
1ed0: 61 67 65 2c 20 73 71 6c 2c 20 30 20 46 52 4f 4d  age, sql, 0 FROM
1ee0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
1ef0: 0a 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70  .     "WHERE typ
1f00: 65 3d 27 74 61 62 6c 65 27 20 22 0a 20 20 20 20  e='table' ".    
1f10: 20 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20   "UNION ALL ".  
1f20: 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c     "SELECT type,
1f30: 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
1f40: 20 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71 6c   sql, 0 FROM sql
1f50: 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
1f60: 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27 69    "WHERE type='i
1f70: 6e 64 65 78 27 22 3b 0a 0a 0a 20 20 61 73 73 65  ndex'";...  asse
1f80: 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1f90: 62 21 3d 31 20 26 26 20 69 44 62 3c 64 62 2d 3e  b!=1 && iDb<db->
1fa0: 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6e  nDb );..  /* Con
1fb0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
1fc0: 61 20 74 61 62 6c 65 73 3a 20 73 71 6c 69 74 65  a tables: sqlite
1fd0: 5f 6d 61 73 74 65 72 20 61 6e 64 20 73 71 6c 69  _master and sqli
1fe0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 0a 20  te_temp_master. 
1ff0: 20 2a 2f 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d   */.  azArg[0] =
2000: 20 22 74 61 62 6c 65 22 3b 0a 20 20 61 7a 41 72   "table";.  azAr
2010: 67 5b 31 5d 20 3d 20 4d 41 53 54 45 52 5f 4e 41  g[1] = MASTER_NA
2020: 4d 45 3b 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d  ME;.  azArg[2] =
2030: 20 22 32 22 3b 0a 20 20 61 7a 41 72 67 5b 33 5d   "2";.  azArg[3]
2040: 20 3d 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61   = master_schema
2050: 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 44 62 4e  ;.  sprintf(zDbN
2060: 75 6d 2c 20 22 25 64 22 2c 20 69 44 62 29 3b 0a  um, "%d", iDb);.
2070: 20 20 61 7a 41 72 67 5b 34 5d 20 3d 20 7a 44 62    azArg[4] = zDb
2080: 4e 75 6d 3b 0a 20 20 61 7a 41 72 67 5b 35 5d 20  Num;.  azArg[5] 
2090: 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e  = 0;.  initData.
20a0: 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44  db = db;.  initD
20b0: 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 70  ata.pzErrMsg = p
20c0: 7a 45 72 72 4d 73 67 3b 0a 20 20 73 71 6c 69 74  zErrMsg;.  sqlit
20d0: 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26 69  eInitCallback(&i
20e0: 6e 69 74 44 61 74 61 2c 20 35 2c 20 61 7a 41 72  nitData, 5, azAr
20f0: 67 2c 20 30 29 3b 0a 20 20 70 54 61 62 20 3d 20  g, 0);.  pTab = 
2100: 73 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28  sqliteFindTable(
2110: 64 62 2c 20 4d 41 53 54 45 52 5f 4e 41 4d 45 2c  db, MASTER_NAME,
2120: 20 22 6d 61 69 6e 22 29 3b 0a 20 20 69 66 28 20   "main");.  if( 
2130: 70 54 61 62 20 29 7b 0a 20 20 20 20 70 54 61 62  pTab ){.    pTab
2140: 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a  ->readOnly = 1;.
2150: 20 20 7d 0a 20 20 69 66 28 20 69 44 62 3d 3d 30    }.  if( iDb==0
2160: 20 29 7b 0a 20 20 20 20 61 7a 41 72 67 5b 31 5d   ){.    azArg[1]
2170: 20 3d 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e   = TEMP_MASTER_N
2180: 41 4d 45 3b 0a 20 20 20 20 61 7a 41 72 67 5b 33  AME;.    azArg[3
2190: 5d 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  ] = temp_master_
21a0: 73 63 68 65 6d 61 3b 0a 20 20 20 20 61 7a 41 72  schema;.    azAr
21b0: 67 5b 34 5d 20 3d 20 22 31 22 3b 0a 20 20 20 20  g[4] = "1";.    
21c0: 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62 61  sqliteInitCallba
21d0: 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20 35 2c  ck(&initData, 5,
21e0: 20 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 20 20   azArg, 0);.    
21f0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46 69 6e  pTab = sqliteFin
2200: 64 54 61 62 6c 65 28 64 62 2c 20 54 45 4d 50 5f  dTable(db, TEMP_
2210: 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20 22 74 65  MASTER_NAME, "te
2220: 6d 70 22 29 3b 0a 20 20 20 20 69 66 28 20 70 54  mp");.    if( pT
2230: 61 62 20 29 7b 0a 20 20 20 20 20 20 70 54 61 62  ab ){.      pTab
2240: 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a  ->readOnly = 1;.
2250: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
2260: 43 72 65 61 74 65 20 61 20 63 75 72 73 6f 72 20  Create a cursor 
2270: 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
2280: 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20  base open.  */. 
2290: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 44 62   if( db->aDb[iDb
22a0: 5d 2e 70 42 74 3d 3d 30 20 29 20 72 65 74 75 72  ].pBt==0 ) retur
22b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 72  n SQLITE_OK;.  r
22c0: 63 20 3d 20 73 71 6c 69 74 65 42 74 72 65 65 43  c = sqliteBtreeC
22d0: 75 72 73 6f 72 28 64 62 2d 3e 61 44 62 5b 69 44  ursor(db->aDb[iD
22e0: 62 5d 2e 70 42 74 2c 20 32 2c 20 30 2c 20 26 63  b].pBt, 2, 0, &c
22f0: 75 72 4d 61 69 6e 29 3b 0a 20 20 69 66 28 20 72  urMain);.  if( r
2300: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53  c ){.    sqliteS
2310: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
2320: 67 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f  g, sqlite_error_
2330: 73 74 72 69 6e 67 28 72 63 29 2c 20 28 63 68 61  string(rc), (cha
2340: 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
2350: 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  n rc;.  }..  /* 
2360: 47 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Get the database
2370: 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f   meta informatio
2380: 6e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  n.  */.  rc = sq
2390: 6c 69 74 65 42 74 72 65 65 47 65 74 4d 65 74 61  liteBtreeGetMeta
23a0: 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
23b0: 74 2c 20 6d 65 74 61 29 3b 0a 20 20 69 66 28 20  t, meta);.  if( 
23c0: 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
23d0: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
23e0: 73 67 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72  sg, sqlite_error
23f0: 5f 73 74 72 69 6e 67 28 72 63 29 2c 20 28 63 68  _string(rc), (ch
2400: 61 72 2a 29 30 29 3b 0a 20 20 20 20 73 71 6c 69  ar*)0);.    sqli
2410: 74 65 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73  teBtreeCloseCurs
2420: 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20  or(curMain);.   
2430: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
2440: 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73    db->aDb[iDb].s
2450: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 6d  chema_cookie = m
2460: 65 74 61 5b 31 5d 3b 0a 20 20 69 66 28 20 69 44  eta[1];.  if( iD
2470: 62 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  b==0 ){.    db->
2480: 6e 65 78 74 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65  next_cookie = me
2490: 74 61 5b 31 5d 3b 0a 20 20 20 20 64 62 2d 3e 66  ta[1];.    db->f
24a0: 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 6d 65 74  ile_format = met
24b0: 61 5b 32 5d 3b 0a 20 20 20 20 73 69 7a 65 20 3d  a[2];.    size =
24c0: 20 6d 65 74 61 5b 33 5d 3b 0a 20 20 20 20 69 66   meta[3];.    if
24d0: 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20 73 69 7a  ( size==0 ){ siz
24e0: 65 20 3d 20 4d 41 58 5f 50 41 47 45 53 3b 20 7d  e = MAX_PAGES; }
24f0: 0a 20 20 20 20 64 62 2d 3e 63 61 63 68 65 5f 73  .    db->cache_s
2500: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
2510: 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  db->safety_level
2520: 20 3d 20 6d 65 74 61 5b 34 5d 3b 0a 20 20 20 20   = meta[4];.    
2530: 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c  if( db->safety_l
2540: 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e 73 61  evel==0 ) db->sa
2550: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32 3b 0a  fety_level = 2;.
2560: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20  .    /*.    **  
2570: 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20  file_format==1  
2580: 20 20 56 65 72 73 69 6f 6e 20 32 2e 31 2e 30 2e    Version 2.1.0.
2590: 0a 20 20 20 20 2a 2a 20 20 66 69 6c 65 5f 66 6f  .    **  file_fo
25a0: 72 6d 61 74 3d 3d 32 20 20 20 20 56 65 72 73 69  rmat==2    Versi
25b0: 6f 6e 20 32 2e 32 2e 30 2e 20 41 64 64 20 73 75  on 2.2.0. Add su
25c0: 70 70 6f 72 74 20 66 6f 72 20 49 4e 54 45 47 45  pport for INTEGE
25d0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 20  R PRIMARY KEY.. 
25e0: 20 20 20 2a 2a 20 20 66 69 6c 65 5f 66 6f 72 6d     **  file_form
25f0: 61 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f 6e  at==3    Version
2600: 20 32 2e 36 2e 30 2e 20 46 69 78 20 65 6d 70 74   2.6.0. Fix empt
2610: 79 2d 73 74 72 69 6e 67 20 69 6e 64 65 78 20 62  y-string index b
2620: 75 67 2e 0a 20 20 20 20 2a 2a 20 20 66 69 6c 65  ug..    **  file
2630: 5f 66 6f 72 6d 61 74 3d 3d 34 20 20 20 20 56 65  _format==4    Ve
2640: 72 73 69 6f 6e 20 32 2e 37 2e 30 2e 20 41 64 64  rsion 2.7.0. Add
2650: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 73 65 70   support for sep
2660: 61 72 61 74 65 20 6e 75 6d 65 72 69 63 20 61 6e  arate numeric an
2670: 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  d.    **        
2680: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74              text
2690: 20 64 61 74 61 74 79 70 65 73 2e 0a 20 20 20 20   datatypes..    
26a0: 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  */.    if( db->f
26b0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b  ile_format==0 ){
26c0: 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 68  .      /* This h
26d0: 61 70 70 65 6e 73 20 69 66 20 74 68 65 20 64 61  appens if the da
26e0: 74 61 62 61 73 65 20 77 61 73 20 69 6e 69 74 69  tabase was initi
26f0: 61 6c 6c 79 20 65 6d 70 74 79 20 2a 2f 0a 20 20  ally empty */.  
2700: 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72      db->file_for
2710: 6d 61 74 20 3d 20 34 3b 0a 20 20 20 20 7d 65 6c  mat = 4;.    }el
2720: 73 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f  se if( db->file_
2730: 66 6f 72 6d 61 74 3e 34 20 29 7b 0a 20 20 20 20  format>4 ){.    
2740: 20 20 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f    sqliteBtreeClo
2750: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
2760: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53  );.      sqliteS
2770: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
2780: 67 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  g, "unsupported 
2790: 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28 63  file format", (c
27a0: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 72  har*)0);.      r
27b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
27c0: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  OR;.    }.  }els
27d0: 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66  e if( db->file_f
27e0: 6f 72 6d 61 74 21 3d 6d 65 74 61 5b 32 5d 20 7c  ormat!=meta[2] |
27f0: 7c 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  | db->file_forma
2800: 74 3c 34 20 29 7b 0a 20 20 20 20 61 73 73 65 72  t<4 ){.    asser
2810: 74 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d  t( db->file_form
2820: 61 74 3e 3d 34 20 29 3b 0a 20 20 20 20 69 66 28  at>=4 );.    if(
2830: 20 6d 65 74 61 5b 32 5d 3d 3d 30 20 29 7b 0a 20   meta[2]==0 ){. 
2840: 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74       sqliteSetSt
2850: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2860: 63 61 6e 6e 6f 74 20 61 74 74 61 63 68 20 65 6d  cannot attach em
2870: 70 74 79 20 64 61 74 61 62 61 73 65 3a 20 22 2c  pty database: ",
2880: 0a 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44  .         db->aD
2890: 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 28 63  b[iDb].zName, (c
28a0: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 7d 65 6c  har*)0);.    }el
28b0: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
28c0: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
28d0: 73 67 2c 20 22 69 6e 63 6f 6d 70 61 74 69 62 6c  sg, "incompatibl
28e0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e  e file format in
28f0: 20 61 75 78 69 6c 69 61 72 79 20 22 0a 20 20 20   auxiliary ".   
2900: 20 20 20 20 20 20 22 64 61 74 61 62 61 73 65 3a        "database:
2910: 20 22 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d   ", db->aDb[iDb]
2920: 2e 7a 4e 61 6d 65 2c 20 28 63 68 61 72 2a 29 30  .zName, (char*)0
2930: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
2940: 69 74 65 42 74 72 65 65 43 6c 6f 73 65 28 64 62  iteBtreeClose(db
2950: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 3b  ->aDb[iDb].pBt);
2960: 0a 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62  .    db->aDb[iDb
2970: 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 72  ].pBt = 0;.    r
2980: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 46 4f 52  eturn SQLITE_FOR
2990: 4d 41 54 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  MAT;.  }.  sqlit
29a0: 65 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  eBtreeSetCacheSi
29b0: 7a 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ze(db->aDb[iDb].
29c0: 70 42 74 2c 20 64 62 2d 3e 63 61 63 68 65 5f 73  pBt, db->cache_s
29d0: 69 7a 65 29 3b 0a 20 20 73 71 6c 69 74 65 42 74  ize);.  sqliteBt
29e0: 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76 65  reeSetSafetyLeve
29f0: 6c 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  l(db->aDb[iDb].p
2a00: 42 74 2c 20 6d 65 74 61 5b 34 5d 3d 3d 30 20 3f  Bt, meta[4]==0 ?
2a10: 20 32 20 3a 20 6d 65 74 61 5b 34 5d 29 3b 0a 0a   2 : meta[4]);..
2a20: 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63    /* Read the sc
2a30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
2a40: 20 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65   out of the sche
2a50: 6d 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20  ma tables.  */. 
2a60: 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73 65 2c   memset(&sParse,
2a70: 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61 72 73   0, sizeof(sPars
2a80: 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e 64 62  e));.  sParse.db
2a90: 20 3d 20 64 62 3b 0a 20 20 73 50 61 72 73 65 2e   = db;.  sParse.
2aa0: 78 43 61 6c 6c 62 61 63 6b 20 3d 20 73 71 6c 69  xCallback = sqli
2ab0: 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 3b 0a  teInitCallback;.
2ac0: 20 20 73 50 61 72 73 65 2e 70 41 72 67 20 3d 20    sParse.pArg = 
2ad0: 28 76 6f 69 64 2a 29 26 69 6e 69 74 44 61 74 61  (void*)&initData
2ae0: 3b 0a 20 20 73 50 61 72 73 65 2e 69 6e 69 74 46  ;.  sParse.initF
2af0: 6c 61 67 20 3d 20 31 3b 0a 20 20 73 50 61 72 73  lag = 1;.  sPars
2b00: 65 2e 75 73 65 43 61 6c 6c 62 61 63 6b 20 3d 20  e.useCallback = 
2b10: 31 3b 0a 20 20 69 66 28 20 69 44 62 3d 3d 30 20  1;.  if( iDb==0 
2b20: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 52 75 6e  ){.    sqliteRun
2b30: 50 61 72 73 65 72 28 26 73 50 61 72 73 65 2c 0a  Parser(&sParse,.
2b40: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 69 6c 65          db->file
2b50: 5f 66 6f 72 6d 61 74 3e 3d 32 20 3f 20 69 6e 69  _format>=2 ? ini
2b60: 74 5f 73 63 72 69 70 74 20 3a 20 6f 6c 64 65 72  t_script : older
2b70: 5f 69 6e 69 74 5f 73 63 72 69 70 74 2c 0a 20 20  _init_script,.  
2b80: 20 20 20 20 20 20 70 7a 45 72 72 4d 73 67 29 3b        pzErrMsg);
2b90: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
2ba0: 61 72 20 2a 7a 53 71 6c 20 3d 20 30 3b 0a 20 20  ar *zSql = 0;.  
2bb0: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
2bc0: 67 28 26 7a 53 71 6c 2c 20 0a 20 20 20 20 20 20  g(&zSql, .      
2bd0: 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e   "SELECT type, n
2be0: 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
2bf0: 71 6c 2c 20 22 2c 20 7a 44 62 4e 75 6d 2c 20 22  ql, ", zDbNum, "
2c00: 20 46 52 4f 4d 20 5c 22 22 2c 0a 20 20 20 20 20   FROM \"",.     
2c10: 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
2c20: 4e 61 6d 65 2c 20 22 5c 22 2e 73 71 6c 69 74 65  Name, "\".sqlite
2c30: 5f 6d 61 73 74 65 72 22 2c 20 28 63 68 61 72 2a  _master", (char*
2c40: 29 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 52  )0);.    sqliteR
2c50: 75 6e 50 61 72 73 65 72 28 26 73 50 61 72 73 65  unParser(&sParse
2c60: 2c 20 7a 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67  , zSql, pzErrMsg
2c70: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65  );.    sqliteFre
2c80: 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 73  e(zSql);.  }.  s
2c90: 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65 43  qliteBtreeCloseC
2ca0: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
2cb0: 20 20 69 66 28 20 73 71 6c 69 74 65 5f 6d 61 6c    if( sqlite_mal
2cc0: 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20  loc_failed ){.  
2cd0: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
2ce0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74  g(pzErrMsg, "out
2cf0: 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63 68   of memory", (ch
2d00: 61 72 2a 29 30 29 3b 0a 20 20 20 20 73 50 61 72  ar*)0);.    sPar
2d10: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  se.rc = SQLITE_N
2d20: 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65  OMEM;.    sqlite
2d30: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2d40: 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a  ema(db, 0);.  }.
2d50: 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63 3d    if( sParse.rc=
2d60: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2d70: 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28    DbSetProperty(
2d80: 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2d90: 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 69  maLoaded);.    i
2da0: 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20  f( iDb==0 ){.   
2db0: 20 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79     DbSetProperty
2dc0: 28 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d  (db, 1, DB_Schem
2dd0: 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 7d 0a  aLoaded);.    }.
2de0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2df0: 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  iteResetInternal
2e00: 53 63 68 65 6d 61 28 64 62 2c 20 69 44 62 29 3b  Schema(db, iDb);
2e10: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 50  .  }.  return sP
2e20: 61 72 73 65 2e 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  arse.rc;.}../*.*
2e30: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c 6c  * Initialize all
2e40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2e50: 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  - the main datab
2e60: 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 66 69  ase file, the fi
2e70: 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  le.** used to st
2e80: 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
2e90: 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20 61 64  bles, and any ad
2ea0: 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  ditional databas
2eb0: 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65 61 74  e files.** creat
2ec0: 65 64 20 75 73 69 6e 67 20 41 54 54 41 43 48 20  ed using ATTACH 
2ed0: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52 65 74  statements.  Ret
2ee0: 75 72 6e 20 61 20 73 75 63 63 65 73 73 20 63 6f  urn a success co
2ef0: 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20 65 72  de.  If an.** er
2f00: 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72 69 74  ror occurs, writ
2f10: 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
2f20: 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72 4d 73  ge into *pzErrMs
2f30: 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  g..**.** After t
2f40: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 69  he database is i
2f50: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 20  nitialized, the 
2f60: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2f70: 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73 65 74  ed.** bit is set
2f80: 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20 66 69   in the flags fi
2f90: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
2fa0: 65 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 6e  e structure.  An
2fb0: 0a 2a 2a 20 61 74 74 65 6d 70 74 20 69 73 20 6d  .** attempt is m
2fc0: 61 64 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  ade to initializ
2fd0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
2fe0: 73 20 73 6f 6f 6e 20 61 73 20 69 74 0a 2a 2a 20  s soon as it.** 
2ff0: 69 73 20 6f 70 65 6e 65 64 2e 20 20 49 66 20 74  is opened.  If t
3000: 68 61 74 20 66 61 69 6c 73 20 28 70 65 72 68 61  hat fails (perha
3010: 70 73 20 62 65 63 61 75 73 65 20 61 6e 6f 74 68  ps because anoth
3020: 65 72 20 70 72 6f 63 65 73 73 0a 2a 2a 20 68 61  er process.** ha
3030: 73 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  s the sqlite_mas
3040: 74 65 72 20 74 61 62 6c 65 20 6c 6f 63 6b 65 64  ter table locked
3050: 29 20 74 68 61 6e 20 61 6e 6f 74 68 65 72 20 61  ) than another a
3060: 74 74 65 6d 70 74 0a 2a 2a 20 69 73 20 6d 61 64  ttempt.** is mad
3070: 65 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  e the first time
3080: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
3090: 20 61 63 63 65 73 73 65 64 2e 0a 2a 2f 0a 69 6e   accessed..*/.in
30a0: 74 20 73 71 6c 69 74 65 49 6e 69 74 28 73 71 6c  t sqliteInit(sql
30b0: 69 74 65 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  ite *db, char **
30c0: 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74  pzErrMsg){.  int
30d0: 20 69 2c 20 72 63 3b 0a 20 20 0a 20 20 61 73 73   i, rc;.  .  ass
30e0: 65 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20  ert( (db->flags 
30f0: 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  & SQLITE_Initial
3100: 69 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63  ized)==0 );.  rc
3110: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
3120: 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d 53 51 4c  for(i=0; rc==SQL
3130: 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64 62 2d 3e  ITE_OK && i<db->
3140: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  nDb; i++){.    i
3150: 66 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  f( DbHasProperty
3160: 28 64 62 2c 20 69 2c 20 44 42 5f 53 63 68 65 6d  (db, i, DB_Schem
3170: 61 4c 6f 61 64 65 64 29 20 29 20 63 6f 6e 74 69  aLoaded) ) conti
3180: 6e 75 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nue;.    assert(
3190: 20 69 21 3d 31 20 29 3b 20 20 2f 2a 20 53 68 6f   i!=1 );  /* Sho
31a0: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 69 6e  uld have been in
31b0: 69 74 69 61 6c 69 7a 65 64 20 74 6f 67 65 74 68  itialized togeth
31c0: 65 72 20 77 69 74 68 20 30 20 2a 2f 0a 20 20 20  er with 0 */.   
31d0: 20 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69 74   rc = sqliteInit
31e0: 4f 6e 65 28 64 62 2c 20 69 2c 20 70 7a 45 72 72  One(db, i, pzErr
31f0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Msg);.  }.  if( 
3200: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
3210: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
3220: 3d 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  = SQLITE_Initial
3230: 69 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65  ized;.    sqlite
3240: 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
3250: 61 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d 65 6c  anges(db);.  }el
3260: 73 65 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  se{.    db->flag
3270: 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69  s &= ~SQLITE_Ini
3280: 74 69 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20 20  tialized;.  }.  
3290: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
32a0: 0a 2a 2a 20 54 68 65 20 76 65 72 73 69 6f 6e 20  .** The version 
32b0: 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 0a 2a  of the library.*
32c0: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 72 63 73  /.const char rcs
32d0: 69 64 5b 5d 20 3d 20 22 40 28 23 29 20 5c 30 34  id[] = "@(#) \04
32e0: 34 49 64 3a 20 53 51 4c 69 74 65 20 76 65 72 73  4Id: SQLite vers
32f0: 69 6f 6e 20 22 20 53 51 4c 49 54 45 5f 56 45 52  ion " SQLITE_VER
3300: 53 49 4f 4e 20 22 20 24 22 3b 0a 63 6f 6e 73 74  SION " $";.const
3310: 20 63 68 61 72 20 73 71 6c 69 74 65 5f 76 65 72   char sqlite_ver
3320: 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f  sion[] = SQLITE_
3330: 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20  VERSION;../*.** 
3340: 44 6f 65 73 20 74 68 65 20 6c 69 62 72 61 72 79  Does the library
3350: 20 65 78 70 65 63 74 20 64 61 74 61 20 74 6f 20   expect data to 
3360: 62 65 20 65 6e 63 6f 64 65 64 20 61 73 20 55 54  be encoded as UT
3370: 46 2d 38 20 6f 72 20 69 73 6f 38 38 35 39 3f 20  F-8 or iso8859? 
3380: 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   The.** followin
3390: 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 73 74 61 6e  g global constan
33a0: 74 20 61 6c 77 61 79 73 20 6c 65 74 73 20 75 73  t always lets us
33b0: 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69 66 64 65 66   know..*/.#ifdef
33c0: 20 53 51 4c 49 54 45 5f 55 54 46 38 0a 63 6f 6e   SQLITE_UTF8.con
33d0: 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 5f 65  st char sqlite_e
33e0: 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20 22 55 54 46  ncoding[] = "UTF
33f0: 2d 38 22 3b 0a 23 65 6c 73 65 0a 63 6f 6e 73 74  -8";.#else.const
3400: 20 63 68 61 72 20 73 71 6c 69 74 65 5f 65 6e 63   char sqlite_enc
3410: 6f 64 69 6e 67 5b 5d 20 3d 20 22 69 73 6f 38 38  oding[] = "iso88
3420: 35 39 22 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  59";.#endif../*.
3430: 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 53 51  ** Open a new SQ
3440: 4c 69 74 65 20 64 61 74 61 62 61 73 65 2e 20 20  Lite database.  
3450: 43 6f 6e 73 74 72 75 63 74 20 61 6e 20 22 73 71  Construct an "sq
3460: 6c 69 74 65 22 20 73 74 72 75 63 74 75 72 65 20  lite" structure 
3470: 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 74 68 65  to define.** the
3480: 20 73 74 61 74 65 20 6f 66 20 74 68 69 73 20 64   state of this d
3490: 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 74 75  atabase and retu
34a0: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
34b0: 74 68 61 74 20 73 74 72 75 63 74 75 72 65 2e 0a  that structure..
34c0: 2a 2a 0a 2a 2a 20 41 6e 20 61 74 74 65 6d 70 74  **.** An attempt
34d0: 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 69 74   is made to init
34e0: 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 2d 6d 65  ialize the in-me
34f0: 6d 6f 72 79 20 64 61 74 61 20 73 74 72 75 63 74  mory data struct
3500: 75 72 65 73 20 74 68 61 74 0a 2a 2a 20 68 6f 6c  ures that.** hol
3510: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
3520: 63 68 65 6d 61 2e 20 20 42 75 74 20 69 66 20 74  chema.  But if t
3530: 68 69 73 20 66 61 69 6c 73 20 28 62 65 63 61 75  his fails (becau
3540: 73 65 20 74 68 65 20 73 63 68 65 6d 61 20 66 69  se the schema fi
3550: 6c 65 0a 2a 2a 20 69 73 20 6c 6f 63 6b 65 64 29  le.** is locked)
3560: 20 74 68 65 6e 20 74 68 61 74 20 73 74 65 70 20   then that step 
3570: 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74 69  is deferred unti
3580: 6c 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  l the first call
3590: 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f 65 78   to.** sqlite_ex
35a0: 65 63 28 29 2e 0a 2a 2f 0a 73 71 6c 69 74 65 20  ec()..*/.sqlite 
35b0: 2a 73 71 6c 69 74 65 5f 6f 70 65 6e 28 63 6f 6e  *sqlite_open(con
35c0: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
35d0: 6d 65 2c 20 69 6e 74 20 6d 6f 64 65 2c 20 63 68  me, int mode, ch
35e0: 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a  ar **pzErrMsg){.
35f0: 20 20 73 71 6c 69 74 65 20 2a 64 62 3b 0a 20 20    sqlite *db;.  
3600: 69 6e 74 20 72 63 2c 20 69 3b 0a 0a 20 20 2f 2a  int rc, i;..  /*
3610: 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71   Allocate the sq
3620: 6c 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74  lite data struct
3630: 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71  ure */.  db = sq
3640: 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65  liteMalloc( size
3650: 6f 66 28 73 71 6c 69 74 65 29 20 29 3b 0a 20 20  of(sqlite) );.  
3660: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20 2a  if( pzErrMsg ) *
3670: 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  pzErrMsg = 0;.  
3680: 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f  if( db==0 ) goto
3690: 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3b   no_mem_on_open;
36a0: 0a 20 20 64 62 2d 3e 6f 6e 45 72 72 6f 72 20 3d  .  db->onError =
36b0: 20 4f 45 5f 44 65 66 61 75 6c 74 3b 0a 20 20 64   OE_Default;.  d
36c0: 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
36d0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69   = 0;.  db->magi
36e0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
36f0: 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62  _BUSY;.  db->nDb
3700: 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20   = 2;.  db->aDb 
3710: 3d 20 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b  = db->aDbStatic;
3720: 0a 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e 69  .  sqliteHashIni
3730: 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51  t(&db->aFunc, SQ
3740: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
3750: 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  , 1);.  for(i=0;
3760: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
3770: 7b 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68  {.    sqliteHash
3780: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
3790: 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54 45  .tblHash, SQLITE
37a0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
37b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68  ;.    sqliteHash
37c0: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
37d0: 2e 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45  .idxHash, SQLITE
37e0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
37f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73 68  ;.    sqliteHash
3800: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
3810: 2e 74 72 69 67 48 61 73 68 2c 20 53 51 4c 49 54  .trigHash, SQLIT
3820: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
3830: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 48 61 73  );.    sqliteHas
3840: 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69  hInit(&db->aDb[i
3850: 5d 2e 61 46 4b 65 79 2c 20 53 51 4c 49 54 45 5f  ].aFKey, SQLITE_
3860: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b  HASH_STRING, 1);
3870: 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a 20 4f 70 65  .  }.  .  /* Ope
3880: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61  n the backend da
3890: 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f  tabase driver */
38a0: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
38b0: 5b 30 5d 3d 3d 27 3a 27 20 26 26 20 73 74 72 63  [0]==':' && strc
38c0: 6d 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a 6d  mp(zFilename,":m
38d0: 65 6d 6f 72 79 3a 22 29 3d 3d 30 20 29 7b 0a 20  emory:")==0 ){. 
38e0: 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72     db->temp_stor
38f0: 65 20 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 63 20  e = 2;.  }.  rc 
3900: 3d 20 73 71 6c 69 74 65 42 74 72 65 65 46 61 63  = sqliteBtreeFac
3910: 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61  tory(db, zFilena
3920: 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53  me, 0, MAX_PAGES
3930: 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  , &db->aDb[0].pB
3940: 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  t);.  if( rc!=SQ
3950: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
3960: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
3970: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
3980: 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53        sqliteSetS
3990: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
39a0: 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  "unable to open 
39b0: 64 61 74 61 62 61 73 65 3a 20 22 2c 0a 20 20 20  database: ",.   
39c0: 20 20 20 20 20 20 20 20 7a 46 69 6c 65 6e 61 6d          zFilenam
39d0: 65 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  e, (char*)0);.  
39e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
39f0: 73 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a  sqliteFree(db);.
3a00: 20 20 20 20 73 71 6c 69 74 65 53 74 72 52 65 61      sqliteStrRea
3a10: 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a  lloc(pzErrMsg);.
3a20: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3a30: 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a  }.  db->aDb[0].z
3a40: 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20  Name = "main";. 
3a50: 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d   db->aDb[1].zNam
3a60: 65 20 3d 20 22 74 65 6d 70 22 3b 0a 0a 20 20 2f  e = "temp";..  /
3a70: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61  * Attempt to rea
3a80: 64 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a  d the schema */.
3a90: 20 20 73 71 6c 69 74 65 52 65 67 69 73 74 65 72    sqliteRegister
3aa0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
3ab0: 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  (db);.  rc = sql
3ac0: 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45 72  iteInit(db, pzEr
3ad0: 72 4d 73 67 29 3b 0a 20 20 64 62 2d 3e 6d 61 67  rMsg);.  db->mag
3ae0: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
3af0: 43 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20 73 71  C_OPEN;.  if( sq
3b00: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  lite_malloc_fail
3b10: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
3b20: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20  _close(db);.    
3b30: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f  goto no_mem_on_o
3b40: 70 65 6e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  pen;.  }else if(
3b50: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc!=SQLITE_OK &
3b60: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  & rc!=SQLITE_BUS
3b70: 59 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f  Y ){.    sqlite_
3b80: 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 73  close(db);.    s
3b90: 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28  qliteStrRealloc(
3ba0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 72  pzErrMsg);.    r
3bb0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65  eturn 0;.  }else
3bc0: 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b   if( pzErrMsg ){
3bd0: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
3be0: 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  *pzErrMsg);.    
3bf0: 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  *pzErrMsg = 0;. 
3c00: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
3c10: 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 20 66  database is in f
3c20: 6f 72 6d 61 74 73 20 31 20 6f 72 20 32 2c 20 74  ormats 1 or 2, t
3c30: 68 65 6e 20 75 70 67 72 61 64 65 20 69 74 20 74  hen upgrade it t
3c40: 6f 0a 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 33  o.  ** version 3
3c50: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 72 65 63  .  This will rec
3c60: 6f 6e 73 74 72 75 63 74 20 61 6c 6c 20 69 6e 64  onstruct all ind
3c70: 69 63 65 73 2e 20 20 49 66 20 74 68 65 0a 20 20  ices.  If the.  
3c80: 2a 2a 20 75 70 67 72 61 64 65 20 66 61 69 6c 73  ** upgrade fails
3c90: 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e 20   for any reason 
3ca0: 28 65 78 3a 20 6f 75 74 20 6f 66 20 64 69 73 6b  (ex: out of disk
3cb0: 20 73 70 61 63 65 2c 20 64 61 74 61 62 61 73 65   space, database
3cc0: 0a 20 20 2a 2a 20 69 73 20 72 65 61 64 20 6f 6e  .  ** is read on
3cd0: 6c 79 2c 20 69 6e 74 65 72 72 75 70 74 20 72 65  ly, interrupt re
3ce0: 63 65 69 76 65 64 2c 20 65 74 63 2e 29 20 74 68  ceived, etc.) th
3cf0: 65 6e 20 72 65 66 75 73 65 20 74 6f 20 6f 70 65  en refuse to ope
3d00: 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63  n..  */.  if( rc
3d10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
3d20: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c 33  b->file_format<3
3d30: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45   ){.    char *zE
3d40: 72 72 20 3d 20 30 3b 0a 20 20 20 20 49 6e 69 74  rr = 0;.    Init
3d50: 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 20  Data initData;. 
3d60: 20 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c 49     int meta[SQLI
3d70: 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 5d  TE_N_BTREE_META]
3d80: 3b 0a 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  ;..    initData.
3d90: 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
3da0: 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
3db0: 20 26 7a 45 72 72 3b 0a 20 20 20 20 64 62 2d 3e   &zErr;.    db->
3dc0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 33 3b  file_format = 3;
3dd0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
3de0: 5f 65 78 65 63 28 64 62 2c 0a 20 20 20 20 20 20  _exec(db,.      
3df0: 22 42 45 47 49 4e 3b 20 53 45 4c 45 43 54 20 6e  "BEGIN; SELECT n
3e00: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
3e10: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
3e20: 65 3d 27 74 61 62 6c 65 27 3b 22 2c 0a 20 20 20  e='table';",.   
3e30: 20 20 20 75 70 67 72 61 64 65 5f 33 5f 63 61 6c     upgrade_3_cal
3e40: 6c 62 61 63 6b 2c 0a 20 20 20 20 20 20 26 69 6e  lback,.      &in
3e50: 69 74 44 61 74 61 2c 0a 20 20 20 20 20 20 26 7a  itData,.      &z
3e60: 45 72 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Err);.    if( rc
3e70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
3e80: 20 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65       sqliteBtree
3e90: 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
3ea0: 30 5d 2e 70 42 74 2c 20 6d 65 74 61 29 3b 0a 20  0].pBt, meta);. 
3eb0: 20 20 20 20 20 6d 65 74 61 5b 32 5d 20 3d 20 34       meta[2] = 4
3ec0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74  ;.      sqliteBt
3ed0: 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 64 62  reeUpdateMeta(db
3ee0: 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 6d 65  ->aDb[0].pBt, me
3ef0: 74 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ta);.      sqlit
3f00: 65 5f 65 78 65 63 28 64 62 2c 20 22 43 4f 4d 4d  e_exec(db, "COMM
3f10: 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  IT", 0, 0, 0);. 
3f20: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
3f30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
3f40: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
3f50: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 0a 20  ing(pzErrMsg, . 
3f60: 20 20 20 20 20 20 20 22 75 6e 61 62 6c 65 20 74         "unable t
3f70: 6f 20 75 70 67 72 61 64 65 20 64 61 74 61 62 61  o upgrade databa
3f80: 73 65 20 74 6f 20 74 68 65 20 76 65 72 73 69 6f  se to the versio
3f90: 6e 20 32 2e 36 20 66 6f 72 6d 61 74 22 2c 0a 20  n 2.6 format",. 
3fa0: 20 20 20 20 20 20 20 7a 45 72 72 20 3f 20 22 3a         zErr ? ":
3fb0: 20 22 20 3a 20 30 2c 20 7a 45 72 72 2c 20 28 63   " : 0, zErr, (c
3fc0: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 73  har*)0);.      s
3fd0: 71 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28 7a 45  qlite_freemem(zE
3fe0: 72 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  rr);.      sqlit
3ff0: 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72  eStrRealloc(pzEr
4000: 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c  rMsg);.      sql
4010: 69 74 65 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20  ite_close(db);. 
4020: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
4030: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 5f     }.    sqlite_
4040: 66 72 65 65 6d 65 6d 28 7a 45 72 72 29 3b 0a 20  freemem(zErr);. 
4050: 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20   }..  /* Return 
4060: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
4070: 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61   newly opened da
4080: 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
4090: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 64 62 3b   */.  return db;
40a0: 0a 0a 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e  ..no_mem_on_open
40b0: 3a 0a 20 20 73 71 6c 69 74 65 53 65 74 53 74 72  :.  sqliteSetStr
40c0: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f  ing(pzErrMsg, "o
40d0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28  ut of memory", (
40e0: 63 68 61 72 2a 29 30 29 3b 0a 20 20 73 71 6c 69  char*)0);.  sqli
40f0: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
4100: 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e  rrMsg);.  return
4110: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   0;.}../*.** Ret
4120: 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66  urn the ROWID of
4130: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
4140: 20 69 6e 73 65 72 74 0a 2a 2f 0a 69 6e 74 20 73   insert.*/.int s
4150: 71 6c 69 74 65 5f 6c 61 73 74 5f 69 6e 73 65 72  qlite_last_inser
4160: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 20 2a  t_rowid(sqlite *
4170: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
4180: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a  ->lastRowid;.}..
4190: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
41a0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
41b0: 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  es in the most r
41c0: 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71  ecent call to sq
41d0: 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  lite_exec()..*/.
41e0: 69 6e 74 20 73 71 6c 69 74 65 5f 63 68 61 6e 67  int sqlite_chang
41f0: 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  es(sqlite *db){.
4200: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68    return db->nCh
4210: 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ange;.}../*.** C
4220: 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67  lose an existing
4230: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
4240: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f  .*/.void sqlite_
4250: 63 6c 6f 73 65 28 73 71 6c 69 74 65 20 2a 64 62  close(sqlite *db
4260: 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a 69  ){.  HashElem *i
4270: 3b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20 64 62 2d  ;.  int j;.  db-
4280: 3e 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73 65 20 3d  >want_to_close =
4290: 20 31 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   1;.  if( sqlite
42a0: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
42b0: 7c 7c 20 73 71 6c 69 74 65 53 61 66 65 74 79 4f  || sqliteSafetyO
42c0: 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 2f 2a 20  n(db) ){.    /* 
42d0: 70 72 69 6e 74 66 28 22 44 49 44 20 4e 4f 54 20  printf("DID NOT 
42e0: 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66 6c 75 73  CLOSE\n"); fflus
42f0: 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f 0a 20 20  h(stdout); */.  
4300: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20    return;.  }.  
4310: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
4320: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
4330: 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62  .  for(j=0; j<db
4340: 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20  ->nDb; j++){.   
4350: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 6a 5d 2e   if( db->aDb[j].
4360: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  pBt ){.      sql
4370: 69 74 65 42 74 72 65 65 43 6c 6f 73 65 28 64 62  iteBtreeClose(db
4380: 2d 3e 61 44 62 5b 6a 5d 2e 70 42 74 29 3b 0a 20  ->aDb[j].pBt);. 
4390: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 6a 5d 2e       db->aDb[j].
43a0: 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  pBt = 0;.    }. 
43b0: 20 20 20 69 66 28 20 6a 3e 3d 32 20 29 7b 0a 20     if( j>=2 ){. 
43c0: 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28       sqliteFree(
43d0: 64 62 2d 3e 61 44 62 5b 6a 5d 2e 7a 4e 61 6d 65  db->aDb[j].zName
43e0: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  );.      db->aDb
43f0: 5b 6a 5d 2e 7a 4e 61 6d 65 20 3d 20 30 3b 0a 20  [j].zName = 0;. 
4400: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4410: 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  eResetInternalSc
4420: 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 61  hema(db, 0);.  a
4430: 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d  ssert( db->nDb<=
4440: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  2 );.  assert( d
4450: 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53  b->aDb==db->aDbS
4460: 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28 69  tatic );.  for(i
4470: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
4480: 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b  (&db->aFunc); i;
4490: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
44a0: 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63 44  t(i)){.    FuncD
44b0: 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78  ef *pFunc, *pNex
44c0: 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e 63  t;.    for(pFunc
44d0: 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71 6c   = (FuncDef*)sql
44e0: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 20  iteHashData(i); 
44f0: 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65  pFunc; pFunc=pNe
4500: 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78 74  xt){.      pNext
4510: 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b   = pFunc->pNext;
4520: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65  .      sqliteFre
4530: 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a  e(pFunc);.    }.
4540: 20 20 7d 0a 20 20 73 71 6c 69 74 65 48 61 73 68    }.  sqliteHash
4550: 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e 63  Clear(&db->aFunc
4560: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
4570: 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f  db);.}../*.** Ro
4580: 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62  llback all datab
4590: 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f  ase files..*/.vo
45a0: 69 64 20 73 71 6c 69 74 65 52 6f 6c 6c 62 61 63  id sqliteRollbac
45b0: 6b 41 6c 6c 28 73 71 6c 69 74 65 20 2a 64 62 29  kAll(sqlite *db)
45c0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
45d0: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
45e0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64   i++){.    if( d
45f0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29 7b  b->aDb[i].pBt ){
4600: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74 72  .      sqliteBtr
4610: 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e 61  eeRollback(db->a
4620: 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  Db[i].pBt);.    
4630: 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e 54    db->aDb[i].inT
4640: 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  rans = 0;.    }.
4650: 20 20 7d 0a 20 20 73 71 6c 69 74 65 52 6f 6c 6c    }.  sqliteRoll
4660: 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61 6e  backInternalChan
4670: 67 65 73 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ges(db);.}../*.*
4680: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64  * This routine d
4690: 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
46a0: 65 69 74 68 65 72 20 73 71 6c 69 74 65 5f 65 78  either sqlite_ex
46b0: 65 63 28 29 20 6f 72 20 73 71 6c 69 74 65 5f 63  ec() or sqlite_c
46c0: 6f 6d 70 69 6c 65 28 29 2e 0a 2a 2a 20 49 74 20  ompile()..** It 
46d0: 77 6f 72 6b 73 20 6c 69 6b 65 20 73 71 6c 69 74  works like sqlit
46e0: 65 5f 65 78 65 63 28 29 20 69 66 20 70 56 6d 3d  e_exec() if pVm=
46f0: 3d 4e 55 4c 4c 20 61 6e 64 20 69 74 20 77 6f 72  =NULL and it wor
4700: 6b 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 63  ks like sqlite_c
4710: 6f 6d 70 69 6c 65 28 29 0a 2a 2a 20 6f 74 68 65  ompile().** othe
4720: 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  rwise..*/.static
4730: 20 69 6e 74 20 73 71 6c 69 74 65 4d 61 69 6e 28   int sqliteMain(
4740: 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20  .  sqlite *db,  
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4760: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6f  * The database o
4770: 6e 20 77 68 69 63 68 20 74 68 65 20 53 51 4c 20  n which the SQL 
4780: 65 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63 6f  executes */.  co
4790: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  nst char *zSql, 
47a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
47b0: 20 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75   SQL to be execu
47c0: 74 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f  ted */.  sqlite_
47d0: 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c 62 61  callback xCallba
47e0: 63 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ck,  /* Invoke t
47f0: 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  his callback rou
4800: 74 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tine */.  void *
4810: 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
4820: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
4830: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c  rgument to xCall
4840: 62 61 63 6b 28 29 20 2a 2f 0a 20 20 63 6f 6e 73  back() */.  cons
4850: 74 20 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c 2c  t char **pzTail,
4860: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
4870: 4e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20 61  Next statement a
4880: 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20 2a  fter the first *
4890: 2f 0a 20 20 73 71 6c 69 74 65 5f 76 6d 20 2a 2a  /.  sqlite_vm **
48a0: 70 70 56 6d 2c 20 20 20 20 20 20 20 20 20 20 20  ppVm,           
48b0: 2f 2a 20 4f 55 54 3a 20 54 68 65 20 76 69 72 74  /* OUT: The virt
48c0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
48d0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
48f0: 4f 55 54 3a 20 57 72 69 74 65 20 65 72 72 6f 72  OUT: Write error
4900: 20 6d 65 73 73 61 67 65 73 20 68 65 72 65 20 2a   messages here *
4910: 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61  /.){.  Parse sPa
4920: 72 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45 72  rse;..  if( pzEr
4930: 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67  rMsg ) *pzErrMsg
4940: 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
4950: 74 65 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  teSafetyOn(db) )
4960: 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73 75 73   goto exec_misus
4970: 65 3b 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  e;.  if( (db->fl
4980: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69  ags & SQLITE_Ini
4990: 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a  tialized)==0 ){.
49a0: 20 20 20 20 69 6e 74 20 72 63 2c 20 63 6e 74 20      int rc, cnt 
49b0: 3d 20 31 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 1;.    while( 
49c0: 28 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69 74  (rc = sqliteInit
49d0: 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 29 3d  (db, pzErrMsg))=
49e0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 0a 20 20 20  =SQLITE_BUSY.   
49f0: 20 20 20 20 26 26 20 64 62 2d 3e 78 42 75 73 79      && db->xBusy
4a00: 43 61 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Callback && db->
4a10: 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 28 64 62  xBusyCallback(db
4a20: 2d 3e 70 42 75 73 79 41 72 67 2c 20 22 22 2c 20  ->pBusyArg, "", 
4a30: 63 6e 74 2b 2b 29 21 3d 30 20 29 7b 7d 0a 20 20  cnt++)!=0 ){}.  
4a40: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
4a50: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
4a60: 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a  iteStrRealloc(pz
4a70: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73  ErrMsg);.      s
4a80: 71 6c 69 74 65 53 61 66 65 74 79 4f 66 66 28 64  qliteSafetyOff(d
4a90: 62 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  b);.      return
4aa0: 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   rc;.    }.    i
4ab0: 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
4ac0: 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28       sqliteFree(
4ad0: 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  *pzErrMsg);.    
4ae0: 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b    *pzErrMsg = 0;
4af0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
4b00: 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74   db->file_format
4b10: 3c 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  <3 ){.    sqlite
4b20: 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20  SafetyOff(db);. 
4b30: 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69     sqliteSetStri
4b40: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 62  ng(pzErrMsg, "ob
4b50: 73 6f 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  solete database 
4b60: 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28 63  file format", (c
4b70: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74  har*)0);.    ret
4b80: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4b90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
4ba0: 70 56 64 62 65 3d 3d 30 20 29 7b 20 64 62 2d 3e  pVdbe==0 ){ db->
4bb0: 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20 7d 0a 20  nChange = 0; }. 
4bc0: 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73 65 2c   memset(&sParse,
4bd0: 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61 72 73   0, sizeof(sPars
4be0: 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e 64 62  e));.  sParse.db
4bf0: 20 3d 20 64 62 3b 0a 20 20 73 50 61 72 73 65 2e   = db;.  sParse.
4c00: 78 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  xCallback = xCal
4c10: 6c 62 61 63 6b 3b 0a 20 20 73 50 61 72 73 65 2e  lback;.  sParse.
4c20: 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 73  pArg = pArg;.  s
4c30: 50 61 72 73 65 2e 75 73 65 43 61 6c 6c 62 61 63  Parse.useCallbac
4c40: 6b 20 3d 20 70 70 56 6d 3d 3d 30 3b 0a 20 20 69  k = ppVm==0;.  i
4c50: 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20 29 20  f( db->xTrace ) 
4c60: 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
4c70: 54 72 61 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b  TraceArg, zSql);
4c80: 0a 20 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73  .  sqliteRunPars
4c90: 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c  er(&sParse, zSql
4ca0: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69  , pzErrMsg);.  i
4cb0: 66 28 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  f( sqlite_malloc
4cc0: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73  _failed ){.    s
4cd0: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
4ce0: 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66  zErrMsg, "out of
4cf0: 20 6d 65 6d 6f 72 79 22 2c 20 28 63 68 61 72 2a   memory", (char*
4d00: 29 30 29 3b 0a 20 20 20 20 73 50 61 72 73 65 2e  )0);.    sParse.
4d10: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
4d20: 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 52 6f 6c  M;.    sqliteRol
4d30: 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
4d40: 20 20 73 71 6c 69 74 65 52 65 73 65 74 49 6e 74    sqliteResetInt
4d50: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
4d60: 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  0);.    db->flag
4d70: 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 54  s &= ~SQLITE_InT
4d80: 72 61 6e 73 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rans;.  }.  if( 
4d90: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
4da0: 45 5f 44 4f 4e 45 20 29 20 73 50 61 72 73 65 2e  E_DONE ) sParse.
4db0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4dc0: 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63 21    if( sParse.rc!
4dd0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 7a  =SQLITE_OK && pz
4de0: 45 72 72 4d 73 67 20 26 26 20 2a 70 7a 45 72 72  ErrMsg && *pzErr
4df0: 4d 73 67 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  Msg==0 ){.    sq
4e00: 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a  liteSetString(pz
4e10: 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65  ErrMsg, sqlite_e
4e20: 72 72 6f 72 5f 73 74 72 69 6e 67 28 73 50 61 72  rror_string(sPar
4e30: 73 65 2e 72 63 29 2c 20 28 63 68 61 72 2a 29 30  se.rc), (char*)0
4e40: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 53  );.  }.  sqliteS
4e50: 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d  trRealloc(pzErrM
4e60: 73 67 29 3b 0a 20 20 69 66 28 20 73 50 61 72 73  sg);.  if( sPars
4e70: 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48  e.rc==SQLITE_SCH
4e80: 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  EMA ){.    sqlit
4e90: 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  eResetInternalSc
4ea0: 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d  hema(db, 0);.  }
4eb0: 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 75 73  .  if( sParse.us
4ec0: 65 43 61 6c 6c 62 61 63 6b 3d 3d 30 20 29 7b 0a  eCallback==0 ){.
4ed0: 20 20 20 20 61 73 73 65 72 74 28 20 70 70 56 6d      assert( ppVm
4ee0: 20 29 3b 0a 20 20 20 20 2a 70 70 56 6d 20 3d 20   );.    *ppVm = 
4ef0: 28 73 71 6c 69 74 65 5f 76 6d 2a 29 73 50 61 72  (sqlite_vm*)sPar
4f00: 73 65 2e 70 56 64 62 65 3b 0a 20 20 20 20 69 66  se.pVdbe;.    if
4f10: 28 20 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61  ( pzTail ) *pzTa
4f20: 69 6c 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69  il = sParse.zTai
4f30: 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  l;.  }.  if( sql
4f40: 69 74 65 53 61 66 65 74 79 4f 66 66 28 64 62 29  iteSafetyOff(db)
4f50: 20 29 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73   ) goto exec_mis
4f60: 75 73 65 3b 0a 20 20 72 65 74 75 72 6e 20 73 50  use;.  return sP
4f70: 61 72 73 65 2e 72 63 3b 0a 0a 65 78 65 63 5f 6d  arse.rc;..exec_m
4f80: 69 73 75 73 65 3a 0a 20 20 69 66 28 20 70 7a 45  isuse:.  if( pzE
4f90: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 2a 70 7a  rrMsg ){.    *pz
4fa0: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
4fb0: 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28  sqliteSetString(
4fc0: 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65  pzErrMsg, sqlite
4fd0: 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 53 51  _error_string(SQ
4fe0: 4c 49 54 45 5f 4d 49 53 55 53 45 29 2c 20 28 63  LITE_MISUSE), (c
4ff0: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 73 71 6c  har*)0);.    sql
5000: 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a  iteStrRealloc(pz
5010: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72  ErrMsg);.  }.  r
5020: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
5030: 55 53 45 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78  USE;.}../*.** Ex
5040: 65 63 75 74 65 20 53 51 4c 20 63 6f 64 65 2e 20  ecute SQL code. 
5050: 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74   Return one of t
5060: 68 65 20 53 51 4c 49 54 45 5f 20 73 75 63 63 65  he SQLITE_ succe
5070: 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a 20 63 6f  ss/failure.** co
5080: 64 65 73 2e 20 20 41 6c 73 6f 20 77 72 69 74 65  des.  Also write
5090: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
50a0: 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  e into memory ob
50b0: 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 6d  tained from.** m
50c0: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65  alloc() and make
50d0: 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f 69 6e 74   *pzErrMsg point
50e0: 20 74 6f 20 74 68 61 74 20 6d 65 73 73 61 67 65   to that message
50f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
5100: 51 4c 20 69 73 20 61 20 71 75 65 72 79 2c 20 74  QL is a query, t
5110: 68 65 6e 20 66 6f 72 20 65 61 63 68 20 72 6f 77  hen for each row
5120: 20 69 6e 20 74 68 65 20 71 75 65 72 79 20 72 65   in the query re
5130: 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78 43 61 6c  sult.** the xCal
5140: 6c 62 61 63 6b 28 29 20 66 75 6e 63 74 69 6f 6e  lback() function
5150: 20 69 73 20 63 61 6c 6c 65 64 2e 20 20 70 41 72   is called.  pAr
5160: 67 20 62 65 63 6f 6d 65 73 20 74 68 65 20 66 69  g becomes the fi
5170: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
5180: 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 2e 20  to xCallback(). 
5190: 20 49 66 20 78 43 61 6c 6c 62 61 63 6b 3d 4e 55   If xCallback=NU
51a0: 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61 6c 6c 62  LL then no callb
51b0: 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  ack.** is invoke
51c0: 64 2c 20 65 76 65 6e 20 66 6f 72 20 71 75 65 72  d, even for quer
51d0: 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ies..*/.int sqli
51e0: 74 65 5f 65 78 65 63 28 0a 20 20 73 71 6c 69 74  te_exec(.  sqlit
51f0: 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  e *db,          
5200: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
5210: 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63 68 20  tabase on which 
5220: 74 68 65 20 53 51 4c 20 65 78 65 63 75 74 65 73  the SQL executes
5230: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5240: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
5250: 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 6f 20    /* The SQL to 
5260: 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f 0a 20  be executed */. 
5270: 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62 61 63 6b   sqlite_callback
5280: 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20 2f 2a 20   xCallback,  /* 
5290: 49 6e 76 6f 6b 65 20 74 68 69 73 20 63 61 6c 6c  Invoke this call
52a0: 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 2a 2f 0a  back routine */.
52b0: 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 20 20 20    void *pArg,   
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
52d0: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
52e0: 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 20 2a  to xCallback() *
52f0: 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
5300: 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Msg             
5310: 2f 2a 20 57 72 69 74 65 20 65 72 72 6f 72 20 6d  /* Write error m
5320: 65 73 73 61 67 65 73 20 68 65 72 65 20 2a 2f 0a  essages here */.
5330: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
5340: 74 65 4d 61 69 6e 28 64 62 2c 20 7a 53 71 6c 2c  teMain(db, zSql,
5350: 20 78 43 61 6c 6c 62 61 63 6b 2c 20 70 41 72 67   xCallback, pArg
5360: 2c 20 30 2c 20 30 2c 20 70 7a 45 72 72 4d 73 67  , 0, 0, pzErrMsg
5370: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70  );.}../*.** Comp
5380: 69 6c 65 20 61 20 73 69 6e 67 6c 65 20 73 74 61  ile a single sta
5390: 74 65 6d 65 6e 74 20 6f 66 20 53 51 4c 20 69 6e  tement of SQL in
53a0: 74 6f 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63  to a virtual mac
53b0: 68 69 6e 65 2e 20 20 52 65 74 75 72 6e 20 6f 6e  hine.  Return on
53c0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 53 51 4c 49  e.** of the SQLI
53d0: 54 45 5f 20 73 75 63 63 65 73 73 2f 66 61 69 6c  TE_ success/fail
53e0: 75 72 65 20 63 6f 64 65 73 2e 20 20 41 6c 73 6f  ure codes.  Also
53f0: 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72 20   write an error 
5400: 6d 65 73 73 61 67 65 20 69 6e 74 6f 0a 2a 2a 20  message into.** 
5410: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
5420: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
5430: 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d 73 67  d make *pzErrMsg
5440: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d   point to that m
5450: 65 73 73 61 67 65 2e 0a 2a 2f 0a 69 6e 74 20 73  essage..*/.int s
5460: 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 28 0a 20  qlite_compile(. 
5470: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5490: 54 68 65 20 64 61 74 61 62 61 73 65 20 6f 6e 20  The database on 
54a0: 77 68 69 63 68 20 74 68 65 20 53 51 4c 20 65 78  which the SQL ex
54b0: 65 63 75 74 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ecutes */.  cons
54c0: 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20  t char *zSql,   
54d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
54e0: 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75 74 65  QL to be execute
54f0: 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  d */.  const cha
5500: 72 20 2a 2a 70 7a 54 61 69 6c 2c 20 20 20 20 20  r **pzTail,     
5510: 20 20 20 2f 2a 20 4f 55 54 3a 20 4e 65 78 74 20     /* OUT: Next 
5520: 73 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20  statement after 
5530: 74 68 65 20 66 69 72 73 74 20 2a 2f 0a 20 20 73  the first */.  s
5540: 71 6c 69 74 65 5f 76 6d 20 2a 2a 70 70 56 6d 2c  qlite_vm **ppVm,
5550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
5560: 54 3a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d  T: The virtual m
5570: 61 63 68 69 6e 65 20 2a 2f 0a 20 20 63 68 61 72  achine */.  char
5580: 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20   **pzErrMsg     
5590: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
55a0: 57 72 69 74 65 20 65 72 72 6f 72 20 6d 65 73 73  Write error mess
55b0: 61 67 65 73 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  ages here */.){.
55c0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 4d    return sqliteM
55d0: 61 69 6e 28 64 62 2c 20 7a 53 71 6c 2c 20 30 2c  ain(db, zSql, 0,
55e0: 20 30 2c 20 70 7a 54 61 69 6c 2c 20 70 70 56 6d   0, pzTail, ppVm
55f0: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 7d 0a 0a  , pzErrMsg);.}..
5600: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5610: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73  wing routine des
5620: 74 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20  troys a virtual 
5630: 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20  machine that is 
5640: 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
5650: 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
5660: 28 29 20 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a  () routine..**.*
5670: 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65  * The integer re
5680: 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c  turned is an SQL
5690: 49 54 45 5f 20 73 75 63 63 65 73 73 2f 66 61 69  ITE_ success/fai
56a0: 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74 20 64  lure code that d
56b0: 65 73 63 72 69 62 65 73 0a 2a 2a 20 74 68 65 20  escribes.** the 
56c0: 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74  result of execut
56d0: 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 20  ing the virtual 
56e0: 6d 61 63 68 69 6e 65 2e 20 20 41 6e 20 65 72 72  machine.  An err
56f0: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 0a 2a 2a  or message is.**
5700: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 6d 65   written into me
5710: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
5720: 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 2a 70  om malloc and *p
5730: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
5740: 74 6f 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f 20 74  to.** point to t
5750: 68 61 74 20 65 72 72 6f 72 20 69 66 20 70 7a 45  hat error if pzE
5760: 72 72 4d 73 67 20 69 73 20 6e 6f 74 20 4e 55 4c  rrMsg is not NUL
5770: 4c 2e 20 20 54 68 65 20 63 61 6c 6c 69 6e 67 20  L.  The calling 
5780: 72 6f 75 74 69 6e 65 0a 2a 2a 20 73 68 6f 75 6c  routine.** shoul
5790: 64 20 75 73 65 20 73 71 6c 69 74 65 5f 66 72 65  d use sqlite_fre
57a0: 65 6d 65 6d 28 29 20 74 6f 20 64 65 6c 65 74 65  emem() to delete
57b0: 20 74 68 65 20 6d 65 73 73 61 67 65 20 77 68 65   the message whe
57c0: 6e 20 69 74 20 68 61 73 20 66 69 6e 69 73 68 65  n it has finishe
57d0: 64 0a 2a 2a 20 77 69 74 68 20 69 74 2e 0a 2a 2f  d.** with it..*/
57e0: 0a 69 6e 74 20 73 71 6c 69 74 65 5f 66 69 6e 61  .int sqlite_fina
57f0: 6c 69 7a 65 28 0a 20 20 73 71 6c 69 74 65 5f 76  lize(.  sqlite_v
5800: 6d 20 2a 70 56 6d 2c 20 20 20 20 20 20 20 20 20  m *pVm,         
5810: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
5820: 6c 20 6d 61 63 68 69 6e 65 20 74 6f 20 62 65 20  l machine to be 
5830: 64 65 73 74 72 6f 79 65 64 20 2a 2f 0a 20 20 63  destroyed */.  c
5840: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20  har **pzErrMsg  
5850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54            /* OUT
5860: 3a 20 57 72 69 74 65 20 65 72 72 6f 72 20 6d 65  : Write error me
5870: 73 73 61 67 65 73 20 68 65 72 65 20 2a 2f 0a 29  ssages here */.)
5880: 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c  {.  int rc = sql
5890: 69 74 65 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  iteVdbeFinalize(
58a0: 28 56 64 62 65 2a 29 70 56 6d 2c 20 70 7a 45 72  (Vdbe*)pVm, pzEr
58b0: 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 53  rMsg);.  sqliteS
58c0: 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d  trRealloc(pzErrM
58d0: 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  sg);.  return rc
58e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69  ;.}../*.** Termi
58f0: 6e 61 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  nate the current
5900: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 20   execution of a 
5910: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5920: 74 68 65 6e 0a 2a 2a 20 72 65 73 65 74 20 74 68  then.** reset th
5930: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5940: 65 20 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74  e back to its st
5950: 61 72 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20  arting state so 
5960: 74 68 61 74 20 69 74 0a 2a 2a 20 63 61 6e 20 62  that it.** can b
5970: 65 20 72 65 75 73 65 64 2e 20 20 41 6e 79 20 65  e reused.  Any e
5980: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 72 65 73  rror message res
5990: 75 6c 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 20  ulting from the 
59a0: 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 0a  prior execution.
59b0: 2a 2a 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  ** is written in
59c0: 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 20 20 41  to *pzErrMsg.  A
59d0: 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72   success code fr
59e0: 6f 6d 20 74 68 65 20 70 72 69 6f 72 20 65 78 65  om the prior exe
59f0: 63 75 74 69 6f 6e 0a 2a 2a 20 69 73 20 72 65 74  cution.** is ret
5a00: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
5a10: 6c 69 74 65 5f 72 65 73 65 74 28 0a 20 20 73 71  lite_reset(.  sq
5a20: 6c 69 74 65 5f 76 6d 20 2a 70 56 6d 2c 20 20 20  lite_vm *pVm,   
5a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
5a40: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5a50: 74 6f 20 62 65 20 64 65 73 74 72 6f 79 65 64 20  to be destroyed 
5a60: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
5a70: 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
5a80: 2f 2a 20 4f 55 54 3a 20 57 72 69 74 65 20 65 72  /* OUT: Write er
5a90: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 68 65 72  ror messages her
5aa0: 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  e */.){.  int rc
5ab0: 20 3d 20 73 71 6c 69 74 65 56 64 62 65 52 65 73   = sqliteVdbeRes
5ac0: 65 74 28 28 56 64 62 65 2a 29 70 56 6d 2c 20 70  et((Vdbe*)pVm, p
5ad0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
5ae0: 74 65 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  teVdbeMakeReady(
5af0: 28 56 64 62 65 2a 29 70 56 6d 2c 20 2d 31 2c 20  (Vdbe*)pVm, -1, 
5b00: 30 2c 20 30 2c 20 30 29 3b 0a 20 20 73 71 6c 69  0, 0, 0);.  sqli
5b10: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
5b20: 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e  rrMsg);.  return
5b30: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65   rc;.}../*.** Re
5b40: 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74  turn a static st
5b50: 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72 69  ring that descri
5b60: 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20  bes the kind of 
5b70: 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64 20  error specified 
5b80: 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65  in the.** argume
5b90: 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  nt..*/.const cha
5ba0: 72 20 2a 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f  r *sqlite_error_
5bb0: 73 74 72 69 6e 67 28 69 6e 74 20 72 63 29 7b 0a  string(int rc){.
5bc0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
5bd0: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b  .  switch( rc ){
5be0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5bf0: 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 20 3d  _OK:         z =
5c00: 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b   "not an error";
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5c30: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5c40: 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d  _ERROR:      z =
5c50: 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   "SQL logic erro
5c60: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
5c70: 61 62 61 73 65 22 3b 20 20 20 62 72 65 61 6b 3b  abase";   break;
5c80: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5c90: 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a 20 3d  _INTERNAL:   z =
5ca0: 20 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74   "internal SQLit
5cb0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5cc0: 20 66 6c 61 77 22 3b 20 20 20 62 72 65 61 6b 3b   flaw";   break;
5cd0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5ce0: 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d  _PERM:       z =
5cf0: 20 22 61 63 63 65 73 73 20 70 65 72 6d 69 73 73   "access permiss
5d00: 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20  ion denied";    
5d10: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5d20: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5d30: 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d  _ABORT:      z =
5d40: 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65   "callback reque
5d50: 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74  sted query abort
5d60: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
5d70: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5d80: 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a 20 3d  _BUSY:       z =
5d90: 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   "database is lo
5da0: 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  cked";          
5db0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5dc0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5dd0: 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d  _LOCKED:     z =
5de0: 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
5df0: 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20   is locked";    
5e00: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5e10: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5e20: 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d  _NOMEM:      z =
5e30: 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
5e40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5e50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5e60: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5e70: 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d  _READONLY:   z =
5e80: 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69   "attempt to wri
5e90: 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61  te a readonly da
5ea0: 74 61 62 61 73 65 22 3b 20 20 62 72 65 61 6b 3b  tabase";  break;
5eb0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5ec0: 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 20 3d  _INTERRUPT:  z =
5ed0: 20 22 69 6e 74 65 72 72 75 70 74 65 64 22 3b 20   "interrupted"; 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5f00: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5f10: 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 20 3d  _IOERR:      z =
5f20: 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72   "disk I/O error
5f30: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5f40: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5f50: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5f60: 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 20 3d  _CORRUPT:    z =
5f70: 20 22 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   "database disk 
5f80: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
5f90: 65 64 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  ed";      break;
5fa0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5fb0: 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a 20 3d  _NOTFOUND:   z =
5fc0: 20 22 74 61 62 6c 65 20 6f 72 20 72 65 63 6f 72   "table or recor
5fd0: 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20 20 20  d not found";   
5fe0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5ff0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6000: 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d  _FULL:       z =
6010: 20 22 64 61 74 61 62 61 73 65 20 69 73 20 66 75   "database is fu
6020: 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ll";            
6030: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6040: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6050: 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d  _CANTOPEN:   z =
6060: 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   "unable to open
6070: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 3b   database file";
6080: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6090: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
60a0: 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d  _PROTOCOL:   z =
60b0: 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69   "database locki
60c0: 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c  ng protocol fail
60d0: 75 72 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ure";     break;
60e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
60f0: 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a 20 3d  _EMPTY:      z =
6100: 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73   "table contains
6110: 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20 20 20   no data";      
6120: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6130: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6140: 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d  _SCHEMA:     z =
6150: 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
6160: 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 3b 20  a has changed"; 
6170: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6180: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6190: 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a 20 3d  _TOOBIG:     z =
61a0: 20 22 74 6f 6f 20 6d 75 63 68 20 64 61 74 61 20   "too much data 
61b0: 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20 72 6f  for one table ro
61c0: 77 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  w";       break;
61d0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
61e0: 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d  _CONSTRAINT: z =
61f0: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
6200: 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  led";           
6210: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6220: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6230: 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d  _MISMATCH:   z =
6240: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
6250: 74 63 68 22 3b 20 20 20 20 20 20 20 20 20 20 20  tch";           
6260: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6270: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6280: 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 20 3d  _MISUSE:     z =
6290: 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e   "library routin
62a0: 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20  e called out of 
62b0: 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b  sequence";break;
62c0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
62d0: 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d  _NOLFS:      z =
62e0: 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c   "kernel lacks l
62f0: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
6300: 74 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  t";       break;
6310: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6320: 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a 20 3d  _AUTH:       z =
6330: 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20   "authorization 
6340: 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20  denied";        
6350: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6360: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
6370: 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20 3d  _FORMAT:     z =
6380: 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61   "auxiliary data
6390: 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f  base format erro
63a0: 72 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  r";       break;
63b0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
63c0: 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 20 3d  _RANGE:      z =
63d0: 20 22 62 69 6e 64 20 69 6e 64 65 78 20 6f 75 74   "bind index out
63e0: 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20 20 20   of range";     
63f0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6400: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d               z =
6420: 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22   "unknown error"
6430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6440: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6450: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b  .  }.  return z;
6460: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
6470: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6480: 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63  s a busy callbac
6490: 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e  k that sleeps an
64a0: 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e  d tries.** again
64b0: 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74   until a timeout
64c0: 20 76 61 6c 75 65 20 69 73 20 72 65 61 63 68 65   value is reache
64d0: 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20  d.  The timeout 
64e0: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69  value is.** an i
64f0: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
6500: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61   milliseconds pa
6510: 73 73 65 64 20 69 6e 20 61 73 20 74 68 65 20 66  ssed in as the f
6520: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
6530: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
6540: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
6550: 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64  yCallback(. void
6560: 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20 20 20   *Timeout,      
6570: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
6580: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74  amount of time t
6590: 6f 20 77 61 69 74 20 2a 2f 0a 20 63 6f 6e 73 74  o wait */. const
65a0: 20 63 68 61 72 20 2a 4e 6f 74 55 73 65 64 2c 20   char *NotUsed, 
65b0: 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
65c0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
65d0: 74 20 69 73 20 62 75 73 79 20 2a 2f 0a 20 69 6e  t is busy */. in
65e0: 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20  t count         
65f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6600: 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20   of times table 
6610: 68 61 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f  has been busy */
6620: 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .){.#if SQLITE_M
6630: 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20  IN_SLEEP_MS==1. 
6640: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
6650: 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20  ar delays[] =.  
6660: 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30     { 1, 2, 5, 10
6670: 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35  , 15, 20, 25, 25
6680: 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c  ,  25,  50,  50,
6690: 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20 20 73 74    50, 100};.  st
66a0: 61 74 69 63 20 63 6f 6e 73 74 20 73 68 6f 72 74  atic const short
66b0: 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a   int totals[] =.
66c0: 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33 2c 20       { 0, 1, 3, 
66d0: 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33 2c 20   8, 18, 33, 53, 
66e0: 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20 31 37  78, 103, 128, 17
66f0: 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b 0a 23 20  8, 228, 287};.# 
6700: 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 28 73  define NDELAY (s
6710: 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f 73 69  izeof(delays)/si
6720: 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29 29  zeof(delays[0]))
6730: 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d  .  int timeout =
6740: 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20   (int)Timeout;. 
6750: 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72 69 6f   int delay, prio
6760: 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75 6e 74 20  r;..  if( count 
6770: 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a 20 20 20  <= NDELAY ){.   
6780: 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b   delay = delays[
6790: 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20 20 70 72  count-1];.    pr
67a0: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63 6f 75  ior = totals[cou
67b0: 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nt-1];.  }else{.
67c0: 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61      delay = dela
67d0: 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a 20 20  ys[NDELAY-1];.  
67e0: 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73    prior = totals
67f0: 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64 65 6c  [NDELAY-1] + del
6800: 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c 41 59  ay*(count-NDELAY
6810: 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  -1);.  }.  if( p
6820: 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e 20 74  rior + delay > t
6830: 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 64 65  imeout ){.    de
6840: 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20 2d 20  lay = timeout - 
6850: 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28 20 64  prior;.    if( d
6860: 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75 72 6e  elay<=0 ) return
6870: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
6880: 4f 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a  OsSleep(delay);.
6890: 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73    return 1;.#els
68a0: 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20  e.  int timeout 
68b0: 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a  = (int)Timeout;.
68c0: 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a    if( (count+1)*
68d0: 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20 29  1000 > timeout )
68e0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
68f0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 4f 73 53 6c    }.  sqliteOsSl
6900: 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74  eep(1000);.  ret
6910: 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a  urn 1;.#endif.}.
6920: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
6930: 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75 73  ine sets the bus
6940: 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  y callback for a
6950: 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73  n Sqlite databas
6960: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65  e to the.** give
6970: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
6980: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76  ion with the giv
6990: 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  en argument..*/.
69a0: 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73 79  void sqlite_busy
69b0: 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69  _handler(.  sqli
69c0: 74 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a  te *db,.  int (*
69d0: 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f 6e  xBusy)(void*,con
69e0: 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a 20  st char*,int),. 
69f0: 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20   void *pArg.){. 
6a00: 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61   db->xBusyCallba
6a10: 63 6b 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62  ck = xBusy;.  db
6a20: 2d 3e 70 42 75 73 79 41 72 67 20 3d 20 70 41 72  ->pBusyArg = pAr
6a30: 67 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  g;.}..#ifndef SQ
6a40: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
6a50: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a  SS_CALLBACK./*.*
6a60: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
6a70: 65 74 73 20 74 68 65 20 70 72 6f 67 72 65 73 73  ets the progress
6a80: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e   callback for an
6a90: 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73 65   Sqlite database
6aa0: 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e   to the.** given
6ab0: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
6ac0: 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76 65  on with the give
6ad0: 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65 20  n argument. The 
6ae0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6af0: 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 69 6e 76  k will.** be inv
6b00: 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f 70 73 20  oked every nOps 
6b10: 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76 6f 69 64  opcodes..*/.void
6b20: 20 73 71 6c 69 74 65 5f 70 72 6f 67 72 65 73 73   sqlite_progress
6b30: 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69  _handler(.  sqli
6b40: 74 65 20 2a 64 62 2c 20 0a 20 20 69 6e 74 20 6e  te *db, .  int n
6b50: 4f 70 73 2c 0a 20 20 69 6e 74 20 28 2a 78 50 72  Ops,.  int (*xPr
6b60: 6f 67 72 65 73 73 29 28 76 6f 69 64 2a 29 2c 20  ogress)(void*), 
6b70: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b  .  void *pArg.){
6b80: 0a 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b  .  if( nOps>0 ){
6b90: 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65  .    db->xProgre
6ba0: 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a  ss = xProgress;.
6bb0: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
6bc0: 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20  sOps = nOps;.   
6bd0: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
6be0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 7d 65 6c 73  g = pArg;.  }els
6bf0: 65 7b 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67  e{.    db->xProg
6c00: 72 65 73 73 20 3d 20 30 3b 0a 20 20 20 20 64 62  ress = 0;.    db
6c10: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d  ->nProgressOps =
6c20: 20 30 3b 0a 20 20 20 20 64 62 2d 3e 70 50 72 6f   0;.    db->pPro
6c30: 67 72 65 73 73 41 72 67 20 3d 20 30 3b 0a 20 20  gressArg = 0;.  
6c40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  }.}.#endif.../*.
6c50: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
6c60: 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75  installs a defau
6c70: 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  lt busy handler 
6c80: 74 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74  that waits for t
6c90: 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20  he.** specified 
6ca0: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
6cb0: 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65  econds before re
6cc0: 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f  turning 0..*/.vo
6cd0: 69 64 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 74  id sqlite_busy_t
6ce0: 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 20 2a 64  imeout(sqlite *d
6cf0: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
6d00: 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71  ( ms>0 ){.    sq
6d10: 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65  lite_busy_handle
6d20: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
6d30: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
6d40: 20 28 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d   (void*)ms);.  }
6d50: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
6d60: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62  _busy_handler(db
6d70: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a  , 0, 0);.  }.}..
6d80: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
6d90: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
6da0: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
6db0: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
6dc0: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
6dd0: 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 28  qlite_interrupt(
6de0: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64  sqlite *db){.  d
6df0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
6e00: 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  TE_Interrupt;.}.
6e10: 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73  ./*.** Windows s
6e20: 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61  ystems should ca
6e30: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
6e40: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74  to free memory t
6e50: 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  hat.** is return
6e60: 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65  ed in the in the
6e70: 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65   errmsg paramete
6e80: 72 20 6f 66 20 73 71 6c 69 74 65 5f 6f 70 65 6e  r of sqlite_open
6e90: 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69 74  () when.** SQLit
6ea0: 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f 72  e is a DLL.  For
6eb0: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69 74   some reason, it
6ec0: 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74   does not work t
6ed0: 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a 2a  o call free().**
6ee0: 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a   directly..**.**
6ef0: 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e 65   Note that we ne
6f00: 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28  ed to call free(
6f10: 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65 65  ) not sqliteFree
6f20: 28 29 20 68 65 72 65 2c 20 73 69 6e 63 65 20 65  () here, since e
6f30: 76 65 72 79 0a 2a 2a 20 73 74 72 69 6e 67 20 74  very.** string t
6f40: 68 61 74 20 69 73 20 65 78 70 6f 72 74 65 64 20  hat is exported 
6f50: 66 72 6f 6d 20 53 51 4c 69 74 65 20 73 68 6f 75  from SQLite shou
6f60: 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ld have already 
6f70: 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
6f80: 2a 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c  * sqliteStrReall
6f90: 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  oc()..*/.void sq
6fa0: 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28 76 6f 69  lite_freemem(voi
6fb0: 64 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b 20  d *p){ free(p); 
6fc0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73  }../*.** Windows
6fd0: 20 73 79 73 74 65 6d 73 20 6e 65 65 64 20 66 75   systems need fu
6fe0: 6e 63 74 69 6f 6e 73 20 74 6f 20 63 61 6c 6c 20  nctions to call 
6ff0: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 73 71  to return the sq
7000: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 0a 2a 2a 20  lite_version.** 
7010: 61 6e 64 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64  and sqlite_encod
7020: 69 6e 67 20 73 74 72 69 6e 67 73 20 73 69 6e 63  ing strings sinc
7030: 65 20 74 68 65 79 20 61 72 65 20 75 6e 61 62 6c  e they are unabl
7040: 65 20 74 6f 20 61 63 63 65 73 73 20 63 6f 6e 73  e to access cons
7050: 74 61 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20  tants.** within 
7060: 44 4c 4c 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  DLLs..*/.const c
7070: 68 61 72 20 2a 73 71 6c 69 74 65 5f 6c 69 62 76  har *sqlite_libv
7080: 65 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65  ersion(void){ re
7090: 74 75 72 6e 20 73 71 6c 69 74 65 5f 76 65 72 73  turn sqlite_vers
70a0: 69 6f 6e 3b 20 7d 0a 63 6f 6e 73 74 20 63 68 61  ion; }.const cha
70b0: 72 20 2a 73 71 6c 69 74 65 5f 6c 69 62 65 6e 63  r *sqlite_libenc
70c0: 6f 64 69 6e 67 28 76 6f 69 64 29 7b 20 72 65 74  oding(void){ ret
70d0: 75 72 6e 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64  urn sqlite_encod
70e0: 69 6e 67 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  ing; }../*.** Cr
70f0: 65 61 74 65 20 6e 65 77 20 75 73 65 72 2d 64 65  eate new user-de
7100: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  fined functions.
7110: 20 20 54 68 65 20 73 71 6c 69 74 65 5f 63 72 65    The sqlite_cre
7120: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 0a 2a  ate_function().*
7130: 2a 20 72 6f 75 74 69 6e 65 20 63 72 65 61 74 65  * routine create
7140: 73 20 61 20 72 65 67 75 6c 61 72 20 66 75 6e 63  s a regular func
7150: 74 69 6f 6e 20 61 6e 64 20 73 71 6c 69 74 65 5f  tion and sqlite_
7160: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
7170: 28 29 0a 2a 2a 20 63 72 65 61 74 65 73 20 61 6e  ().** creates an
7180: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
7190: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 50 61 73 73 69  ion..**.** Passi
71a0: 6e 67 20 61 20 4e 55 4c 4c 20 78 46 75 6e 63 20  ng a NULL xFunc 
71b0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 4e 55 4c 4c  argument or NULL
71c0: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
71d0: 6c 69 7a 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a  lize arguments.*
71e0: 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 66  * disables the f
71f0: 75 6e 63 74 69 6f 6e 2e 20 20 43 61 6c 6c 69 6e  unction.  Callin
7200: 67 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f  g sqlite_create_
7210: 66 75 6e 63 74 69 6f 6e 28 29 20 77 69 74 68 20  function() with 
7220: 74 68 65 0a 2a 2a 20 73 61 6d 65 20 6e 61 6d 65  the.** same name
7230: 20 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66 20 61   and number of a
7240: 72 67 75 6d 65 6e 74 73 20 61 73 20 61 20 70 72  rguments as a pr
7250: 69 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73  ior call to.** s
7260: 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 61 67 67  qlite_create_agg
7270: 72 65 67 61 74 65 28 29 20 64 69 73 61 62 6c 65  regate() disable
7280: 73 20 74 68 65 20 70 72 69 6f 72 20 63 61 6c 6c  s the prior call
7290: 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f 63 72   to.** sqlite_cr
72a0: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28 29  eate_aggregate()
72b0: 2c 20 61 6e 64 20 76 69 63 65 20 76 65 72 73 61  , and vice versa
72c0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 41 72 67 20  ..**.** If nArg 
72d0: 69 73 20 2d 31 20 69 74 20 6d 65 61 6e 73 20 74  is -1 it means t
72e0: 68 61 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f  hat this functio
72f0: 6e 20 77 69 6c 6c 20 61 63 63 65 70 74 20 61 6e  n will accept an
7300: 79 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20 61  y number.** of a
7310: 72 67 75 6d 65 6e 74 73 2c 20 69 6e 63 6c 75 64  rguments, includ
7320: 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ing 0..*/.int sq
7330: 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e 63  lite_create_func
7340: 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 20 2a  tion(.  sqlite *
7350: 64 62 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  db,          /* 
7360: 41 64 64 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  Add the function
7370: 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61 73   to this databas
7380: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
7390: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
73a0: 61 6d 65 2c 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ame,   /* Name o
73b0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
73c0: 6f 20 61 64 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  o add */.  int n
73d0: 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
73e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
73f0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 76 6f 69 64  uments */.  void
7400: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
7410: 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e 73 74  _func*,int,const
7420: 20 63 68 61 72 2a 2a 29 2c 20 20 2f 2a 20 54 68   char**),  /* Th
7430: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
7440: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
7450: 72 44 61 74 61 20 20 20 20 20 20 2f 2a 20 55 73  rData      /* Us
7460: 65 72 20 64 61 74 61 20 2a 2f 0a 29 7b 0a 20 20  er data */.){.  
7470: 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e  FuncDef *p;.  in
7480: 74 20 6e 4e 61 6d 65 3b 0a 20 20 69 66 28 20 64  t nName;.  if( d
7490: 62 3d 3d 30 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30  b==0 || zName==0
74a0: 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65 74 79   || sqliteSafety
74b0: 43 68 65 63 6b 28 64 62 29 20 29 20 72 65 74 75  Check(db) ) retu
74c0: 72 6e 20 31 3b 0a 20 20 6e 4e 61 6d 65 20 3d 20  rn 1;.  nName = 
74d0: 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 3b 0a 20  strlen(zName);. 
74e0: 20 69 66 28 20 6e 4e 61 6d 65 3e 32 35 35 20 29   if( nName>255 )
74f0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 20 3d   return 1;.  p =
7500: 20 73 71 6c 69 74 65 46 69 6e 64 46 75 6e 63 74   sqliteFindFunct
7510: 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e  ion(db, zName, n
7520: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 31 29 3b 0a  Name, nArg, 1);.
7530: 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74    if( p==0 ) ret
7540: 75 72 6e 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e  urn 1;.  p->xFun
7550: 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e  c = xFunc;.  p->
7560: 78 53 74 65 70 20 3d 20 30 3b 0a 20 20 70 2d 3e  xStep = 0;.  p->
7570: 78 46 69 6e 61 6c 69 7a 65 20 3d 20 30 3b 0a 20  xFinalize = 0;. 
7580: 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20   p->pUserData = 
7590: 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65 74  pUserData;.  ret
75a0: 75 72 6e 20 30 3b 0a 7d 0a 69 6e 74 20 73 71 6c  urn 0;.}.int sql
75b0: 69 74 65 5f 63 72 65 61 74 65 5f 61 67 67 72 65  ite_create_aggre
75c0: 67 61 74 65 28 0a 20 20 73 71 6c 69 74 65 20 2a  gate(.  sqlite *
75d0: 64 62 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  db,          /* 
75e0: 41 64 64 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  Add the function
75f0: 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61 73   to this databas
7600: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
7610: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
7620: 61 6d 65 2c 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ame,   /* Name o
7630: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
7640: 6f 20 61 64 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  o add */.  int n
7650: 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
7660: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
7670: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 76 6f 69 64  uments */.  void
7680: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
7690: 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e 73 74  _func*,int,const
76a0: 20 63 68 61 72 2a 2a 29 2c 20 2f 2a 20 54 68 65   char**), /* The
76b0: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 2a   step function *
76c0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
76d0: 6c 69 7a 65 29 28 73 71 6c 69 74 65 5f 66 75 6e  lize)(sqlite_fun
76e0: 63 2a 29 2c 20 20 20 20 20 20 20 20 20 20 20 20  c*),            
76f0: 20 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c 69 7a    /* The finaliz
7700: 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  er */.  void *pU
7710: 73 65 72 44 61 74 61 20 20 20 20 20 20 2f 2a 20  serData      /* 
7720: 55 73 65 72 20 64 61 74 61 20 2a 2f 0a 29 7b 0a  User data */.){.
7730: 20 20 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20    FuncDef *p;.  
7740: 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 69 66 28  int nName;.  if(
7750: 20 64 62 3d 3d 30 20 7c 7c 20 7a 4e 61 6d 65 3d   db==0 || zName=
7760: 3d 30 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65  =0 || sqliteSafe
7770: 74 79 43 68 65 63 6b 28 64 62 29 20 29 20 72 65  tyCheck(db) ) re
7780: 74 75 72 6e 20 31 3b 0a 20 20 6e 4e 61 6d 65 20  turn 1;.  nName 
7790: 3d 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 3b  = strlen(zName);
77a0: 0a 20 20 69 66 28 20 6e 4e 61 6d 65 3e 32 35 35  .  if( nName>255
77b0: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70   ) return 1;.  p
77c0: 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 46 75 6e   = sqliteFindFun
77d0: 63 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c  ction(db, zName,
77e0: 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 31 29   nName, nArg, 1)
77f0: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72  ;.  if( p==0 ) r
7800: 65 74 75 72 6e 20 31 3b 0a 20 20 70 2d 3e 78 46  eturn 1;.  p->xF
7810: 75 6e 63 20 3d 20 30 3b 0a 20 20 70 2d 3e 78 53  unc = 0;.  p->xS
7820: 74 65 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 70  tep = xStep;.  p
7830: 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46  ->xFinalize = xF
7840: 69 6e 61 6c 69 7a 65 3b 0a 20 20 70 2d 3e 70 55  inalize;.  p->pU
7850: 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44  serData = pUserD
7860: 61 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  ata;.  return 0;
7870: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65  .}../*.** Change
7880: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66 6f   the datatype fo
7890: 72 20 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20  r all functions 
78a0: 77 69 74 68 20 61 20 67 69 76 65 6e 20 6e 61 6d  with a given nam
78b0: 65 2e 20 20 53 65 65 20 74 68 65 0a 2a 2a 20 68  e.  See the.** h
78c0: 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 66 6f  eader comment fo
78d0: 72 20 74 68 65 20 70 72 6f 74 6f 74 79 70 65 20  r the prototype 
78e0: 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  of this function
78f0: 20 69 6e 20 73 71 6c 69 74 65 2e 68 20 66 6f 72   in sqlite.h for
7900: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
7910: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 69  nformation..*/.i
7920: 6e 74 20 73 71 6c 69 74 65 5f 66 75 6e 63 74 69  nt sqlite_functi
7930: 6f 6e 5f 74 79 70 65 28 73 71 6c 69 74 65 20 2a  on_type(sqlite *
7940: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
7950: 7a 4e 61 6d 65 2c 20 69 6e 74 20 64 61 74 61 54  zName, int dataT
7960: 79 70 65 29 7b 0a 20 20 46 75 6e 63 44 65 66 20  ype){.  FuncDef 
7970: 2a 70 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73  *p = (FuncDef*)s
7980: 71 6c 69 74 65 48 61 73 68 46 69 6e 64 28 26 64  qliteHashFind(&d
7990: 62 2d 3e 61 46 75 6e 63 2c 20 7a 4e 61 6d 65 2c  b->aFunc, zName,
79a0: 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 29 3b   strlen(zName));
79b0: 0a 20 20 77 68 69 6c 65 28 20 70 20 29 7b 0a 20  .  while( p ){. 
79c0: 20 20 20 70 2d 3e 64 61 74 61 54 79 70 65 20 3d     p->dataType =
79d0: 20 64 61 74 61 54 79 70 65 3b 20 0a 20 20 20 20   dataType; .    
79e0: 70 20 3d 20 70 2d 3e 70 4e 65 78 74 3b 0a 20 20  p = p->pNext;.  
79f0: 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  }.  return SQLIT
7a00: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  E_OK;.}../*.** R
7a10: 65 67 69 73 74 65 72 20 61 20 74 72 61 63 65 20  egister a trace 
7a20: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 70  function.  The p
7a30: 41 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72 65  Arg from the pre
7a40: 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72  viously register
7a50: 65 64 20 74 72 61 63 65 0a 2a 2a 20 69 73 20 72  ed trace.** is r
7a60: 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a  eturned.  .**.**
7a70: 20 41 20 4e 55 4c 4c 20 74 72 61 63 65 20 66 75   A NULL trace fu
7a80: 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61  nction means tha
7a90: 74 20 6e 6f 20 74 72 61 63 69 6e 67 20 69 73 20  t no tracing is 
7aa0: 65 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f 6e  executes.  A non
7ab0: 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63 65 20 69  -NULL.** trace i
7ac0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
7ad0: 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 69   function that i
7ae0: 73 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65  s invoked at the
7af0: 20 73 74 61 72 74 20 6f 66 20 65 61 63 68 0a 2a   start of each.*
7b00: 2a 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29 2e  * sqlite_exec().
7b10: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
7b20: 5f 74 72 61 63 65 28 73 71 6c 69 74 65 20 2a 64  _trace(sqlite *d
7b30: 62 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  b, void (*xTrace
7b40: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7b50: 61 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72 67  ar*), void *pArg
7b60: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
7b70: 3d 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b  = db->pTraceArg;
7b80: 0a 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d 20  .  db->xTrace = 
7b90: 78 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54  xTrace;.  db->pT
7ba0: 72 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b 0a  raceArg = pArg;.
7bb0: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
7bc0: 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e  ../*** EXPERIMEN
7bd0: 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65  TAL ***.**.** Re
7be0: 67 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f  gister a functio
7bf0: 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  n to be invoked 
7c00: 77 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  when a transacti
7c10: 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20  on comments..** 
7c20: 49 66 20 65 69 74 68 65 72 20 66 75 6e 63 74 69  If either functi
7c30: 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  on returns non-z
7c40: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ero, then the co
7c50: 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a  mmit becomes a.*
7c60: 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76  * rollback..*/.v
7c70: 6f 69 64 20 2a 73 71 6c 69 74 65 5f 63 6f 6d 6d  oid *sqlite_comm
7c80: 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  it_hook(.  sqlit
7c90: 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  e *db,          
7ca0: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
7cb0: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
7cc0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e  database */.  in
7cd0: 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
7ce0: 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74  oid*),  /* Funct
7cf0: 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e  ion to invoke on
7d00: 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a   each commit */.
7d10: 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20    void *pArg    
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7d30: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66  rgument to the f
7d40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20  unction */.){.  
7d50: 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d  void *pOld = db-
7d60: 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64  >pCommitArg;.  d
7d70: 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  b->xCommitCallba
7d80: 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a  ck = xCallback;.
7d90: 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67    db->pCommitArg
7da0: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
7db0: 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  n pOld;.}.../*.*
7dc0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
7dd0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
7de0: 74 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  te a connection 
7df0: 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 42 54  to a database BT
7e00: 72 65 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20 20  ree.** driver.  
7e10: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
7e20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 69  the name of a fi
7e30: 6c 65 2c 20 74 68 65 6e 20 74 68 61 74 20 66 69  le, then that fi
7e40: 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64 20  le is.** opened 
7e50: 61 6e 64 20 75 73 65 64 2e 20 20 49 66 20 7a 46  and used.  If zF
7e60: 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6d  ilename is the m
7e70: 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f  agic name ":memo
7e80: 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ry:" then.** the
7e90: 20 64 61 74 61 62 61 73 65 20 69 73 20 73 74 6f   database is sto
7ea0: 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28 61  red in memory (a
7eb0: 6e 64 20 69 73 20 74 68 75 73 20 66 6f 72 67 6f  nd is thus forgo
7ec0: 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73 0a  tten as soon as.
7ed0: 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ** the connectio
7ee0: 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29 20 20 49  n is closed.)  I
7ef0: 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 4e  f zFilename is N
7f00: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ULL then the dat
7f10: 61 62 61 73 65 0a 2a 2a 20 69 73 20 66 6f 72 20  abase.** is for 
7f20: 74 65 6d 70 6f 72 61 72 79 20 75 73 65 20 6f 6e  temporary use on
7f30: 6c 79 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65  ly and is delete
7f40: 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
7f50: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a 20 69   connection.** i
7f60: 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
7f70: 41 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  A temporary data
7f80: 62 61 73 65 20 63 61 6e 20 62 65 20 65 69 74 68  base can be eith
7f90: 65 72 20 61 20 64 69 73 6b 20 66 69 6c 65 20 28  er a disk file (
7fa0: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
7fb0: 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65 64  cally.** deleted
7fc0: 20 77 68 65 6e 20 74 68 65 20 66 69 6c 65 20 69   when the file i
7fd0: 73 20 63 6c 6f 73 65 64 29 20 6f 72 20 61 20 73  s closed) or a s
7fe0: 65 74 20 6f 66 20 72 65 64 2d 62 6c 61 63 6b 20  et of red-black 
7ff0: 74 72 65 65 73 20 68 65 6c 64 20 69 6e 20 6d 65  trees held in me
8000: 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69  mory,.** dependi
8010: 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73  ng on the values
8020: 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f   of the TEMP_STO
8030: 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  RE compile-time 
8040: 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a  macro and the.**
8050: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
8060: 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64  variable, accord
8070: 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ing to the follo
8080: 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a  wing chart:.**.*
8090: 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f  *       TEMP_STO
80a0: 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f  RE     db->temp_
80b0: 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69  store     Locati
80c0: 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  on of temporary 
80d0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20  database.**     
80e0: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20    ----------    
80f0: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20   -------------- 
8100: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
8110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8120: 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  --.**           
8130: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
8140: 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20  any             
8150: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
8160: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
8170: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
8180: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
8190: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
81a0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
81b0: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20      memory.**   
81c0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
81d0: 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20           0      
81e0: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
81f0: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
8200: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
8210: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
8220: 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20  *           2   
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
8240: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f              memo
8250: 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ry.**           
8260: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
8270: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
8280: 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20  memory.**       
8290: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
82a0: 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20      any         
82b0: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e      memory.*/.in
82c0: 74 20 73 71 6c 69 74 65 42 74 72 65 65 46 61 63  t sqliteBtreeFac
82d0: 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71  tory(.  const sq
82e0: 6c 69 74 65 20 2a 64 62 2c 09 20 20 20 20 2f 2a  lite *db,.    /*
82f0: 20 4d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77   Main database w
8300: 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75 78 20  hen opening aux 
8310: 6f 74 68 65 72 77 69 73 65 20 30 20 2a 2f 0a 20  otherwise 0 */. 
8320: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
8330: 6c 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20 4e 61  lename,    /* Na
8340: 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63  me of the file c
8350: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 42 54  ontaining the BT
8360: 72 65 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  ree database */.
8370: 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61    int omitJourna
8380: 6c 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  l,          /* i
8390: 66 20 54 52 55 45 20 74 68 65 6e 20 64 6f 20 6e  f TRUE then do n
83a0: 6f 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69 73 20  ot journal this 
83b0: 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  file */.  int nC
83c0: 61 63 68 65 2c 20 20 20 20 20 20 20 20 20 20 20  ache,           
83d0: 20 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e 79 20      /* How many 
83e0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67  pages in the pag
83f0: 65 20 63 61 63 68 65 20 2a 2f 0a 20 20 42 74 72  e cache */.  Btr
8400: 65 65 20 2a 2a 70 70 42 74 72 65 65 29 7b 20 20  ee **ppBtree){  
8410: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
8420: 72 20 74 6f 20 6e 65 77 20 42 74 72 65 65 20 6f  r to new Btree o
8430: 62 6a 65 63 74 20 77 72 69 74 74 65 6e 20 68 65  bject written he
8440: 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
8450: 20 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a   ppBtree != 0);.
8460: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8470: 4f 4d 49 54 5f 49 4e 4d 45 4d 4f 52 59 44 42 0a  OMIT_INMEMORYDB.
8480: 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d    if( zFilename=
8490: 3d 30 20 29 7b 0a 20 20 20 20 69 66 20 28 54 45  =0 ){.    if (TE
84a0: 4d 50 5f 53 54 4f 52 45 20 3d 3d 20 30 29 20 7b  MP_STORE == 0) {
84b0: 0a 20 20 20 20 20 20 2f 2a 20 41 6c 77 61 79 73  .      /* Always
84c0: 20 75 73 65 20 66 69 6c 65 20 62 61 73 65 64 20   use file based 
84d0: 74 65 6d 70 6f 72 61 72 79 20 44 42 20 2a 2f 0a  temporary DB */.
84e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c        return sql
84f0: 69 74 65 42 74 72 65 65 4f 70 65 6e 28 30 2c 20  iteBtreeOpen(0, 
8500: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 6e 43 61  omitJournal, nCa
8510: 63 68 65 2c 20 70 70 42 74 72 65 65 29 3b 0a 20  che, ppBtree);. 
8520: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 54 45     } else if (TE
8530: 4d 50 5f 53 54 4f 52 45 20 3d 3d 20 31 20 7c 7c  MP_STORE == 1 ||
8540: 20 54 45 4d 50 5f 53 54 4f 52 45 20 3d 3d 20 32   TEMP_STORE == 2
8550: 29 20 7b 0a 20 20 20 20 20 20 2f 2a 20 53 77 69  ) {.      /* Swi
8560: 74 63 68 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  tch depending on
8570: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 61 6e   compile-time an
8580: 64 2f 6f 72 20 72 75 6e 74 69 6d 65 20 73 65 74  d/or runtime set
8590: 74 69 6e 67 73 2e 20 2a 2f 0a 20 20 20 20 20 20  tings. */.      
85a0: 69 6e 74 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 64  int location = d
85b0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 30  b->temp_store==0
85c0: 20 3f 20 54 45 4d 50 5f 53 54 4f 52 45 20 3a 20   ? TEMP_STORE : 
85d0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  db->temp_store;.
85e0: 0a 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 74  .      if (locat
85f0: 69 6f 6e 20 3d 3d 20 31 29 20 7b 0a 20 20 20 20  ion == 1) {.    
8600: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
8610: 65 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65  eBtreeOpen(zFile
8620: 6e 61 6d 65 2c 20 6f 6d 69 74 4a 6f 75 72 6e 61  name, omitJourna
8630: 6c 2c 20 6e 43 61 63 68 65 2c 20 70 70 42 74 72  l, nCache, ppBtr
8640: 65 65 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ee);.      } els
8650: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  e {.        retu
8660: 72 6e 20 73 71 6c 69 74 65 52 62 74 72 65 65 4f  rn sqliteRbtreeO
8670: 70 65 6e 28 30 2c 20 30 2c 20 30 2c 20 70 70 42  pen(0, 0, 0, ppB
8680: 74 72 65 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  tree);.      }. 
8690: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
86a0: 20 20 2f 2a 20 41 6c 77 61 79 73 20 75 73 65 20    /* Always use 
86b0: 69 6e 2d 63 6f 72 65 20 44 42 20 2a 2f 0a 20 20  in-core DB */.  
86c0: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
86d0: 65 52 62 74 72 65 65 4f 70 65 6e 28 30 2c 20 30  eRbtreeOpen(0, 0
86e0: 2c 20 30 2c 20 70 70 42 74 72 65 65 29 3b 0a 20  , 0, ppBtree);. 
86f0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
8700: 20 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 27   zFilename[0]=='
8710: 3a 27 20 26 26 20 73 74 72 63 6d 70 28 7a 46 69  :' && strcmp(zFi
8720: 6c 65 6e 61 6d 65 2c 22 3a 6d 65 6d 6f 72 79 3a  lename,":memory:
8730: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ")==0 ){.    ret
8740: 75 72 6e 20 73 71 6c 69 74 65 52 62 74 72 65 65  urn sqliteRbtree
8750: 4f 70 65 6e 28 30 2c 20 30 2c 20 30 2c 20 70 70  Open(0, 0, 0, pp
8760: 42 74 72 65 65 29 3b 0a 20 20 7d 65 6c 73 65 0a  Btree);.  }else.
8770: 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 72  #endif.  {.    r
8780: 65 74 75 72 6e 20 73 71 6c 69 74 65 42 74 72 65  eturn sqliteBtre
8790: 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c  eOpen(zFilename,
87a0: 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 6e 43   omitJournal, nC
87b0: 61 63 68 65 2c 20 70 70 42 74 72 65 65 29 3b 0a  ache, ppBtree);.
87c0: 20 20 7d 0a 7d 0a                                  }.}.