/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact d0418850385895202f9b28e0bd7d0b0fdfd868df:


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 31 35 20 32 30 30 33 2f 30 33  ,v 1.115 2003/03
0280: 2f 31 39 20 30 33 3a 31 34 3a 30 32 20 64 72 68  /19 03:14:02 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 0a 2f 2a 0a   InitData;.../*.
03e0: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  ** This is the c
03f0: 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
0400: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 74 68 61  for the code tha
0410: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  t initializes th
0420: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  e.** database.  
0430: 53 65 65 20 73 71 6c 69 74 65 49 6e 69 74 28 29  See sqliteInit()
0440: 20 62 65 6c 6f 77 20 66 6f 72 20 61 64 64 69 74   below for addit
0450: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
0460: 6e 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 63 61  n..**.** Each ca
0470: 6c 6c 62 61 63 6b 20 63 6f 6e 74 61 69 6e 73 20  llback contains 
0480: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
0490: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a  formation:.**.**
04a0: 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20 22       argv[0] = "
04b0: 66 69 6c 65 2d 66 6f 72 6d 61 74 22 20 6f 72 20  file-format" or 
04c0: 22 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 22 20  "schema-cookie" 
04d0: 6f 72 20 22 74 61 62 6c 65 22 20 6f 72 20 22 69  or "table" or "i
04e0: 6e 64 65 78 22 0a 2a 2a 20 20 20 20 20 61 72 67  ndex".**     arg
04f0: 76 5b 31 5d 20 3d 20 74 61 62 6c 65 20 6f 72 20  v[1] = table or 
0500: 69 6e 64 65 78 20 6e 61 6d 65 20 6f 72 20 6d 65  index name or me
0510: 74 61 20 73 74 61 74 65 6d 65 6e 74 20 74 79 70  ta statement typ
0520: 65 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 32  e..**     argv[2
0530: 5d 20 3d 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ] = root page nu
0540: 6d 62 65 72 20 66 6f 72 20 74 61 62 6c 65 20 6f  mber for table o
0550: 72 20 69 6e 64 65 78 2e 20 20 4e 55 4c 4c 20 66  r index.  NULL f
0560: 6f 72 20 6d 65 74 61 2e 0a 2a 2a 20 20 20 20 20  or meta..**     
0570: 61 72 67 76 5b 33 5d 20 3d 20 53 51 4c 20 74 65  argv[3] = SQL te
0580: 78 74 20 66 6f 72 20 61 20 43 52 45 41 54 45 20  xt for a CREATE 
0590: 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
05a0: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 2e  INDEX statement.
05b0: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 34 5d 20  .**     argv[4] 
05c0: 3d 20 22 31 22 20 66 6f 72 20 74 65 6d 70 6f 72  = "1" for tempor
05d0: 61 72 79 20 66 69 6c 65 73 2c 20 22 30 22 20 66  ary files, "0" f
05e0: 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
05f0: 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 0a 69 6e  .**.*/.static.in
0600: 74 20 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c  t sqliteInitCall
0610: 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74  back(void *pInit
0620: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
0630: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
0640: 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20 49 6e  azColName){.  In
0650: 69 74 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20  itData *pData = 
0660: 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74  (InitData*)pInit
0670: 3b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73 65  ;.  Parse sParse
0680: 3b 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30  ;.  int nErr = 0
0690: 3b 0a 0a 20 20 2f 2a 20 54 4f 44 4f 3a 20 44 6f  ;..  /* TODO: Do
06a0: 20 73 6f 6d 65 20 76 61 6c 69 64 69 74 79 20 63   some validity c
06b0: 68 65 63 6b 73 20 6f 6e 20 61 6c 6c 20 66 69 65  hecks on all fie
06c0: 6c 64 73 2e 20 20 49 6e 20 70 61 72 74 69 63 75  lds.  In particu
06d0: 6c 61 72 2c 0a 20 20 2a 2a 20 6d 61 6b 65 20 73  lar,.  ** make s
06e0: 75 72 65 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  ure fields do no
06f0: 74 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 73 2e  t contain NULLs.
0700: 20 4f 74 68 65 72 77 69 73 65 20 77 65 20 6d 69   Otherwise we mi
0710: 67 68 74 20 63 6f 72 65 0a 20 20 2a 2a 20 77 68  ght core.  ** wh
0720: 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f  en attempting to
0730: 20 69 6e 69 74 69 61 6c 69 7a 65 20 66 72 6f 6d   initialize from
0740: 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
0750: 61 73 65 20 66 69 6c 65 2e 20 2a 2f 0a 0a 20 20  ase file. */..  
0760: 61 73 73 65 72 74 28 20 61 72 67 63 3d 3d 35 20  assert( argc==5 
0770: 29 3b 0a 20 20 73 77 69 74 63 68 28 20 61 72 67  );.  switch( arg
0780: 76 5b 30 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 63  v[0][0] ){.    c
0790: 61 73 65 20 27 76 27 3a 0a 20 20 20 20 63 61 73  ase 'v':.    cas
07a0: 65 20 27 69 27 3a 0a 20 20 20 20 63 61 73 65 20  e 'i':.    case 
07b0: 27 74 27 3a 20 7b 20 20 2f 2a 20 43 52 45 41 54  't': {  /* CREAT
07c0: 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20  E TABLE, CREATE 
07d0: 49 4e 44 45 58 2c 20 6f 72 20 43 52 45 41 54 45  INDEX, or CREATE
07e0: 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 73   VIEW statements
07f0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 72   */.      if( ar
0800: 67 76 5b 33 5d 20 26 26 20 61 72 67 76 5b 33 5d  gv[3] && argv[3]
0810: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  [0] ){.        /
0820: 2a 20 43 61 6c 6c 20 74 68 65 20 70 61 72 73 65  * Call the parse
0830: 72 20 74 6f 20 70 72 6f 63 65 73 73 20 61 20 43  r to process a C
0840: 52 45 41 54 45 20 54 41 42 4c 45 2c 20 49 4e 44  REATE TABLE, IND
0850: 45 58 20 6f 72 20 56 49 45 57 2e 0a 20 20 20 20  EX or VIEW..    
0860: 20 20 20 20 2a 2a 20 42 75 74 20 62 65 63 61 75      ** But becau
0870: 73 65 20 73 50 61 72 73 65 2e 69 6e 69 74 46 6c  se sParse.initFl
0880: 61 67 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20  ag is set to 1, 
0890: 6e 6f 20 56 44 42 45 20 63 6f 64 65 20 69 73 20  no VDBE code is 
08a0: 67 65 6e 65 72 61 74 65 64 0a 20 20 20 20 20 20  generated.      
08b0: 20 20 2a 2a 20 6f 72 20 65 78 65 63 75 74 65 64    ** or executed
08c0: 2e 20 20 41 6c 6c 20 74 68 65 20 70 61 72 73 65  .  All the parse
08d0: 72 20 64 6f 65 73 20 69 73 20 62 75 69 6c 64 20  r does is build 
08e0: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 61 74  the internal dat
08f0: 61 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 74 72  a.        ** str
0900: 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
0910: 63 72 69 62 65 20 74 68 65 20 74 61 62 6c 65 2c  cribe the table,
0920: 20 69 6e 64 65 78 2c 20 6f 72 20 76 69 65 77 2e   index, or view.
0930: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
0940: 20 20 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72      memset(&sPar
0950: 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50  se, 0, sizeof(sP
0960: 61 72 73 65 29 29 3b 0a 20 20 20 20 20 20 20 20  arse));.        
0970: 73 50 61 72 73 65 2e 64 62 20 3d 20 70 44 61 74  sParse.db = pDat
0980: 61 2d 3e 64 62 3b 0a 20 20 20 20 20 20 20 20 73  a->db;.        s
0990: 50 61 72 73 65 2e 69 6e 69 74 46 6c 61 67 20 3d  Parse.initFlag =
09a0: 20 31 3b 0a 20 20 20 20 20 20 20 20 73 50 61 72   1;.        sPar
09b0: 73 65 2e 69 73 54 65 6d 70 20 3d 20 61 72 67 76  se.isTemp = argv
09c0: 5b 34 5d 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20  [4][0] - '0';.  
09d0: 20 20 20 20 20 20 73 50 61 72 73 65 2e 6e 65 77        sParse.new
09e0: 54 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72 67 76  Tnum = atoi(argv
09f0: 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 50  [2]);.        sP
0a00: 61 72 73 65 2e 75 73 65 43 61 6c 6c 62 61 63 6b  arse.useCallback
0a10: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71   = 1;.        sq
0a20: 6c 69 74 65 52 75 6e 50 61 72 73 65 72 28 26 73  liteRunParser(&s
0a30: 50 61 72 73 65 2c 20 61 72 67 76 5b 33 5d 2c 20  Parse, argv[3], 
0a40: 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 29  pData->pzErrMsg)
0a50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
0a60: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
0a70: 20 53 51 4c 20 63 6f 6c 75 6d 6e 20 69 73 20 62   SQL column is b
0a80: 6c 61 6e 6b 20 69 74 20 6d 65 61 6e 73 20 74 68  lank it means th
0a90: 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78 20 74  is is an index t
0aa0: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 77  hat.        ** w
0ab0: 61 73 20 63 72 65 61 74 65 64 20 74 6f 20 62 65  as created to be
0ac0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
0ad0: 20 6f 72 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61   or to fulfill a
0ae0: 20 55 4e 49 51 55 45 0a 20 20 20 20 20 20 20 20   UNIQUE.        
0af0: 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f  ** constraint fo
0b00: 72 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  r a CREATE TABLE
0b10: 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73 68 6f  .  The index sho
0b20: 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79  uld have already
0b30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65 65 6e  .        ** been
0b40: 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 77 65   created when we
0b50: 20 70 72 6f 63 65 73 73 65 64 20 74 68 65 20 43   processed the C
0b60: 52 45 41 54 45 20 54 41 42 4c 45 2e 20 20 41 6c  REATE TABLE.  Al
0b70: 6c 20 77 65 20 68 61 76 65 0a 20 20 20 20 20 20  l we have.      
0b80: 20 20 2a 2a 20 74 6f 20 64 6f 20 68 65 72 65 20    ** to do here 
0b90: 69 73 20 72 65 63 6f 72 64 20 74 68 65 20 72 6f  is record the ro
0ba0: 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
0bb0: 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e 0a 20  or that index.. 
0bc0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
0bd0: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 20    Index *pIndex 
0be0: 3d 20 73 71 6c 69 74 65 46 69 6e 64 49 6e 64 65  = sqliteFindInde
0bf0: 78 28 70 44 61 74 61 2d 3e 64 62 2c 20 61 72 67  x(pData->db, arg
0c00: 76 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  v[1]);.        i
0c10: 66 28 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20  f( pIndex==0 || 
0c20: 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20  pIndex->tnum!=0 
0c30: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
0c40: 54 68 69 73 20 63 61 6e 20 6f 63 63 75 72 20 69  This can occur i
0c50: 66 20 74 68 65 72 65 20 65 78 69 73 74 73 20 61  f there exists a
0c60: 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 54 45 4d  n index on a TEM
0c70: 50 20 74 61 62 6c 65 20 77 68 69 63 68 0a 20 20  P table which.  
0c80: 20 20 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74          ** has t
0c90: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
0ca0: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e  another index on
0cb0: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64   a permanent ind
0cc0: 65 78 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20  ex.  Since.     
0cd0: 20 20 20 20 20 2a 2a 20 74 68 65 20 70 65 72 6d       ** the perm
0ce0: 61 6e 65 6e 74 20 74 61 62 6c 65 20 69 73 20 68  anent table is h
0cf0: 69 64 64 65 6e 20 62 79 20 74 68 65 20 54 45 4d  idden by the TEM
0d00: 50 20 74 61 62 6c 65 2c 20 77 65 20 63 61 6e 20  P table, we can 
0d10: 61 6c 73 6f 0a 20 20 20 20 20 20 20 20 20 20 2a  also.          *
0d20: 2a 20 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20  * safely ignore 
0d30: 74 68 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65  the index on the
0d40: 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65   permanent table
0d50: 2e 0a 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ..          */. 
0d60: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e           /* Do N
0d70: 6f 74 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 20  othing */;.     
0d80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
0d90: 20 20 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d      pIndex->tnum
0da0: 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29   = atoi(argv[2])
0db0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0dc0: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
0dd0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
0de0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 54  lt: {.      /* T
0df0: 68 69 73 20 63 61 6e 20 6e 6f 74 20 68 61 70 70  his can not happ
0e00: 65 6e 21 20 2a 2f 0a 20 20 20 20 20 20 6e 45 72  en! */.      nEr
0e10: 72 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  r = 1;.      ass
0e20: 65 72 74 28 20 6e 45 72 72 3d 3d 30 20 29 3b 0a  ert( nErr==0 );.
0e30: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
0e40: 72 6e 20 6e 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn nErr;.}../*.*
0e50: 2a 20 54 68 69 73 20 69 73 20 61 20 63 61 6c 6c  * This is a call
0e60: 62 61 63 6b 20 70 72 6f 63 65 64 75 72 65 20 75  back procedure u
0e70: 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75  sed to reconstru
0e80: 63 74 20 61 20 74 61 62 6c 65 2e 20 20 54 68 65  ct a table.  The
0e90: 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  .** name of the 
0ea0: 74 61 62 6c 65 20 74 6f 20 62 65 20 72 65 63 6f  table to be reco
0eb0: 6e 73 74 72 75 63 74 65 64 20 69 73 20 70 61 73  nstructed is pas
0ec0: 73 65 64 20 69 6e 20 61 73 20 61 72 67 76 5b 30  sed in as argv[0
0ed0: 5d 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  ]..**.** This ro
0ee0: 75 74 69 6e 65 20 69 73 20 75 73 65 64 20 74 6f  utine is used to
0ef0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
0f00: 70 67 72 61 64 65 20 61 20 64 61 74 61 62 61 73  pgrade a databas
0f10: 65 20 66 72 6f 6d 0a 2a 2a 20 66 6f 72 6d 61 74  e from.** format
0f20: 20 76 65 72 73 69 6f 6e 20 31 20 6f 72 20 32 20   version 1 or 2 
0f30: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 20 20 54  to version 3.  T
0f40: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f50: 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 69 73 20  tion of.** this 
0f60: 72 6f 75 74 69 6e 65 20 72 65 6c 79 73 20 6f 6e  routine relys on
0f70: 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 6e   the fact that n
0f80: 6f 20 69 6e 64 69 63 65 73 20 61 72 65 20 75 73  o indices are us
0f90: 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 70 79 69  ed when.** copyi
0fa0: 6e 67 20 61 20 74 61 62 6c 65 20 6f 75 74 20 74  ng a table out t
0fb0: 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  o a temporary fi
0fc0: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 0a 69 6e  le..*/.static.in
0fd0: 74 20 75 70 67 72 61 64 65 5f 33 5f 63 61 6c 6c  t upgrade_3_call
0fe0: 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74  back(void *pInit
0ff0: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
1000: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
1010: 4e 6f 74 55 73 65 64 29 7b 0a 20 20 49 6e 69 74  NotUsed){.  Init
1020: 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20 28 49  Data *pData = (I
1030: 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74 3b 0a  nitData*)pInit;.
1040: 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 61 62 6c    int rc;.  Tabl
1050: 65 20 2a 70 54 61 62 3b 0a 20 20 54 72 69 67 67  e *pTab;.  Trigg
1060: 65 72 20 2a 70 54 72 69 67 3b 0a 20 20 63 68 61  er *pTrig;.  cha
1070: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20  r *zErr = 0;..  
1080: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46 69 6e  pTab = sqliteFin
1090: 64 54 61 62 6c 65 28 70 44 61 74 61 2d 3e 64 62  dTable(pData->db
10a0: 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 61 73  , argv[0]);.  as
10b0: 73 65 72 74 28 20 70 54 61 62 21 3d 30 20 29 3b  sert( pTab!=0 );
10c0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
10d0: 65 53 74 72 49 43 6d 70 28 70 54 61 62 2d 3e 7a  eStrICmp(pTab->z
10e0: 4e 61 6d 65 2c 20 61 72 67 76 5b 30 5d 29 3d 3d  Name, argv[0])==
10f0: 30 20 29 3b 0a 20 20 69 66 28 20 70 54 61 62 20  0 );.  if( pTab 
1100: 29 7b 0a 20 20 20 20 70 54 72 69 67 20 3d 20 70  ){.    pTrig = p
1110: 54 61 62 2d 3e 70 54 72 69 67 67 65 72 3b 0a 20  Tab->pTrigger;. 
1120: 20 20 20 70 54 61 62 2d 3e 70 54 72 69 67 67 65     pTab->pTrigge
1130: 72 20 3d 20 30 3b 20 20 2f 2a 20 44 69 73 61 62  r = 0;  /* Disab
1140: 6c 65 20 61 6c 6c 20 74 72 69 67 67 65 72 73 20  le all triggers 
1150: 62 65 66 6f 72 65 20 72 65 62 75 69 6c 64 69 6e  before rebuildin
1160: 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1170: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1180: 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 70 44 61  _exec_printf(pDa
1190: 74 61 2d 3e 64 62 2c 0a 20 20 20 20 22 43 52 45  ta->db,.    "CRE
11a0: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73  ATE TEMP TABLE s
11b0: 71 6c 69 74 65 5f 78 20 41 53 20 53 45 4c 45 43  qlite_x AS SELEC
11c0: 54 20 2a 20 46 52 4f 4d 20 27 25 71 27 3b 20 22  T * FROM '%q'; "
11d0: 0a 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f  .    "DELETE FRO
11e0: 4d 20 27 25 71 27 3b 20 22 0a 20 20 20 20 22 49  M '%q'; ".    "I
11f0: 4e 53 45 52 54 20 49 4e 54 4f 20 27 25 71 27 20  NSERT INTO '%q' 
1200: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
1210: 6c 69 74 65 5f 78 3b 20 22 0a 20 20 20 20 22 44  lite_x; ".    "D
1220: 52 4f 50 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ROP TABLE sqlite
1230: 5f 78 3b 22 2c 0a 20 20 20 20 30 2c 20 30 2c 20  _x;",.    0, 0, 
1240: 26 7a 45 72 72 2c 20 61 72 67 76 5b 30 5d 2c 20  &zErr, argv[0], 
1250: 61 72 67 76 5b 30 5d 2c 20 61 72 67 76 5b 30 5d  argv[0], argv[0]
1260: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 7b  );.  if( zErr ){
1270: 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74  .    sqliteSetSt
1280: 72 69 6e 67 28 70 44 61 74 61 2d 3e 70 7a 45 72  ring(pData->pzEr
1290: 72 4d 73 67 2c 20 7a 45 72 72 2c 20 30 29 3b 0a  rMsg, zErr, 0);.
12a0: 20 20 20 20 73 71 6c 69 74 65 5f 66 72 65 65 6d      sqlite_freem
12b0: 65 6d 28 7a 45 72 72 29 3b 0a 20 20 7d 0a 0a 20  em(zErr);.  }.. 
12c0: 20 2f 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20   /* If an error 
12d0: 6f 63 63 75 72 72 65 64 20 69 6e 20 74 68 65 20  occurred in the 
12e0: 53 51 4c 20 61 62 6f 76 65 2c 20 74 68 65 6e 20  SQL above, then 
12f0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
1300: 77 69 6c 6c 0a 20 20 2a 2a 20 72 6f 6c 6c 62 61  will.  ** rollba
1310: 63 6b 20 77 68 69 63 68 20 77 69 6c 6c 20 64 65  ck which will de
1320: 6c 65 74 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lete the interna
1330: 6c 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 73 2e  l symbol tables.
1340: 20 20 54 68 69 73 20 77 69 6c 6c 0a 20 20 2a 2a    This will.  **
1350: 20 63 61 75 73 65 20 74 68 65 20 73 74 72 75 63   cause the struc
1360: 74 75 72 65 20 74 68 61 74 20 70 54 61 62 20 70  ture that pTab p
1370: 6f 69 6e 74 73 20 74 6f 20 62 65 20 64 65 6c 65  oints to be dele
1380: 74 65 64 2e 20 20 49 6e 20 63 61 73 65 20 74 68  ted.  In case th
1390: 61 74 0a 20 20 2a 2a 20 68 61 70 70 65 6e 65 64  at.  ** happened
13a0: 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 66  , we need to ref
13b0: 65 74 63 68 20 70 54 61 62 2e 0a 20 20 2a 2f 0a  etch pTab..  */.
13c0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46    pTab = sqliteF
13d0: 69 6e 64 54 61 62 6c 65 28 70 44 61 74 61 2d 3e  indTable(pData->
13e0: 64 62 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20  db, argv[0]);.  
13f0: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
1400: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 53 74  assert( sqliteSt
1410: 72 49 43 6d 70 28 70 54 61 62 2d 3e 7a 4e 61 6d  rICmp(pTab->zNam
1420: 65 2c 20 61 72 67 76 5b 30 5d 29 3d 3d 30 20 29  e, argv[0])==0 )
1430: 3b 0a 20 20 20 20 70 54 61 62 2d 3e 70 54 72 69  ;.    pTab->pTri
1440: 67 67 65 72 20 3d 20 70 54 72 69 67 3b 20 20 2f  gger = pTrig;  /
1450: 2a 20 52 65 2d 65 6e 61 62 6c 65 20 74 72 69 67  * Re-enable trig
1460: 67 65 72 73 20 2a 2f 0a 20 20 7d 0a 20 20 72 65  gers */.  }.  re
1470: 74 75 72 6e 20 72 63 21 3d 53 51 4c 49 54 45 5f  turn rc!=SQLITE_
1480: 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 41  OK;.}..../*.** A
1490: 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74  ttempt to read t
14a0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
14b0: 6d 61 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ma and initializ
14c0: 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64 61  e internal.** da
14d0: 74 61 20 73 74 72 75 63 74 75 72 65 73 2e 20 20  ta structures.  
14e0: 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74 68  Return one of th
14f0: 65 20 53 51 4c 49 54 45 5f 20 65 72 72 6f 72 20  e SQLITE_ error 
1500: 63 6f 64 65 73 20 74 6f 0a 2a 2a 20 69 6e 64 69  codes to.** indi
1510: 63 61 74 65 20 73 75 63 63 65 73 73 20 6f 72 20  cate success or 
1520: 66 61 69 6c 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  failure..**.** A
1530: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
1540: 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  e is initialized
1550: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49 6e 69  , the SQLITE_Ini
1560: 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74 20  tialized.** bit 
1570: 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66 6c  is set in the fl
1580: 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ags field of the
1590: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75 72   sqlite structur
15a0: 65 2e 20 20 41 6e 0a 2a 2a 20 61 74 74 65 6d 70  e.  An.** attemp
15b0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 69  t is made to ini
15c0: 74 69 61 6c 69 7a 65 20 74 68 65 20 64 61 74 61  tialize the data
15d0: 62 61 73 65 20 61 73 20 73 6f 6f 6e 20 61 73 20  base as soon as 
15e0: 69 74 0a 2a 2a 20 69 73 20 6f 70 65 6e 65 64 2e  it.** is opened.
15f0: 20 20 49 66 20 74 68 61 74 20 66 61 69 6c 73 20    If that fails 
1600: 28 70 65 72 68 61 70 73 20 62 65 63 61 75 73 65  (perhaps because
1610: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
1620: 0a 2a 2a 20 68 61 73 20 74 68 65 20 73 71 6c 69  .** has the sqli
1630: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
1640: 6c 6f 63 6b 65 64 29 20 74 68 61 6e 20 61 6e 6f  locked) than ano
1650: 74 68 65 72 20 61 74 74 65 6d 70 74 0a 2a 2a 20  ther attempt.** 
1660: 69 73 20 6d 61 64 65 20 74 68 65 20 66 69 72 73  is made the firs
1670: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
1680: 61 73 65 20 69 73 20 61 63 63 65 73 73 65 64 2e  ase is accessed.
1690: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 49 6e  .*/.int sqliteIn
16a0: 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63  it(sqlite *db, c
16b0: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
16c0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74 43  .  int rc;.  BtC
16d0: 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e 3b 0a  ursor *curMain;.
16e0: 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20 54 61    int size;.  Ta
16f0: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63 68 61  ble *pTab;.  cha
1700: 72 20 2a 61 7a 41 72 67 5b 36 5d 3b 0a 20 20 69  r *azArg[6];.  i
1710: 6e 74 20 6d 65 74 61 5b 53 51 4c 49 54 45 5f 4e  nt meta[SQLITE_N
1720: 5f 42 54 52 45 45 5f 4d 45 54 41 5d 3b 0a 20 20  _BTREE_META];.  
1730: 50 61 72 73 65 20 73 50 61 72 73 65 3b 0a 20 20  Parse sParse;.  
1740: 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
1750: 61 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68  a;..  /*.  ** Th
1760: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
1770: 65 20 74 61 62 6c 65 20 68 61 73 20 61 20 73 74  e table has a st
1780: 72 75 63 74 75 72 65 20 6c 69 6b 65 20 74 68 69  ructure like thi
1790: 73 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  s.  */.  static 
17a0: 63 68 61 72 20 6d 61 73 74 65 72 5f 73 63 68 65  char master_sche
17b0: 6d 61 5b 5d 20 3d 20 0a 20 20 20 20 20 22 43 52  ma[] = .     "CR
17c0: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
17d0: 65 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20  e_master(\n".   
17e0: 20 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c    "  type text,\
17f0: 6e 22 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20  n".     "  name 
1800: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1810: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c   tbl_name text,\
1820: 6e 22 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70  n".     "  rootp
1830: 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a  age integer,\n".
1840: 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74       "  sql text
1850: 5c 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b  \n".     ")".  ;
1860: 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 74  .  static char t
1870: 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d  emp_master_schem
1880: 61 5b 5d 20 3d 20 0a 20 20 20 20 20 22 43 52 45  a[] = .     "CRE
1890: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73  ATE TEMP TABLE s
18a0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
18b0: 72 28 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79  r(\n".     "  ty
18c0: 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  pe text,\n".    
18d0: 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
18e0: 22 0a 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61  ".     "  tbl_na
18f0: 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  me text,\n".    
1900: 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74   "  rootpage int
1910: 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20  eger,\n".     " 
1920: 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20   sql text\n".   
1930: 20 20 22 29 22 0a 20 20 3b 0a 0a 20 20 2f 2a 20    ")".  ;..  /* 
1940: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  The following SQ
1950: 4c 20 77 69 6c 6c 20 72 65 61 64 20 74 68 65 20  L will read the 
1960: 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
1970: 6d 61 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 20  master tables.. 
1980: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 76 65   ** The first ve
1990: 72 73 69 6f 6e 20 77 6f 72 6b 73 20 77 69 74 68  rsion works with
19a0: 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72   SQLite file for
19b0: 6d 61 74 73 20 32 20 6f 72 20 67 72 65 61 74 65  mats 2 or greate
19c0: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  r..  ** The seco
19d0: 6e 64 20 76 65 72 73 69 6f 6e 20 69 73 20 66 6f  nd version is fo
19e0: 72 20 66 6f 72 6d 61 74 20 31 20 66 69 6c 65 73  r format 1 files
19f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 42 65 67 69  ..  **.  ** Begi
1a00: 6e 6e 69 6e 67 20 77 69 74 68 20 66 69 6c 65 20  nning with file 
1a10: 66 6f 72 6d 61 74 20 32 2c 20 74 68 65 20 72 6f  format 2, the ro
1a20: 77 69 64 20 66 6f 72 20 6e 65 77 20 74 61 62 6c  wid for new tabl
1a30: 65 20 65 6e 74 72 69 65 73 0a 20 20 2a 2a 20 28  e entries.  ** (
1a40: 69 6e 63 6c 75 64 69 6e 67 20 65 6e 74 72 69 65  including entrie
1a50: 73 20 69 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  s in sqlite_mast
1a60: 65 72 29 20 69 73 20 61 6e 20 69 6e 63 72 65 61  er) is an increa
1a70: 73 69 6e 67 20 69 6e 74 65 67 65 72 2e 0a 20 20  sing integer..  
1a80: 2a 2a 20 53 6f 20 66 6f 72 20 66 69 6c 65 20 66  ** So for file f
1a90: 6f 72 6d 61 74 20 32 20 61 6e 64 20 6c 61 74 65  ormat 2 and late
1aa0: 72 2c 20 77 65 20 63 61 6e 20 70 6c 61 79 20 62  r, we can play b
1ab0: 61 63 6b 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ack sqlite_maste
1ac0: 72 0a 20 20 2a 2a 20 61 6e 64 20 61 6c 6c 20 74  r.  ** and all t
1ad0: 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  he CREATE statem
1ae0: 65 6e 74 73 20 77 69 6c 6c 20 61 70 70 65 61 72  ents will appear
1af0: 20 69 6e 20 74 68 65 20 72 69 67 68 74 20 6f 72   in the right or
1b00: 64 65 72 2e 0a 20 20 2a 2a 20 42 75 74 20 77 69  der..  ** But wi
1b10: 74 68 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 31  th file format 1
1b20: 2c 20 74 61 62 6c 65 20 65 6e 74 72 69 65 73 20  , table entries 
1b30: 77 65 72 65 20 72 61 6e 64 6f 6d 20 61 6e 64 20  were random and 
1b40: 73 6f 20 77 65 0a 20 20 2a 2a 20 68 61 76 65 20  so we.  ** have 
1b50: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
1b60: 20 43 52 45 41 54 45 20 54 41 42 4c 45 73 20 6f   CREATE TABLEs o
1b70: 63 63 75 72 20 62 65 66 6f 72 65 20 74 68 65 69  ccur before thei
1b80: 72 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  r corresponding.
1b90: 20 20 2a 2a 20 43 52 45 41 54 45 20 49 4e 44 45    ** CREATE INDE
1ba0: 58 73 2e 20 20 28 57 65 20 64 6f 6e 27 74 20 68  Xs.  (We don't h
1bb0: 61 76 65 20 74 6f 20 64 65 61 6c 20 77 69 74 68  ave to deal with
1bc0: 20 43 52 45 41 54 45 20 56 49 45 57 20 6f 72 0a   CREATE VIEW or.
1bd0: 20 20 2a 2a 20 43 52 45 41 54 45 20 54 52 49 47    ** CREATE TRIG
1be0: 47 45 52 20 69 6e 20 66 69 6c 65 20 66 6f 72 6d  GER in file form
1bf0: 61 74 20 31 20 62 65 63 61 75 73 65 20 74 68 6f  at 1 because tho
1c00: 73 65 20 63 6f 6e 73 74 72 75 63 74 73 20 64 69  se constructs di
1c10: 64 0a 20 20 2a 2a 20 6e 6f 74 20 65 78 69 73 74  d.  ** not exist
1c20: 20 74 68 65 6e 2e 29 20 0a 20 20 2a 2f 0a 20 20   then.) .  */.  
1c30: 73 74 61 74 69 63 20 63 68 61 72 20 69 6e 69 74  static char init
1c40: 5f 73 63 72 69 70 74 5b 5d 20 3d 20 0a 20 20 20  _script[] = .   
1c50: 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20    "SELECT type, 
1c60: 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
1c70: 73 71 6c 2c 20 31 20 46 52 4f 4d 20 73 71 6c 69  sql, 1 FROM sqli
1c80: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 22  te_temp_master "
1c90: 0a 20 20 20 20 20 22 55 4e 49 4f 4e 20 41 4c 4c  .     "UNION ALL
1ca0: 20 22 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20   ".     "SELECT 
1cb0: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74  type, name, root
1cc0: 70 61 67 65 2c 20 73 71 6c 2c 20 30 20 46 52 4f  page, sql, 0 FRO
1cd0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
1ce0: 3b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20  ;.  static char 
1cf0: 6f 6c 64 65 72 5f 69 6e 69 74 5f 73 63 72 69 70  older_init_scrip
1d00: 74 5b 5d 20 3d 20 0a 20 20 20 20 20 22 53 45 4c  t[] = .     "SEL
1d10: 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ECT type, name, 
1d20: 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 31  rootpage, sql, 1
1d30: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
1d40: 70 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  p_master ".     
1d50: 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20 20  "UNION ALL ".   
1d60: 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20    "SELECT type, 
1d70: 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
1d80: 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71 6c 69  sql, 0 FROM sqli
1d90: 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
1da0: 20 22 57 48 45 52 45 20 74 79 70 65 3d 27 74 61   "WHERE type='ta
1db0: 62 6c 65 27 20 22 0a 20 20 20 20 20 22 55 4e 49  ble' ".     "UNI
1dc0: 4f 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 22 53  ON ALL ".     "S
1dd0: 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65  ELECT type, name
1de0: 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c  , rootpage, sql,
1df0: 20 30 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   0 FROM sqlite_m
1e00: 61 73 74 65 72 20 22 0a 20 20 20 20 20 22 57 48  aster ".     "WH
1e10: 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
1e20: 22 3b 0a 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72  ";...  /* Constr
1e30: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 74  uct the schema t
1e40: 61 62 6c 65 73 3a 20 73 71 6c 69 74 65 5f 6d 61  ables: sqlite_ma
1e50: 73 74 65 72 20 61 6e 64 20 73 71 6c 69 74 65 5f  ster and sqlite_
1e60: 74 65 6d 70 5f 6d 61 73 74 65 72 0a 20 20 2a 2f  temp_master.  */
1e70: 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74  .  azArg[0] = "t
1e80: 61 62 6c 65 22 3b 0a 20 20 61 7a 41 72 67 5b 31  able";.  azArg[1
1e90: 5d 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  ] = MASTER_NAME;
1ea0: 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 22 32  .  azArg[2] = "2
1eb0: 22 3b 0a 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20  ";.  azArg[3] = 
1ec0: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1ed0: 20 61 7a 41 72 67 5b 34 5d 20 3d 20 22 30 22 3b   azArg[4] = "0";
1ee0: 0a 20 20 61 7a 41 72 67 5b 35 5d 20 3d 20 30 3b  .  azArg[5] = 0;
1ef0: 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d  .  initData.db =
1f00: 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e   db;.  initData.
1f10: 70 7a 45 72 72 4d 73 67 20 3d 20 70 7a 45 72 72  pzErrMsg = pzErr
1f20: 4d 73 67 3b 0a 20 20 73 71 6c 69 74 65 49 6e 69  Msg;.  sqliteIni
1f30: 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44  tCallback(&initD
1f40: 61 74 61 2c 20 35 2c 20 61 7a 41 72 67 2c 20 30  ata, 5, azArg, 0
1f50: 29 3b 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69  );.  pTab = sqli
1f60: 74 65 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  teFindTable(db, 
1f70: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 3b 0a 20 20  MASTER_NAME);.  
1f80: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
1f90: 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d  pTab->readOnly =
1fa0: 20 31 3b 0a 20 20 7d 0a 20 20 61 7a 41 72 67 5b   1;.  }.  azArg[
1fb0: 31 5d 20 3d 20 54 45 4d 50 5f 4d 41 53 54 45 52  1] = TEMP_MASTER
1fc0: 5f 4e 41 4d 45 3b 0a 20 20 61 7a 41 72 67 5b 33  _NAME;.  azArg[3
1fd0: 5d 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  ] = temp_master_
1fe0: 73 63 68 65 6d 61 3b 0a 20 20 61 7a 41 72 67 5b  schema;.  azArg[
1ff0: 34 5d 20 3d 20 22 31 22 3b 0a 20 20 73 71 6c 69  4] = "1";.  sqli
2000: 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26  teInitCallback(&
2010: 69 6e 69 74 44 61 74 61 2c 20 35 2c 20 61 7a 41  initData, 5, azA
2020: 72 67 2c 20 30 29 3b 0a 20 20 70 54 61 62 20 3d  rg, 0);.  pTab =
2030: 20 73 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65   sqliteFindTable
2040: 28 64 62 2c 20 54 45 4d 50 5f 4d 41 53 54 45 52  (db, TEMP_MASTER
2050: 5f 4e 41 4d 45 29 3b 0a 20 20 69 66 28 20 70 54  _NAME);.  if( pT
2060: 61 62 20 29 7b 0a 20 20 20 20 70 54 61 62 2d 3e  ab ){.    pTab->
2070: 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20  readOnly = 1;.  
2080: 7d 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 61  }..  /* Create a
2090: 20 63 75 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20   cursor to hold 
20a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
20b0: 6e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  n.  */.  if( db-
20c0: 3e 61 44 62 5b 30 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[0].pBt==0 )
20d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
20e0: 4b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  K;.  rc = sqlite
20f0: 42 74 72 65 65 43 75 72 73 6f 72 28 64 62 2d 3e  BtreeCursor(db->
2100: 61 44 62 5b 30 5d 2e 70 42 74 2c 20 32 2c 20 30  aDb[0].pBt, 2, 0
2110: 2c 20 26 63 75 72 4d 61 69 6e 29 3b 0a 20 20 69  , &curMain);.  i
2120: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2130: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
2140: 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65 72  rrMsg, sqlite_er
2150: 72 6f 72 5f 73 74 72 69 6e 67 28 72 63 29 2c 20  ror_string(rc), 
2160: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 52 65  0);.    sqliteRe
2170: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
2180: 61 28 64 62 29 3b 0a 20 20 20 20 72 65 74 75 72  a(db);.    retur
2190: 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  n rc;.  }..  /* 
21a0: 47 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Get the database
21b0: 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f   meta informatio
21c0: 6e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  n.  */.  rc = sq
21d0: 6c 69 74 65 42 74 72 65 65 47 65 74 4d 65 74 61  liteBtreeGetMeta
21e0: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c  (db->aDb[0].pBt,
21f0: 20 6d 65 74 61 29 3b 0a 20 20 69 66 28 20 72 63   meta);.  if( rc
2200: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 65   ){.    sqliteSe
2210: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
2220: 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73  , sqlite_error_s
2230: 74 72 69 6e 67 28 72 63 29 2c 20 30 29 3b 0a 20  tring(rc), 0);. 
2240: 20 20 20 73 71 6c 69 74 65 52 65 73 65 74 49 6e     sqliteResetIn
2250: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 29  ternalSchema(db)
2260: 3b 0a 20 20 20 20 73 71 6c 69 74 65 42 74 72 65  ;.    sqliteBtre
2270: 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72  eCloseCursor(cur
2280: 4d 61 69 6e 29 3b 0a 20 20 20 20 72 65 74 75 72  Main);.    retur
2290: 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  n rc;.  }.  db->
22a0: 6e 65 78 74 5f 63 6f 6f 6b 69 65 20 3d 20 64 62  next_cookie = db
22b0: 2d 3e 61 44 62 5b 30 5d 2e 73 63 68 65 6d 61 5f  ->aDb[0].schema_
22c0: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 31 5d  cookie = meta[1]
22d0: 3b 0a 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72  ;.  db->file_for
22e0: 6d 61 74 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20  mat = meta[2];. 
22f0: 20 73 69 7a 65 20 3d 20 6d 65 74 61 5b 33 5d 3b   size = meta[3];
2300: 0a 20 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29  .  if( size==0 )
2310: 7b 20 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47  { size = MAX_PAG
2320: 45 53 3b 20 7d 0a 20 20 64 62 2d 3e 63 61 63 68  ES; }.  db->cach
2330: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
2340: 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74 43   sqliteBtreeSetC
2350: 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62  acheSize(db->aDb
2360: 5b 30 5d 2e 70 42 74 2c 20 73 69 7a 65 29 3b 0a  [0].pBt, size);.
2370: 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76    db->safety_lev
2380: 65 6c 20 3d 20 6d 65 74 61 5b 34 5d 3b 0a 20 20  el = meta[4];.  
2390: 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c  if( db->safety_l
23a0: 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e 73 61  evel==0 ) db->sa
23b0: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32 3b 0a  fety_level = 2;.
23c0: 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74    sqliteBtreeSet
23d0: 53 61 66 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e  SafetyLevel(db->
23e0: 61 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e  aDb[0].pBt, db->
23f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b 0a 0a  safety_level);..
2400: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 20 20 66 69    /*.  **     fi
2410: 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20 20  le_format==1    
2420: 56 65 72 73 69 6f 6e 20 32 2e 31 2e 30 2e 0a 20  Version 2.1.0.. 
2430: 20 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72   **     file_for
2440: 6d 61 74 3d 3d 32 20 20 20 20 56 65 72 73 69 6f  mat==2    Versio
2450: 6e 20 32 2e 32 2e 30 2e 20 41 64 64 20 73 75 70  n 2.2.0. Add sup
2460: 70 6f 72 74 20 66 6f 72 20 49 4e 54 45 47 45 52  port for INTEGER
2470: 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 20 20   PRIMARY KEY..  
2480: 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d  **     file_form
2490: 61 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f 6e  at==3    Version
24a0: 20 32 2e 36 2e 30 2e 20 46 69 78 20 65 6d 70 74   2.6.0. Fix empt
24b0: 79 2d 73 74 72 69 6e 67 20 69 6e 64 65 78 20 62  y-string index b
24c0: 75 67 2e 0a 20 20 2a 2a 20 20 20 20 20 66 69 6c  ug..  **     fil
24d0: 65 5f 66 6f 72 6d 61 74 3d 3d 34 20 20 20 20 56  e_format==4    V
24e0: 65 72 73 69 6f 6e 20 32 2e 37 2e 30 2e 20 41 64  ersion 2.7.0. Ad
24f0: 64 20 73 75 70 70 6f 72 74 20 66 6f 72 20 73 65  d support for se
2500: 70 61 72 61 74 65 20 6e 75 6d 65 72 69 63 20 61  parate numeric a
2510: 6e 64 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20  nd.  **         
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
2530: 78 74 20 64 61 74 61 74 79 70 65 73 2e 0a 20 20  xt datatypes..  
2540: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 66 69 6c  */.  if( db->fil
2550: 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20  e_format==0 ){. 
2560: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
2570: 6e 73 20 69 66 20 74 68 65 20 64 61 74 61 62 61  ns if the databa
2580: 73 65 20 77 61 73 20 69 6e 69 74 69 61 6c 6c 79  se was initially
2590: 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 64 62   empty */.    db
25a0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
25b0: 34 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  4;.  }else if( d
25c0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 34  b->file_format>4
25d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 42 74   ){.    sqliteBt
25e0: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
25f0: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 73 71 6c  urMain);.    sql
2600: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
2610: 72 72 4d 73 67 2c 20 22 75 6e 73 75 70 70 6f 72  rrMsg, "unsuppor
2620: 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 22  ted file format"
2630: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
2640: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2650: 20 7d 0a 0a 20 20 2f 2a 20 52 65 61 64 20 74 68   }..  /* Read th
2660: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
2670: 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74 68 65 20  tion out of the 
2680: 73 63 68 65 6d 61 20 74 61 62 6c 65 73 0a 20 20  schema tables.  
2690: 2a 2f 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61  */.  memset(&sPa
26a0: 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  rse, 0, sizeof(s
26b0: 50 61 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73  Parse));.  sPars
26c0: 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 50 61  e.db = db;.  sPa
26d0: 72 73 65 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20  rse.xCallback = 
26e0: 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62 61  sqliteInitCallba
26f0: 63 6b 3b 0a 20 20 73 50 61 72 73 65 2e 70 41 72  ck;.  sParse.pAr
2700: 67 20 3d 20 28 76 6f 69 64 2a 29 26 69 6e 69 74  g = (void*)&init
2710: 44 61 74 61 3b 0a 20 20 73 50 61 72 73 65 2e 69  Data;.  sParse.i
2720: 6e 69 74 46 6c 61 67 20 3d 20 31 3b 0a 20 20 73  nitFlag = 1;.  s
2730: 50 61 72 73 65 2e 75 73 65 43 61 6c 6c 62 61 63  Parse.useCallbac
2740: 6b 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 52  k = 1;.  sqliteR
2750: 75 6e 50 61 72 73 65 72 28 26 73 50 61 72 73 65  unParser(&sParse
2760: 2c 0a 20 20 20 20 20 20 64 62 2d 3e 66 69 6c 65  ,.      db->file
2770: 5f 66 6f 72 6d 61 74 3e 3d 32 20 3f 20 69 6e 69  _format>=2 ? ini
2780: 74 5f 73 63 72 69 70 74 20 3a 20 6f 6c 64 65 72  t_script : older
2790: 5f 69 6e 69 74 5f 73 63 72 69 70 74 2c 0a 20 20  _init_script,.  
27a0: 20 20 20 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20      pzErrMsg);. 
27b0: 20 69 66 28 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   if( sqlite_mall
27c0: 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20  oc_failed ){.   
27d0: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
27e0: 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20  (pzErrMsg, "out 
27f0: 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a  of memory", 0);.
2800: 20 20 20 20 73 50 61 72 73 65 2e 72 63 20 3d 20      sParse.rc = 
2810: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
2820: 20 20 73 71 6c 69 74 65 42 74 72 65 65 52 6f 6c    sqliteBtreeRol
2830: 6c 62 61 63 6b 28 64 62 2d 3e 61 44 62 5b 30 5d  lback(db->aDb[0]
2840: 2e 70 42 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  .pBt);.    sqlit
2850: 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  eResetInternalSc
2860: 68 65 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20  hema(db);.  }.  
2870: 69 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53  if( sParse.rc==S
2880: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2890: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
28a0: 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b  ITE_Initialized;
28b0: 0a 20 20 20 20 73 71 6c 69 74 65 43 6f 6d 6d 69  .    sqliteCommi
28c0: 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
28d0: 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
28e0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
28f0: 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69  ~SQLITE_Initiali
2900: 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 52  zed;.    sqliteR
2910: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
2920: 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71  ma(db);.  }.  sq
2930: 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65 43 75  liteBtreeCloseCu
2940: 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20  rsor(curMain);. 
2950: 20 72 65 74 75 72 6e 20 73 50 61 72 73 65 2e 72   return sParse.r
2960: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  c;.}../*.** The 
2970: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c  version of the l
2980: 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20  ibrary.*/.const 
2990: 63 68 61 72 20 72 63 73 69 64 5b 5d 20 3d 20 22  char rcsid[] = "
29a0: 40 28 23 29 20 5c 30 34 34 49 64 3a 20 53 51 4c  @(#) \044Id: SQL
29b0: 69 74 65 20 76 65 72 73 69 6f 6e 20 22 20 53 51  ite version " SQ
29c0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20 22 20 24  LITE_VERSION " $
29d0: 22 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71  ";.const char sq
29e0: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d  lite_version[] =
29f0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b   SQLITE_VERSION;
2a00: 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73 20 74 68 65  ../*.** Does the
2a10: 20 6c 69 62 72 61 72 79 20 65 78 70 65 63 74 20   library expect 
2a20: 64 61 74 61 20 74 6f 20 62 65 20 65 6e 63 6f 64  data to be encod
2a30: 65 64 20 61 73 20 55 54 46 2d 38 20 6f 72 20 69  ed as UTF-8 or i
2a40: 73 6f 38 38 35 39 3f 20 20 54 68 65 0a 2a 2a 20  so8859?  The.** 
2a50: 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c  following global
2a60: 20 63 6f 6e 73 74 61 6e 74 20 61 6c 77 61 79 73   constant always
2a70: 20 6c 65 74 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a   lets us know..*
2a80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2a90: 55 54 46 38 0a 63 6f 6e 73 74 20 63 68 61 72 20  UTF8.const char 
2aa0: 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b  sqlite_encoding[
2ab0: 5d 20 3d 20 22 55 54 46 2d 38 22 3b 0a 23 65 6c  ] = "UTF-8";.#el
2ac0: 73 65 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71  se.const char sq
2ad0: 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20  lite_encoding[] 
2ae0: 3d 20 22 69 73 6f 38 38 35 39 22 3b 0a 23 65 6e  = "iso8859";.#en
2af0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  dif../*.** Open 
2b00: 61 20 6e 65 77 20 53 51 4c 69 74 65 20 64 61 74  a new SQLite dat
2b10: 61 62 61 73 65 2e 20 20 43 6f 6e 73 74 72 75 63  abase.  Construc
2b20: 74 20 61 6e 20 22 73 71 6c 69 74 65 22 20 73 74  t an "sqlite" st
2b30: 72 75 63 74 75 72 65 20 74 6f 20 64 65 66 69 6e  ructure to defin
2b40: 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 20 6f  e.** the state o
2b50: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  f this database 
2b60: 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69  and return a poi
2b70: 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73 74 72  nter to that str
2b80: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ucture..**.** An
2b90: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
2ba0: 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2bb0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
2bc0: 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2bd0: 74 0a 2a 2a 20 68 6f 6c 64 20 74 68 65 20 64 61  t.** hold the da
2be0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
2bf0: 42 75 74 20 69 66 20 74 68 69 73 20 66 61 69 6c  But if this fail
2c00: 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 73  s (because the s
2c10: 63 68 65 6d 61 20 66 69 6c 65 0a 2a 2a 20 69 73  chema file.** is
2c20: 20 6c 6f 63 6b 65 64 29 20 74 68 65 6e 20 74 68   locked) then th
2c30: 61 74 20 73 74 65 70 20 69 73 20 64 65 66 65 72  at step is defer
2c40: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69  red until the fi
2c50: 72 73 74 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73  rst call to.** s
2c60: 71 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a 2a 2f  qlite_exec()..*/
2c70: 0a 73 71 6c 69 74 65 20 2a 73 71 6c 69 74 65 5f  .sqlite *sqlite_
2c80: 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  open(const char 
2c90: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20  *zFilename, int 
2ca0: 6d 6f 64 65 2c 20 63 68 61 72 20 2a 2a 70 7a 45  mode, char **pzE
2cb0: 72 72 4d 73 67 29 7b 0a 20 20 73 71 6c 69 74 65  rrMsg){.  sqlite
2cc0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
2cd0: 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74  .  /* Allocate t
2ce0: 68 65 20 73 71 6c 69 74 65 20 64 61 74 61 20 73  he sqlite data s
2cf0: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64 62  tructure */.  db
2d00: 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28   = sqliteMalloc(
2d10: 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 29 20   sizeof(sqlite) 
2d20: 29 3b 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73  );.  if( pzErrMs
2d30: 67 20 29 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20  g ) *pzErrMsg = 
2d40: 30 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  0;.  if( db==0 )
2d50: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f   goto no_mem_on_
2d60: 6f 70 65 6e 3b 0a 20 20 73 71 6c 69 74 65 48 61  open;.  sqliteHa
2d70: 73 68 49 6e 69 74 28 26 64 62 2d 3e 74 62 6c 48  shInit(&db->tblH
2d80: 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  ash, SQLITE_HASH
2d90: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73  _STRING, 0);.  s
2da0: 71 6c 69 74 65 48 61 73 68 49 6e 69 74 28 26 64  qliteHashInit(&d
2db0: 62 2d 3e 69 64 78 48 61 73 68 2c 20 53 51 4c 49  b->idxHash, SQLI
2dc0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
2dd0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 48 61 73 68  0);.  sqliteHash
2de0: 49 6e 69 74 28 26 64 62 2d 3e 74 72 69 67 48 61  Init(&db->trigHa
2df0: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
2e00: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71  STRING, 0);.  sq
2e10: 6c 69 74 65 48 61 73 68 49 6e 69 74 28 26 64 62  liteHashInit(&db
2e20: 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f  ->aFunc, SQLITE_
2e30: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b  HASH_STRING, 1);
2e40: 0a 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e 69  .  sqliteHashIni
2e50: 74 28 26 64 62 2d 3e 61 46 4b 65 79 2c 20 53 51  t(&db->aFKey, SQ
2e60: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
2e70: 2c 20 31 29 3b 0a 20 20 64 62 2d 3e 6f 6e 45 72  , 1);.  db->onEr
2e80: 72 6f 72 20 3d 20 4f 45 5f 44 65 66 61 75 6c 74  ror = OE_Default
2e90: 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77  ;.  db->priorNew
2ea0: 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d  Rowid = 0;.  db-
2eb0: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
2ec0: 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62  MAGIC_BUSY;.  db
2ed0: 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d  ->nDb = 2;.  db-
2ee0: 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74  >aDb = db->aDbSt
2ef0: 61 74 69 63 3b 0a 20 20 0a 20 20 2f 2a 20 4f 70  atic;.  .  /* Op
2f00: 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64  en the backend d
2f10: 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a  atabase driver *
2f20: 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 42  /.  rc = sqliteB
2f30: 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61  treeOpen(zFilena
2f40: 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53  me, 0, MAX_PAGES
2f50: 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  , &db->aDb[0].pB
2f60: 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  t);.  if( rc!=SQ
2f70: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
2f80: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
2f90: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
2fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53        sqliteSetS
2fb0: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
2fc0: 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  "unable to open 
2fd0: 64 61 74 61 62 61 73 65 3a 20 22 2c 20 7a 46 69  database: ", zFi
2fe0: 6c 65 6e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  lename, 0);.    
2ff0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
3000: 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20 20  liteFree(db);.  
3010: 20 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c    sqliteStrReall
3020: 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  oc(pzErrMsg);.  
3030: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
3040: 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61    db->aDb[0].zNa
3050: 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 0a 20 20  me = "main";..  
3060: 2f 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  /* Attempt to re
3070: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f  ad the schema */
3080: 0a 20 20 73 71 6c 69 74 65 52 65 67 69 73 74 65  .  sqliteRegiste
3090: 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
30a0: 73 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73 71  s(db);.  rc = sq
30b0: 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45  liteInit(db, pzE
30c0: 72 72 4d 73 67 29 3b 0a 20 20 64 62 2d 3e 6d 61  rrMsg);.  db->ma
30d0: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
30e0: 49 43 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20 73  IC_OPEN;.  if( s
30f0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
3100: 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  led ){.    sqlit
3110: 65 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20  e_close(db);.   
3120: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f   goto no_mem_on_
3130: 6f 70 65 6e 3b 0a 20 20 7d 65 6c 73 65 20 69 66  open;.  }else if
3140: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
3150: 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  && rc!=SQLITE_BU
3160: 53 59 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  SY ){.    sqlite
3170: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20  _close(db);.    
3180: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
3190: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  (pzErrMsg);.    
31a0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73  return 0;.  }els
31b0: 65 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29  e if( pzErrMsg )
31c0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  {.    sqliteFree
31d0: 28 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  (*pzErrMsg);.   
31e0: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a   *pzErrMsg = 0;.
31f0: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
3200: 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 20   database is in 
3210: 66 6f 72 6d 61 74 73 20 31 20 6f 72 20 32 2c 20  formats 1 or 2, 
3220: 74 68 65 6e 20 75 70 67 72 61 64 65 20 69 74 20  then upgrade it 
3230: 74 6f 0a 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20  to.  ** version 
3240: 33 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 72 65  3.  This will re
3250: 63 6f 6e 73 74 72 75 63 74 20 61 6c 6c 20 69 6e  construct all in
3260: 64 69 63 65 73 2e 20 20 49 66 20 74 68 65 0a 20  dices.  If the. 
3270: 20 2a 2a 20 75 70 67 72 61 64 65 20 66 61 69 6c   ** upgrade fail
3280: 73 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f 6e  s for any reason
3290: 20 28 65 78 3a 20 6f 75 74 20 6f 66 20 64 69 73   (ex: out of dis
32a0: 6b 20 73 70 61 63 65 2c 20 64 61 74 61 62 61 73  k space, databas
32b0: 65 0a 20 20 2a 2a 20 69 73 20 72 65 61 64 20 6f  e.  ** is read o
32c0: 6e 6c 79 2c 20 69 6e 74 65 72 72 75 70 74 20 72  nly, interrupt r
32d0: 65 63 65 69 76 65 64 2c 20 65 74 63 2e 29 20 74  eceived, etc.) t
32e0: 68 65 6e 20 72 65 66 75 73 65 20 74 6f 20 6f 70  hen refuse to op
32f0: 65 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72  en..  */.  if( r
3300: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
3310: 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c  db->file_format<
3320: 33 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  3 ){.    char *z
3330: 45 72 72 20 3d 20 30 3b 0a 20 20 20 20 49 6e 69  Err = 0;.    Ini
3340: 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
3350: 20 20 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c      int meta[SQL
3360: 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
3370: 5d 3b 0a 0a 20 20 20 20 69 6e 69 74 44 61 74 61  ];..    initData
3380: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
3390: 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
33a0: 3d 20 26 7a 45 72 72 3b 0a 20 20 20 20 64 62 2d  = &zErr;.    db-
33b0: 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 33  >file_format = 3
33c0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
33d0: 65 5f 65 78 65 63 28 64 62 2c 0a 20 20 20 20 20  e_exec(db,.     
33e0: 20 22 42 45 47 49 4e 3b 20 53 45 4c 45 43 54 20   "BEGIN; SELECT 
33f0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3400: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
3410: 70 65 3d 27 74 61 62 6c 65 27 3b 22 2c 0a 20 20  pe='table';",.  
3420: 20 20 20 20 75 70 67 72 61 64 65 5f 33 5f 63 61      upgrade_3_ca
3430: 6c 6c 62 61 63 6b 2c 0a 20 20 20 20 20 20 26 69  llback,.      &i
3440: 6e 69 74 44 61 74 61 2c 0a 20 20 20 20 20 20 26  nitData,.      &
3450: 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28 20 72  zErr);.    if( r
3460: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
3470: 20 20 20 20 20 20 73 71 6c 69 74 65 42 74 72 65        sqliteBtre
3480: 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
3490: 5b 30 5d 2e 70 42 74 2c 20 6d 65 74 61 29 3b 0a  [0].pBt, meta);.
34a0: 20 20 20 20 20 20 6d 65 74 61 5b 32 5d 20 3d 20        meta[2] = 
34b0: 34 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  4;.      sqliteB
34c0: 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 64  treeUpdateMeta(d
34d0: 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 6d  b->aDb[0].pBt, m
34e0: 65 74 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  eta);.      sqli
34f0: 74 65 5f 65 78 65 63 28 64 62 2c 20 22 43 4f 4d  te_exec(db, "COM
3500: 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  MIT", 0, 0, 0);.
3510: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
3520: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
3530: 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74       sqliteSetSt
3540: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 0a  ring(pzErrMsg, .
3550: 20 20 20 20 20 20 20 20 22 75 6e 61 62 6c 65 20          "unable 
3560: 74 6f 20 75 70 67 72 61 64 65 20 64 61 74 61 62  to upgrade datab
3570: 61 73 65 20 74 6f 20 74 68 65 20 76 65 72 73 69  ase to the versi
3580: 6f 6e 20 32 2e 36 20 66 6f 72 6d 61 74 22 2c 0a  on 2.6 format",.
3590: 20 20 20 20 20 20 20 20 7a 45 72 72 20 3f 20 22          zErr ? "
35a0: 3a 20 22 20 3a 20 30 2c 20 7a 45 72 72 2c 20 30  : " : 0, zErr, 0
35b0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 5f  );.      sqlite_
35c0: 66 72 65 65 6d 65 6d 28 7a 45 72 72 29 3b 0a 20  freemem(zErr);. 
35d0: 20 20 20 20 20 73 71 6c 69 74 65 53 74 72 52 65       sqliteStrRe
35e0: 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b  alloc(pzErrMsg);
35f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 5f 63 6c  .      sqlite_cl
3600: 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 20 20 72  ose(db);.      r
3610: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20  eturn 0;.    }. 
3620: 20 20 20 73 71 6c 69 74 65 5f 66 72 65 65 6d 65     sqlite_freeme
3630: 6d 28 7a 45 72 72 29 3b 0a 20 20 7d 0a 0a 20 20  m(zErr);.  }..  
3640: 2f 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  /* Return a poin
3650: 74 65 72 20 74 6f 20 74 68 65 20 6e 65 77 6c 79  ter to the newly
3660: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65   opened database
3670: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
3680: 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f 5f 6d  return db;..no_m
3690: 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20 73 71  em_on_open:.  sq
36a0: 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a  liteSetString(pz
36b0: 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20  ErrMsg, "out of 
36c0: 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 73  memory", 0);.  s
36d0: 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28  qliteStrRealloc(
36e0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65 74  pzErrMsg);.  ret
36f0: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
3700: 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49 44  Return the ROWID
3710: 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
3720: 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 69 6e  ent insert.*/.in
3730: 74 20 73 71 6c 69 74 65 5f 6c 61 73 74 5f 69 6e  t sqlite_last_in
3740: 73 65 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74  sert_rowid(sqlit
3750: 65 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e  e *db){.  return
3760: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
3770: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3780: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
3790: 61 6e 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73  anges in the mos
37a0: 74 20 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f  t recent call to
37b0: 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a   sqlite_exec()..
37c0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 68  */.int sqlite_ch
37d0: 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62  anges(sqlite *db
37e0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
37f0: 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  nChange;.}../*.*
3800: 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74  * Close an exist
3810: 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62  ing SQLite datab
3820: 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ase.*/.void sqli
3830: 74 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20  te_close(sqlite 
3840: 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d  *db){.  HashElem
3850: 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20   *i;.  int j;.  
3860: 64 62 2d 3e 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73  db->want_to_clos
3870: 65 20 3d 20 31 3b 0a 20 20 69 66 28 20 73 71 6c  e = 1;.  if( sql
3880: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
3890: 62 29 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65  b) || sqliteSafe
38a0: 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20  tyOn(db) ){.    
38b0: 2f 2a 20 70 72 69 6e 74 66 28 22 44 49 44 20 4e  /* printf("DID N
38c0: 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66  OT CLOSE\n"); ff
38d0: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f  lush(stdout); */
38e0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
38f0: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
3900: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
3910: 45 44 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  ED;.  for(j=0; j
3920: 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a  <db->nDb; j++){.
3930: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
3940: 6a 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20  j].pBt ){.      
3950: 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65  sqliteBtreeClose
3960: 28 64 62 2d 3e 61 44 62 5b 6a 5d 2e 70 42 74 29  (db->aDb[j].pBt)
3970: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
3980: 28 20 64 62 2d 3e 61 44 62 21 3d 64 62 2d 3e 61  ( db->aDb!=db->a
3990: 44 62 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  DbStatic ){.    
39a0: 73 71 6c 69 74 65 46 72 65 65 28 64 62 2d 3e 61  sqliteFree(db->a
39b0: 44 62 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  Db);.  }.  sqlit
39c0: 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  eResetInternalSc
39d0: 68 65 6d 61 28 64 62 29 3b 0a 20 20 66 6f 72 28  hema(db);.  for(
39e0: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
39f0: 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69  t(&db->aFunc); i
3a00: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
3a10: 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63  xt(i)){.    Func
3a20: 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65  Def *pFunc, *pNe
3a30: 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e  xt;.    for(pFun
3a40: 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71  c = (FuncDef*)sq
3a50: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
3a60: 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e   pFunc; pFunc=pN
3a70: 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  ext){.      pNex
3a80: 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74  t = pFunc->pNext
3a90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72  ;.      sqliteFr
3aa0: 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d  ee(pFunc);.    }
3ab0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 48 61 73  .  }.  sqliteHas
3ac0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
3ad0: 63 29 3b 0a 20 20 73 71 6c 69 74 65 48 61 73 68  c);.  sqliteHash
3ae0: 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 4b 65 79  Clear(&db->aFKey
3af0: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
3b00: 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  db);.}../*.** Re
3b10: 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68 65  turn TRUE if the
3b20: 20 67 69 76 65 6e 20 53 51 4c 20 73 74 72 69 6e   given SQL strin
3b30: 67 20 65 6e 64 73 20 69 6e 20 61 20 73 65 6d 69  g ends in a semi
3b40: 63 6f 6c 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 70 65  colon..**.** Spe
3b50: 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 69 73  cial handling is
3b60: 20 72 65 71 75 69 72 65 20 66 6f 72 20 43 52 45   require for CRE
3b70: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
3b80: 65 6d 65 6e 74 73 2e 0a 2a 2a 20 57 68 65 6e 65  ements..** Whene
3b90: 76 65 72 20 74 68 65 20 43 52 45 41 54 45 20 54  ver the CREATE T
3ba0: 52 49 47 47 45 52 20 6b 65 79 77 6f 72 64 73 20  RIGGER keywords 
3bb0: 61 72 65 20 73 65 65 6e 2c 20 74 68 65 20 73 74  are seen, the st
3bc0: 61 74 65 6d 65 6e 74 0a 2a 2a 20 6d 75 73 74 20  atement.** must 
3bd0: 65 6e 64 20 77 69 74 68 20 22 3b 45 4e 44 3b 22  end with ";END;"
3be0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f  ..*/.int sqlite_
3bf0: 63 6f 6d 70 6c 65 74 65 28 63 6f 6e 73 74 20 63  complete(const c
3c00: 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e  har *zSql){.  in
3c10: 74 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 31  t isComplete = 1
3c20: 3b 0a 20 20 69 6e 74 20 72 65 71 75 69 72 65 45  ;.  int requireE
3c30: 6e 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20 73 65  nd = 0;.  int se
3c40: 65 6e 54 65 78 74 20 3d 20 30 3b 0a 20 20 69 6e  enText = 0;.  in
3c50: 74 20 73 65 65 6e 43 72 65 61 74 65 20 3d 20 30  t seenCreate = 0
3c60: 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c  ;.  while( *zSql
3c70: 20 29 7b 0a 20 20 20 20 73 77 69 74 63 68 28 20   ){.    switch( 
3c80: 2a 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 63  *zSql ){.      c
3c90: 61 73 65 20 27 3b 27 3a 20 7b 0a 20 20 20 20 20  ase ';': {.     
3ca0: 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20     isComplete = 
3cb0: 31 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 54  1;.        seenT
3cc0: 65 78 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ext = 1;.       
3cd0: 20 73 65 65 6e 43 72 65 61 74 65 20 3d 20 30 3b   seenCreate = 0;
3ce0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
3cf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
3d00: 73 65 20 27 20 27 3a 0a 20 20 20 20 20 20 63 61  se ' ':.      ca
3d10: 73 65 20 27 5c 74 27 3a 0a 20 20 20 20 20 20 63  se '\t':.      c
3d20: 61 73 65 20 27 5c 6e 27 3a 0a 20 20 20 20 20 20  ase '\n':.      
3d30: 63 61 73 65 20 27 5c 66 27 3a 20 7b 0a 20 20 20  case '\f': {.   
3d40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3d50: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
3d60: 5b 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73  [': {.        is
3d70: 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20  Complete = 0;.  
3d80: 20 20 20 20 20 20 73 65 65 6e 54 65 78 74 20 3d        seenText =
3d90: 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e   1;.        seen
3da0: 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  Create = 0;.    
3db0: 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20      zSql++;.    
3dc0: 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c      while( *zSql
3dd0: 20 26 26 20 2a 7a 53 71 6c 21 3d 27 5d 27 20 29   && *zSql!=']' )
3de0: 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20  { zSql++; }.    
3df0: 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30      if( *zSql==0
3e00: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
3e10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3e20: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
3e30: 22 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27  "':.      case '
3e40: 5c 27 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  \'': {.        i
3e50: 6e 74 20 63 20 3d 20 2a 7a 53 71 6c 3b 0a 20 20  nt c = *zSql;.  
3e60: 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65        isComplete
3e70: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 65   = 0;.        se
3e80: 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20 20 20  enText = 1;.    
3e90: 20 20 20 20 73 65 65 6e 43 72 65 61 74 65 20 3d      seenCreate =
3ea0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c   0;.        zSql
3eb0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  ++;.        whil
3ec0: 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71  e( *zSql && *zSq
3ed0: 6c 21 3d 63 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20  l!=c ){ zSql++; 
3ee0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a  }.        if( *z
3ef0: 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Sql==0 ) return 
3f00: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
3f10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
3f20: 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20 20 20 20  case '-': {.    
3f30: 20 20 20 20 69 66 28 20 7a 53 71 6c 5b 31 5d 21      if( zSql[1]!
3f40: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='-' ){.        
3f50: 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30    isComplete = 0
3f60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 65 65 6e  ;.          seen
3f70: 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  Create = 0;.    
3f80: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3f90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77       }.        w
3fa0: 68 69 6c 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a  hile( *zSql && *
3fb0: 7a 53 71 6c 21 3d 27 5c 6e 27 20 29 7b 20 7a 53  zSql!='\n' ){ zS
3fc0: 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20  ql++; }.        
3fd0: 69 66 28 20 2a 7a 53 71 6c 3d 3d 30 20 29 20 72  if( *zSql==0 ) r
3fe0: 65 74 75 72 6e 20 73 65 65 6e 54 65 78 74 20 26  eturn seenText &
3ff0: 26 20 69 73 43 6f 6d 70 6c 65 74 65 20 26 26 20  & isComplete && 
4000: 72 65 71 75 69 72 65 45 6e 64 3d 3d 30 3b 0a 20  requireEnd==0;. 
4010: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4020: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
4030: 20 27 63 27 3a 0a 20 20 20 20 20 20 63 61 73 65   'c':.      case
4040: 20 27 43 27 3a 20 7b 0a 20 20 20 20 20 20 20 20   'C': {.        
4050: 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20  seenText = 1;.  
4060: 20 20 20 20 20 20 69 66 28 20 21 69 73 43 6f 6d        if( !isCom
4070: 70 6c 65 74 65 20 29 20 62 72 65 61 6b 3b 0a 20  plete ) break;. 
4080: 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74         isComplet
4090: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  e = 0;.        i
40a0: 66 28 20 73 71 6c 69 74 65 53 74 72 4e 49 43 6d  f( sqliteStrNICm
40b0: 70 28 7a 53 71 6c 2c 20 22 63 72 65 61 74 65 22  p(zSql, "create"
40c0: 2c 20 36 29 21 3d 30 20 29 20 62 72 65 61 6b 3b  , 6)!=0 ) break;
40d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
40e0: 73 70 61 63 65 28 7a 53 71 6c 5b 36 5d 29 20 29  space(zSql[6]) )
40f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
4100: 7a 53 71 6c 20 2b 3d 20 35 3b 0a 20 20 20 20 20  zSql += 5;.     
4110: 20 20 20 73 65 65 6e 43 72 65 61 74 65 20 3d 20     seenCreate = 
4120: 31 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  1;.        while
4130: 28 20 69 73 73 70 61 63 65 28 7a 53 71 6c 5b 31  ( isspace(zSql[1
4140: 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
4150: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 53       if( sqliteS
4160: 74 72 4e 49 43 6d 70 28 26 7a 53 71 6c 5b 31 5d  trNICmp(&zSql[1]
4170: 2c 22 74 72 69 67 67 65 72 22 2c 20 37 29 21 3d  ,"trigger", 7)!=
4180: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
4190: 20 20 20 7a 53 71 6c 20 2b 3d 20 37 3b 0a 20 20     zSql += 7;.  
41a0: 20 20 20 20 20 20 72 65 71 75 69 72 65 45 6e 64        requireEnd
41b0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ++;.        brea
41c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
41d0: 20 63 61 73 65 20 27 74 27 3a 0a 20 20 20 20 20   case 't':.     
41e0: 20 63 61 73 65 20 27 54 27 3a 20 7b 0a 20 20 20   case 'T': {.   
41f0: 20 20 20 20 20 73 65 65 6e 54 65 78 74 20 3d 20       seenText = 
4200: 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  1;.        if( !
4210: 73 65 65 6e 43 72 65 61 74 65 20 29 20 62 72 65  seenCreate ) bre
4220: 61 6b 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e  ak;.        seen
4230: 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20  Create = 0;.    
4240: 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d      isComplete =
4250: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
4260: 73 71 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 7a  sqliteStrNICmp(z
4270: 53 71 6c 2c 20 22 74 72 69 67 67 65 72 22 2c 20  Sql, "trigger", 
4280: 37 29 21 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  7)!=0 ) break;. 
4290: 20 20 20 20 20 20 20 69 66 28 20 21 69 73 73 70         if( !issp
42a0: 61 63 65 28 7a 53 71 6c 5b 37 5d 29 20 29 20 62  ace(zSql[7]) ) b
42b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7a 53  reak;.        zS
42c0: 71 6c 20 2b 3d 20 36 3b 0a 20 20 20 20 20 20 20  ql += 6;.       
42d0: 20 72 65 71 75 69 72 65 45 6e 64 2b 2b 3b 0a 20   requireEnd++;. 
42e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
42f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
4300: 20 27 65 27 3a 0a 20 20 20 20 20 20 63 61 73 65   'e':.      case
4310: 20 27 45 27 3a 20 7b 0a 20 20 20 20 20 20 20 20   'E': {.        
4320: 73 65 65 6e 43 72 65 61 74 65 20 3d 20 30 3b 0a  seenCreate = 0;.
4330: 20 20 20 20 20 20 20 20 73 65 65 6e 54 65 78 74          seenText
4340: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
4350: 28 20 21 69 73 43 6f 6d 70 6c 65 74 65 20 29 20  ( !isComplete ) 
4360: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 69  break;.        i
4370: 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20  sComplete = 0;. 
4380: 20 20 20 20 20 20 20 69 66 28 20 72 65 71 75 69         if( requi
4390: 72 65 45 6e 64 3d 3d 30 20 29 20 62 72 65 61 6b  reEnd==0 ) break
43a0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
43b0: 6c 69 74 65 53 74 72 4e 49 43 6d 70 28 7a 53 71  liteStrNICmp(zSq
43c0: 6c 2c 20 22 65 6e 64 22 2c 20 33 29 21 3d 30 20  l, "end", 3)!=0 
43d0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20  ) break;.       
43e0: 20 7a 53 71 6c 20 2b 3d 20 32 3b 0a 20 20 20 20   zSql += 2;.    
43f0: 20 20 20 20 77 68 69 6c 65 28 20 69 73 73 70 61      while( isspa
4400: 63 65 28 7a 53 71 6c 5b 31 5d 29 20 29 20 7a 53  ce(zSql[1]) ) zS
4410: 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66  ql++;.        if
4420: 28 20 7a 53 71 6c 5b 31 5d 3d 3d 27 3b 27 20 29  ( zSql[1]==';' )
4430: 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 53 71 6c  {.          zSql
4440: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 69 73  ++;.          is
4450: 43 6f 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20  Complete = 1;.  
4460: 20 20 20 20 20 20 20 20 72 65 71 75 69 72 65 45          requireE
4470: 6e 64 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nd--;.        }.
4480: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
4490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
44a0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
44b0: 73 65 65 6e 43 72 65 61 74 65 20 3d 20 30 3b 0a  seenCreate = 0;.
44c0: 20 20 20 20 20 20 20 20 73 65 65 6e 54 65 78 74          seenText
44d0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 73   = 1;.        is
44e0: 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20  Complete = 0;.  
44f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4500: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
4510: 53 71 6c 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74  Sql++;.  }.  ret
4520: 75 72 6e 20 73 65 65 6e 54 65 78 74 20 26 26 20  urn seenText && 
4530: 69 73 43 6f 6d 70 6c 65 74 65 20 26 26 20 72 65  isComplete && re
4540: 71 75 69 72 65 45 6e 64 3d 3d 30 3b 0a 7d 0a 0a  quireEnd==0;.}..
4550: 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61  /*.** Rollback a
4560: 6c 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ll database file
4570: 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  s..*/.void sqlit
4580: 65 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  eRollbackAll(sql
4590: 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  ite *db){.  int 
45a0: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
45b0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
45c0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
45d0: 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73  ].pBt ){.      s
45e0: 71 6c 69 74 65 42 74 72 65 65 52 6f 6c 6c 62 61  qliteBtreeRollba
45f0: 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  ck(db->aDb[i].pB
4600: 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  t);.      db->aD
4610: 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30  b[i].inTrans = 0
4620: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
4630: 6c 69 74 65 52 6f 6c 6c 62 61 63 6b 49 6e 74 65  liteRollbackInte
4640: 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62 29 3b  rnalChanges(db);
4650: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
4660: 6f 75 74 69 6e 65 20 64 6f 65 73 20 74 68 65 20  outine does the 
4670: 77 6f 72 6b 20 6f 66 20 65 69 74 68 65 72 20 73  work of either s
4680: 71 6c 69 74 65 5f 65 78 65 63 28 29 20 6f 72 20  qlite_exec() or 
4690: 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 28 29  sqlite_compile()
46a0: 2e 0a 2a 2a 20 49 74 20 77 6f 72 6b 73 20 6c 69  ..** It works li
46b0: 6b 65 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29  ke sqlite_exec()
46c0: 20 69 66 20 70 56 6d 3d 3d 4e 55 4c 4c 20 61 6e   if pVm==NULL an
46d0: 64 20 69 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20  d it works like 
46e0: 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 28 29  sqlite_compile()
46f0: 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a  .** otherwise..*
4700: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
4710: 69 74 65 4d 61 69 6e 28 0a 20 20 73 71 6c 69 74  iteMain(.  sqlit
4720: 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  e *db,          
4730: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4740: 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63 68 20  tabase on which 
4750: 74 68 65 20 53 51 4c 20 65 78 65 63 75 74 65 73  the SQL executes
4760: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
4770: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
4780: 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 6f 20    /* The SQL to 
4790: 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f 0a 20  be executed */. 
47a0: 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62 61 63 6b   sqlite_callback
47b0: 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20 2f 2a 20   xCallback,  /* 
47c0: 49 6e 76 6f 6b 65 20 74 68 69 73 20 63 61 6c 6c  Invoke this call
47d0: 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 2a 2f 0a  back routine */.
47e0: 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 20 20 20    void *pArg,   
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4800: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
4810: 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 20 2a  to xCallback() *
4820: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
4830: 2a 70 7a 54 61 69 6c 2c 20 20 20 20 20 20 20 20  *pzTail,        
4840: 2f 2a 20 4f 55 54 3a 20 4e 65 78 74 20 73 74 61  /* OUT: Next sta
4850: 74 65 6d 65 6e 74 20 61 66 74 65 72 20 74 68 65  tement after the
4860: 20 66 69 72 73 74 20 2a 2f 0a 20 20 73 71 6c 69   first */.  sqli
4870: 74 65 5f 76 6d 20 2a 2a 70 70 56 6d 2c 20 20 20  te_vm **ppVm,   
4880: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
4890: 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  The virtual mach
48a0: 69 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ine */.  char **
48b0: 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20 20 20  pzErrMsg        
48c0: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 57 72 69       /* OUT: Wri
48d0: 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
48e0: 73 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 50  s here */.){.  P
48f0: 61 72 73 65 20 73 50 61 72 73 65 3b 0a 0a 20 20  arse sParse;..  
4900: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20 2a  if( pzErrMsg ) *
4910: 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  pzErrMsg = 0;.  
4920: 69 66 28 20 73 71 6c 69 74 65 53 61 66 65 74 79  if( sqliteSafety
4930: 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 65 78  On(db) ) goto ex
4940: 65 63 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28  ec_misuse;.  if(
4950: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
4960: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
4970: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
4980: 72 63 2c 20 63 6e 74 20 3d 20 31 3b 0a 20 20 20  rc, cnt = 1;.   
4990: 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
49a0: 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45  liteInit(db, pzE
49b0: 72 72 4d 73 67 29 29 3d 3d 53 51 4c 49 54 45 5f  rrMsg))==SQLITE_
49c0: 42 55 53 59 0a 20 20 20 20 20 20 20 26 26 20 64  BUSY.       && d
49d0: 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b  b->xBusyCallback
49e0: 20 26 26 20 64 62 2d 3e 78 42 75 73 79 43 61 6c   && db->xBusyCal
49f0: 6c 62 61 63 6b 28 64 62 2d 3e 70 42 75 73 79 41  lback(db->pBusyA
4a00: 72 67 2c 20 22 22 2c 20 63 6e 74 2b 2b 29 21 3d  rg, "", cnt++)!=
4a10: 30 20 29 7b 7d 0a 20 20 20 20 69 66 28 20 72 63  0 ){}.    if( rc
4a20: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
4a30: 20 20 20 20 20 73 71 6c 69 74 65 53 74 72 52 65       sqliteStrRe
4a40: 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b  alloc(pzErrMsg);
4a50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 61 66  .      sqliteSaf
4a60: 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20  etyOff(db);.    
4a70: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20    return rc;.   
4a80: 20 7d 0a 20 20 20 20 69 66 28 20 70 7a 45 72 72   }.    if( pzErr
4a90: 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Msg ){.      sql
4aa0: 69 74 65 46 72 65 65 28 2a 70 7a 45 72 72 4d 73  iteFree(*pzErrMs
4ab0: 67 29 3b 0a 20 20 20 20 20 20 2a 70 7a 45 72 72  g);.      *pzErr
4ac0: 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
4ad0: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 66 69 6c   }.  if( db->fil
4ae0: 65 5f 66 6f 72 6d 61 74 3c 33 20 29 7b 0a 20 20  e_format<3 ){.  
4af0: 20 20 73 71 6c 69 74 65 53 61 66 65 74 79 4f 66    sqliteSafetyOf
4b00: 66 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74  f(db);.    sqlit
4b10: 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  eSetString(pzErr
4b20: 4d 73 67 2c 20 22 6f 62 73 6f 6c 65 74 65 20 64  Msg, "obsolete d
4b30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
4b40: 6d 61 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  mat", 0);.    re
4b50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4b60: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  R;.  }.  if( db-
4b70: 3e 70 56 64 62 65 3d 3d 30 20 29 7b 20 64 62 2d  >pVdbe==0 ){ db-
4b80: 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20 7d 0a  >nChange = 0; }.
4b90: 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73 65    memset(&sParse
4ba0: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61 72  , 0, sizeof(sPar
4bb0: 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e 64  se));.  sParse.d
4bc0: 62 20 3d 20 64 62 3b 0a 20 20 73 50 61 72 73 65  b = db;.  sParse
4bd0: 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  .xCallback = xCa
4be0: 6c 6c 62 61 63 6b 3b 0a 20 20 73 50 61 72 73 65  llback;.  sParse
4bf0: 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  .pArg = pArg;.  
4c00: 73 50 61 72 73 65 2e 75 73 65 43 61 6c 6c 62 61  sParse.useCallba
4c10: 63 6b 20 3d 20 70 70 56 6d 3d 3d 30 3b 0a 23 69  ck = ppVm==0;.#i
4c20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4c30: 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62  T_TRACE.  if( db
4c40: 2d 3e 78 54 72 61 63 65 20 29 20 64 62 2d 3e 78  ->xTrace ) db->x
4c50: 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
4c60: 41 72 67 2c 20 7a 53 71 6c 29 3b 0a 23 65 6e 64  Arg, zSql);.#end
4c70: 69 66 0a 20 20 73 71 6c 69 74 65 52 75 6e 50 61  if.  sqliteRunPa
4c80: 72 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53  rser(&sParse, zS
4c90: 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20  ql, pzErrMsg);. 
4ca0: 20 69 66 28 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   if( sqlite_mall
4cb0: 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20  oc_failed ){.   
4cc0: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
4cd0: 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20  (pzErrMsg, "out 
4ce0: 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a  of memory", 0);.
4cf0: 20 20 20 20 73 50 61 72 73 65 2e 72 63 20 3d 20      sParse.rc = 
4d00: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
4d10: 20 20 73 71 6c 69 74 65 52 6f 6c 6c 62 61 63 6b    sqliteRollback
4d20: 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  All(db);.    sql
4d30: 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  iteResetInternal
4d40: 53 63 68 65 6d 61 28 64 62 29 3b 0a 20 20 20 20  Schema(db);.    
4d50: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
4d60: 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a 20 20  LITE_InTrans;.  
4d70: 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72  }.  if( sParse.r
4d80: 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
4d90: 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c   sParse.rc = SQL
4da0: 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73 50  ITE_OK;.  if( sP
4db0: 61 72 73 65 2e 72 63 21 3d 53 51 4c 49 54 45 5f  arse.rc!=SQLITE_
4dc0: 4f 4b 20 26 26 20 70 7a 45 72 72 4d 73 67 20 26  OK && pzErrMsg &
4dd0: 26 20 2a 70 7a 45 72 72 4d 73 67 3d 3d 30 20 29  & *pzErrMsg==0 )
4de0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 53  {.    sqliteSetS
4df0: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
4e00: 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72  sqlite_error_str
4e10: 69 6e 67 28 73 50 61 72 73 65 2e 72 63 29 2c 20  ing(sParse.rc), 
4e20: 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  0);.  }.  sqlite
4e30: 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72  StrRealloc(pzErr
4e40: 4d 73 67 29 3b 0a 20 20 69 66 28 20 73 50 61 72  Msg);.  if( sPar
4e50: 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43  se.rc==SQLITE_SC
4e60: 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69  HEMA ){.    sqli
4e70: 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  teResetInternalS
4e80: 63 68 65 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20  chema(db);.  }. 
4e90: 20 69 66 28 20 73 50 61 72 73 65 2e 75 73 65 43   if( sParse.useC
4ea0: 61 6c 6c 62 61 63 6b 3d 3d 30 20 29 7b 0a 20 20  allback==0 ){.  
4eb0: 20 20 61 73 73 65 72 74 28 20 70 70 56 6d 20 29    assert( ppVm )
4ec0: 3b 0a 20 20 20 20 2a 70 70 56 6d 20 3d 20 28 73  ;.    *ppVm = (s
4ed0: 71 6c 69 74 65 5f 76 6d 2a 29 73 50 61 72 73 65  qlite_vm*)sParse
4ee0: 2e 70 56 64 62 65 3b 0a 20 20 20 20 2a 70 7a 54  .pVdbe;.    *pzT
4ef0: 61 69 6c 20 3d 20 73 50 61 72 73 65 2e 7a 54 61  ail = sParse.zTa
4f00: 69 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  il;.  }.  if( sq
4f10: 6c 69 74 65 53 61 66 65 74 79 4f 66 66 28 64 62  liteSafetyOff(db
4f20: 29 20 29 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69  ) ) goto exec_mi
4f30: 73 75 73 65 3b 0a 20 20 72 65 74 75 72 6e 20 73  suse;.  return s
4f40: 50 61 72 73 65 2e 72 63 3b 0a 0a 65 78 65 63 5f  Parse.rc;..exec_
4f50: 6d 69 73 75 73 65 3a 0a 20 20 69 66 28 20 70 7a  misuse:.  if( pz
4f60: 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 2a 70  ErrMsg ){.    *p
4f70: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
4f80: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
4f90: 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74  (pzErrMsg, sqlit
4fa0: 65 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 53  e_error_string(S
4fb0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 29 2c 20 30  QLITE_MISUSE), 0
4fc0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 53 74 72  );.    sqliteStr
4fd0: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
4fe0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
4ff0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 7d  SQLITE_MISUSE;.}
5000: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
5010: 53 51 4c 20 63 6f 64 65 2e 20 20 52 65 74 75 72  SQL code.  Retur
5020: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  n one of the SQL
5030: 49 54 45 5f 20 73 75 63 63 65 73 73 2f 66 61 69  ITE_ success/fai
5040: 6c 75 72 65 0a 2a 2a 20 63 6f 64 65 73 2e 20 20  lure.** codes.  
5050: 41 6c 73 6f 20 77 72 69 74 65 20 61 6e 20 65 72  Also write an er
5060: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f  ror message into
5070: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
5080: 20 66 72 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28   from.** malloc(
5090: 29 20 61 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72  ) and make *pzEr
50a0: 72 4d 73 67 20 70 6f 69 6e 74 20 74 6f 20 74 68  rMsg point to th
50b0: 61 74 20 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a 2a  at message..**.*
50c0: 2a 20 49 66 20 74 68 65 20 53 51 4c 20 69 73 20  * If the SQL is 
50d0: 61 20 71 75 65 72 79 2c 20 74 68 65 6e 20 66 6f  a query, then fo
50e0: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
50f0: 65 20 71 75 65 72 79 20 72 65 73 75 6c 74 0a 2a  e query result.*
5100: 2a 20 74 68 65 20 78 43 61 6c 6c 62 61 63 6b 28  * the xCallback(
5110: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  ) function is ca
5120: 6c 6c 65 64 2e 20 20 70 41 72 67 20 62 65 63 6f  lled.  pArg beco
5130: 6d 65 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a  mes the first.**
5140: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61   argument to xCa
5150: 6c 6c 62 61 63 6b 28 29 2e 20 20 49 66 20 78 43  llback().  If xC
5160: 61 6c 6c 62 61 63 6b 3d 4e 55 4c 4c 20 74 68 65  allback=NULL the
5170: 6e 20 6e 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a  n no callback.**
5180: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 65 76 65   is invoked, eve
5190: 6e 20 66 6f 72 20 71 75 65 72 69 65 73 2e 0a 2a  n for queries..*
51a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 65 78 65  /.int sqlite_exe
51b0: 63 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c  c(.  sqlite *db,
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
51e0: 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 53 51   on which the SQ
51f0: 4c 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 20 20  L executes */.  
5200: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
5210: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ,           /* T
5220: 68 65 20 53 51 4c 20 74 6f 20 62 65 20 65 78 65  he SQL to be exe
5230: 63 75 74 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  cuted */.  sqlit
5240: 65 5f 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c  e_callback xCall
5250: 62 61 63 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65  back,  /* Invoke
5260: 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 72   this callback r
5270: 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64  outine */.  void
5280: 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
5290: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
52a0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61   argument to xCa
52b0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 63 68  llback() */.  ch
52c0: 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20  ar **pzErrMsg   
52d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
52e0: 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
52f0: 73 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 72  s here */.){.  r
5300: 65 74 75 72 6e 20 73 71 6c 69 74 65 4d 61 69 6e  eturn sqliteMain
5310: 28 64 62 2c 20 7a 53 71 6c 2c 20 78 43 61 6c 6c  (db, zSql, xCall
5320: 62 61 63 6b 2c 20 70 41 72 67 2c 20 30 2c 20 30  back, pArg, 0, 0
5330: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 7d 0a 0a  , pzErrMsg);.}..
5340: 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 61 20  /*.** Compile a 
5350: 73 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74  single statement
5360: 20 6f 66 20 53 51 4c 20 69 6e 74 6f 20 61 20 76   of SQL into a v
5370: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
5380: 20 52 65 74 75 72 6e 20 6f 6e 65 0a 2a 2a 20 6f   Return one.** o
5390: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75  f the SQLITE_ su
53a0: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f  ccess/failure co
53b0: 64 65 73 2e 20 20 41 6c 73 6f 20 77 72 69 74 65  des.  Also write
53c0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
53d0: 65 20 69 6e 74 6f 0a 2a 2a 20 6d 65 6d 6f 72 79  e into.** memory
53e0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
53f0: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b 65  alloc() and make
5400: 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f 69 6e 74   *pzErrMsg point
5410: 20 74 6f 20 74 68 61 74 20 6d 65 73 73 61 67 65   to that message
5420: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f  ..*/.int sqlite_
5430: 63 6f 6d 70 69 6c 65 28 0a 20 20 73 71 6c 69 74  compile(.  sqlit
5440: 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  e *db,          
5450: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
5460: 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63 68 20  tabase on which 
5470: 74 68 65 20 53 51 4c 20 65 78 65 63 75 74 65 73  the SQL executes
5480: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5490: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
54a0: 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 6f 20    /* The SQL to 
54b0: 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f 0a 20  be executed */. 
54c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a   const char **pz
54d0: 54 61 69 6c 2c 20 20 20 20 20 20 20 20 2f 2a 20  Tail,        /* 
54e0: 4f 55 54 3a 20 4e 65 78 74 20 73 74 61 74 65 6d  OUT: Next statem
54f0: 65 6e 74 20 61 66 74 65 72 20 74 68 65 20 66 69  ent after the fi
5500: 72 73 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f  rst */.  sqlite_
5510: 76 6d 20 2a 2a 70 70 56 6d 2c 20 20 20 20 20 20  vm **ppVm,      
5520: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 54 68 65       /* OUT: The
5530: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5540: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
5550: 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20  rrMsg           
5560: 20 20 2f 2a 20 4f 55 54 3a 20 57 72 69 74 65 20    /* OUT: Write 
5570: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 68  error messages h
5580: 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75  ere */.){.  retu
5590: 72 6e 20 73 71 6c 69 74 65 4d 61 69 6e 28 64 62  rn sqliteMain(db
55a0: 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 70 7a  , zSql, 0, 0, pz
55b0: 54 61 69 6c 2c 20 70 70 56 6d 2c 20 70 7a 45 72  Tail, ppVm, pzEr
55c0: 72 4d 73 67 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rMsg);.}../*.** 
55d0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f  The following ro
55e0: 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61  utine destroys a
55f0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5600: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
5610: 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74   by.** the sqlit
5620: 65 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74  e_compile() rout
5630: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ine..**.** The i
5640: 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65 64 20  nteger returned 
5650: 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 20 73 75  is an SQLITE_ su
5660: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f  ccess/failure co
5670: 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  de that describe
5680: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
5690: 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  of executing the
56a0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
56b0: 2e 20 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  .  An error mess
56c0: 61 67 65 20 69 73 0a 2a 2a 20 77 72 69 74 74 65  age is.** writte
56d0: 6e 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  n into memory ob
56e0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
56f0: 6f 63 20 61 6e 64 20 2a 70 7a 45 72 72 4d 73 67  oc and *pzErrMsg
5700: 20 69 73 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 70   is made to.** p
5710: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 65 72 72  oint to that err
5720: 6f 72 20 69 66 20 70 7a 45 72 72 4d 73 67 20 69  or if pzErrMsg i
5730: 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 54 68 65  s not NULL.  The
5740: 20 63 61 6c 6c 69 6e 67 20 72 6f 75 74 69 6e 65   calling routine
5750: 0a 2a 2a 20 73 68 6f 75 6c 64 20 75 73 65 20 73  .** should use s
5760: 71 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28 29 20  qlite_freemem() 
5770: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 6d 65  to delete the me
5780: 73 73 61 67 65 20 77 68 65 6e 20 69 74 20 68 61  ssage when it ha
5790: 73 20 66 69 6e 69 73 68 65 64 0a 2a 2a 20 77 69  s finished.** wi
57a0: 74 68 20 69 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  th it..*/.int sq
57b0: 6c 69 74 65 5f 66 69 6e 61 6c 69 7a 65 28 0a 20  lite_finalize(. 
57c0: 20 73 71 6c 69 74 65 5f 76 6d 20 2a 70 56 6d 2c   sqlite_vm *pVm,
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
57e0: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
57f0: 6e 65 20 74 6f 20 62 65 20 64 65 73 74 72 6f 79  ne to be destroy
5800: 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
5810: 7a 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20  zErrMsg         
5820: 20 20 20 2f 2a 20 4f 55 54 3a 20 57 72 69 74 65     /* OUT: Write
5830: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
5840: 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  here */.){.  int
5850: 20 72 63 20 3d 20 73 71 6c 69 74 65 56 64 62 65   rc = sqliteVdbe
5860: 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a 29  Finalize((Vdbe*)
5870: 70 56 6d 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  pVm, pzErrMsg);.
5880: 20 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c    sqliteStrReall
5890: 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  oc(pzErrMsg);.  
58a0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
58b0: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61  .** Return a sta
58c0: 74 69 63 20 73 74 72 69 6e 67 20 74 68 61 74 20  tic string that 
58d0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 6b 69  describes the ki
58e0: 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63  nd of error spec
58f0: 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20  ified in the.** 
5900: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e  argument..*/.con
5910: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 5f  st char *sqlite_
5920: 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 69 6e 74  error_string(int
5930: 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68   rc){.  const ch
5940: 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28  ar *z;.  switch(
5950: 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20   rc ){.    case 
5960: 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20  SQLITE_OK:      
5970: 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20 65     z = "not an e
5980: 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20  rror";          
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59a0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
59b0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20  SQLITE_ERROR:   
59c0: 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67 69     z = "SQL logi
59d0: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
59e0: 6e 67 20 64 61 74 61 62 61 73 65 22 3b 20 20 20  ng database";   
59f0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5a00: 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a  SQLITE_INTERNAL:
5a10: 20 20 20 7a 20 3d 20 22 69 6e 74 65 72 6e 61 6c     z = "internal
5a20: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
5a30: 74 61 74 69 6f 6e 20 66 6c 61 77 22 3b 20 20 20  tation flaw";   
5a40: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5a50: 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20  SQLITE_PERM:    
5a60: 20 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20 70     z = "access p
5a70: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
5a80: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5a90: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5aa0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20  SQLITE_ABORT:   
5ab0: 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63 6b     z = "callback
5ac0: 20 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79   requested query
5ad0: 20 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20 20   abort";        
5ae0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5af0: 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20  SQLITE_BUSY:    
5b00: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5b10: 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20   is locked";    
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5b40: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20  SQLITE_LOCKED:  
5b50: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5b60: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
5b70: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5b80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5b90: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20  SQLITE_NOMEM:   
5ba0: 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20 6d     z = "out of m
5bb0: 65 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20 20  emory";         
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bd0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5be0: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a  SQLITE_READONLY:
5bf0: 20 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74 20     z = "attempt 
5c00: 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f  to write a reado
5c10: 6e 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20 20  nly database";  
5c20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5c30: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5c40: 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75 70  :  z = "interrup
5c50: 74 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ted";           
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5c80: 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20  SQLITE_IOERR:   
5c90: 20 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f 4f     z = "disk I/O
5ca0: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20   error";        
5cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cc0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5cd0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20  SQLITE_CORRUPT: 
5ce0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5cf0: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
5d00: 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20 20  alformed";      
5d10: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5d20: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a  SQLITE_NOTFOUND:
5d30: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 6f 72     z = "table or
5d40: 20 72 65 63 6f 72 64 20 6e 6f 74 20 66 6f 75 6e   record not foun
5d50: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
5d60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5d70: 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20  SQLITE_FULL:    
5d80: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5d90: 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20   is full";      
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5db0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5dc0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a  SQLITE_CANTOPEN:
5dd0: 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20 74     z = "unable t
5de0: 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  o open database 
5df0: 66 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20 20  file";          
5e00: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5e10: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a  SQLITE_PROTOCOL:
5e20: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5e30: 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f   locking protoco
5e40: 6c 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20 20  l failure";     
5e50: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5e60: 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20  SQLITE_EMPTY:   
5e70: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63 6f     z = "table co
5e80: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 3b  ntains no data";
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ea0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5eb0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20  SQLITE_SCHEMA:  
5ec0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5ed0: 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
5ee0: 67 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ged";           
5ef0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5f00: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20  SQLITE_TOOBIG:  
5f10: 20 20 20 7a 20 3d 20 22 74 6f 6f 20 6d 75 63 68     z = "too much
5f20: 20 64 61 74 61 20 66 6f 72 20 6f 6e 65 20 74 61   data for one ta
5f30: 62 6c 65 20 72 6f 77 22 3b 20 20 20 20 20 20 20  ble row";       
5f40: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5f50: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
5f60: 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61 69  T: z = "constrai
5f70: 6e 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20 20  nt failed";     
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f90: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5fa0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
5fb0: 20 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70 65     z = "datatype
5fc0: 20 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20 20   mismatch";     
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5ff0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20  SQLITE_MISUSE:  
6000: 20 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79 20     z = "library 
6010: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
6020: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 3b  ut of sequence";
6030: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6040: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20  SQLITE_NOLFS:   
6050: 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65 6c 20 6c     z = "kernel l
6060: 61 63 6b 73 20 6c 61 72 67 65 20 66 69 6c 65 20  acks large file 
6070: 73 75 70 70 6f 72 74 22 3b 20 20 20 20 20 20 20  support";       
6080: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6090: 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20  SQLITE_AUTH:    
60a0: 20 20 20 7a 20 3d 20 22 61 75 74 68 6f 72 69 7a     z = "authoriz
60b0: 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ation denied";  
60c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60d0: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
60e0: 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  lt:             
60f0: 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20     z = "unknown 
6100: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
6110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6120: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
6130: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
6140: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70  This routine imp
6150: 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20 63  lements a busy c
6160: 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c 65  allback that sle
6170: 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a  eps and tries.**
6180: 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20 74   again until a t
6190: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 20  imeout value is 
61a0: 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74 69  reached.  The ti
61b0: 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a 2a  meout value is.*
61c0: 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  * an integer num
61d0: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
61e0: 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61 73  nds passed in as
61f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
6200: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
6210: 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66 61  c int sqliteDefa
6220: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 28  ultBusyCallback(
6230: 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c  . void *Timeout,
6240: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
6250: 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  ximum amount of 
6260: 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a  time to wait */.
6270: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 4e 6f 74   const char *Not
6280: 55 73 65 64 2c 20 20 20 20 20 2f 2a 20 54 68 65  Used,     /* The
6290: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
62a0: 6c 65 20 74 68 61 74 20 69 73 20 62 75 73 79 20  le that is busy 
62b0: 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20  */. int count   
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
62d0: 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
62e0: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62  table has been b
62f0: 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53 51  usy */.){.#if SQ
6300: 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d  LITE_MIN_SLEEP_M
6310: 53 3d 3d 31 0a 20 20 69 6e 74 20 64 65 6c 61 79  S==1.  int delay
6320: 20 3d 20 31 30 3b 0a 20 20 69 6e 74 20 70 72 69   = 10;.  int pri
6330: 6f 72 5f 64 65 6c 61 79 20 3d 20 30 3b 0a 20 20  or_delay = 0;.  
6340: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
6350: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e  nt)Timeout;.  in
6360: 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 31 3b  t i;..  for(i=1;
6370: 20 69 3c 63 6f 75 6e 74 3b 20 69 2b 2b 29 7b 20   i<count; i++){ 
6380: 0a 20 20 20 20 70 72 69 6f 72 5f 64 65 6c 61 79  .    prior_delay
6390: 20 2b 3d 20 64 65 6c 61 79 3b 0a 20 20 20 20 64   += delay;.    d
63a0: 65 6c 61 79 20 3d 20 64 65 6c 61 79 2a 32 3b 0a  elay = delay*2;.
63b0: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3e 3d 31      if( delay>=1
63c0: 30 30 30 20 29 7b 0a 20 20 20 20 20 20 64 65 6c  000 ){.      del
63d0: 61 79 20 3d 20 31 30 30 30 3b 0a 20 20 20 20 20  ay = 1000;.     
63e0: 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b 3d 20   prior_delay += 
63f0: 31 30 30 30 2a 28 63 6f 75 6e 74 20 2d 20 69 20  1000*(count - i 
6400: 2d 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61  - 1);.      brea
6410: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
6420: 66 28 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b  f( prior_delay +
6430: 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74   delay > timeout
6440: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
6450: 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 5f  timeout - prior_
6460: 64 65 6c 61 79 3b 0a 20 20 20 20 69 66 28 20 64  delay;.    if( d
6470: 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75 72 6e  elay<=0 ) return
6480: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
6490: 4f 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a  OsSleep(delay);.
64a0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73    return 1;.#els
64b0: 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20  e.  int timeout 
64c0: 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a  = (int)Timeout;.
64d0: 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a    if( (count+1)*
64e0: 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20 29  1000 > timeout )
64f0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
6500: 20 20 7d 0a 20 20 73 71 6c 69 74 65 4f 73 53 6c    }.  sqliteOsSl
6510: 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74  eep(1000);.  ret
6520: 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a  urn 1;.#endif.}.
6530: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
6540: 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75 73  ine sets the bus
6550: 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  y callback for a
6560: 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73  n Sqlite databas
6570: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65  e to the.** give
6580: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
6590: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76  ion with the giv
65a0: 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  en argument..*/.
65b0: 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73 79  void sqlite_busy
65c0: 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69  _handler(.  sqli
65d0: 74 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a  te *db,.  int (*
65e0: 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f 6e  xBusy)(void*,con
65f0: 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a 20  st char*,int),. 
6600: 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20   void *pArg.){. 
6610: 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61   db->xBusyCallba
6620: 63 6b 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62  ck = xBusy;.  db
6630: 2d 3e 70 42 75 73 79 41 72 67 20 3d 20 70 41 72  ->pBusyArg = pAr
6640: 67 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  g;.}../*.** This
6650: 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c 6c   routine install
6660: 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73 79  s a default busy
6670: 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77 61   handler that wa
6680: 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73  its for the.** s
6690: 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20  pecified number 
66a0: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
66b0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
66c0: 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69   0..*/.void sqli
66d0: 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  te_busy_timeout(
66e0: 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20  sqlite *db, int 
66f0: 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30 20  ms){.  if( ms>0 
6700: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62 75  ){.    sqlite_bu
6710: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73  sy_handler(db, s
6720: 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79  qliteDefaultBusy
6730: 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a  Callback, (void*
6740: 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )ms);.  }else{. 
6750: 20 20 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 68     sqlite_busy_h
6760: 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29  andler(db, 0, 0)
6770: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ;.  }.}../*.** C
6780: 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  ause any pending
6790: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73 74   operation to st
67a0: 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69 65  op at its earlie
67b0: 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e 0a  st opportunity..
67c0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 69  */.void sqlite_i
67d0: 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65 20  nterrupt(sqlite 
67e0: 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61 67  *db){.  db->flag
67f0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
6800: 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rrupt;.}../*.** 
6810: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
6820: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69 73  should call this
6830: 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65 65   routine to free
6840: 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a 20   memory that.** 
6850: 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74  is returned in t
6860: 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73 67  he in the errmsg
6870: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
6880: 6c 69 74 65 5f 6f 70 65 6e 28 29 20 77 68 65 6e  lite_open() when
6890: 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 61 20  .** SQLite is a 
68a0: 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20 72  DLL.  For some r
68b0: 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20 6e  eason, it does n
68c0: 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c 20  ot work to call 
68d0: 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65 63 74  free().** direct
68e0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ly..**.** Note t
68f0: 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20 63  hat we need to c
6900: 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74 20 73  all free() not s
6910: 71 6c 69 74 65 46 72 65 65 28 29 20 68 65 72 65  qliteFree() here
6920: 2c 20 73 69 6e 63 65 20 65 76 65 72 79 0a 2a 2a  , since every.**
6930: 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
6940: 65 78 70 6f 72 74 65 64 20 66 72 6f 6d 20 53 51  exported from SQ
6950: 4c 69 74 65 20 73 68 6f 75 6c 64 20 68 61 76 65  Lite should have
6960: 20 61 6c 72 65 61 64 79 20 70 61 73 73 65 64 20   already passed 
6970: 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71 6c 69 74  through.** sqlit
6980: 65 53 74 72 52 65 61 6c 6c 6f 63 28 29 2e 0a 2a  eStrRealloc()..*
6990: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 66 72  /.void sqlite_fr
69a0: 65 65 6d 65 6d 28 76 6f 69 64 20 2a 70 29 7b 20  eemem(void *p){ 
69b0: 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a  free(p); }../*.*
69c0: 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d  * Windows system
69d0: 73 20 6e 65 65 64 20 66 75 6e 63 74 69 6f 6e 73  s need functions
69e0: 20 74 6f 20 63 61 6c 6c 20 74 6f 20 72 65 74 75   to call to retu
69f0: 72 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 76 65  rn the sqlite_ve
6a00: 72 73 69 6f 6e 0a 2a 2a 20 61 6e 64 20 73 71 6c  rsion.** and sql
6a10: 69 74 65 5f 65 6e 63 6f 64 69 6e 67 20 73 74 72  ite_encoding str
6a20: 69 6e 67 73 20 73 69 6e 63 65 20 74 68 65 79 20  ings since they 
6a30: 61 72 65 20 75 6e 61 62 6c 65 20 74 6f 20 61 63  are unable to ac
6a40: 63 65 73 73 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  cess constants.*
6a50: 2a 20 77 69 74 68 69 6e 20 44 4c 4c 73 2e 0a 2a  * within DLLs..*
6a60: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
6a70: 6c 69 74 65 5f 6c 69 62 76 65 72 73 69 6f 6e 28  lite_libversion(
6a80: 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71  void){ return sq
6a90: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a  lite_version; }.
6aa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
6ab0: 74 65 5f 6c 69 62 65 6e 63 6f 64 69 6e 67 28 76  te_libencoding(v
6ac0: 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c  oid){ return sql
6ad0: 69 74 65 5f 65 6e 63 6f 64 69 6e 67 3b 20 7d 0a  ite_encoding; }.
6ae0: 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65  ./*.** Create ne
6af0: 77 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66  w user-defined f
6b00: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 73  unctions.  The s
6b10: 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e  qlite_create_fun
6b20: 63 74 69 6f 6e 28 29 0a 2a 2a 20 72 6f 75 74 69  ction().** routi
6b30: 6e 65 20 63 72 65 61 74 65 73 20 61 20 72 65 67  ne creates a reg
6b40: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ular function an
6b50: 64 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f  d sqlite_create_
6b60: 61 67 67 72 65 67 61 74 65 28 29 0a 2a 2a 20 63  aggregate().** c
6b70: 72 65 61 74 65 73 20 61 6e 20 61 67 67 72 65 67  reates an aggreg
6b80: 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  ate function..**
6b90: 0a 2a 2a 20 50 61 73 73 69 6e 67 20 61 20 4e 55  .** Passing a NU
6ba0: 4c 4c 20 78 46 75 6e 63 20 61 72 67 75 6d 65 6e  LL xFunc argumen
6bb0: 74 20 6f 72 20 4e 55 4c 4c 20 78 53 74 65 70 20  t or NULL xStep 
6bc0: 61 6e 64 20 78 46 69 6e 61 6c 69 7a 65 20 61 72  and xFinalize ar
6bd0: 67 75 6d 65 6e 74 73 0a 2a 2a 20 64 69 73 61 62  guments.** disab
6be0: 6c 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  les the function
6bf0: 2e 20 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74  .  Calling sqlit
6c00: 65 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  e_create_functio
6c10: 6e 28 29 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  n() with the.** 
6c20: 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 6e 75  same name and nu
6c30: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
6c40: 73 20 61 73 20 61 20 70 72 69 6f 72 20 63 61 6c  s as a prior cal
6c50: 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f 63  l to.** sqlite_c
6c60: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28  reate_aggregate(
6c70: 29 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 70  ) disables the p
6c80: 72 69 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20  rior call to.** 
6c90: 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 61 67  sqlite_create_ag
6ca0: 67 72 65 67 61 74 65 28 29 2c 20 61 6e 64 20 76  gregate(), and v
6cb0: 69 63 65 20 76 65 72 73 61 2e 0a 2a 2a 0a 2a 2a  ice versa..**.**
6cc0: 20 49 66 20 6e 41 72 67 20 69 73 20 2d 31 20 69   If nArg is -1 i
6cd0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 69  t means that thi
6ce0: 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  s function will 
6cf0: 61 63 63 65 70 74 20 61 6e 79 20 6e 75 6d 62 65  accept any numbe
6d00: 72 0a 2a 2a 20 6f 66 20 61 72 67 75 6d 65 6e 74  r.** of argument
6d10: 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 30 2e 0a  s, including 0..
6d20: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 72  */.int sqlite_cr
6d30: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
6d40: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
6d50: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65        /* Add the
6d60: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69   function to thi
6d70: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
6d80: 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74  ction */.  const
6d90: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20   char *zName,   
6da0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66  /* Name of the f
6db0: 75 6e 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a  unction to add *
6dc0: 2f 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20  /.  int nArg,   
6dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6de0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6df0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
6e00: 63 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c  c)(sqlite_func*,
6e10: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a  int,const char**
6e20: 29 2c 20 20 2f 2a 20 54 68 65 20 69 6d 70 6c 65  ),  /* The imple
6e30: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 76  mentation */.  v
6e40: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 20 20  oid *pUserData  
6e50: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
6e60: 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66   */.){.  FuncDef
6e70: 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65   *p;.  int nName
6e80: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 7c 7c  ;.  if( db==0 ||
6e90: 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c   zName==0 || sql
6ea0: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
6eb0: 62 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  b) ) return 1;. 
6ec0: 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28   nName = strlen(
6ed0: 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e  zName);.  if( nN
6ee0: 61 6d 65 3e 32 35 35 20 29 20 72 65 74 75 72 6e  ame>255 ) return
6ef0: 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   1;.  p = sqlite
6f00: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FindFunction(db,
6f10: 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e   zName, nName, n
6f20: 41 72 67 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  Arg, 1);.  if( p
6f30: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
6f40: 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75    p->xFunc = xFu
6f50: 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d  nc;.  p->xStep =
6f60: 20 30 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69   0;.  p->xFinali
6f70: 7a 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 55 73  ze = 0;.  p->pUs
6f80: 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44 61  erData = pUserDa
6f90: 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a  ta;.  return 0;.
6fa0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 72 65  }.int sqlite_cre
6fb0: 61 74 65 5f 61 67 67 72 65 67 61 74 65 28 0a 20  ate_aggregate(. 
6fc0: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
6fd0: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65        /* Add the
6fe0: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69   function to thi
6ff0: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
7000: 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74  ction */.  const
7010: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20   char *zName,   
7020: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66  /* Name of the f
7030: 75 6e 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a  unction to add *
7040: 2f 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20  /.  int nArg,   
7050: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7060: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
7070: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  */.  void (*xSte
7080: 70 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c  p)(sqlite_func*,
7090: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a  int,const char**
70a0: 29 2c 20 2f 2a 20 54 68 65 20 73 74 65 70 20 66  ), /* The step f
70b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
70c0: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
70d0: 71 6c 69 74 65 5f 66 75 6e 63 2a 29 2c 20 20 20  qlite_func*),   
70e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
70f0: 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  e finalizer */. 
7100: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
7110: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61        /* User da
7120: 74 61 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44  ta */.){.  FuncD
7130: 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61  ef *p;.  int nNa
7140: 6d 65 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20  me;.  if( db==0 
7150: 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73  || zName==0 || s
7160: 71 6c 69 74 65 53 61 66 65 74 79 43 68 65 63 6b  qliteSafetyCheck
7170: 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 31 3b  (db) ) return 1;
7180: 0a 20 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65  .  nName = strle
7190: 6e 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20  n(zName);.  if( 
71a0: 6e 4e 61 6d 65 3e 32 35 35 20 29 20 72 65 74 75  nName>255 ) retu
71b0: 72 6e 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c 69  rn 1;.  p = sqli
71c0: 74 65 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  teFindFunction(d
71d0: 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c  b, zName, nName,
71e0: 20 6e 41 72 67 2c 20 31 29 3b 0a 20 20 69 66 28   nArg, 1);.  if(
71f0: 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31   p==0 ) return 1
7200: 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 30  ;.  p->xFunc = 0
7210: 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78  ;.  p->xStep = x
7220: 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61  Step;.  p->xFina
7230: 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 69 7a 65  lize = xFinalize
7240: 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61  ;.  p->pUserData
7250: 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20   = pUserData;.  
7260: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
7270: 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 64 61  ** Change the da
7280: 74 61 74 79 70 65 20 66 6f 72 20 61 6c 6c 20 66  tatype for all f
7290: 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 20  unctions with a 
72a0: 67 69 76 65 6e 20 6e 61 6d 65 2e 20 20 53 65 65  given name.  See
72b0: 20 74 68 65 0a 2a 2a 20 68 65 61 64 65 72 20 63   the.** header c
72c0: 6f 6d 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 70  omment for the p
72d0: 72 6f 74 6f 74 79 70 65 20 6f 66 20 74 68 69 73  rototype of this
72e0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 73 71 6c   function in sql
72f0: 69 74 65 2e 68 20 66 6f 72 0a 2a 2a 20 61 64 64  ite.h for.** add
7300: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
7310: 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ion..*/.int sqli
7320: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 74 79 70 65  te_function_type
7330: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f 6e  (sqlite *db, con
7340: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
7350: 69 6e 74 20 64 61 74 61 54 79 70 65 29 7b 0a 20  int dataType){. 
7360: 20 46 75 6e 63 44 65 66 20 2a 70 20 3d 20 28 46   FuncDef *p = (F
7370: 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61  uncDef*)sqliteHa
7380: 73 68 46 69 6e 64 28 26 64 62 2d 3e 61 46 75 6e  shFind(&db->aFun
7390: 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e  c, zName, strlen
73a0: 28 7a 4e 61 6d 65 29 29 3b 0a 20 20 77 68 69 6c  (zName));.  whil
73b0: 65 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 64  e( p ){.    p->d
73c0: 61 74 61 54 79 70 65 20 3d 20 64 61 74 61 54 79  ataType = dataTy
73d0: 70 65 3b 20 0a 20 20 20 20 70 20 3d 20 70 2d 3e  pe; .    p = p->
73e0: 70 4e 65 78 74 3b 0a 20 20 7d 0a 20 20 72 65 74  pNext;.  }.  ret
73f0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
7400: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
7410: 20 61 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f   a trace functio
7420: 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f  n.  The pArg fro
7430: 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  m the previously
7440: 20 72 65 67 69 73 74 65 72 65 64 20 74 72 61 63   registered trac
7450: 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  e.** is returned
7460: 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  .  .**.** A NULL
7470: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
7480: 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72  means that no tr
7490: 61 63 69 6e 67 20 69 73 20 65 78 65 63 75 74 65  acing is execute
74a0: 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a  s.  A non-NULL.*
74b0: 2a 20 74 72 61 63 65 20 69 73 20 61 20 70 6f 69  * trace is a poi
74c0: 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69  nter to a functi
74d0: 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b  on that is invok
74e0: 65 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20  ed at the start 
74f0: 6f 66 20 65 61 63 68 0a 2a 2a 20 73 71 6c 69 74  of each.** sqlit
7500: 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 76 6f 69  e_exec()..*/.voi
7510: 64 20 2a 73 71 6c 69 74 65 5f 74 72 61 63 65 28  d *sqlite_trace(
7520: 73 71 6c 69 74 65 20 2a 64 62 2c 20 76 6f 69 64  sqlite *db, void
7530: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
7540: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76  ,const char*), v
7550: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 23 69 66 6e  oid *pArg){.#ifn
7560: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7570: 54 52 41 43 45 0a 20 20 76 6f 69 64 20 2a 70 4f  TRACE.  void *pO
7580: 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63 65 41  ld = db->pTraceA
7590: 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63 65  rg;.  db->xTrace
75a0: 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62 2d   = xTrace;.  db-
75b0: 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70 41 72  >pTraceArg = pAr
75c0: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  g;.  return pOld
75d0: 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e  ;.#else.  return
75e0: 20 30 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 0a 2f   0;.#endif.}.../
75f0: 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20  *.** Attempt to 
7600: 6f 70 65 6e 20 74 68 65 20 66 69 6c 65 20 6e 61  open the file na
7610: 6d 65 64 20 69 6e 20 74 68 65 20 61 72 67 75 6d  med in the argum
7620: 65 6e 74 20 61 73 20 74 68 65 20 61 75 78 69 6c  ent as the auxil
7630: 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
7640: 20 66 69 6c 65 2e 20 20 54 68 65 20 61 75 78 69   file.  The auxi
7650: 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
7660: 69 6c 65 20 69 73 20 75 73 65 64 20 74 6f 20 73  ile is used to s
7670: 74 6f 72 65 20 54 45 4d 50 20 74 61 62 6c 65 73  tore TEMP tables
7680: 2e 20 20 42 75 74 0a 2a 2a 20 62 79 20 75 73 69  .  But.** by usi
7690: 6e 67 20 74 68 69 73 20 41 50 49 2c 20 69 74 20  ng this API, it 
76a0: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 74  is possible to t
76b0: 72 69 63 6b 20 53 51 4c 69 74 65 20 69 6e 74 6f  rick SQLite into
76c0: 20 6f 70 65 6e 69 6e 67 20 74 77 6f 0a 2a 2a 20   opening two.** 
76d0: 73 65 70 61 72 61 74 65 20 64 61 74 61 62 61 73  separate databas
76e0: 65 73 20 61 6e 64 20 61 63 74 69 6e 67 20 6f 6e  es and acting on
76f0: 20 74 68 65 6d 20 61 73 20 69 66 20 74 68 65 79   them as if they
7700: 20 77 65 72 65 20 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   were one..**.**
7710: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6c   This routine cl
7720: 6f 73 65 73 20 74 68 65 20 65 78 69 73 74 69 6e  oses the existin
7730: 67 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  g auxiliary data
7740: 62 61 73 65 20 66 69 6c 65 2c 20 77 68 69 63 68  base file, which
7750: 20 77 69 6c 6c 0a 2a 2a 20 63 61 75 73 65 20 61   will.** cause a
7760: 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 63 72  ny previously cr
7770: 65 61 74 65 64 20 54 45 4d 50 20 74 61 62 6c 65  eated TEMP table
7780: 73 20 74 6f 20 62 65 20 64 72 6f 70 70 65 64 2e  s to be dropped.
7790: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 7a 4e 61 6d 65  .**.** The zName
77a0: 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
77b0: 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  e a NULL pointer
77c0: 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72   or an empty str
77d0: 69 6e 67 20 74 6f 20 63 61 75 73 65 0a 2a 2a 20  ing to cause.** 
77e0: 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  a temporary file
77f0: 20 74 6f 20 62 65 20 6f 70 65 6e 65 64 20 61 6e   to be opened an
7800: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
7810: 64 65 6c 65 74 65 64 20 77 68 65 6e 20 63 6c 6f  deleted when clo
7820: 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  sed..*/.int sqli
7830: 74 65 5f 6f 70 65 6e 5f 61 75 78 5f 66 69 6c 65  te_open_aux_file
7840: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f 6e  (sqlite *db, con
7850: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
7860: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
7870: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
7880: 28 20 7a 4e 61 6d 65 20 26 26 20 7a 4e 61 6d 65  ( zName && zName
7890: 5b 30 5d 3d 3d 30 20 29 20 7a 4e 61 6d 65 20 3d  [0]==0 ) zName =
78a0: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
78b0: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
78c0: 6f 74 6f 20 6f 70 65 6e 61 75 78 5f 6d 69 73 75  oto openaux_misu
78d0: 73 65 3b 0a 20 20 73 71 6c 69 74 65 52 65 73 65  se;.  sqliteRese
78e0: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
78f0: 64 62 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db);.  if( db->a
7900: 44 62 5b 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a  Db[1].pBt!=0 ){.
7910: 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 43      sqliteBtreeC
7920: 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e  lose(db->aDb[1].
7930: 70 42 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  pBt);.  }.  rc =
7940: 20 73 71 6c 69 74 65 42 74 72 65 65 4f 70 65 6e   sqliteBtreeOpen
7950: 28 7a 4e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f 50  (zName, 0, MAX_P
7960: 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b 31  AGES, &db->aDb[1
7970: 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ].pBt);.  if( rc
7980: 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 4e 61 6d   ){.    if( zNam
7990: 65 3d 3d 30 20 29 20 7a 4e 61 6d 65 20 3d 20 22  e==0 ) zName = "
79a0: 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  a temporary file
79b0: 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74  ";.    sqliteSet
79c0: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
79d0: 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   "unable to open
79e0: 20 22 2c 20 7a 4e 61 6d 65 2c 20 0a 20 20 20 20   ", zName, .    
79f0: 20 20 22 3a 20 22 2c 20 73 71 6c 69 74 65 5f 65    ": ", sqlite_e
7a00: 72 72 6f 72 5f 73 74 72 69 6e 67 28 72 63 29 2c  rror_string(rc),
7a10: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 53   0);.    sqliteS
7a20: 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d  trRealloc(pzErrM
7a30: 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 53  sg);.    sqliteS
7a40: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20  afetyOff(db);.  
7a50: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d    return rc;.  }
7a60: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 49 6e  .  rc = sqliteIn
7a70: 69 74 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29  it(db, pzErrMsg)
7a80: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 61  ;.  if( sqliteSa
7a90: 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
7aa0: 74 6f 20 6f 70 65 6e 61 75 78 5f 6d 69 73 75 73  to openaux_misus
7ab0: 65 3b 0a 20 20 73 71 6c 69 74 65 53 74 72 52 65  e;.  sqliteStrRe
7ac0: 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b  alloc(pzErrMsg);
7ad0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 6f  .  return rc;..o
7ae0: 70 65 6e 61 75 78 5f 6d 69 73 75 73 65 3a 0a 20  penaux_misuse:. 
7af0: 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67   sqliteSetString
7b00: 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74  (pzErrMsg, sqlit
7b10: 65 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 53  e_error_string(S
7b20: 51 4c 49 54 45 5f 4d 49 53 55 53 45 29 2c 20 30  QLITE_MISUSE), 0
7b30: 29 3b 0a 20 20 73 71 6c 69 74 65 53 74 72 52 65  );.  sqliteStrRe
7b40: 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b  alloc(pzErrMsg);
7b50: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
7b60: 5f 4d 49 53 55 53 45 3b 0a 7d 0a                 _MISUSE;.}.