/ Hex Artifact Content
Login

Artifact c8f8fdfe4548a8404fab90ff6ad374b217e6b7fa:


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 30 36 20 32 30 30 33 2f 30 31  ,v 1.106 2003/01
0280: 2f 31 32 20 31 38 3a 30 32 3a 31 38 20 64 72 68  /12 18:02:18 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 63 72  argv[3] = SQL cr
0580: 65 61 74 65 20 73 74 61 74 65 6d 65 6e 74 20 66  eate statement f
0590: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  or the table or 
05a0: 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 61 72 67  index.**     arg
05b0: 76 5b 34 5d 20 3d 20 22 31 22 20 66 6f 72 20 74  v[4] = "1" for t
05c0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20  emporary files, 
05d0: 22 30 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  "0" for main dat
05e0: 61 62 61 73 65 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  abase.**.*/.stat
05f0: 69 63 0a 69 6e 74 20 73 71 6c 69 74 65 49 6e 69  ic.int sqliteIni
0600: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
0610: 70 49 6e 69 74 2c 20 69 6e 74 20 61 72 67 63 2c  pInit, int argc,
0620: 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68   char **argv, ch
0630: 61 72 20 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b  ar **azColName){
0640: 0a 20 20 49 6e 69 74 44 61 74 61 20 2a 70 44 61  .  InitData *pDa
0650: 74 61 20 3d 20 28 49 6e 69 74 44 61 74 61 2a 29  ta = (InitData*)
0660: 70 49 6e 69 74 3b 0a 20 20 50 61 72 73 65 20 73  pInit;.  Parse s
0670: 50 61 72 73 65 3b 0a 20 20 69 6e 74 20 6e 45 72  Parse;.  int nEr
0680: 72 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 4f 44  r = 0;..  /* TOD
0690: 4f 3a 20 44 6f 20 73 6f 6d 65 20 76 61 6c 69 64  O: Do some valid
06a0: 69 74 79 20 63 68 65 63 6b 73 20 6f 6e 20 61 6c  ity checks on al
06b0: 6c 20 66 69 65 6c 64 73 2e 20 20 49 6e 20 70 61  l fields.  In pa
06c0: 72 74 69 63 75 6c 61 72 2c 0a 20 20 2a 2a 20 6d  rticular,.  ** m
06d0: 61 6b 65 20 73 75 72 65 20 66 69 65 6c 64 73 20  ake sure fields 
06e0: 64 6f 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4e  do not contain N
06f0: 55 4c 4c 73 2e 20 4f 74 68 65 72 77 69 73 65 20  ULLs. Otherwise 
0700: 77 65 20 6d 69 67 68 74 20 63 6f 72 65 0a 20 20  we might core.  
0710: 2a 2a 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ** when attempti
0720: 6e 67 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ng to initialize
0730: 20 66 72 6f 6d 20 61 20 63 6f 72 72 75 70 74 20   from a corrupt 
0740: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 2a  database file. *
0750: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  /..  assert( arg
0760: 63 3d 3d 35 20 29 3b 0a 20 20 73 77 69 74 63 68  c==5 );.  switch
0770: 28 20 61 72 67 76 5b 30 5d 5b 30 5d 20 29 7b 0a  ( argv[0][0] ){.
0780: 20 20 20 20 63 61 73 65 20 27 76 27 3a 0a 20 20      case 'v':.  
0790: 20 20 63 61 73 65 20 27 69 27 3a 0a 20 20 20 20    case 'i':.    
07a0: 63 61 73 65 20 27 74 27 3a 20 7b 20 20 2f 2a 20  case 't': {  /* 
07b0: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52  CREATE TABLE, CR
07c0: 45 41 54 45 20 49 4e 44 45 58 2c 20 6f 72 20 43  EATE INDEX, or C
07d0: 52 45 41 54 45 20 56 49 45 57 20 73 74 61 74 65  REATE VIEW state
07e0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 69  ments */.      i
07f0: 66 28 20 61 72 67 76 5b 33 5d 20 26 26 20 61 72  f( argv[3] && ar
0800: 67 76 5b 33 5d 5b 30 5d 20 29 7b 0a 20 20 20 20  gv[3][0] ){.    
0810: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20      /* Call the 
0820: 70 61 72 73 65 72 20 74 6f 20 70 72 6f 63 65 73  parser to proces
0830: 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  s a CREATE TABLE
0840: 2c 20 49 4e 44 45 58 20 6f 72 20 56 49 45 57 2e  , INDEX or VIEW.
0850: 0a 20 20 20 20 20 20 20 20 2a 2a 20 42 75 74 20  .        ** But 
0860: 62 65 63 61 75 73 65 20 73 50 61 72 73 65 2e 69  because sParse.i
0870: 6e 69 74 46 6c 61 67 20 69 73 20 73 65 74 20 74  nitFlag is set t
0880: 6f 20 31 2c 20 6e 6f 20 56 44 42 45 20 63 6f 64  o 1, no VDBE cod
0890: 65 20 69 73 20 67 65 6e 65 72 61 74 65 64 0a 20  e is generated. 
08a0: 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65 78 65         ** or exe
08b0: 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20  cuted.  All the 
08c0: 70 61 72 73 65 72 20 64 6f 65 73 20 69 73 20 62  parser does is b
08d0: 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61  uild the interna
08e0: 6c 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 2a  l data.        *
08f0: 2a 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  * structures tha
0900: 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20 74  t describe the t
0910: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20  able, index, or 
0920: 76 69 65 77 2e 0a 20 20 20 20 20 20 20 20 2a 2f  view..        */
0930: 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28  .        memset(
0940: 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65  &sParse, 0, size
0950: 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20 20  of(sParse));.   
0960: 20 20 20 20 20 73 50 61 72 73 65 2e 64 62 20 3d       sParse.db =
0970: 20 70 44 61 74 61 2d 3e 64 62 3b 0a 20 20 20 20   pData->db;.    
0980: 20 20 20 20 73 50 61 72 73 65 2e 69 6e 69 74 46      sParse.initF
0990: 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  lag = 1;.       
09a0: 20 73 50 61 72 73 65 2e 69 73 54 65 6d 70 20 3d   sParse.isTemp =
09b0: 20 61 72 67 76 5b 34 5d 5b 30 5d 20 2d 20 27 30   argv[4][0] - '0
09c0: 27 3b 0a 20 20 20 20 20 20 20 20 73 50 61 72 73  ';.        sPars
09d0: 65 2e 6e 65 77 54 6e 75 6d 20 3d 20 61 74 6f 69  e.newTnum = atoi
09e0: 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 20  (argv[2]);.     
09f0: 20 20 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73     sqliteRunPars
0a00: 65 72 28 26 73 50 61 72 73 65 2c 20 61 72 67 76  er(&sParse, argv
0a10: 5b 33 5d 2c 20 70 44 61 74 61 2d 3e 70 7a 45 72  [3], pData->pzEr
0a20: 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7d 65 6c  rMsg);.      }el
0a30: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
0a40: 66 20 74 68 65 20 53 51 4c 20 63 6f 6c 75 6d 6e  f the SQL column
0a50: 20 69 73 20 62 6c 61 6e 6b 20 69 74 20 6d 65 61   is blank it mea
0a60: 6e 73 20 74 68 69 73 20 69 73 20 61 6e 20 69 6e  ns this is an in
0a70: 64 65 78 20 74 68 61 74 0a 20 20 20 20 20 20 20  dex that.       
0a80: 20 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20   ** was created 
0a90: 74 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52  to be the PRIMAR
0aa0: 59 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66  Y KEY or to fulf
0ab0: 69 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20  ill a UNIQUE.   
0ac0: 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
0ad0: 6e 74 20 66 6f 72 20 61 20 43 52 45 41 54 45 20  nt for a CREATE 
0ae0: 54 41 42 4c 45 2e 20 20 54 68 65 20 69 6e 64 65  TABLE.  The inde
0af0: 78 20 73 68 6f 75 6c 64 20 68 61 76 65 20 61 6c  x should have al
0b00: 72 65 61 64 79 0a 20 20 20 20 20 20 20 20 2a 2a  ready.        **
0b10: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 77 68   been created wh
0b20: 65 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64 20  en we processed 
0b30: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
0b40: 2e 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a 20  .  All we have. 
0b50: 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 64 6f 20         ** to do 
0b60: 68 65 72 65 20 69 73 20 72 65 63 6f 72 64 20 74  here is record t
0b70: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
0b80: 62 65 72 20 66 6f 72 20 74 68 61 74 20 69 6e 64  ber for that ind
0b90: 65 78 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  ex..        */. 
0ba0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
0bb0: 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 46 69 6e  ndex = sqliteFin
0bc0: 64 49 6e 64 65 78 28 70 44 61 74 61 2d 3e 64 62  dIndex(pData->db
0bd0: 2c 20 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20  , argv[1]);.    
0be0: 20 20 20 20 69 66 28 20 70 49 6e 64 65 78 3d 3d      if( pIndex==
0bf0: 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e 74 6e 75  0 || pIndex->tnu
0c00: 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  m!=0 ){.        
0c10: 20 20 2f 2a 20 54 68 69 73 20 63 61 6e 20 6f 63    /* This can oc
0c20: 63 75 72 20 69 66 20 74 68 65 72 65 20 65 78 69  cur if there exi
0c30: 73 74 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  sts an index on 
0c40: 61 20 54 45 4d 50 20 74 61 62 6c 65 20 77 68 69  a TEMP table whi
0c50: 63 68 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  ch.          ** 
0c60: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
0c70: 65 20 61 73 20 61 6e 6f 74 68 65 72 20 69 6e 64  e as another ind
0c80: 65 78 20 6f 6e 20 61 20 70 65 72 6d 61 6e 65 6e  ex on a permanen
0c90: 74 20 69 6e 64 65 78 2e 20 20 53 69 6e 63 65 0a  t index.  Since.
0ca0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
0cb0: 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65   permanent table
0cc0: 20 69 73 20 68 69 64 64 65 6e 20 62 79 20 74 68   is hidden by th
0cd0: 65 20 54 45 4d 50 20 74 61 62 6c 65 2c 20 77 65  e TEMP table, we
0ce0: 20 63 61 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20   can also.      
0cf0: 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20 69 67      ** safely ig
0d00: 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78 20 6f  nore the index o
0d10: 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20  n the permanent 
0d20: 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 20 20 20  table..         
0d30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   */.          /*
0d40: 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f 3b 0a   Do Nothing */;.
0d50: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
0d60: 20 20 20 20 20 20 20 20 20 70 49 6e 64 65 78 2d           pIndex-
0d70: 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72 67  >tnum = atoi(arg
0d80: 76 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  v[2]);.        }
0d90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
0da0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
0db0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
0dc0: 20 2f 2a 20 54 68 69 73 20 63 61 6e 20 6e 6f 74   /* This can not
0dd0: 20 68 61 70 70 65 6e 21 20 2a 2f 0a 20 20 20 20   happen! */.    
0de0: 20 20 6e 45 72 72 20 3d 20 31 3b 0a 20 20 20 20    nErr = 1;.    
0df0: 20 20 61 73 73 65 72 74 28 20 6e 45 72 72 3d 3d    assert( nErr==
0e00: 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  0 );.    }.  }. 
0e10: 20 72 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a   return nErr;.}.
0e20: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
0e30: 20 63 61 6c 6c 62 61 63 6b 20 70 72 6f 63 65 64   callback proced
0e40: 75 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  ure used to reco
0e50: 6e 73 74 72 75 63 74 20 61 20 74 61 62 6c 65 2e  nstruct a table.
0e60: 20 20 54 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66    The.** name of
0e70: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
0e80: 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 69   reconstructed i
0e90: 73 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 61  s passed in as a
0ea0: 72 67 76 5b 30 5d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rgv[0]..**.** Th
0eb0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73  is routine is us
0ec0: 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  ed to automatica
0ed0: 6c 6c 79 20 75 70 67 72 61 64 65 20 61 20 64 61  lly upgrade a da
0ee0: 74 61 62 61 73 65 20 66 72 6f 6d 0a 2a 2a 20 66  tabase from.** f
0ef0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 31 20  ormat version 1 
0f00: 6f 72 20 32 20 74 6f 20 76 65 72 73 69 6f 6e 20  or 2 to version 
0f10: 33 2e 20 20 54 68 65 20 63 6f 72 72 65 63 74 20  3.  The correct 
0f20: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
0f30: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 6c  this routine rel
0f40: 79 73 20 6f 6e 20 74 68 65 20 66 61 63 74 20 74  ys on the fact t
0f50: 68 61 74 20 6e 6f 20 69 6e 64 69 63 65 73 20 61  hat no indices a
0f60: 72 65 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  re used when.** 
0f70: 63 6f 70 79 69 6e 67 20 61 20 74 61 62 6c 65 20  copying a table 
0f80: 6f 75 74 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  out to a tempora
0f90: 72 79 20 66 69 6c 65 2e 0a 2a 2f 0a 73 74 61 74  ry file..*/.stat
0fa0: 69 63 0a 69 6e 74 20 75 70 67 72 61 64 65 5f 33  ic.int upgrade_3
0fb0: 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  _callback(void *
0fc0: 70 49 6e 69 74 2c 20 69 6e 74 20 61 72 67 63 2c  pInit, int argc,
0fd0: 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68   char **argv, ch
0fe0: 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20  ar **NotUsed){. 
0ff0: 20 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61   InitData *pData
1000: 20 3d 20 28 49 6e 69 74 44 61 74 61 2a 29 70 49   = (InitData*)pI
1010: 6e 69 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  nit;.  int rc;. 
1020: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
1030: 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 0a  Trigger *pTrig;.
1040: 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30    char *zErr = 0
1050: 3b 0a 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69  ;..  pTab = sqli
1060: 74 65 46 69 6e 64 54 61 62 6c 65 28 70 44 61 74  teFindTable(pDat
1070: 61 2d 3e 64 62 2c 20 61 72 67 76 5b 30 5d 29 3b  a->db, argv[0]);
1080: 0a 20 20 61 73 73 65 72 74 28 20 70 54 61 62 21  .  assert( pTab!
1090: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
10a0: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 70 54  sqliteStrICmp(pT
10b0: 61 62 2d 3e 7a 4e 61 6d 65 2c 20 61 72 67 76 5b  ab->zName, argv[
10c0: 30 5d 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  0])==0 );.  if( 
10d0: 70 54 61 62 20 29 7b 0a 20 20 20 20 70 54 72 69  pTab ){.    pTri
10e0: 67 20 3d 20 70 54 61 62 2d 3e 70 54 72 69 67 67  g = pTab->pTrigg
10f0: 65 72 3b 0a 20 20 20 20 70 54 61 62 2d 3e 70 54  er;.    pTab->pT
1100: 72 69 67 67 65 72 20 3d 20 30 3b 20 20 2f 2a 20  rigger = 0;  /* 
1110: 44 69 73 61 62 6c 65 20 61 6c 6c 20 74 72 69 67  Disable all trig
1120: 67 65 72 73 20 62 65 66 6f 72 65 20 72 65 62 75  gers before rebu
1130: 69 6c 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65  ilding the table
1140: 20 2a 2f 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73   */.  }.  rc = s
1150: 71 6c 69 74 65 5f 65 78 65 63 5f 70 72 69 6e 74  qlite_exec_print
1160: 66 28 70 44 61 74 61 2d 3e 64 62 2c 0a 20 20 20  f(pData->db,.   
1170: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
1180: 42 4c 45 20 73 71 6c 69 74 65 5f 78 20 41 53 20  BLE sqlite_x AS 
1190: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 27 25  SELECT * FROM '%
11a0: 71 27 3b 20 22 0a 20 20 20 20 22 44 45 4c 45 54  q'; ".    "DELET
11b0: 45 20 46 52 4f 4d 20 27 25 71 27 3b 20 22 0a 20  E FROM '%q'; ". 
11c0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
11d0: 27 25 71 27 20 53 45 4c 45 43 54 20 2a 20 46 52  '%q' SELECT * FR
11e0: 4f 4d 20 73 71 6c 69 74 65 5f 78 3b 20 22 0a 20  OM sqlite_x; ". 
11f0: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 73     "DROP TABLE s
1200: 71 6c 69 74 65 5f 78 3b 22 2c 0a 20 20 20 20 30  qlite_x;",.    0
1210: 2c 20 30 2c 20 26 7a 45 72 72 2c 20 61 72 67 76  , 0, &zErr, argv
1220: 5b 30 5d 2c 20 61 72 67 76 5b 30 5d 2c 20 61 72  [0], argv[0], ar
1230: 67 76 5b 30 5d 29 3b 0a 20 20 69 66 28 20 7a 45  gv[0]);.  if( zE
1240: 72 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rr ){.    sqlite
1250: 53 65 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d  SetString(pData-
1260: 3e 70 7a 45 72 72 4d 73 67 2c 20 7a 45 72 72 2c  >pzErrMsg, zErr,
1270: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f   0);.    sqlite_
1280: 66 72 65 65 6d 65 6d 28 7a 45 72 72 29 3b 0a 20  freemem(zErr);. 
1290: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 20 65   }..  /* If an e
12a0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 69 6e  rror occurred in
12b0: 20 74 68 65 20 53 51 4c 20 61 62 6f 76 65 2c 20   the SQL above, 
12c0: 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  then the transac
12d0: 74 69 6f 6e 20 77 69 6c 6c 0a 20 20 2a 2a 20 72  tion will.  ** r
12e0: 6f 6c 6c 62 61 63 6b 20 77 68 69 63 68 20 77 69  ollback which wi
12f0: 6c 6c 20 64 65 6c 65 74 65 20 74 68 65 20 69 6e  ll delete the in
1300: 74 65 72 6e 61 6c 20 73 79 6d 62 6f 6c 20 74 61  ternal symbol ta
1310: 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c  bles.  This will
1320: 0a 20 20 2a 2a 20 63 61 75 73 65 20 74 68 65 20  .  ** cause the 
1330: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 70  structure that p
1340: 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 62 65  Tab points to be
1350: 20 64 65 6c 65 74 65 64 2e 20 20 49 6e 20 63 61   deleted.  In ca
1360: 73 65 20 74 68 61 74 0a 20 20 2a 2a 20 68 61 70  se that.  ** hap
1370: 70 65 6e 65 64 2c 20 77 65 20 6e 65 65 64 20 74  pened, we need t
1380: 6f 20 72 65 66 65 74 63 68 20 70 54 61 62 2e 0a  o refetch pTab..
1390: 20 20 2a 2f 0a 20 20 70 54 61 62 20 3d 20 73 71    */.  pTab = sq
13a0: 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 70 44  liteFindTable(pD
13b0: 61 74 61 2d 3e 64 62 2c 20 61 72 67 76 5b 30 5d  ata->db, argv[0]
13c0: 29 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  );.  if( pTab ){
13d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
13e0: 69 74 65 53 74 72 49 43 6d 70 28 70 54 61 62 2d  iteStrICmp(pTab-
13f0: 3e 7a 4e 61 6d 65 2c 20 61 72 67 76 5b 30 5d 29  >zName, argv[0])
1400: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 54 61 62 2d  ==0 );.    pTab-
1410: 3e 70 54 72 69 67 67 65 72 20 3d 20 70 54 72 69  >pTrigger = pTri
1420: 67 3b 20 20 2f 2a 20 52 65 2d 65 6e 61 62 6c 65  g;  /* Re-enable
1430: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 7d   triggers */.  }
1440: 0a 20 20 72 65 74 75 72 6e 20 72 63 21 3d 53 51  .  return rc!=SQ
1450: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a  LITE_OK;.}..../*
1460: 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72  .** Attempt to r
1470: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
1480: 20 73 63 68 65 6d 61 20 61 6e 64 20 69 6e 69 74   schema and init
1490: 69 61 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c 0a  ialize internal.
14a0: 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
14b0: 65 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20  es.  Return one 
14c0: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 65  of the SQLITE_ e
14d0: 72 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a 2a  rror codes to.**
14e0: 20 69 6e 64 69 63 61 74 65 20 73 75 63 63 65 73   indicate succes
14f0: 73 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a 2a  s or failure..**
1500: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 64 61  .** After the da
1510: 74 61 62 61 73 65 20 69 73 20 69 6e 69 74 69 61  tabase is initia
1520: 6c 69 7a 65 64 2c 20 74 68 65 20 53 51 4c 49 54  lized, the SQLIT
1530: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 0a 2a 2a  E_Initialized.**
1540: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
1550: 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64 20 6f  he flags field o
1560: 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72  f the sqlite str
1570: 75 63 74 75 72 65 2e 20 20 41 6e 0a 2a 2a 20 61  ucture.  An.** a
1580: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
1590: 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  o initialize the
15a0: 20 64 61 74 61 62 61 73 65 20 61 73 20 73 6f 6f   database as soo
15b0: 6e 20 61 73 20 69 74 0a 2a 2a 20 69 73 20 6f 70  n as it.** is op
15c0: 65 6e 65 64 2e 20 20 49 66 20 74 68 61 74 20 66  ened.  If that f
15d0: 61 69 6c 73 20 28 70 65 72 68 61 70 73 20 62 65  ails (perhaps be
15e0: 63 61 75 73 65 20 61 6e 6f 74 68 65 72 20 70 72  cause another pr
15f0: 6f 63 65 73 73 0a 2a 2a 20 68 61 73 20 74 68 65  ocess.** has the
1600: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
1610: 61 62 6c 65 20 6c 6f 63 6b 65 64 29 20 74 68 61  able locked) tha
1620: 6e 20 61 6e 6f 74 68 65 72 20 61 74 74 65 6d 70  n another attemp
1630: 74 0a 2a 2a 20 69 73 20 6d 61 64 65 20 74 68 65  t.** is made the
1640: 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20   first time the 
1650: 64 61 74 61 62 61 73 65 20 69 73 20 61 63 63 65  database is acce
1660: 73 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ssed..*/.int sql
1670: 69 74 65 49 6e 69 74 28 73 71 6c 69 74 65 20 2a  iteInit(sqlite *
1680: 64 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  db, char **pzErr
1690: 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  Msg){.  int rc;.
16a0: 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72 4d    BtCursor *curM
16b0: 61 69 6e 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b  ain;.  int size;
16c0: 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
16d0: 20 20 63 68 61 72 20 2a 61 7a 41 72 67 5b 36 5d    char *azArg[6]
16e0: 3b 0a 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c  ;.  int meta[SQL
16f0: 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1700: 5d 3b 0a 20 20 50 61 72 73 65 20 73 50 61 72 73  ];.  Parse sPars
1710: 65 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  e;.  InitData in
1720: 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 0a 20 20  itData;..  /*.  
1730: 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  ** The master da
1740: 74 61 62 61 73 65 20 74 61 62 6c 65 20 68 61 73  tabase table has
1750: 20 61 20 73 74 72 75 63 74 75 72 65 20 6c 69 6b   a structure lik
1760: 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73 74  e this.  */.  st
1770: 61 74 69 63 20 63 68 61 72 20 6d 61 73 74 65 72  atic char master
1780: 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20  _schema[] = .   
1790: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
17a0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e  sqlite_master(\n
17b0: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
17c0: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
17d0: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
17e0: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
17f0: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1800: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1810: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
1820: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
1830: 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63 20 63  ".  ;.  static c
1840: 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  har temp_master_
1850: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
1860: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
1870: 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  BLE sqlite_temp_
1880: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1890: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
18a0: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
18b0: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
18c0: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
18d0: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
18e0: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
18f0: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
1900: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a  ".     ")".  ;..
1910: 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
1920: 6e 67 20 53 51 4c 20 77 69 6c 6c 20 72 65 61 64  ng SQL will read
1930: 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1940: 20 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c   the master tabl
1950: 65 73 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 72  es..  ** The fir
1960: 73 74 20 76 65 72 73 69 6f 6e 20 77 6f 72 6b 73  st version works
1970: 20 77 69 74 68 20 53 51 4c 69 74 65 20 66 69 6c   with SQLite fil
1980: 65 20 66 6f 72 6d 61 74 73 20 32 20 6f 72 20 67  e formats 2 or g
1990: 72 65 61 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  reater..  ** The
19a0: 20 73 65 63 6f 6e 64 20 76 65 72 73 69 6f 6e 20   second version 
19b0: 69 73 20 66 6f 72 20 66 6f 72 6d 61 74 20 31 20  is for format 1 
19c0: 66 69 6c 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  files..  **.  **
19d0: 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   Beginning with 
19e0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 32 2c 20 74  file format 2, t
19f0: 68 65 20 72 6f 77 69 64 20 66 6f 72 20 6e 65 77  he rowid for new
1a00: 20 74 61 62 6c 65 20 65 6e 74 72 69 65 73 0a 20   table entries. 
1a10: 20 2a 2a 20 28 69 6e 63 6c 75 64 69 6e 67 20 65   ** (including e
1a20: 6e 74 72 69 65 73 20 69 6e 20 73 71 6c 69 74 65  ntries in sqlite
1a30: 5f 6d 61 73 74 65 72 29 20 69 73 20 61 6e 20 69  _master) is an i
1a40: 6e 63 72 65 61 73 69 6e 67 20 69 6e 74 65 67 65  ncreasing intege
1a50: 72 2e 0a 20 20 2a 2a 20 53 6f 20 66 6f 72 20 66  r..  ** So for f
1a60: 69 6c 65 20 66 6f 72 6d 61 74 20 32 20 61 6e 64  ile format 2 and
1a70: 20 6c 61 74 65 72 2c 20 77 65 20 63 61 6e 20 70   later, we can p
1a80: 6c 61 79 20 62 61 63 6b 20 73 71 6c 69 74 65 5f  lay back sqlite_
1a90: 6d 61 73 74 65 72 0a 20 20 2a 2a 20 61 6e 64 20  master.  ** and 
1aa0: 61 6c 6c 20 74 68 65 20 43 52 45 41 54 45 20 73  all the CREATE s
1ab0: 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 61  tatements will a
1ac0: 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 69 67  ppear in the rig
1ad0: 68 74 20 6f 72 64 65 72 2e 0a 20 20 2a 2a 20 42  ht order..  ** B
1ae0: 75 74 20 77 69 74 68 20 66 69 6c 65 20 66 6f 72  ut with file for
1af0: 6d 61 74 20 31 2c 20 74 61 62 6c 65 20 65 6e 74  mat 1, table ent
1b00: 72 69 65 73 20 77 65 72 65 20 72 61 6e 64 6f 6d  ries were random
1b10: 20 61 6e 64 20 73 6f 20 77 65 0a 20 20 2a 2a 20   and so we.  ** 
1b20: 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 73 75 72  have to make sur
1b30: 65 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  e the CREATE TAB
1b40: 4c 45 73 20 6f 63 63 75 72 20 62 65 66 6f 72 65  LEs occur before
1b50: 20 74 68 65 69 72 20 63 6f 72 72 65 73 70 6f 6e   their correspon
1b60: 64 69 6e 67 0a 20 20 2a 2a 20 43 52 45 41 54 45  ding.  ** CREATE
1b70: 20 49 4e 44 45 58 73 2e 20 20 28 57 65 20 64 6f   INDEXs.  (We do
1b80: 6e 27 74 20 68 61 76 65 20 74 6f 20 64 65 61 6c  n't have to deal
1b90: 20 77 69 74 68 20 43 52 45 41 54 45 20 56 49 45   with CREATE VIE
1ba0: 57 20 6f 72 0a 20 20 2a 2a 20 43 52 45 41 54 45  W or.  ** CREATE
1bb0: 20 54 52 49 47 47 45 52 20 69 6e 20 66 69 6c 65   TRIGGER in file
1bc0: 20 66 6f 72 6d 61 74 20 31 20 62 65 63 61 75 73   format 1 becaus
1bd0: 65 20 74 68 6f 73 65 20 63 6f 6e 73 74 72 75 63  e those construc
1be0: 74 73 20 64 69 64 0a 20 20 2a 2a 20 6e 6f 74 20  ts did.  ** not 
1bf0: 65 78 69 73 74 20 74 68 65 6e 2e 29 20 0a 20 20  exist then.) .  
1c00: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  */.  static char
1c10: 20 69 6e 69 74 5f 73 63 72 69 70 74 5b 5d 20 3d   init_script[] =
1c20: 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74   .     "SELECT t
1c30: 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  ype, name, rootp
1c40: 61 67 65 2c 20 73 71 6c 2c 20 31 20 46 52 4f 4d  age, sql, 1 FROM
1c50: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
1c60: 74 65 72 20 22 0a 20 20 20 20 20 22 55 4e 49 4f  ter ".     "UNIO
1c70: 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 22 53 45  N ALL ".     "SE
1c80: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
1c90: 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20   rootpage, sql, 
1ca0: 30 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  0 FROM sqlite_ma
1cb0: 73 74 65 72 22 3b 0a 20 20 73 74 61 74 69 63 20  ster";.  static 
1cc0: 63 68 61 72 20 6f 6c 64 65 72 5f 69 6e 69 74 5f  char older_init_
1cd0: 73 63 72 69 70 74 5b 5d 20 3d 20 0a 20 20 20 20  script[] = .    
1ce0: 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e   "SELECT type, n
1cf0: 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
1d00: 71 6c 2c 20 31 20 46 52 4f 4d 20 73 71 6c 69 74  ql, 1 FROM sqlit
1d10: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 22 0a  e_temp_master ".
1d20: 20 20 20 20 20 22 55 4e 49 4f 4e 20 41 4c 4c 20       "UNION ALL 
1d30: 22 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74  ".     "SELECT t
1d40: 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  ype, name, rootp
1d50: 61 67 65 2c 20 73 71 6c 2c 20 30 20 46 52 4f 4d  age, sql, 0 FROM
1d60: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
1d70: 0a 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70  .     "WHERE typ
1d80: 65 3d 27 74 61 62 6c 65 27 20 22 0a 20 20 20 20  e='table' ".    
1d90: 20 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20   "UNION ALL ".  
1da0: 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c     "SELECT type,
1db0: 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
1dc0: 20 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71 6c   sql, 0 FROM sql
1dd0: 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
1de0: 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27 69    "WHERE type='i
1df0: 6e 64 65 78 27 22 3b 0a 0a 0a 20 20 2f 2a 20 43  ndex'";...  /* C
1e00: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
1e10: 65 6d 61 20 74 61 62 6c 65 73 3a 20 73 71 6c 69  ema tables: sqli
1e20: 74 65 5f 6d 61 73 74 65 72 20 61 6e 64 20 73 71  te_master and sq
1e30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
1e40: 0a 20 20 2a 2f 0a 20 20 61 7a 41 72 67 5b 30 5d  .  */.  azArg[0]
1e50: 20 3d 20 22 74 61 62 6c 65 22 3b 0a 20 20 61 7a   = "table";.  az
1e60: 41 72 67 5b 31 5d 20 3d 20 4d 41 53 54 45 52 5f  Arg[1] = MASTER_
1e70: 4e 41 4d 45 3b 0a 20 20 61 7a 41 72 67 5b 32 5d  NAME;.  azArg[2]
1e80: 20 3d 20 22 32 22 3b 0a 20 20 61 7a 41 72 67 5b   = "2";.  azArg[
1e90: 33 5d 20 3d 20 6d 61 73 74 65 72 5f 73 63 68 65  3] = master_sche
1ea0: 6d 61 3b 0a 20 20 61 7a 41 72 67 5b 34 5d 20 3d  ma;.  azArg[4] =
1eb0: 20 22 30 22 3b 0a 20 20 61 7a 41 72 67 5b 35 5d   "0";.  azArg[5]
1ec0: 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61 74 61   = 0;.  initData
1ed0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74  .db = db;.  init
1ee0: 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
1ef0: 70 7a 45 72 72 4d 73 67 3b 0a 20 20 73 71 6c 69  pzErrMsg;.  sqli
1f00: 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26  teInitCallback(&
1f10: 69 6e 69 74 44 61 74 61 2c 20 35 2c 20 61 7a 41  initData, 5, azA
1f20: 72 67 2c 20 30 29 3b 0a 20 20 70 54 61 62 20 3d  rg, 0);.  pTab =
1f30: 20 73 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65   sqliteFindTable
1f40: 28 64 62 2c 20 4d 41 53 54 45 52 5f 4e 41 4d 45  (db, MASTER_NAME
1f50: 29 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  );.  if( pTab ){
1f60: 0a 20 20 20 20 70 54 61 62 2d 3e 72 65 61 64 4f  .    pTab->readO
1f70: 6e 6c 79 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 61  nly = 1;.  }.  a
1f80: 7a 41 72 67 5b 31 5d 20 3d 20 54 45 4d 50 5f 4d  zArg[1] = TEMP_M
1f90: 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 61 7a  ASTER_NAME;.  az
1fa0: 41 72 67 5b 33 5d 20 3d 20 74 65 6d 70 5f 6d 61  Arg[3] = temp_ma
1fb0: 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 61  ster_schema;.  a
1fc0: 7a 41 72 67 5b 34 5d 20 3d 20 22 31 22 3b 0a 20  zArg[4] = "1";. 
1fd0: 20 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62   sqliteInitCallb
1fe0: 61 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20 35  ack(&initData, 5
1ff0: 2c 20 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 70  , azArg, 0);.  p
2000: 54 61 62 20 3d 20 73 71 6c 69 74 65 46 69 6e 64  Tab = sqliteFind
2010: 54 61 62 6c 65 28 64 62 2c 20 54 45 4d 50 5f 4d  Table(db, TEMP_M
2020: 41 53 54 45 52 5f 4e 41 4d 45 29 3b 0a 20 20 69  ASTER_NAME);.  i
2030: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 70  f( pTab ){.    p
2040: 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20  Tab->readOnly = 
2050: 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 72 65  1;.  }..  /* Cre
2060: 61 74 65 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ate a cursor to 
2070: 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61 73  hold the databas
2080: 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20 69 66  e open.  */.  if
2090: 28 20 64 62 2d 3e 70 42 65 3d 3d 30 20 29 20 72  ( db->pBe==0 ) r
20a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
20b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 42 74  .  rc = sqliteBt
20c0: 72 65 65 43 75 72 73 6f 72 28 64 62 2d 3e 70 42  reeCursor(db->pB
20d0: 65 2c 20 32 2c 20 30 2c 20 26 63 75 72 4d 61 69  e, 2, 0, &curMai
20e0: 6e 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  n);.  if( rc ){.
20f0: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
2100: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71  ing(pzErrMsg, sq
2110: 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72 69 6e  lite_error_strin
2120: 67 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 73  g(rc), 0);.    s
2130: 71 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e  qliteResetIntern
2140: 61 6c 53 63 68 65 6d 61 28 64 62 29 3b 0a 20 20  alSchema(db);.  
2150: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d    return rc;.  }
2160: 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 64  ..  /* Get the d
2170: 61 74 61 62 61 73 65 20 6d 65 74 61 20 69 6e 66  atabase meta inf
2180: 6f 72 6d 61 74 69 6f 6e 0a 20 20 2a 2f 0a 20 20  ormation.  */.  
2190: 72 63 20 3d 20 73 71 6c 69 74 65 42 74 72 65 65  rc = sqliteBtree
21a0: 47 65 74 4d 65 74 61 28 64 62 2d 3e 70 42 65 2c  GetMeta(db->pBe,
21b0: 20 6d 65 74 61 29 3b 0a 20 20 69 66 28 20 72 63   meta);.  if( rc
21c0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 65   ){.    sqliteSe
21d0: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
21e0: 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73  , sqlite_error_s
21f0: 74 72 69 6e 67 28 72 63 29 2c 20 30 29 3b 0a 20  tring(rc), 0);. 
2200: 20 20 20 73 71 6c 69 74 65 52 65 73 65 74 49 6e     sqliteResetIn
2210: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 29  ternalSchema(db)
2220: 3b 0a 20 20 20 20 73 71 6c 69 74 65 42 74 72 65  ;.    sqliteBtre
2230: 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72  eCloseCursor(cur
2240: 4d 61 69 6e 29 3b 0a 20 20 20 20 72 65 74 75 72  Main);.    retur
2250: 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  n rc;.  }.  db->
2260: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
2270: 6d 65 74 61 5b 31 5d 3b 0a 20 20 64 62 2d 3e 6e  meta[1];.  db->n
2280: 65 78 74 5f 63 6f 6f 6b 69 65 20 3d 20 64 62 2d  ext_cookie = db-
2290: 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 0a  >schema_cookie;.
22a0: 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61    db->file_forma
22b0: 74 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20 20 73  t = meta[2];.  s
22c0: 69 7a 65 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a 20  ize = meta[3];. 
22d0: 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20   if( size==0 ){ 
22e0: 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45 53  size = MAX_PAGES
22f0: 3b 20 7d 0a 20 20 64 62 2d 3e 63 61 63 68 65 5f  ; }.  db->cache_
2300: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 73  size = size;.  s
2310: 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61 63  qliteBtreeSetCac
2320: 68 65 53 69 7a 65 28 64 62 2d 3e 70 42 65 2c 20  heSize(db->pBe, 
2330: 73 69 7a 65 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  size);..  /*.  *
2340: 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d 61  *     file_forma
2350: 74 3d 3d 31 20 20 20 20 56 65 72 73 69 6f 6e 20  t==1    Version 
2360: 32 2e 31 2e 30 2e 0a 20 20 2a 2a 20 20 20 20 20  2.1.0..  **     
2370: 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 32 20 20  file_format==2  
2380: 20 20 56 65 72 73 69 6f 6e 20 32 2e 32 2e 30 2e    Version 2.2.0.
2390: 20 41 64 64 20 73 75 70 70 6f 72 74 20 66 6f 72   Add support for
23a0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
23b0: 20 4b 45 59 2e 0a 20 20 2a 2a 20 20 20 20 20 66   KEY..  **     f
23c0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 33 20 20 20  ile_format==3   
23d0: 20 56 65 72 73 69 6f 6e 20 32 2e 36 2e 30 2e 20   Version 2.6.0. 
23e0: 46 69 78 20 65 6d 70 74 79 2d 73 74 72 69 6e 67  Fix empty-string
23f0: 20 69 6e 64 65 78 20 62 75 67 2e 0a 20 20 2a 2a   index bug..  **
2400: 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74       file_format
2410: 3d 3d 34 20 20 20 20 56 65 72 73 69 6f 6e 20 32  ==4    Version 2
2420: 2e 37 2e 30 2e 20 41 64 64 20 73 75 70 70 6f 72  .7.0. Add suppor
2430: 74 20 66 6f 72 20 73 65 70 61 72 61 74 65 20 6e  t for separate n
2440: 75 6d 65 72 69 63 20 61 6e 64 0a 20 20 2a 2a 20  umeric and.  ** 
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 20 74 65 78 74 20 64 61 74 61 74        text datat
2470: 79 70 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ypes..  */.  if(
2480: 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74   db->file_format
2490: 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ==0 ){.    /* Th
24a0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 74 68  is happens if th
24b0: 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20 69  e database was i
24c0: 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 20 2a  nitially empty *
24d0: 2f 0a 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66  /.    db->file_f
24e0: 6f 72 6d 61 74 20 3d 20 34 3b 0a 20 20 7d 65 6c  ormat = 4;.  }el
24f0: 73 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f  se if( db->file_
2500: 66 6f 72 6d 61 74 3e 34 20 29 7b 0a 20 20 20 20  format>4 ){.    
2510: 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65  sqliteBtreeClose
2520: 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b  Cursor(curMain);
2530: 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74  .    sqliteSetSt
2540: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2550: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65  unsupported file
2560: 20 66 6f 72 6d 61 74 22 2c 20 30 29 3b 0a 20 20   format", 0);.  
2570: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2580: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ERROR;.  }..  /*
2590: 20 52 65 61 64 20 74 68 65 20 73 63 68 65 6d 61   Read the schema
25a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
25b0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
25c0: 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20 6d 65 6d  ables.  */.  mem
25d0: 73 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c 20  set(&sParse, 0, 
25e0: 73 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29 3b  sizeof(sParse));
25f0: 0a 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20 64  .  sParse.db = d
2600: 62 3b 0a 20 20 73 50 61 72 73 65 2e 70 42 65 20  b;.  sParse.pBe 
2610: 3d 20 64 62 2d 3e 70 42 65 3b 0a 20 20 73 50 61  = db->pBe;.  sPa
2620: 72 73 65 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20  rse.xCallback = 
2630: 73 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62 61  sqliteInitCallba
2640: 63 6b 3b 0a 20 20 73 50 61 72 73 65 2e 70 41 72  ck;.  sParse.pAr
2650: 67 20 3d 20 28 76 6f 69 64 2a 29 26 69 6e 69 74  g = (void*)&init
2660: 44 61 74 61 3b 0a 20 20 73 50 61 72 73 65 2e 69  Data;.  sParse.i
2670: 6e 69 74 46 6c 61 67 20 3d 20 31 3b 0a 20 20 73  nitFlag = 1;.  s
2680: 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72 28 26  qliteRunParser(&
2690: 73 50 61 72 73 65 2c 0a 20 20 20 20 20 20 64 62  sParse,.      db
26a0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 3d 32  ->file_format>=2
26b0: 20 3f 20 69 6e 69 74 5f 73 63 72 69 70 74 20 3a   ? init_script :
26c0: 20 6f 6c 64 65 72 5f 69 6e 69 74 5f 73 63 72 69   older_init_scri
26d0: 70 74 2c 0a 20 20 20 20 20 20 70 7a 45 72 72 4d  pt,.      pzErrM
26e0: 73 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  sg);.  if( sqlit
26f0: 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  e_malloc_failed 
2700: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74  ){.    sqliteSet
2710: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
2720: 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
2730: 2c 20 30 29 3b 0a 20 20 20 20 73 50 61 72 73 65  , 0);.    sParse
2740: 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d  .rc = SQLITE_NOM
2750: 45 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 42 74  EM;.    sqliteBt
2760: 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e  reeRollback(db->
2770: 70 42 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  pBe);.    sqlite
2780: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2790: 65 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20 69  ema(db);.  }.  i
27a0: 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51  f( sParse.rc==SQ
27b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64  LITE_OK ){.    d
27c0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
27d0: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a  TE_Initialized;.
27e0: 20 20 20 20 73 71 6c 69 74 65 43 6f 6d 6d 69 74      sqliteCommit
27f0: 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
2800: 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
2810: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
2820: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2830: 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 52 65  ed;.    sqliteRe
2840: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
2850: 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  a(db);.  }.  sql
2860: 69 74 65 42 74 72 65 65 43 6c 6f 73 65 43 75 72  iteBtreeCloseCur
2870: 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20  sor(curMain);.  
2880: 72 65 74 75 72 6e 20 73 50 61 72 73 65 2e 72 63  return sParse.rc
2890: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76  ;.}../*.** The v
28a0: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ersion of the li
28b0: 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63  brary.*/.const c
28c0: 68 61 72 20 72 63 73 69 64 5b 5d 20 3d 20 22 40  har rcsid[] = "@
28d0: 28 23 29 20 5c 30 34 34 49 64 3a 20 53 51 4c 69  (#) \044Id: SQLi
28e0: 74 65 20 76 65 72 73 69 6f 6e 20 22 20 53 51 4c  te version " SQL
28f0: 49 54 45 5f 56 45 52 53 49 4f 4e 20 22 20 24 22  ITE_VERSION " $"
2900: 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  ;.const char sql
2910: 69 74 65 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20  ite_version[] = 
2920: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a  SQLITE_VERSION;.
2930: 0a 2f 2a 0a 2a 2a 20 44 6f 65 73 20 74 68 65 20  ./*.** Does the 
2940: 6c 69 62 72 61 72 79 20 65 78 70 65 63 74 20 64  library expect d
2950: 61 74 61 20 74 6f 20 62 65 20 65 6e 63 6f 64 65  ata to be encode
2960: 64 20 61 73 20 55 54 46 2d 38 20 6f 72 20 69 73  d as UTF-8 or is
2970: 6f 38 38 35 39 3f 20 20 54 68 65 0a 2a 2a 20 66  o8859?  The.** f
2980: 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20  ollowing global 
2990: 63 6f 6e 73 74 61 6e 74 20 61 6c 77 61 79 73 20  constant always 
29a0: 6c 65 74 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f  lets us know..*/
29b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
29c0: 54 46 38 0a 63 6f 6e 73 74 20 63 68 61 72 20 73  TF8.const char s
29d0: 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d  qlite_encoding[]
29e0: 20 3d 20 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73   = "UTF-8";.#els
29f0: 65 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  e.const char sql
2a00: 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d  ite_encoding[] =
2a10: 20 22 69 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64   "iso8859";.#end
2a20: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  if../*.** Open a
2a30: 20 6e 65 77 20 53 51 4c 69 74 65 20 64 61 74 61   new SQLite data
2a40: 62 61 73 65 2e 20 20 43 6f 6e 73 74 72 75 63 74  base.  Construct
2a50: 20 61 6e 20 22 73 71 6c 69 74 65 22 20 73 74 72   an "sqlite" str
2a60: 75 63 74 75 72 65 20 74 6f 20 64 65 66 69 6e 65  ucture to define
2a70: 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 20 6f 66  .** the state of
2a80: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 61   this database a
2a90: 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e  nd return a poin
2aa0: 74 65 72 20 74 6f 20 74 68 61 74 20 73 74 72 75  ter to that stru
2ab0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  cture..**.** An 
2ac0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
2ad0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68  to initialize th
2ae0: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
2af0: 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2b00: 0a 2a 2a 20 68 6f 6c 64 20 74 68 65 20 64 61 74  .** hold the dat
2b10: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 42  abase schema.  B
2b20: 75 74 20 69 66 20 74 68 69 73 20 66 61 69 6c 73  ut if this fails
2b30: 20 28 62 65 63 61 75 73 65 20 74 68 65 20 73 63   (because the sc
2b40: 68 65 6d 61 20 66 69 6c 65 0a 2a 2a 20 69 73 20  hema file.** is 
2b50: 6c 6f 63 6b 65 64 29 20 74 68 65 6e 20 74 68 61  locked) then tha
2b60: 74 20 73 74 65 70 20 69 73 20 64 65 66 65 72 72  t step is deferr
2b70: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72  ed until the fir
2b80: 73 74 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71  st call to.** sq
2b90: 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  lite_exec()..*/.
2ba0: 73 71 6c 69 74 65 20 2a 73 71 6c 69 74 65 5f 6f  sqlite *sqlite_o
2bb0: 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  pen(const char *
2bc0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 6d  zFilename, int m
2bd0: 6f 64 65 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72  ode, char **pzEr
2be0: 72 4d 73 67 29 7b 0a 20 20 73 71 6c 69 74 65 20  rMsg){.  sqlite 
2bf0: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  *db;.  int rc;..
2c00: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68    /* Allocate th
2c10: 65 20 73 71 6c 69 74 65 20 64 61 74 61 20 73 74  e sqlite data st
2c20: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20  ructure */.  db 
2c30: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20  = sqliteMalloc( 
2c40: 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 29 20 29  sizeof(sqlite) )
2c50: 3b 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67  ;.  if( pzErrMsg
2c60: 20 29 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30   ) *pzErrMsg = 0
2c70: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20  ;.  if( db==0 ) 
2c80: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f  goto no_mem_on_o
2c90: 70 65 6e 3b 0a 20 20 73 71 6c 69 74 65 48 61 73  pen;.  sqliteHas
2ca0: 68 49 6e 69 74 28 26 64 62 2d 3e 74 62 6c 48 61  hInit(&db->tblHa
2cb0: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
2cc0: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71  STRING, 0);.  sq
2cd0: 6c 69 74 65 48 61 73 68 49 6e 69 74 28 26 64 62  liteHashInit(&db
2ce0: 2d 3e 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54  ->idxHash, SQLIT
2cf0: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
2d00: 29 3b 0a 20 20 73 71 6c 69 74 65 48 61 73 68 49  );.  sqliteHashI
2d10: 6e 69 74 28 26 64 62 2d 3e 74 72 69 67 48 61 73  nit(&db->trigHas
2d20: 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  h, SQLITE_HASH_S
2d30: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c  TRING, 0);.  sql
2d40: 69 74 65 48 61 73 68 49 6e 69 74 28 26 64 62 2d  iteHashInit(&db-
2d50: 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48  >aFunc, SQLITE_H
2d60: 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a  ASH_STRING, 1);.
2d70: 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e 69 74    sqliteHashInit
2d80: 28 26 64 62 2d 3e 61 46 4b 65 79 2c 20 53 51 4c  (&db->aFKey, SQL
2d90: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
2da0: 20 31 29 3b 0a 20 20 64 62 2d 3e 6f 6e 45 72 72   1);.  db->onErr
2db0: 6f 72 20 3d 20 4f 45 5f 44 65 66 61 75 6c 74 3b  or = OE_Default;
2dc0: 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52  .  db->priorNewR
2dd0: 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  owid = 0;.  db->
2de0: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
2df0: 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 0a 20 20  AGIC_BUSY;.  .  
2e00: 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b  /* Open the back
2e10: 65 6e 64 20 64 61 74 61 62 61 73 65 20 64 72 69  end database dri
2e20: 76 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ver */.  rc = sq
2e30: 6c 69 74 65 42 74 72 65 65 4f 70 65 6e 28 7a 46  liteBtreeOpen(zF
2e40: 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f  ilename, 0, MAX_
2e50: 50 41 47 45 53 2c 20 26 64 62 2d 3e 70 42 65 29  PAGES, &db->pBe)
2e60: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2e70: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 77 69  TE_OK ){.    swi
2e80: 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 20  tch( rc ){.     
2e90: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
2ea0: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
2eb0: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75  ing(pzErrMsg, "u
2ec0: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
2ed0: 74 61 62 61 73 65 3a 20 22 2c 20 7a 46 69 6c 65  tabase: ", zFile
2ee0: 6e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  name, 0);.      
2ef0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
2f00: 74 65 46 72 65 65 28 64 62 29 3b 0a 20 20 20 20  teFree(db);.    
2f10: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
2f20: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  (pzErrMsg);.    
2f30: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a 20  return 0;.  }.. 
2f40: 20 2f 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72   /* Attempt to r
2f50: 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 2a  ead the schema *
2f60: 2f 0a 20 20 73 71 6c 69 74 65 52 65 67 69 73 74  /.  sqliteRegist
2f70: 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
2f80: 6e 73 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73  ns(db);.  rc = s
2f90: 71 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a  qliteInit(db, pz
2fa0: 45 72 72 4d 73 67 29 3b 0a 20 20 64 62 2d 3e 6d  ErrMsg);.  db->m
2fb0: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
2fc0: 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20  GIC_OPEN;.  if( 
2fd0: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61  sqlite_malloc_fa
2fe0: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
2ff0: 74 65 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20  te_close(db);.  
3000: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e    goto no_mem_on
3010: 5f 6f 70 65 6e 3b 0a 20 20 7d 65 6c 73 65 20 69  _open;.  }else i
3020: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
3030: 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42   && rc!=SQLITE_B
3040: 55 53 59 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  USY ){.    sqlit
3050: 65 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20  e_close(db);.   
3060: 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f   sqliteStrReallo
3070: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  c(pzErrMsg);.   
3080: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c   return 0;.  }el
3090: 73 65 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20  se if( pzErrMsg 
30a0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65  ){.    sqliteFre
30b0: 65 28 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  e(*pzErrMsg);.  
30c0: 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b    *pzErrMsg = 0;
30d0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
30e0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  e database is in
30f0: 20 66 6f 72 6d 61 74 73 20 31 20 6f 72 20 32 2c   formats 1 or 2,
3100: 20 74 68 65 6e 20 75 70 67 72 61 64 65 20 69 74   then upgrade it
3110: 20 74 6f 0a 20 20 2a 2a 20 76 65 72 73 69 6f 6e   to.  ** version
3120: 20 33 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 72   3.  This will r
3130: 65 63 6f 6e 73 74 72 75 63 74 20 61 6c 6c 20 69  econstruct all i
3140: 6e 64 69 63 65 73 2e 20 20 49 66 20 74 68 65 0a  ndices.  If the.
3150: 20 20 2a 2a 20 75 70 67 72 61 64 65 20 66 61 69    ** upgrade fai
3160: 6c 73 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f  ls for any reaso
3170: 6e 20 28 65 78 3a 20 6f 75 74 20 6f 66 20 64 69  n (ex: out of di
3180: 73 6b 20 73 70 61 63 65 2c 20 64 61 74 61 62 61  sk space, databa
3190: 73 65 0a 20 20 2a 2a 20 69 73 20 72 65 61 64 20  se.  ** is read 
31a0: 6f 6e 6c 79 2c 20 69 6e 74 65 72 72 75 70 74 20  only, interrupt 
31b0: 72 65 63 65 69 76 65 2c 20 65 74 63 2e 29 20 74  receive, etc.) t
31c0: 68 65 6e 20 72 65 66 75 73 65 20 74 6f 20 6f 70  hen refuse to op
31d0: 65 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72  en..  */.  if( r
31e0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
31f0: 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c  db->file_format<
3200: 33 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  3 ){.    char *z
3210: 45 72 72 20 3d 20 30 3b 0a 20 20 20 20 49 6e 69  Err = 0;.    Ini
3220: 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
3230: 20 20 20 20 69 6e 74 20 6d 65 74 61 5b 53 51 4c      int meta[SQL
3240: 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
3250: 5d 3b 0a 0a 20 20 20 20 69 6e 69 74 44 61 74 61  ];..    initData
3260: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
3270: 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
3280: 3d 20 26 7a 45 72 72 3b 0a 20 20 20 20 64 62 2d  = &zErr;.    db-
3290: 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 33  >file_format = 3
32a0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
32b0: 65 5f 65 78 65 63 28 64 62 2c 0a 20 20 20 20 20  e_exec(db,.     
32c0: 20 22 42 45 47 49 4e 3b 20 53 45 4c 45 43 54 20   "BEGIN; SELECT 
32d0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
32e0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
32f0: 70 65 3d 27 74 61 62 6c 65 27 3b 22 2c 0a 20 20  pe='table';",.  
3300: 20 20 20 20 75 70 67 72 61 64 65 5f 33 5f 63 61      upgrade_3_ca
3310: 6c 6c 62 61 63 6b 2c 0a 20 20 20 20 20 20 26 69  llback,.      &i
3320: 6e 69 74 44 61 74 61 2c 0a 20 20 20 20 20 20 26  nitData,.      &
3330: 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28 20 72  zErr);.    if( r
3340: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
3350: 20 20 20 20 20 20 73 71 6c 69 74 65 42 74 72 65        sqliteBtre
3360: 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 70 42 65  eGetMeta(db->pBe
3370: 2c 20 6d 65 74 61 29 3b 0a 20 20 20 20 20 20 6d  , meta);.      m
3380: 65 74 61 5b 32 5d 20 3d 20 34 3b 0a 20 20 20 20  eta[2] = 4;.    
3390: 20 20 73 71 6c 69 74 65 42 74 72 65 65 55 70 64    sqliteBtreeUpd
33a0: 61 74 65 4d 65 74 61 28 64 62 2d 3e 70 42 65 2c  ateMeta(db->pBe,
33b0: 20 6d 65 74 61 29 3b 0a 20 20 20 20 20 20 73 71   meta);.      sq
33c0: 6c 69 74 65 5f 65 78 65 63 28 64 62 2c 20 22 43  lite_exec(db, "C
33d0: 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29  OMMIT", 0, 0, 0)
33e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
33f0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
3400: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 65 74  .      sqliteSet
3410: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
3420: 20 0a 20 20 20 20 20 20 20 20 22 75 6e 61 62 6c   .        "unabl
3430: 65 20 74 6f 20 75 70 67 72 61 64 65 20 64 61 74  e to upgrade dat
3440: 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 65 72  abase to the ver
3450: 73 69 6f 6e 20 32 2e 36 20 66 6f 72 6d 61 74 22  sion 2.6 format"
3460: 2c 0a 20 20 20 20 20 20 20 20 7a 45 72 72 20 3f  ,.        zErr ?
3470: 20 22 3a 20 22 20 3a 20 30 2c 20 7a 45 72 72 2c   ": " : 0, zErr,
3480: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
3490: 65 5f 66 72 65 65 6d 65 6d 28 7a 45 72 72 29 3b  e_freemem(zErr);
34a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 74 72  .      sqliteStr
34b0: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
34c0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 5f  );.      sqlite_
34d0: 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 20  close(db);.     
34e0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
34f0: 0a 20 20 20 20 73 71 6c 69 74 65 5f 66 72 65 65  .    sqlite_free
3500: 6d 65 6d 28 7a 45 72 72 29 3b 0a 20 20 7d 0a 0a  mem(zErr);.  }..
3510: 20 20 2f 2a 20 52 65 74 75 72 6e 20 61 20 70 6f    /* Return a po
3520: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 65 77  inter to the new
3530: 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61  ly opened databa
3540: 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
3550: 20 20 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f    return db;..no
3560: 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20  _mem_on_open:.  
3570: 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28  sqliteSetString(
3580: 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f  pzErrMsg, "out o
3590: 66 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20  f memory", 0);. 
35a0: 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f   sqliteStrReallo
35b0: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72  c(pzErrMsg);.  r
35c0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
35d0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57  * Return the ROW
35e0: 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  ID of the most r
35f0: 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a  ecent insert.*/.
3600: 69 6e 74 20 73 71 6c 69 74 65 5f 6c 61 73 74 5f  int sqlite_last_
3610: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 73 71 6c  insert_rowid(sql
3620: 69 74 65 20 2a 64 62 29 7b 0a 20 20 72 65 74 75  ite *db){.  retu
3630: 72 6e 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  rn db->lastRowid
3640: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
3650: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
3660: 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 6d  changes in the m
3670: 6f 73 74 20 72 65 63 65 6e 74 20 63 61 6c 6c 20  ost recent call 
3680: 74 6f 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29  to sqlite_exec()
3690: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f  ..*/.int sqlite_
36a0: 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a  changes(sqlite *
36b0: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
36c0: 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a  ->nChange;.}../*
36d0: 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69  .** Close an exi
36e0: 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74  sting SQLite dat
36f0: 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71  abase.*/.void sq
3700: 6c 69 74 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74  lite_close(sqlit
3710: 65 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  e *db){.  HashEl
3720: 65 6d 20 2a 69 3b 0a 20 20 69 66 28 20 73 71 6c  em *i;.  if( sql
3730: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
3740: 62 29 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65  b) || sqliteSafe
3750: 74 79 4f 6e 28 64 62 29 20 29 7b 20 72 65 74 75  tyOn(db) ){ retu
3760: 72 6e 3b 20 7d 0a 20 20 64 62 2d 3e 6d 61 67 69  rn; }.  db->magi
3770: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
3780: 5f 43 4c 4f 53 45 44 3b 0a 20 20 73 71 6c 69 74  _CLOSED;.  sqlit
3790: 65 42 74 72 65 65 43 6c 6f 73 65 28 64 62 2d 3e  eBtreeClose(db->
37a0: 70 42 65 29 3b 0a 20 20 73 71 6c 69 74 65 52 65  pBe);.  sqliteRe
37b0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
37c0: 61 28 64 62 29 3b 0a 20 20 69 66 28 20 64 62 2d  a(db);.  if( db-
37d0: 3e 70 42 65 54 65 6d 70 20 29 7b 0a 20 20 20 20  >pBeTemp ){.    
37e0: 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65  sqliteBtreeClose
37f0: 28 64 62 2d 3e 70 42 65 54 65 6d 70 29 3b 0a 20  (db->pBeTemp);. 
3800: 20 7d 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74   }.  for(i=sqlit
3810: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
3820: 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c  aFunc); i; i=sql
3830: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
3840: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
3850: 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20  unc, *pNext;.   
3860: 20 66 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75   for(pFunc = (Fu
3870: 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73  ncDef*)sqliteHas
3880: 68 44 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b  hData(i); pFunc;
3890: 20 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20   pFunc=pNext){. 
38a0: 20 20 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75       pNext = pFu
38b0: 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nc->pNext;.     
38c0: 20 73 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e   sqliteFree(pFun
38d0: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  c);.    }.  }.  
38e0: 73 71 6c 69 74 65 48 61 73 68 43 6c 65 61 72 28  sqliteHashClear(
38f0: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73  &db->aFunc);.  s
3900: 71 6c 69 74 65 48 61 73 68 43 6c 65 61 72 28 26  qliteHashClear(&
3910: 64 62 2d 3e 61 46 4b 65 79 29 3b 0a 20 20 73 71  db->aFKey);.  sq
3920: 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 7d 0a  liteFree(db);.}.
3930: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  ./*.** Return TR
3940: 55 45 20 69 66 20 74 68 65 20 67 69 76 65 6e 20  UE if the given 
3950: 53 51 4c 20 73 74 72 69 6e 67 20 65 6e 64 73 20  SQL string ends 
3960: 69 6e 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2e 0a  in a semicolon..
3970: 2a 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 68 61  **.** Special ha
3980: 6e 64 6c 69 6e 67 20 69 73 20 72 65 71 75 69 72  ndling is requir
3990: 65 20 66 6f 72 20 43 52 45 41 54 45 20 54 52 49  e for CREATE TRI
39a0: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 73 2e  GGER statements.
39b0: 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 74 68 65  .** Whenever the
39c0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
39d0: 6b 65 79 77 6f 72 64 73 20 61 72 65 20 73 65 65  keywords are see
39e0: 6e 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  n, the statement
39f0: 0a 2a 2a 20 6d 75 73 74 20 65 6e 64 20 77 69 74  .** must end wit
3a00: 68 20 22 3b 45 4e 44 3b 22 2e 0a 2a 2f 0a 69 6e  h ";END;"..*/.in
3a10: 74 20 73 71 6c 69 74 65 5f 63 6f 6d 70 6c 65 74  t sqlite_complet
3a20: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53  e(const char *zS
3a30: 71 6c 29 7b 0a 20 20 69 6e 74 20 69 73 43 6f 6d  ql){.  int isCom
3a40: 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20 69 6e 74  plete = 1;.  int
3a50: 20 72 65 71 75 69 72 65 45 6e 64 20 3d 20 30 3b   requireEnd = 0;
3a60: 0a 20 20 69 6e 74 20 73 65 65 6e 54 65 78 74 20  .  int seenText 
3a70: 3d 20 30 3b 0a 20 20 69 6e 74 20 73 65 65 6e 43  = 0;.  int seenC
3a80: 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 77 68 69  reate = 0;.  whi
3a90: 6c 65 28 20 2a 7a 53 71 6c 20 29 7b 0a 20 20 20  le( *zSql ){.   
3aa0: 20 73 77 69 74 63 68 28 20 2a 7a 53 71 6c 20 29   switch( *zSql )
3ab0: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27 3b 27  {.      case ';'
3ac0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f  : {.        isCo
3ad0: 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20 20 20  mplete = 1;.    
3ae0: 20 20 20 20 73 65 65 6e 54 65 78 74 20 3d 20 31      seenText = 1
3af0: 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43 72  ;.        seenCr
3b00: 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  eate = 0;.      
3b10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
3b20: 0a 20 20 20 20 20 20 63 61 73 65 20 27 20 27 3a  .      case ' ':
3b30: 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c 74 27  .      case '\t'
3b40: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c 6e  :.      case '\n
3b50: 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c  ':.      case '\
3b60: 66 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 62 72  f': {.        br
3b70: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
3b80: 20 20 20 63 61 73 65 20 27 5b 27 3a 20 7b 0a 20     case '[': {. 
3b90: 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74         isComplet
3ba0: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  e = 0;.        s
3bb0: 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20 20  eenText = 1;.   
3bc0: 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65 20       seenCreate 
3bd0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71  = 0;.        zSq
3be0: 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69  l++;.        whi
3bf0: 6c 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53  le( *zSql && *zS
3c00: 71 6c 21 3d 27 5d 27 20 29 7b 20 7a 53 71 6c 2b  ql!=']' ){ zSql+
3c10: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  +; }.        if(
3c20: 20 2a 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75   *zSql==0 ) retu
3c30: 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72  rn 0;.        br
3c40: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
3c50: 20 20 20 63 61 73 65 20 27 22 27 3a 0a 20 20 20     case '"':.   
3c60: 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20 7b 0a     case '\'': {.
3c70: 20 20 20 20 20 20 20 20 69 6e 74 20 63 20 3d 20          int c = 
3c80: 2a 7a 53 71 6c 3b 0a 20 20 20 20 20 20 20 20 69  *zSql;.        i
3c90: 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20  sComplete = 0;. 
3ca0: 20 20 20 20 20 20 20 73 65 65 6e 54 65 78 74 20         seenText 
3cb0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65 65  = 1;.        see
3cc0: 6e 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 20  nCreate = 0;.   
3cd0: 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20       zSql++;.   
3ce0: 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53 71       while( *zSq
3cf0: 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 63 20 29 7b  l && *zSql!=c ){
3d00: 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20 20   zSql++; }.     
3d10: 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30 20     if( *zSql==0 
3d20: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
3d30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3d40: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27 2d   }.      case '-
3d50: 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ': {.        if(
3d60: 20 7a 53 71 6c 5b 31 5d 21 3d 27 2d 27 20 29 7b   zSql[1]!='-' ){
3d70: 0a 20 20 20 20 20 20 20 20 20 20 69 73 43 6f 6d  .          isCom
3d80: 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20 20  plete = 0;.     
3d90: 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65 20       seenCreate 
3da0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
3db0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
3dc0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
3dd0: 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27  zSql && *zSql!='
3de0: 5c 6e 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d  \n' ){ zSql++; }
3df0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53  .        if( *zS
3e00: 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 73  ql==0 ) return s
3e10: 65 65 6e 54 65 78 74 20 26 26 20 69 73 43 6f 6d  eenText && isCom
3e20: 70 6c 65 74 65 20 26 26 20 72 65 71 75 69 72 65  plete && require
3e30: 45 6e 64 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20  End==0;.        
3e40: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
3e50: 20 20 20 20 20 63 61 73 65 20 27 63 27 3a 0a 20       case 'c':. 
3e60: 20 20 20 20 20 63 61 73 65 20 27 43 27 3a 20 7b       case 'C': {
3e70: 0a 20 20 20 20 20 20 20 20 73 65 65 6e 54 65 78  .        seenTex
3e80: 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
3e90: 66 28 20 21 69 73 43 6f 6d 70 6c 65 74 65 20 29  f( !isComplete )
3ea0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
3eb0: 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a  isComplete = 0;.
3ec0: 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
3ed0: 74 65 53 74 72 4e 49 43 6d 70 28 7a 53 71 6c 2c  teStrNICmp(zSql,
3ee0: 20 22 63 72 65 61 74 65 22 2c 20 36 29 21 3d 30   "create", 6)!=0
3ef0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
3f00: 20 20 69 66 28 20 21 69 73 73 70 61 63 65 28 7a    if( !isspace(z
3f10: 53 71 6c 5b 36 5d 29 20 29 20 62 72 65 61 6b 3b  Sql[6]) ) break;
3f20: 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20 2b 3d  .        zSql +=
3f30: 20 35 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e   5;.        seen
3f40: 43 72 65 61 74 65 20 3d 20 31 3b 0a 20 20 20 20  Create = 1;.    
3f50: 20 20 20 20 77 68 69 6c 65 28 20 69 73 73 70 61      while( isspa
3f60: 63 65 28 7a 53 71 6c 5b 31 5d 29 20 29 20 7a 53  ce(zSql[1]) ) zS
3f70: 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66  ql++;.        if
3f80: 28 20 73 71 6c 69 74 65 53 74 72 4e 49 43 6d 70  ( sqliteStrNICmp
3f90: 28 26 7a 53 71 6c 5b 31 5d 2c 22 74 72 69 67 67  (&zSql[1],"trigg
3fa0: 65 72 22 2c 20 37 29 21 3d 30 20 29 20 62 72 65  er", 7)!=0 ) bre
3fb0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c  ak;.        zSql
3fc0: 20 2b 3d 20 37 3b 0a 20 20 20 20 20 20 20 20 72   += 7;.        r
3fd0: 65 71 75 69 72 65 45 6e 64 2b 2b 3b 0a 20 20 20  equireEnd++;.   
3fe0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3ff0: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
4000: 74 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27  t':.      case '
4010: 54 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 73 65  T': {.        se
4020: 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20 20 20  enText = 1;.    
4030: 20 20 20 20 69 66 28 20 21 73 65 65 6e 43 72 65      if( !seenCre
4040: 61 74 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ate ) break;.   
4050: 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65 20       seenCreate 
4060: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 73 43  = 0;.        isC
4070: 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20  omplete = 0;.   
4080: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 53       if( sqliteS
4090: 74 72 4e 49 43 6d 70 28 7a 53 71 6c 2c 20 22 74  trNICmp(zSql, "t
40a0: 72 69 67 67 65 72 22 2c 20 37 29 21 3d 30 20 29  rigger", 7)!=0 )
40b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
40c0: 69 66 28 20 21 69 73 73 70 61 63 65 28 7a 53 71  if( !isspace(zSq
40d0: 6c 5b 37 5d 29 20 29 20 62 72 65 61 6b 3b 0a 20  l[7]) ) break;. 
40e0: 20 20 20 20 20 20 20 7a 53 71 6c 20 2b 3d 20 36         zSql += 6
40f0: 3b 0a 20 20 20 20 20 20 20 20 72 65 71 75 69 72  ;.        requir
4100: 65 45 6e 64 2b 2b 3b 0a 20 20 20 20 20 20 20 20  eEnd++;.        
4110: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
4120: 20 20 20 20 20 63 61 73 65 20 27 65 27 3a 0a 20       case 'e':. 
4130: 20 20 20 20 20 63 61 73 65 20 27 45 27 3a 20 7b       case 'E': {
4140: 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43 72 65  .        seenCre
4150: 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ate = 0;.       
4160: 20 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20   seenText = 1;. 
4170: 20 20 20 20 20 20 20 69 66 28 20 21 69 73 43 6f         if( !isCo
4180: 6d 70 6c 65 74 65 20 29 20 62 72 65 61 6b 3b 0a  mplete ) break;.
4190: 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65          isComple
41a0: 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  te = 0;.        
41b0: 69 66 28 20 72 65 71 75 69 72 65 45 6e 64 3d 3d  if( requireEnd==
41c0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
41d0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72     if( sqliteStr
41e0: 4e 49 43 6d 70 28 7a 53 71 6c 2c 20 22 65 6e 64  NICmp(zSql, "end
41f0: 22 2c 20 33 29 21 3d 30 20 29 20 62 72 65 61 6b  ", 3)!=0 ) break
4200: 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20 2b  ;.        zSql +
4210: 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 77 68 69  = 2;.        whi
4220: 6c 65 28 20 69 73 73 70 61 63 65 28 7a 53 71 6c  le( isspace(zSql
4230: 5b 31 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20  [1]) ) zSql++;. 
4240: 20 20 20 20 20 20 20 69 66 28 20 7a 53 71 6c 5b         if( zSql[
4250: 31 5d 3d 3d 27 3b 27 20 29 7b 0a 20 20 20 20 20  1]==';' ){.     
4260: 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20       zSql++;.   
4270: 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74         isComplet
4280: 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  e = 1;.         
4290: 20 72 65 71 75 69 72 65 45 6e 64 2d 2d 3b 0a 20   requireEnd--;. 
42a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
42b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
42c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
42d0: 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43 72 65  .        seenCre
42e0: 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ate = 0;.       
42f0: 20 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20   seenText = 1;. 
4300: 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74         isComplet
4310: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62  e = 0;.        b
4320: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
4330: 20 20 7d 0a 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a    }.    zSql++;.
4340: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 65 65    }.  return see
4350: 6e 54 65 78 74 20 26 26 20 69 73 43 6f 6d 70 6c  nText && isCompl
4360: 65 74 65 20 26 26 20 72 65 71 75 69 72 65 45 6e  ete && requireEn
4370: 64 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  d==0;.}../*.** E
4380: 78 65 63 75 74 65 20 53 51 4c 20 63 6f 64 65 2e  xecute SQL code.
4390: 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20    Return one of 
43a0: 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75 63 63  the SQLITE_ succ
43b0: 65 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a 20 63  ess/failure.** c
43c0: 6f 64 65 73 2e 20 20 41 6c 73 6f 20 77 72 69 74  odes.  Also writ
43d0: 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
43e0: 67 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f  ge into memory o
43f0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20  btained from.** 
4400: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61 6b  malloc() and mak
4410: 65 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f 69 6e  e *pzErrMsg poin
4420: 74 20 74 6f 20 74 68 61 74 20 6d 65 73 73 61 67  t to that messag
4430: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
4440: 53 51 4c 20 69 73 20 61 20 71 75 65 72 79 2c 20  SQL is a query, 
4450: 74 68 65 6e 20 66 6f 72 20 65 61 63 68 20 72 6f  then for each ro
4460: 77 20 69 6e 20 74 68 65 20 71 75 65 72 79 20 72  w in the query r
4470: 65 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78 43 61  esult.** the xCa
4480: 6c 6c 62 61 63 6b 28 29 20 66 75 6e 63 74 69 6f  llback() functio
4490: 6e 20 69 73 20 63 61 6c 6c 65 64 2e 20 20 70 41  n is called.  pA
44a0: 72 67 20 62 65 63 6f 6d 65 73 20 74 68 65 20 66  rg becomes the f
44b0: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
44c0: 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 2e   to xCallback().
44d0: 20 20 49 66 20 78 43 61 6c 6c 62 61 63 6b 3d 4e    If xCallback=N
44e0: 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61 6c 6c  ULL then no call
44f0: 62 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  back.** is invok
4500: 65 64 2c 20 65 76 65 6e 20 66 6f 72 20 71 75 65  ed, even for que
4510: 72 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ries..*/.int sql
4520: 69 74 65 5f 65 78 65 63 28 0a 20 20 73 71 6c 69  ite_exec(.  sqli
4530: 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  te *db,         
4540: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
4550: 61 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63 68  atabase on which
4560: 20 74 68 65 20 53 51 4c 20 65 78 65 63 75 74 65   the SQL execute
4570: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
4580: 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  r *zSql,        
4590: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 6f     /* The SQL to
45a0: 20 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f 0a   be executed */.
45b0: 20 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62 61 63    sqlite_callbac
45c0: 6b 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20 2f 2a  k xCallback,  /*
45d0: 20 49 6e 76 6f 6b 65 20 74 68 69 73 20 63 61 6c   Invoke this cal
45e0: 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 2a 2f  lback routine */
45f0: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 20 20  .  void *pArg,  
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4610: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
4620: 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29 20   to xCallback() 
4630: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
4640: 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
4650: 20 2f 2a 20 57 72 69 74 65 20 65 72 72 6f 72 20   /* Write error 
4660: 6d 65 73 73 61 67 65 73 20 68 65 72 65 20 2a 2f  messages here */
4670: 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61 72  .){.  Parse sPar
4680: 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45 72 72  se;..  if( pzErr
4690: 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67 20  Msg ) *pzErrMsg 
46a0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
46b0: 65 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  eSafetyOn(db) ) 
46c0: 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73 75 73 65  goto exec_misuse
46d0: 3b 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  ;.  if( (db->fla
46e0: 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74  gs & SQLITE_Init
46f0: 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a 20  ialized)==0 ){. 
4700: 20 20 20 69 6e 74 20 72 63 2c 20 63 6e 74 20 3d     int rc, cnt =
4710: 20 31 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   1;.    while( (
4720: 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69 74 28  rc = sqliteInit(
4730: 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 29 3d 3d  db, pzErrMsg))==
4740: 53 51 4c 49 54 45 5f 42 55 53 59 0a 20 20 20 20  SQLITE_BUSY.    
4750: 20 20 20 26 26 20 64 62 2d 3e 78 42 75 73 79 43     && db->xBusyC
4760: 61 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 78  allback && db->x
4770: 42 75 73 79 43 61 6c 6c 62 61 63 6b 28 64 62 2d  BusyCallback(db-
4780: 3e 70 42 75 73 79 41 72 67 2c 20 22 22 2c 20 63  >pBusyArg, "", c
4790: 6e 74 2b 2b 29 21 3d 30 20 29 7b 7d 0a 20 20 20  nt++)!=0 ){}.   
47a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
47b0: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  OK ){.      sqli
47c0: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
47d0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
47e0: 6c 69 74 65 53 61 66 65 74 79 4f 66 66 28 64 62  liteSafetyOff(db
47f0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
4800: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rc;.    }.    if
4810: 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  ( pzErrMsg ){.  
4820: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a      sqliteFree(*
4830: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  pzErrMsg);.     
4840: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a   *pzErrMsg = 0;.
4850: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
4860: 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3c  db->file_format<
4870: 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53  3 ){.    sqliteS
4880: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20  afetyOff(db);.  
4890: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
48a0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 62 73  g(pzErrMsg, "obs
48b0: 6f 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  olete database f
48c0: 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 30 29 3b  ile format", 0);
48d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
48e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
48f0: 69 66 28 20 64 62 2d 3e 72 65 63 75 72 73 69 6f  if( db->recursio
4900: 6e 44 65 70 74 68 3d 3d 30 20 29 7b 20 64 62 2d  nDepth==0 ){ db-
4910: 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20 7d 0a  >nChange = 0; }.
4920: 20 20 64 62 2d 3e 72 65 63 75 72 73 69 6f 6e 44    db->recursionD
4930: 65 70 74 68 2b 2b 3b 0a 20 20 6d 65 6d 73 65 74  epth++;.  memset
4940: 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a  (&sParse, 0, siz
4950: 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20  eof(sParse));.  
4960: 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a  sParse.db = db;.
4970: 20 20 73 50 61 72 73 65 2e 70 42 65 20 3d 20 64    sParse.pBe = d
4980: 62 2d 3e 70 42 65 3b 0a 20 20 73 50 61 72 73 65  b->pBe;.  sParse
4990: 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  .xCallback = xCa
49a0: 6c 6c 62 61 63 6b 3b 0a 20 20 73 50 61 72 73 65  llback;.  sParse
49b0: 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  .pArg = pArg;.  
49c0: 73 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72 28  sqliteRunParser(
49d0: 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20 70  &sParse, zSql, p
49e0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
49f0: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61  sqlite_malloc_fa
4a00: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
4a10: 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  teSetString(pzEr
4a20: 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65  rMsg, "out of me
4a30: 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 20 20 73  mory", 0);.    s
4a40: 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54  Parse.rc = SQLIT
4a50: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c  E_NOMEM;.    sql
4a60: 69 74 65 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b  iteBtreeRollback
4a70: 28 64 62 2d 3e 70 42 65 29 3b 0a 20 20 20 20 69  (db->pBe);.    i
4a80: 66 28 20 64 62 2d 3e 70 42 65 54 65 6d 70 20 29  f( db->pBeTemp )
4a90: 20 73 71 6c 69 74 65 42 74 72 65 65 52 6f 6c 6c   sqliteBtreeRoll
4aa0: 62 61 63 6b 28 64 62 2d 3e 70 42 65 54 65 6d 70  back(db->pBeTemp
4ab0: 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  );.    db->flags
4ac0: 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 54 72   &= ~SQLITE_InTr
4ad0: 61 6e 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 52  ans;.    sqliteR
4ae0: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
4af0: 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20 69 66  ma(db);.  }.  if
4b00: 28 20 73 50 61 72 73 65 2e 72 63 21 3d 53 51 4c  ( sParse.rc!=SQL
4b10: 49 54 45 5f 4f 4b 20 26 26 20 70 7a 45 72 72 4d  ITE_OK && pzErrM
4b20: 73 67 20 26 26 20 2a 70 7a 45 72 72 4d 73 67 3d  sg && *pzErrMsg=
4b30: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
4b40: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
4b50: 73 67 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72  sg, sqlite_error
4b60: 5f 73 74 72 69 6e 67 28 73 50 61 72 73 65 2e 72  _string(sParse.r
4b70: 63 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71  c), 0);.  }.  sq
4b80: 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70  liteStrRealloc(p
4b90: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
4ba0: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
4bb0: 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20  E_SCHEMA ){.    
4bc0: 73 71 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72  sqliteResetInter
4bd0: 6e 61 6c 53 63 68 65 6d 61 28 64 62 29 3b 0a 20  nalSchema(db);. 
4be0: 20 7d 0a 20 20 64 62 2d 3e 72 65 63 75 72 73 69   }.  db->recursi
4bf0: 6f 6e 44 65 70 74 68 2d 2d 3b 0a 20 20 69 66 28  onDepth--;.  if(
4c00: 20 73 71 6c 69 74 65 53 61 66 65 74 79 4f 66 66   sqliteSafetyOff
4c10: 28 64 62 29 20 29 20 67 6f 74 6f 20 65 78 65 63  (db) ) goto exec
4c20: 5f 6d 69 73 75 73 65 3b 0a 20 20 72 65 74 75 72  _misuse;.  retur
4c30: 6e 20 73 50 61 72 73 65 2e 72 63 3b 0a 0a 65 78  n sParse.rc;..ex
4c40: 65 63 5f 6d 69 73 75 73 65 3a 0a 20 20 69 66 28  ec_misuse:.  if(
4c50: 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
4c60: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a   *pzErrMsg = 0;.
4c70: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
4c80: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71  ing(pzErrMsg, sq
4c90: 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72 69 6e  lite_error_strin
4ca0: 67 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 29  g(SQLITE_MISUSE)
4cb0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
4cc0: 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72  StrRealloc(pzErr
4cd0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Msg);.  }.  retu
4ce0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
4cf0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
4d00: 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  n a static strin
4d10: 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  g that describes
4d20: 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72   the kind of err
4d30: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
4d40: 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  the.** argument.
4d50: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
4d60: 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72  sqlite_error_str
4d70: 69 6e 67 28 69 6e 74 20 72 63 29 7b 0a 20 20 63  ing(int rc){.  c
4d80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20  onst char *z;.  
4d90: 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20  switch( rc ){.  
4da0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b    case SQLITE_OK
4db0: 3a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e  :         z = "n
4dc0: 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20  ot an error";   
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4de0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4df0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52    case SQLITE_ER
4e00: 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53  ROR:      z = "S
4e10: 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f  QL logic error o
4e20: 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  r missing databa
4e30: 73 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20  se";   break;.  
4e40: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e    case SQLITE_IN
4e50: 54 45 52 4e 41 4c 3a 20 20 20 7a 20 3d 20 22 69  TERNAL:   z = "i
4e60: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 20 69  nternal SQLite i
4e70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6c  mplementation fl
4e80: 61 77 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20  aw";   break;.  
4e90: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45    case SQLITE_PE
4ea0: 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61  RM:       z = "a
4eb0: 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e  ccess permission
4ec0: 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20   denied";       
4ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4ee0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42    case SQLITE_AB
4ef0: 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63  ORT:      z = "c
4f00: 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65  allback requeste
4f10: 64 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20  d query abort"; 
4f20: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4f30: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55    case SQLITE_BU
4f40: 53 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64  SY:       z = "d
4f50: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
4f60: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
4f70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4f80: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f    case SQLITE_LO
4f90: 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64  CKED:     z = "d
4fa0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
4fb0: 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20   locked";       
4fc0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4fd0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
4fe0: 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f  MEM:      z = "o
4ff0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20  ut of memory";  
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5010: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5020: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45    case SQLITE_RE
5030: 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61  ADONLY:   z = "a
5040: 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20  ttempt to write 
5050: 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62  a readonly datab
5060: 61 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20  ase";  break;.  
5070: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e    case SQLITE_IN
5080: 54 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69  TERRUPT:  z = "i
5090: 6e 74 65 72 72 75 70 74 65 64 22 3b 20 20 20 20  nterrupted";    
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
50c0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
50d0: 45 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64  ERR:      z = "d
50e0: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20  isk I/O error"; 
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5100: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5110: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
5120: 52 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64  RRUPT:    z = "d
5130: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
5140: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22  ge is malformed"
5150: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
5160: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
5170: 54 46 4f 55 4e 44 3a 20 20 20 7a 20 3d 20 22 74  TFOUND:   z = "t
5180: 61 62 6c 65 20 6f 72 20 72 65 63 6f 72 64 20 6e  able or record n
5190: 6f 74 20 66 6f 75 6e 64 22 3b 20 20 20 20 20 20  ot found";      
51a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
51b0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55    case SQLITE_FU
51c0: 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64  LL:       z = "d
51d0: 61 74 61 62 61 73 65 20 69 73 20 66 75 6c 6c 22  atabase is full"
51e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
51f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5200: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41    case SQLITE_CA
5210: 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75  NTOPEN:   z = "u
5220: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
5230: 74 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20  tabase file";   
5240: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5250: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52    case SQLITE_PR
5260: 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64  OTOCOL:   z = "d
5270: 61 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20  atabase locking 
5280: 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65  protocol failure
5290: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
52a0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d    case SQLITE_EM
52b0: 50 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74  PTY:      z = "t
52c0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  able contains no
52d0: 20 64 61 74 61 22 3b 20 20 20 20 20 20 20 20 20   data";         
52e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
52f0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43    case SQLITE_SC
5300: 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64  HEMA:     z = "d
5310: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
5320: 61 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20  as changed";    
5330: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5340: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 4f    case SQLITE_TO
5350: 4f 42 49 47 3a 20 20 20 20 20 7a 20 3d 20 22 74  OBIG:     z = "t
5360: 6f 6f 20 6d 75 63 68 20 64 61 74 61 20 66 6f 72  oo much data for
5370: 20 6f 6e 65 20 74 61 62 6c 65 20 72 6f 77 22 3b   one table row";
5380: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5390: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
53a0: 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63  NSTRAINT: z = "c
53b0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
53c0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
53d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
53e0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49    case SQLITE_MI
53f0: 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64  SMATCH:   z = "d
5400: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
5410: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5420: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5430: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49    case SQLITE_MI
5440: 53 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c  SUSE:     z = "l
5450: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63  ibrary routine c
5460: 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71  alled out of seq
5470: 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20  uence";break;.  
5480: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
5490: 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b  LFS:      z = "k
54a0: 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67  ernel lacks larg
54b0: 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b  e file support";
54c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
54d0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55    case SQLITE_AU
54e0: 54 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61  TH:       z = "a
54f0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e  uthorization den
5500: 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ied";           
5510: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5520: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
5530: 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75            z = "u
5540: 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20  nknown error";  
5550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5560: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5570: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  }.  return z;.}.
5580: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
5590: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ine implements a
55a0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74   busy callback t
55b0: 68 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74  hat sleeps and t
55c0: 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e  ries.** again un
55d0: 74 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61  til a timeout va
55e0: 6c 75 65 20 69 73 20 72 65 61 63 68 65 64 2e 20  lue is reached. 
55f0: 20 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c   The timeout val
5600: 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65  ue is.** an inte
5610: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69  ger number of mi
5620: 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65  lliseconds passe
5630: 64 20 69 6e 20 61 73 20 74 68 65 20 66 69 72 73  d in as the firs
5640: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  t.** argument..*
5650: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5660: 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61  iteDefaultBusyCa
5670: 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54  llback(. void *T
5680: 69 6d 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20  imeout,         
5690: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f    /* Maximum amo
56a0: 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77  unt of time to w
56b0: 61 69 74 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68  ait */. const ch
56c0: 61 72 20 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20  ar *NotUsed,    
56d0: 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
56e0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
56f0: 73 20 62 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63  s busy */. int c
5700: 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  ount            
5710: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
5720: 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73   times table has
5730: 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b   been busy */.){
5740: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 49 4e 5f  .#if SQLITE_MIN_
5750: 53 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20 20 69 6e  SLEEP_MS==1.  in
5760: 74 20 64 65 6c 61 79 20 3d 20 31 30 3b 0a 20 20  t delay = 10;.  
5770: 69 6e 74 20 70 72 69 6f 72 5f 64 65 6c 61 79 20  int prior_delay 
5780: 3d 20 30 3b 0a 20 20 69 6e 74 20 74 69 6d 65 6f  = 0;.  int timeo
5790: 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75  ut = (int)Timeou
57a0: 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66  t;.  int i;..  f
57b0: 6f 72 28 69 3d 31 3b 20 69 3c 63 6f 75 6e 74 3b  or(i=1; i<count;
57c0: 20 69 2b 2b 29 7b 20 0a 20 20 20 20 70 72 69 6f   i++){ .    prio
57d0: 72 5f 64 65 6c 61 79 20 2b 3d 20 64 65 6c 61 79  r_delay += delay
57e0: 3b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  ;.    delay = de
57f0: 6c 61 79 2a 32 3b 0a 20 20 20 20 69 66 28 20 64  lay*2;.    if( d
5800: 65 6c 61 79 3e 3d 31 30 30 30 20 29 7b 0a 20 20  elay>=1000 ){.  
5810: 20 20 20 20 64 65 6c 61 79 20 3d 20 31 30 30 30      delay = 1000
5820: 3b 0a 20 20 20 20 20 20 70 72 69 6f 72 5f 64 65  ;.      prior_de
5830: 6c 61 79 20 2b 3d 20 31 30 30 30 2a 28 63 6f 75  lay += 1000*(cou
5840: 6e 74 20 2d 20 69 20 2d 20 31 29 3b 0a 20 20 20  nt - i - 1);.   
5850: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
5860: 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 5f    }.  if( prior_
5870: 64 65 6c 61 79 20 2b 20 64 65 6c 61 79 20 3e 20  delay + delay > 
5880: 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 64  timeout ){.    d
5890: 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20 2d  elay = timeout -
58a0: 20 70 72 69 6f 72 5f 64 65 6c 61 79 3b 0a 20 20   prior_delay;.  
58b0: 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29    if( delay<=0 )
58c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
58d0: 20 73 71 6c 69 74 65 4f 73 53 6c 65 65 70 28 64   sqliteOsSleep(d
58e0: 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20  elay);.  return 
58f0: 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74  1;.#else.  int t
5900: 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69  imeout = (int)Ti
5910: 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f  meout;.  if( (co
5920: 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69  unt+1)*1000 > ti
5930: 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74  meout ){.    ret
5940: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
5950: 69 74 65 4f 73 53 6c 65 65 70 28 31 30 30 30 29  iteOsSleep(1000)
5960: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65  ;.  return 1;.#e
5970: 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  ndif.}../*.** Th
5980: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
5990: 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  the busy callbac
59a0: 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20  k for an Sqlite 
59b0: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a  database to the.
59c0: 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63  ** given callbac
59d0: 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  k function with 
59e0: 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65  the given argume
59f0: 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  nt..*/.void sqli
5a00: 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28  te_busy_handler(
5a10: 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20  .  sqlite *db,. 
5a20: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
5a30: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
5a40: 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41  int),.  void *pA
5a50: 72 67 0a 29 7b 0a 20 20 64 62 2d 3e 78 42 75 73  rg.){.  db->xBus
5a60: 79 43 61 6c 6c 62 61 63 6b 20 3d 20 78 42 75 73  yCallback = xBus
5a70: 79 3b 0a 20 20 64 62 2d 3e 70 42 75 73 79 41 72  y;.  db->pBusyAr
5a80: 67 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a 2f 2a 0a  g = pArg;.}../*.
5a90: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
5aa0: 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75  installs a defau
5ab0: 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  lt busy handler 
5ac0: 74 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74  that waits for t
5ad0: 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20  he.** specified 
5ae0: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
5af0: 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65  econds before re
5b00: 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f  turning 0..*/.vo
5b10: 69 64 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 74  id sqlite_busy_t
5b20: 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 20 2a 64  imeout(sqlite *d
5b30: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
5b40: 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71  ( ms>0 ){.    sq
5b50: 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65  lite_busy_handle
5b60: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
5b70: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
5b80: 20 28 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d   (void*)ms);.  }
5b90: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
5ba0: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62  _busy_handler(db
5bb0: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a  , 0, 0);.  }.}..
5bc0: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
5bd0: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
5be0: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
5bf0: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
5c00: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
5c10: 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 28  qlite_interrupt(
5c20: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64  sqlite *db){.  d
5c30: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
5c40: 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  TE_Interrupt;.}.
5c50: 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73  ./*.** Windows s
5c60: 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61  ystems should ca
5c70: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
5c80: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74  to free memory t
5c90: 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  hat.** is return
5ca0: 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65  ed in the in the
5cb0: 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65   errmsg paramete
5cc0: 72 20 6f 66 20 73 71 6c 69 74 65 5f 6f 70 65 6e  r of sqlite_open
5cd0: 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69 74  () when.** SQLit
5ce0: 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f 72  e is a DLL.  For
5cf0: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69 74   some reason, it
5d00: 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74   does not work t
5d10: 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a 2a  o call free().**
5d20: 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a   directly..**.**
5d30: 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e 65   Note that we ne
5d40: 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28  ed to call free(
5d50: 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65 65  ) not sqliteFree
5d60: 28 29 20 68 65 72 65 2c 20 73 69 6e 63 65 20 65  () here, since e
5d70: 76 65 72 79 0a 2a 2a 20 73 74 72 69 6e 67 20 74  very.** string t
5d80: 68 61 74 20 69 73 20 65 78 70 6f 72 74 65 64 20  hat is exported 
5d90: 66 72 6f 6d 20 53 51 4c 69 74 65 20 73 68 6f 75  from SQLite shou
5da0: 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ld have already 
5db0: 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
5dc0: 2a 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c  * sqliteStrReall
5dd0: 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  oc()..*/.void sq
5de0: 6c 69 74 65 5f 66 72 65 65 6d 65 6d 28 76 6f 69  lite_freemem(voi
5df0: 64 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b 20  d *p){ free(p); 
5e00: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73  }../*.** Windows
5e10: 20 73 79 73 74 65 6d 73 20 6e 65 65 64 20 66 75   systems need fu
5e20: 6e 63 74 69 6f 6e 73 20 74 6f 20 63 61 6c 6c 20  nctions to call 
5e30: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 73 71  to return the sq
5e40: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 0a 2a 2a 20  lite_version.** 
5e50: 61 6e 64 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64  and sqlite_encod
5e60: 69 6e 67 20 73 74 72 69 6e 67 73 2e 0a 2a 2f 0a  ing strings..*/.
5e70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
5e80: 74 65 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f  te_libversion(vo
5e90: 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69  id){ return sqli
5ea0: 74 65 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 63 6f  te_version; }.co
5eb0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
5ec0: 5f 6c 69 62 65 6e 63 6f 64 69 6e 67 28 76 6f 69  _libencoding(voi
5ed0: 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74  d){ return sqlit
5ee0: 65 5f 65 6e 63 6f 64 69 6e 67 3b 20 7d 0a 0a 2f  e_encoding; }../
5ef0: 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20  *.** Create new 
5f00: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
5f10: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 73 71 6c  ctions.  The sql
5f20: 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  ite_create_funct
5f30: 69 6f 6e 28 29 0a 2a 2a 20 72 6f 75 74 69 6e 65  ion().** routine
5f40: 20 63 72 65 61 74 65 73 20 61 20 72 65 67 75 6c   creates a regul
5f50: 61 72 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ar function and 
5f60: 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 61 67  sqlite_create_ag
5f70: 67 72 65 67 61 74 65 28 29 0a 2a 2a 20 63 72 65  gregate().** cre
5f80: 61 74 65 73 20 61 6e 20 61 67 67 72 65 67 61 74  ates an aggregat
5f90: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
5fa0: 2a 20 50 61 73 73 69 6e 67 20 61 20 4e 55 4c 4c  * Passing a NULL
5fb0: 20 78 46 75 6e 63 20 61 72 67 75 6d 65 6e 74 20   xFunc argument 
5fc0: 6f 72 20 4e 55 4c 4c 20 78 53 74 65 70 20 61 6e  or NULL xStep an
5fd0: 64 20 78 46 69 6e 61 6c 69 7a 65 20 61 72 67 75  d xFinalize argu
5fe0: 6d 65 6e 74 73 0a 2a 2a 20 64 69 73 61 62 6c 65  ments.** disable
5ff0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
6000: 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 5f   Calling sqlite_
6010: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
6020: 29 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 73 61  ) with the.** sa
6030: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 6e 75 6d 62  me name and numb
6040: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6050: 61 73 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20  as a prior call 
6060: 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f 63 72 65  to.** sqlite_cre
6070: 61 74 65 5f 61 67 67 72 65 67 61 74 65 28 29 20  ate_aggregate() 
6080: 64 69 73 61 62 6c 65 73 20 74 68 65 20 70 72 69  disables the pri
6090: 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71  or call to.** sq
60a0: 6c 69 74 65 5f 63 72 65 61 74 65 5f 61 67 67 72  lite_create_aggr
60b0: 65 67 61 74 65 28 29 2c 20 61 6e 64 20 76 69 63  egate(), and vic
60c0: 65 20 76 65 72 73 61 2e 0a 2a 2a 0a 2a 2a 20 49  e versa..**.** I
60d0: 66 20 6e 41 72 67 20 69 73 20 2d 31 20 69 74 20  f nArg is -1 it 
60e0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 69 73 20  means that this 
60f0: 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 61 63  function will ac
6100: 63 65 70 74 20 61 6e 79 20 6e 75 6d 62 65 72 0a  cept any number.
6110: 2a 2a 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2c  ** of arguments,
6120: 20 69 6e 63 6c 75 64 69 6e 67 20 30 2e 0a 2a 2f   including 0..*/
6130: 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63 72 65 61  .int sqlite_crea
6140: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73  te_function(.  s
6150: 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20  qlite *db,      
6160: 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 66      /* Add the f
6170: 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  unction to this 
6180: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
6190: 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ion */.  const c
61a0: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 2f 2a  har *zName,   /*
61b0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   Name of the fun
61c0: 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a 2f 0a  ction to add */.
61d0: 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 20    int nArg,     
61e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
61f0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6200: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
6210: 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c 69 6e  (sqlite_func*,in
6220: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 2c  t,const char**),
6230: 20 20 2f 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65    /* The impleme
6240: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  ntation */.  voi
6250: 64 20 2a 70 55 73 65 72 44 61 74 61 20 20 20 20  d *pUserData    
6260: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 2a    /* User data *
6270: 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  /.){.  FuncDef *
6280: 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  p;.  int nName;.
6290: 20 20 69 66 28 20 64 62 3d 3d 30 20 7c 7c 20 7a    if( db==0 || z
62a0: 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  Name==0 || sqlit
62b0: 65 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  eSafetyCheck(db)
62c0: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 6e   ) return 1;.  n
62d0: 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e  Name = strlen(zN
62e0: 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e 61 6d  ame);.  if( nNam
62f0: 65 3e 32 35 35 20 29 20 72 65 74 75 72 6e 20 31  e>255 ) return 1
6300: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 46 69  ;.  p = sqliteFi
6310: 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a  ndFunction(db, z
6320: 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72  Name, nName, nAr
6330: 67 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d  g, 1);.  if( p==
6340: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
6350: 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63  p->xFunc = xFunc
6360: 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 30  ;.  p->xStep = 0
6370: 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65  ;.  p->xFinalize
6380: 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 55 73 65 72   = 0;.  p->pUser
6390: 44 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61  Data = pUserData
63a0: 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
63b0: 69 6e 74 20 73 71 6c 69 74 65 5f 63 72 65 61 74  int sqlite_creat
63c0: 65 5f 61 67 67 72 65 67 61 74 65 28 0a 20 20 73  e_aggregate(.  s
63d0: 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20  qlite *db,      
63e0: 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 66      /* Add the f
63f0: 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  unction to this 
6400: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
6410: 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ion */.  const c
6420: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 2f 2a  har *zName,   /*
6430: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   Name of the fun
6440: 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a 2f 0a  ction to add */.
6450: 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 20    int nArg,     
6460: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6470: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6480: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
6490: 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c 69 6e  (sqlite_func*,in
64a0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 2c  t,const char**),
64b0: 20 2f 2a 20 54 68 65 20 73 74 65 70 20 66 75 6e   /* The step fun
64c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
64d0: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
64e0: 69 74 65 5f 66 75 6e 63 2a 29 2c 20 20 20 20 20  ite_func*),     
64f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
6500: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76  finalizer */.  v
6510: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 20 20  oid *pUserData  
6520: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
6530: 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66   */.){.  FuncDef
6540: 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65   *p;.  int nName
6550: 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 7c 7c  ;.  if( db==0 ||
6560: 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c   zName==0 || sql
6570: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
6580: 62 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  b) ) return 1;. 
6590: 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28   nName = strlen(
65a0: 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e  zName);.  if( nN
65b0: 61 6d 65 3e 32 35 35 20 29 20 72 65 74 75 72 6e  ame>255 ) return
65c0: 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   1;.  p = sqlite
65d0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FindFunction(db,
65e0: 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e   zName, nName, n
65f0: 41 72 67 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  Arg, 1);.  if( p
6600: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
6610: 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 30 3b 0a    p->xFunc = 0;.
6620: 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74    p->xStep = xSt
6630: 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69  ep;.  p->xFinali
6640: 7a 65 20 3d 20 78 46 69 6e 61 6c 69 7a 65 3b 0a  ze = xFinalize;.
6650: 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d    p->pUserData =
6660: 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65   pUserData;.  re
6670: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
6680: 20 43 68 61 6e 67 65 20 74 68 65 20 64 61 74 61   Change the data
6690: 74 79 70 65 20 66 6f 72 20 61 6c 6c 20 66 75 6e  type for all fun
66a0: 63 74 69 6f 6e 73 20 77 69 74 68 20 61 20 67 69  ctions with a gi
66b0: 76 65 6e 20 6e 61 6d 65 2e 20 20 53 65 65 20 74  ven name.  See t
66c0: 68 65 0a 2a 2a 20 68 65 61 64 65 72 20 63 6f 6d  he.** header com
66d0: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 70 72 6f  ment for the pro
66e0: 74 6f 74 79 70 65 20 6f 66 20 74 68 69 73 20 66  totype of this f
66f0: 75 6e 63 74 69 6f 6e 20 69 6e 20 73 71 6c 69 74  unction in sqlit
6700: 65 2e 68 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  e.h for.** addit
6710: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6720: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
6730: 5f 66 75 6e 63 74 69 6f 6e 5f 74 79 70 65 28 73  _function_type(s
6740: 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f 6e 73 74  qlite *db, const
6750: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e   char *zName, in
6760: 74 20 64 61 74 61 54 79 70 65 29 7b 0a 20 20 46  t dataType){.  F
6770: 75 6e 63 44 65 66 20 2a 70 20 3d 20 28 46 75 6e  uncDef *p = (Fun
6780: 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68  cDef*)sqliteHash
6790: 46 69 6e 64 28 26 64 62 2d 3e 61 46 75 6e 63 2c  Find(&db->aFunc,
67a0: 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a   zName, strlen(z
67b0: 4e 61 6d 65 29 29 3b 0a 20 20 77 68 69 6c 65 28  Name));.  while(
67c0: 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 64 61 74   p ){.    p->dat
67d0: 61 54 79 70 65 20 3d 20 64 61 74 61 54 79 70 65  aType = dataType
67e0: 3b 20 0a 20 20 20 20 70 20 3d 20 70 2d 3e 70 4e  ; .    p = p->pN
67f0: 65 78 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ext;.  }.  retur
6800: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
6810: 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  /*.** Attempt to
6820: 20 6f 70 65 6e 20 74 68 65 20 66 69 6c 65 20 6e   open the file n
6830: 61 6d 65 64 20 69 6e 20 74 68 65 20 61 72 67 75  amed in the argu
6840: 6d 65 6e 74 20 61 73 20 74 68 65 20 61 75 78 69  ment as the auxi
6850: 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
6860: 2a 20 66 69 6c 65 2e 20 20 54 68 65 20 61 75 78  * file.  The aux
6870: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
6880: 66 69 6c 65 20 69 73 20 75 73 65 64 20 74 6f 20  file is used to 
6890: 73 74 6f 72 65 20 54 45 4d 50 20 74 61 62 6c 65  store TEMP table
68a0: 73 2e 20 20 42 75 74 0a 2a 2a 20 62 79 20 75 73  s.  But.** by us
68b0: 69 6e 67 20 74 68 69 73 20 41 50 49 2c 20 69 74  ing this API, it
68c0: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   is possible to 
68d0: 74 72 69 63 6b 20 53 51 4c 69 74 65 20 69 6e 74  trick SQLite int
68e0: 6f 20 6f 70 65 6e 69 6e 67 20 74 77 6f 0a 2a 2a  o opening two.**
68f0: 20 73 65 70 61 72 61 74 65 20 64 61 74 61 62 61   separate databa
6900: 73 65 73 20 61 6e 64 20 61 63 74 69 6e 67 20 6f  ses and acting o
6910: 6e 20 74 68 65 6d 20 61 73 20 69 66 20 74 68 65  n them as if the
6920: 79 20 77 65 72 65 20 6f 6e 65 2e 0a 2a 2a 0a 2a  y were one..**.*
6930: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
6940: 6c 6f 73 65 73 20 74 68 65 20 65 78 69 73 74 69  loses the existi
6950: 6e 67 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ng auxiliary dat
6960: 61 62 61 73 65 20 66 69 6c 65 2c 20 77 68 69 63  abase file, whic
6970: 68 20 77 69 6c 6c 0a 2a 2a 20 63 61 75 73 65 20  h will.** cause 
6980: 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 63  any previously c
6990: 72 65 61 74 65 64 20 54 45 4d 50 20 74 61 62 6c  reated TEMP tabl
69a0: 65 73 20 74 6f 20 62 65 20 64 72 6f 70 70 65 64  es to be dropped
69b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 7a 4e 61 6d  ..**.** The zNam
69c0: 65 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20  e parameter can 
69d0: 62 65 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  be a NULL pointe
69e0: 72 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74  r or an empty st
69f0: 72 69 6e 67 20 74 6f 20 63 61 75 73 65 0a 2a 2a  ring to cause.**
6a00: 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c   a temporary fil
6a10: 65 20 74 6f 20 62 65 20 6f 70 65 6e 65 64 20 61  e to be opened a
6a20: 6e 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  nd automatically
6a30: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 63 6c   deleted when cl
6a40: 6f 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  osed..*/.int sql
6a50: 69 74 65 5f 6f 70 65 6e 5f 61 75 78 5f 66 69 6c  ite_open_aux_fil
6a60: 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f  e(sqlite *db, co
6a70: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
6a80: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
6a90: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ){.  int rc;.  i
6aa0: 66 28 20 7a 4e 61 6d 65 20 26 26 20 7a 4e 61 6d  f( zName && zNam
6ab0: 65 5b 30 5d 3d 3d 30 20 29 20 7a 4e 61 6d 65 20  e[0]==0 ) zName 
6ac0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
6ad0: 65 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  eSafetyOn(db) ) 
6ae0: 67 6f 74 6f 20 6f 70 65 6e 61 75 78 5f 6d 69 73  goto openaux_mis
6af0: 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 52 65 73  use;.  sqliteRes
6b00: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
6b10: 28 64 62 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  (db);.  if( db->
6b20: 70 42 65 54 65 6d 70 21 3d 30 20 29 7b 0a 20 20  pBeTemp!=0 ){.  
6b30: 20 20 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f    sqliteBtreeClo
6b40: 73 65 28 64 62 2d 3e 70 42 65 54 65 6d 70 29 3b  se(db->pBeTemp);
6b50: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6b60: 74 65 42 74 72 65 65 4f 70 65 6e 28 7a 4e 61 6d  teBtreeOpen(zNam
6b70: 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c  e, 0, MAX_PAGES,
6b80: 20 26 64 62 2d 3e 70 42 65 54 65 6d 70 29 3b 0a   &db->pBeTemp);.
6b90: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
6ba0: 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 29 20 7a  if( zName==0 ) z
6bb0: 4e 61 6d 65 20 3d 20 22 61 20 74 65 6d 70 6f 72  Name = "a tempor
6bc0: 61 72 79 20 66 69 6c 65 22 3b 0a 20 20 20 20 73  ary file";.    s
6bd0: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
6be0: 7a 45 72 72 4d 73 67 2c 20 22 75 6e 61 62 6c 65  zErrMsg, "unable
6bf0: 20 74 6f 20 6f 70 65 6e 20 22 2c 20 7a 4e 61 6d   to open ", zNam
6c00: 65 2c 20 0a 20 20 20 20 20 20 22 3a 20 22 2c 20  e, .      ": ", 
6c10: 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f 73 74 72  sqlite_error_str
6c20: 69 6e 67 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  ing(rc), 0);.   
6c30: 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f   sqliteStrReallo
6c40: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  c(pzErrMsg);.   
6c50: 20 73 71 6c 69 74 65 53 61 66 65 74 79 4f 66 66   sqliteSafetyOff
6c60: 28 64 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  (db);.    return
6c70: 20 72 63 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20   rc;.  }.  rc = 
6c80: 73 71 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70  sqliteInit(db, p
6c90: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
6ca0: 73 71 6c 69 74 65 53 61 66 65 74 79 4f 66 66 28  sqliteSafetyOff(
6cb0: 64 62 29 20 29 20 67 6f 74 6f 20 6f 70 65 6e 61  db) ) goto opena
6cc0: 75 78 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c  ux_misuse;.  sql
6cd0: 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a  iteStrRealloc(pz
6ce0: 45 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72  ErrMsg);.  retur
6cf0: 6e 20 72 63 3b 0a 0a 6f 70 65 6e 61 75 78 5f 6d  n rc;..openaux_m
6d00: 69 73 75 73 65 3a 0a 20 20 73 71 6c 69 74 65 53  isuse:.  sqliteS
6d10: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
6d20: 67 2c 20 73 71 6c 69 74 65 5f 65 72 72 6f 72 5f  g, sqlite_error_
6d30: 73 74 72 69 6e 67 28 53 51 4c 49 54 45 5f 4d 49  string(SQLITE_MI
6d40: 53 55 53 45 29 2c 20 30 29 3b 0a 20 20 73 71 6c  SUSE), 0);.  sql
6d50: 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a  iteStrRealloc(pz
6d60: 45 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72  ErrMsg);.  retur
6d70: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
6d80: 0a 7d 0a                                         .}.