/ Hex Artifact Content
Login

Artifact 67af644fa7c1b8bb06032b6a9459d084cf79bb81:


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 35 20 32 30 30 34 2f 30 31  ,v 1.145 2004/01
0280: 2f 31 35 20 30 32 3a 34 34 3a 30 33 20 64 72 68  /15 02:44:03 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 69 6e 74 20 64 65 6c 61 79 20 3d 20 31 30 3b   int delay = 10;
6650: 0a 20 20 69 6e 74 20 70 72 69 6f 72 5f 64 65 6c  .  int prior_del
6660: 61 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 74 69  ay = 0;.  int ti
6670: 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69 6d  meout = (int)Tim
6680: 65 6f 75 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  eout;.  int i;..
6690: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 63 6f 75    for(i=1; i<cou
66a0: 6e 74 3b 20 69 2b 2b 29 7b 20 0a 20 20 20 20 70  nt; i++){ .    p
66b0: 72 69 6f 72 5f 64 65 6c 61 79 20 2b 3d 20 64 65  rior_delay += de
66c0: 6c 61 79 3b 0a 20 20 20 20 64 65 6c 61 79 20 3d  lay;.    delay =
66d0: 20 64 65 6c 61 79 2a 32 3b 0a 20 20 20 20 69 66   delay*2;.    if
66e0: 28 20 64 65 6c 61 79 3e 3d 31 30 30 30 20 29 7b  ( delay>=1000 ){
66f0: 0a 20 20 20 20 20 20 64 65 6c 61 79 20 3d 20 31  .      delay = 1
6700: 30 30 30 3b 0a 20 20 20 20 20 20 70 72 69 6f 72  000;.      prior
6710: 5f 64 65 6c 61 79 20 2b 3d 20 31 30 30 30 2a 28  _delay += 1000*(
6720: 63 6f 75 6e 74 20 2d 20 69 20 2d 20 31 29 3b 0a  count - i - 1);.
6730: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
6740: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69   }.  }.  if( pri
6750: 6f 72 5f 64 65 6c 61 79 20 2b 20 64 65 6c 61 79  or_delay + delay
6760: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
6770: 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75    delay = timeou
6780: 74 20 2d 20 70 72 69 6f 72 5f 64 65 6c 61 79 3b  t - prior_delay;
6790: 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d  .    if( delay<=
67a0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
67b0: 7d 0a 20 20 73 71 6c 69 74 65 4f 73 53 6c 65 65  }.  sqliteOsSlee
67c0: 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75  p(delay);.  retu
67d0: 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e  rn 1;.#else.  in
67e0: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74  t timeout = (int
67f0: 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20  )Timeout;.  if( 
6800: 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e  (count+1)*1000 >
6810: 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20   timeout ){.    
6820: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
6830: 73 71 6c 69 74 65 4f 73 53 6c 65 65 70 28 31 30  sqliteOsSleep(10
6840: 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  00);.  return 1;
6850: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
6860: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
6870: 74 73 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c  ts the busy call
6880: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
6890: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
68a0: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
68b0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
68c0: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
68d0: 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ument..*/.void s
68e0: 71 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c  qlite_busy_handl
68f0: 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  er(.  sqlite *db
6900: 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29  ,.  int (*xBusy)
6910: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
6920: 72 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20  r*,int),.  void 
6930: 2a 70 41 72 67 0a 29 7b 0a 20 20 64 62 2d 3e 78  *pArg.){.  db->x
6940: 42 75 73 79 43 61 6c 6c 62 61 63 6b 20 3d 20 78  BusyCallback = x
6950: 42 75 73 79 3b 0a 20 20 64 62 2d 3e 70 42 75 73  Busy;.  db->pBus
6960: 79 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a  yArg = pArg;.}..
6970: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6980: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
6990: 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73  LBACK./*.** This
69a0: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
69b0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
69c0: 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74  ack for an Sqlit
69d0: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
69e0: 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62  e.** given callb
69f0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ack function wit
6a00: 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75  h the given argu
6a10: 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72 65  ment. The progre
6a20: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c  ss callback will
6a30: 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20 65  .** be invoked e
6a40: 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65  very nOps opcode
6a50: 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  s..*/.void sqlit
6a60: 65 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  e_progress_handl
6a70: 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  er(.  sqlite *db
6a80: 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20  , .  int nOps,. 
6a90: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
6aa0: 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69  )(void*), .  voi
6ab0: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28  d *pArg.){.  if(
6ac0: 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 64   nOps>0 ){.    d
6ad0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 78  b->xProgress = x
6ae0: 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 64 62  Progress;.    db
6af0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d  ->nProgressOps =
6b00: 20 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d 3e 70   nOps;.    db->p
6b10: 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70 41  ProgressArg = pA
6b20: 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rg;.  }else{.   
6b30: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
6b40: 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f   0;.    db->nPro
6b50: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
6b60: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
6b70: 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  rg = 0;.  }.}.#e
6b80: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  ndif.../*.** Thi
6b90: 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c  s routine instal
6ba0: 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73  ls a default bus
6bb0: 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77  y handler that w
6bc0: 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  aits for the.** 
6bd0: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
6be0: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
6bf0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
6c00: 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  g 0..*/.void sql
6c10: 69 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  ite_busy_timeout
6c20: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74  (sqlite *db, int
6c30: 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30   ms){.  if( ms>0
6c40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62   ){.    sqlite_b
6c50: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
6c60: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
6c70: 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64  yCallback, (void
6c80: 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  *)ms);.  }else{.
6c90: 20 20 20 20 73 71 6c 69 74 65 5f 62 75 73 79 5f      sqlite_busy_
6ca0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30  handler(db, 0, 0
6cb0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
6cc0: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
6cd0: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
6ce0: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
6cf0: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
6d00: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f  .*/.void sqlite_
6d10: 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65  interrupt(sqlite
6d20: 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61   *db){.  db->fla
6d30: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
6d40: 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  errupt;.}../*.**
6d50: 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   Windows systems
6d60: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69   should call thi
6d70: 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65  s routine to fre
6d80: 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a  e memory that.**
6d90: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20   is returned in 
6da0: 74 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73  the in the errms
6db0: 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  g parameter of s
6dc0: 71 6c 69 74 65 5f 6f 70 65 6e 28 29 20 77 68 65  qlite_open() whe
6dd0: 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 61  n.** SQLite is a
6de0: 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20   DLL.  For some 
6df0: 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20  reason, it does 
6e00: 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c  not work to call
6e10: 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65 63   free().** direc
6e20: 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  tly..**.** Note 
6e30: 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20  that we need to 
6e40: 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74 20  call free() not 
6e50: 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65 72  sqliteFree() her
6e60: 65 2c 20 73 69 6e 63 65 20 65 76 65 72 79 0a 2a  e, since every.*
6e70: 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  * string that is
6e80: 20 65 78 70 6f 72 74 65 64 20 66 72 6f 6d 20 53   exported from S
6e90: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 68 61 76  QLite should hav
6ea0: 65 20 61 6c 72 65 61 64 79 20 70 61 73 73 65 64  e already passed
6eb0: 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71 6c 69   through.** sqli
6ec0: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 29 2e 0a  teStrRealloc()..
6ed0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 66  */.void sqlite_f
6ee0: 72 65 65 6d 65 6d 28 76 6f 69 64 20 2a 70 29 7b  reemem(void *p){
6ef0: 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a   free(p); }../*.
6f00: 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  ** Windows syste
6f10: 6d 73 20 6e 65 65 64 20 66 75 6e 63 74 69 6f 6e  ms need function
6f20: 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20 72 65 74  s to call to ret
6f30: 75 72 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 76  urn the sqlite_v
6f40: 65 72 73 69 6f 6e 0a 2a 2a 20 61 6e 64 20 73 71  ersion.** and sq
6f50: 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 20 73 74  lite_encoding st
6f60: 72 69 6e 67 73 20 73 69 6e 63 65 20 74 68 65 79  rings since they
6f70: 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f 20 61   are unable to a
6f80: 63 63 65 73 73 20 63 6f 6e 73 74 61 6e 74 73 0a  ccess constants.
6f90: 2a 2a 20 77 69 74 68 69 6e 20 44 4c 4c 73 2e 0a  ** within DLLs..
6fa0: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
6fb0: 71 6c 69 74 65 5f 6c 69 62 76 65 72 73 69 6f 6e  qlite_libversion
6fc0: 28 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73  (void){ return s
6fd0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 3b 20 7d  qlite_version; }
6fe0: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
6ff0: 69 74 65 5f 6c 69 62 65 6e 63 6f 64 69 6e 67 28  ite_libencoding(
7000: 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71  void){ return sq
7010: 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 3b 20 7d  lite_encoding; }
7020: 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e  ../*.** Create n
7030: 65 77 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ew user-defined 
7040: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
7050: 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75  sqlite_create_fu
7060: 6e 63 74 69 6f 6e 28 29 0a 2a 2a 20 72 6f 75 74  nction().** rout
7070: 69 6e 65 20 63 72 65 61 74 65 73 20 61 20 72 65  ine creates a re
7080: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 61  gular function a
7090: 6e 64 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65  nd sqlite_create
70a0: 5f 61 67 67 72 65 67 61 74 65 28 29 0a 2a 2a 20  _aggregate().** 
70b0: 63 72 65 61 74 65 73 20 61 6e 20 61 67 67 72 65  creates an aggre
70c0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  gate function..*
70d0: 2a 0a 2a 2a 20 50 61 73 73 69 6e 67 20 61 20 4e  *.** Passing a N
70e0: 55 4c 4c 20 78 46 75 6e 63 20 61 72 67 75 6d 65  ULL xFunc argume
70f0: 6e 74 20 6f 72 20 4e 55 4c 4c 20 78 53 74 65 70  nt or NULL xStep
7100: 20 61 6e 64 20 78 46 69 6e 61 6c 69 7a 65 20 61   and xFinalize a
7110: 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 64 69 73 61  rguments.** disa
7120: 62 6c 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  bles the functio
7130: 6e 2e 20 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69  n.  Calling sqli
7140: 74 65 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  te_create_functi
7150: 6f 6e 28 29 20 77 69 74 68 20 74 68 65 0a 2a 2a  on() with the.**
7160: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 6e   same name and n
7170: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
7180: 74 73 20 61 73 20 61 20 70 72 69 6f 72 20 63 61  ts as a prior ca
7190: 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f  ll to.** sqlite_
71a0: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
71b0: 28 29 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  () disables the 
71c0: 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a 2a  prior call to.**
71d0: 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 61   sqlite_create_a
71e0: 67 67 72 65 67 61 74 65 28 29 2c 20 61 6e 64 20  ggregate(), and 
71f0: 76 69 63 65 20 76 65 72 73 61 2e 0a 2a 2a 0a 2a  vice versa..**.*
7200: 2a 20 49 66 20 6e 41 72 67 20 69 73 20 2d 31 20  * If nArg is -1 
7210: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
7220: 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  is function will
7230: 20 61 63 63 65 70 74 20 61 6e 79 20 6e 75 6d 62   accept any numb
7240: 65 72 0a 2a 2a 20 6f 66 20 61 72 67 75 6d 65 6e  er.** of argumen
7250: 74 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 30 2e  ts, including 0.
7260: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63  .*/.int sqlite_c
7270: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a  reate_function(.
7280: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20    sqlite *db,   
7290: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68         /* Add th
72a0: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
72b0: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
72c0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73  ection */.  cons
72d0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20  t char *zName,  
72e0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
72f0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61 64 64 20  function to add 
7300: 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20  */.  int nArg,  
7310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7320: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
7330: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
7340: 6e 63 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a  nc)(sqlite_func*
7350: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
7360: 2a 29 2c 20 20 2f 2a 20 54 68 65 20 69 6d 70 6c  *),  /* The impl
7370: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
7380: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 20  void *pUserData 
7390: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
73a0: 61 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65  a */.){.  FuncDe
73b0: 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d  f *p;.  int nNam
73c0: 65 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 7c  e;.  if( db==0 |
73d0: 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71  | zName==0 || sq
73e0: 6c 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28  liteSafetyCheck(
73f0: 64 62 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  db) ) return 1;.
7400: 20 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e    nName = strlen
7410: 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e  (zName);.  if( n
7420: 4e 61 6d 65 3e 32 35 35 20 29 20 72 65 74 75 72  Name>255 ) retur
7430: 6e 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74  n 1;.  p = sqlit
7440: 65 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62  eFindFunction(db
7450: 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20  , zName, nName, 
7460: 6e 41 72 67 2c 20 31 29 3b 0a 20 20 69 66 28 20  nArg, 1);.  if( 
7470: 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  p==0 ) return 1;
7480: 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46  .  p->xFunc = xF
7490: 75 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20  unc;.  p->xStep 
74a0: 3d 20 30 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c  = 0;.  p->xFinal
74b0: 69 7a 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 55  ize = 0;.  p->pU
74c0: 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44  serData = pUserD
74d0: 61 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  ata;.  return 0;
74e0: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 72  .}.int sqlite_cr
74f0: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28 0a  eate_aggregate(.
7500: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20    sqlite *db,   
7510: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68         /* Add th
7520: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
7530: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
7540: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73  ection */.  cons
7550: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20  t char *zName,  
7560: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
7570: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61 64 64 20  function to add 
7580: 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20  */.  int nArg,  
7590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
75a0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
75b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
75c0: 65 70 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a  ep)(sqlite_func*
75d0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
75e0: 2a 29 2c 20 2f 2a 20 54 68 65 20 73 74 65 70 20  *), /* The step 
75f0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
7600: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
7610: 73 71 6c 69 74 65 5f 66 75 6e 63 2a 29 2c 20 20  sqlite_func*),  
7620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7630: 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  he finalizer */.
7640: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
7650: 61 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a      /* User d
7660: 61 74 61 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63  ata */.){.  Func
7670: 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e  Def *p;.  int nN
7680: 61 6d 65 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30  ame;.  if( db==0
7690: 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20   || zName==0 || 
76a0: 73 71 6c 69 74 65 53 61 66 65 74 79 43 68 65 63  sqliteSafetyChec
76b0: 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 31  k(db) ) return 1
76c0: 3b 0a 20 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c  ;.  nName = strl
76d0: 65 6e 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28  en(zName);.  if(
76e0: 20 6e 4e 61 6d 65 3e 32 35 35 20 29 20 72 65 74   nName>255 ) ret
76f0: 75 72 6e 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c  urn 1;.  p = sql
7700: 69 74 65 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  iteFindFunction(
7710: 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  db, zName, nName
7720: 2c 20 6e 41 72 67 2c 20 31 29 3b 0a 20 20 69 66  , nArg, 1);.  if
7730: 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( p==0 ) return 
7740: 31 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20  1;.  p->xFunc = 
7750: 30 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20  0;.  p->xStep = 
7760: 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e  xStep;.  p->xFin
7770: 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 69 7a  alize = xFinaliz
7780: 65 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74  e;.  p->pUserDat
7790: 61 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20  a = pUserData;. 
77a0: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
77b0: 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 64  .** Change the d
77c0: 61 74 61 74 79 70 65 20 66 6f 72 20 61 6c 6c 20  atatype for all 
77d0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61  functions with a
77e0: 20 67 69 76 65 6e 20 6e 61 6d 65 2e 20 20 53 65   given name.  Se
77f0: 65 20 74 68 65 0a 2a 2a 20 68 65 61 64 65 72 20  e the.** header 
7800: 63 6f 6d 6d 65 6e 74 20 66 6f 72 20 74 68 65 20  comment for the 
7810: 70 72 6f 74 6f 74 79 70 65 20 6f 66 20 74 68 69  prototype of thi
7820: 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 73 71  s function in sq
7830: 6c 69 74 65 2e 68 20 66 6f 72 0a 2a 2a 20 61 64  lite.h for.** ad
7840: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
7850: 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  tion..*/.int sql
7860: 69 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 74 79 70  ite_function_typ
7870: 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f  e(sqlite *db, co
7880: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
7890: 20 69 6e 74 20 64 61 74 61 54 79 70 65 29 7b 0a   int dataType){.
78a0: 20 20 46 75 6e 63 44 65 66 20 2a 70 20 3d 20 28    FuncDef *p = (
78b0: 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48  FuncDef*)sqliteH
78c0: 61 73 68 46 69 6e 64 28 26 64 62 2d 3e 61 46 75  ashFind(&db->aFu
78d0: 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  nc, zName, strle
78e0: 6e 28 7a 4e 61 6d 65 29 29 3b 0a 20 20 77 68 69  n(zName));.  whi
78f0: 6c 65 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e  le( p ){.    p->
7900: 64 61 74 61 54 79 70 65 20 3d 20 64 61 74 61 54  dataType = dataT
7910: 79 70 65 3b 20 0a 20 20 20 20 70 20 3d 20 70 2d  ype; .    p = p-
7920: 3e 70 4e 65 78 74 3b 0a 20 20 7d 0a 20 20 72 65  >pNext;.  }.  re
7930: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
7940: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
7950: 72 20 61 20 74 72 61 63 65 20 66 75 6e 63 74 69  r a trace functi
7960: 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72  on.  The pArg fr
7970: 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  om the previousl
7980: 79 20 72 65 67 69 73 74 65 72 65 64 20 74 72 61  y registered tra
7990: 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  ce.** is returne
79a0: 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  d.  .**.** A NUL
79b0: 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  L trace function
79c0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 74   means that no t
79d0: 72 61 63 69 6e 67 20 69 73 20 65 78 65 63 75 74  racing is execut
79e0: 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a  es.  A non-NULL.
79f0: 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20 70 6f  ** trace is a po
7a00: 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74  inter to a funct
7a10: 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f  ion that is invo
7a20: 6b 65 64 20 61 74 20 74 68 65 20 73 74 61 72 74  ked at the start
7a30: 20 6f 66 20 65 61 63 68 0a 2a 2a 20 73 71 6c 69   of each.** sqli
7a40: 74 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 76 6f  te_exec()..*/.vo
7a50: 69 64 20 2a 73 71 6c 69 74 65 5f 74 72 61 63 65  id *sqlite_trace
7a60: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 76 6f 69  (sqlite *db, voi
7a70: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
7a80: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20  *,const char*), 
7a90: 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76  void *pArg){.  v
7aa0: 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e  oid *pOld = db->
7ab0: 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d  pTraceArg;.  db-
7ac0: 3e 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65  >xTrace = xTrace
7ad0: 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72  ;.  db->pTraceAr
7ae0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
7af0: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a  rn pOld;.}../***
7b00: 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a   EXPERIMENTAL **
7b10: 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
7b20: 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62   a function to b
7b30: 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61  e invoked when a
7b40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
7b50: 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 65 69 74  ments..** If eit
7b60: 68 65 72 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  her function ret
7b70: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  urns non-zero, t
7b80: 68 65 6e 20 74 68 65 20 63 6f 6d 6d 69 74 20 62  hen the commit b
7b90: 65 63 6f 6d 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c  ecomes a.** roll
7ba0: 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  back..*/.void *s
7bb0: 71 6c 69 74 65 5f 63 6f 6d 6d 69 74 5f 68 6f 6f  qlite_commit_hoo
7bc0: 6b 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c  k(.  sqlite *db,
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7be0: 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f  * Attach the hoo
7bf0: 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  k to this databa
7c00: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  se */.  int (*xC
7c10: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c  allback)(void*),
7c20: 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f    /* Function to
7c30: 20 69 6e 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20   invoke on each 
7c40: 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64  commit */.  void
7c50: 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20 20   *pArg          
7c60: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
7c70: 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  t to the functio
7c80: 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a  n */.){.  void *
7c90: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d  pOld = db->pComm
7ca0: 69 74 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f  itArg;.  db->xCo
7cb0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78  mmitCallback = x
7cc0: 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e  Callback;.  db->
7cd0: 70 43 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41 72  pCommitArg = pAr
7ce0: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  g;.  return pOld
7cf0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.}.../*.** This
7d00: 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c   routine is call
7d10: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 63  ed to create a c
7d20: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64  onnection to a d
7d30: 61 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a  atabase BTree.**
7d40: 20 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69   driver.  If zFi
7d50: 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  lename is the na
7d60: 6d 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68  me of a file, th
7d70: 65 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a  en that file is.
7d80: 2a 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73  ** opened and us
7d90: 65 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  ed.  If zFilenam
7da0: 65 20 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e  e is the magic n
7db0: 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74  ame ":memory:" t
7dc0: 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62  hen.** the datab
7dd0: 61 73 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ase is stored in
7de0: 20 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20   memory (and is 
7df0: 74 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61  thus forgotten a
7e00: 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65  s soon as.** the
7e10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
7e20: 6c 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c  losed.)  If zFil
7e30: 65 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68  ename is NULL th
7e40: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
7e50: 2a 2a 20 69 73 20 66 6f 72 20 74 65 6d 70 6f 72  ** is for tempor
7e60: 61 72 79 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64  ary use only and
7e70: 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 20 73   is deleted as s
7e80: 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e 65  oon as the conne
7e90: 63 74 69 6f 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73  ction.** is clos
7ea0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70  ed..**.** A temp
7eb0: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 63  orary database c
7ec0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
7ed0: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
7ee0: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
7ef0: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
7f00: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
7f10: 65 64 29 20 6f 72 20 61 20 73 65 74 20 6f 66 20  ed) or a set of 
7f20: 72 65 64 2d 62 6c 61 63 6b 20 74 72 65 65 73 20  red-black trees 
7f30: 68 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a  held in memory,.
7f40: 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ** depending on 
7f50: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
7f60: 65 20 54 45 4d 50 5f 53 54 4f 52 45 20 63 6f 6d  e TEMP_STORE com
7f70: 70 69 6c 65 2d 74 69 6d 65 20 6d 61 63 72 6f 20  pile-time macro 
7f80: 61 6e 64 20 74 68 65 0a 2a 2a 20 64 62 2d 3e 74  and the.** db->t
7f90: 65 6d 70 5f 73 74 6f 72 65 20 76 61 72 69 61 62  emp_store variab
7fa0: 6c 65 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  le, according to
7fb0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
7fc0: 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  hart:.**.**     
7fd0: 20 20 54 45 4d 50 5f 53 54 4f 52 45 20 20 20 20    TEMP_STORE    
7fe0: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
7ff0: 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20      Location of 
8000: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
8010: 73 65 0a 2a 2a 20 20 20 20 20 20 20 2d 2d 2d 2d  se.**       ----
8020: 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d  ------     -----
8030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d  ---------     --
8040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20  ------------.** 
8060: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
8070: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
8080: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
8090: 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20  *           1   
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20               1  
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
80c0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
80f0: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
8100: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
8110: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
8120: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
8130: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
8140: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
8150: 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20      file.**     
8160: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
8170: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
8180: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
8190: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
81a0: 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20             0    
81b0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
81c0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 33 20  .**           3 
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
81e0: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  y             me
81f0: 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  mory.*/.int sqli
8200: 74 65 42 74 72 65 65 46 61 63 74 6f 72 79 28 0a  teBtreeFactory(.
8210: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 20 2a    const sqlite *
8220: 64 62 2c 09 20 20 20 20 2f 2a 20 4d 61 69 6e 20  db,.    /* Main 
8230: 64 61 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70  database when op
8240: 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77  ening aux otherw
8250: 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74  ise 0 */.  const
8260: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
8270: 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ,    /* Name of 
8280: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
8290: 69 6e 67 20 74 68 65 20 42 54 72 65 65 20 64 61  ing the BTree da
82a0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
82b0: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20  omitJournal,    
82c0: 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45        /* if TRUE
82d0: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75   then do not jou
82e0: 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a  rnal this file *
82f0: 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20  /.  int nCache, 
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8310: 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20   How many pages 
8320: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
8330: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70  e */.  Btree **p
8340: 70 42 74 72 65 65 29 7b 20 20 20 20 20 20 20 20  pBtree){        
8350: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e   /* Pointer to n
8360: 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20  ew Btree object 
8370: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
8380: 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74 72  .  assert( ppBtr
8390: 65 65 20 21 3d 20 30 29 3b 0a 0a 23 69 66 6e 64  ee != 0);..#ifnd
83a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
83b0: 4e 4d 45 4d 4f 52 59 44 42 0a 20 20 69 66 28 20  NMEMORYDB.  if( 
83c0: 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a  zFilename==0 ){.
83d0: 20 20 20 20 69 66 20 28 54 45 4d 50 5f 53 54 4f      if (TEMP_STO
83e0: 52 45 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20  RE == 0) {.     
83f0: 20 2f 2a 20 41 6c 77 61 79 73 20 75 73 65 20 66   /* Always use f
8400: 69 6c 65 20 62 61 73 65 64 20 74 65 6d 70 6f 72  ile based tempor
8410: 61 72 79 20 44 42 20 2a 2f 0a 20 20 20 20 20 20  ary DB */.      
8420: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 42 74 72  return sqliteBtr
8430: 65 65 4f 70 65 6e 28 30 2c 20 6f 6d 69 74 4a 6f  eeOpen(0, omitJo
8440: 75 72 6e 61 6c 2c 20 6e 43 61 63 68 65 2c 20 70  urnal, nCache, p
8450: 70 42 74 72 65 65 29 3b 0a 20 20 20 20 7d 20 65  pBtree);.    } e
8460: 6c 73 65 20 69 66 20 28 54 45 4d 50 5f 53 54 4f  lse if (TEMP_STO
8470: 52 45 20 3d 3d 20 31 20 7c 7c 20 54 45 4d 50 5f  RE == 1 || TEMP_
8480: 53 54 4f 52 45 20 3d 3d 20 32 29 20 7b 0a 20 20  STORE == 2) {.  
8490: 20 20 20 20 2f 2a 20 53 77 69 74 63 68 20 64 65      /* Switch de
84a0: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69  pending on compi
84b0: 6c 65 2d 74 69 6d 65 20 61 6e 64 2f 6f 72 20 72  le-time and/or r
84c0: 75 6e 74 69 6d 65 20 73 65 74 74 69 6e 67 73 2e  untime settings.
84d0: 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6c 6f   */.      int lo
84e0: 63 61 74 69 6f 6e 20 3d 20 64 62 2d 3e 74 65 6d  cation = db->tem
84f0: 70 5f 73 74 6f 72 65 3d 3d 30 20 3f 20 54 45 4d  p_store==0 ? TEM
8500: 50 5f 53 54 4f 52 45 20 3a 20 64 62 2d 3e 74 65  P_STORE : db->te
8510: 6d 70 5f 73 74 6f 72 65 3b 0a 0a 20 20 20 20 20  mp_store;..     
8520: 20 69 66 20 28 6c 6f 63 61 74 69 6f 6e 20 3d 3d   if (location ==
8530: 20 31 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65   1) {.        re
8540: 74 75 72 6e 20 73 71 6c 69 74 65 42 74 72 65 65  turn sqliteBtree
8550: 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  Open(zFilename, 
8560: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 6e 43 61  omitJournal, nCa
8570: 63 68 65 2c 20 70 70 42 74 72 65 65 29 3b 0a 20  che, ppBtree);. 
8580: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
8590: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c        return sql
85a0: 69 74 65 52 62 74 72 65 65 4f 70 65 6e 28 30 2c  iteRbtreeOpen(0,
85b0: 20 30 2c 20 30 2c 20 70 70 42 74 72 65 65 29 3b   0, 0, ppBtree);
85c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65  .      }.    } e
85d0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 2f 2a 20 41  lse {.      /* A
85e0: 6c 77 61 79 73 20 75 73 65 20 69 6e 2d 63 6f 72  lways use in-cor
85f0: 65 20 44 42 20 2a 2f 0a 20 20 20 20 20 20 72 65  e DB */.      re
8600: 74 75 72 6e 20 73 71 6c 69 74 65 52 62 74 72 65  turn sqliteRbtre
8610: 65 4f 70 65 6e 28 30 2c 20 30 2c 20 30 2c 20 70  eOpen(0, 0, 0, p
8620: 70 42 74 72 65 65 29 3b 0a 20 20 20 20 7d 0a 20  pBtree);.    }. 
8630: 20 7d 65 6c 73 65 20 69 66 28 20 7a 46 69 6c 65   }else if( zFile
8640: 6e 61 6d 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20  name[0]==':' && 
8650: 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65  strcmp(zFilename
8660: 2c 22 3a 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20  ,":memory:")==0 
8670: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
8680: 6c 69 74 65 52 62 74 72 65 65 4f 70 65 6e 28 30  liteRbtreeOpen(0
8690: 2c 20 30 2c 20 30 2c 20 70 70 42 74 72 65 65 29  , 0, 0, ppBtree)
86a0: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
86b0: 0a 20 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  .  {.    return 
86c0: 73 71 6c 69 74 65 42 74 72 65 65 4f 70 65 6e 28  sqliteBtreeOpen(
86d0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 6f 6d 69 74 4a  zFilename, omitJ
86e0: 6f 75 72 6e 61 6c 2c 20 6e 43 61 63 68 65 2c 20  ournal, nCache, 
86f0: 70 70 42 74 72 65 65 29 3b 0a 20 20 7d 0a 7d 0a  ppBtree);.  }.}.