/ Hex Artifact Content
Login

Artifact 73be8d00a8a9bbec715a6260840a19020a074090:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 31 39 39 39 2c 20 32 30 30 30 20 44  (c) 1999, 2000 D
0020: 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a  . Richard Hipp.*
0030: 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61  *.** This progra
0040: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0050: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0060: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0070: 6f 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20  or.** modify it 
0080: 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20  under the terms 
0090: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
00a0: 61 6c 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63  al Public.** Lic
00b0: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
00c0: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
00d0: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
00e0: 6e 3b 20 65 69 74 68 65 72 0a 2a 2a 20 76 65 72  n; either.** ver
00f0: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0100: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0110: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0120: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a  ater version..**
0130: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  .** This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
0170: 75 6c 2c 0a 2a 2a 20 62 75 74 20 57 49 54 48 4f  ul,.** but WITHO
0180: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0190: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01a0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
01b0: 74 79 20 6f 66 0a 2a 2a 20 4d 45 52 43 48 41 4e  ty of.** MERCHAN
01c0: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
01d0: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
01e0: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
01f0: 65 65 20 74 68 65 20 47 4e 55 0a 2a 2a 20 47 65  ee the GNU.** Ge
0200: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  neral Public Lic
0210: 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65  ense for more de
0220: 74 61 69 6c 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f  tails..** .** Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65  u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66  ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c   the GNU General
0260: 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e   Public.** Licen
0270: 73 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  se along with th
0280: 69 73 20 6c 69 62 72 61 72 79 3b 20 69 66 20 6e  is library; if n
0290: 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68 65  ot, write to the
02a0: 0a 2a 2a 20 46 72 65 65 20 53 6f 66 74 77 61 72  .** Free Softwar
02b0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  e Foundation, In
02c0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
02d0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
02e0: 0a 2a 2a 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20  .** Boston, MA  
02f0: 30 32 31 31 31 2d 31 33 30 37 2c 20 55 53 41 2e  02111-1307, USA.
0300: 0a 2a 2a 0a 2a 2a 20 41 75 74 68 6f 72 20 63 6f  .**.** Author co
0310: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
0320: 6e 3a 0a 2a 2a 20 20 20 64 72 68 40 68 77 61 63  n:.**   drh@hwac
0330: 69 2e 63 6f 6d 0a 2a 2a 20 20 20 68 74 74 70 3a  i.com.**   http:
0340: 2f 2f 77 77 77 2e 68 77 61 63 69 2e 63 6f 6d 2f  //www.hwaci.com/
0350: 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  drh/.**.********
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 20 4d 61 69 6e 20 66 69 6c 65 20 66  *.** Main file f
03b0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
03c0: 62 72 61 72 79 2e 20 20 54 68 65 20 72 6f 75 74  brary.  The rout
03d0: 69 6e 65 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ines in this fil
03e0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 74  e.** implement t
03f0: 68 65 20 70 72 6f 67 72 61 6d 6d 65 72 20 69 6e  he programmer in
0400: 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 6c  terface to the l
0410: 69 62 72 61 72 79 2e 20 20 52 6f 75 74 69 6e 65  ibrary.  Routine
0420: 73 20 69 6e 0a 2a 2a 20 6f 74 68 65 72 20 66 69  s in.** other fi
0430: 6c 65 73 20 61 72 65 20 66 6f 72 20 69 6e 74 65  les are for inte
0440: 72 6e 61 6c 20 75 73 65 20 62 79 20 53 51 4c 69  rnal use by SQLi
0450: 74 65 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f  te and should no
0460: 74 20 62 65 0a 2a 2a 20 61 63 63 65 73 73 65 64  t be.** accessed
0470: 20 62 79 20 75 73 65 72 73 20 6f 66 20 74 68 65   by users of the
0480: 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
0490: 24 49 64 3a 20 6d 61 69 6e 2e 63 2c 76 20 31 2e  $Id: main.c,v 1.
04a0: 33 36 20 32 30 30 31 2f 30 39 2f 31 35 20 30 30  36 2001/09/15 00
04b0: 3a 35 37 3a 32 39 20 64 72 68 20 45 78 70 20 24  :57:29 drh Exp $
04c0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
04d0: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 66 20 64  liteInt.h".#if d
04e0: 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c 45  efined(HAVE_USLE
04f0: 45 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c 45  EP) && HAVE_USLE
0500: 45 50 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69  EP.#include <uni
0510: 73 74 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  std.h>.#endif../
0520: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
0530: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
0540: 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 74  e for the code t
0550: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
0560: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
0570: 20 20 45 61 63 68 20 63 61 6c 6c 62 61 63 6b 20    Each callback 
0580: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 6f 6c  contains the fol
0590: 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
05a0: 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 72  on:.**.**     ar
05b0: 67 76 5b 30 5d 20 3d 20 22 6d 65 74 61 22 20 6f  gv[0] = "meta" o
05c0: 72 20 22 74 61 62 6c 65 22 20 6f 72 20 22 69 6e  r "table" or "in
05d0: 64 65 78 22 0a 2a 2a 20 20 20 20 20 61 72 67 76  dex".**     argv
05e0: 5b 31 5d 20 3d 20 74 61 62 6c 65 20 6f 72 20 69  [1] = table or i
05f0: 6e 64 65 78 20 6e 61 6d 65 0a 2a 2a 20 20 20 20  ndex name.**    
0600: 20 61 72 67 76 5b 32 5d 20 3d 20 72 6f 6f 74 20   argv[2] = root 
0610: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0620: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 0a 2a  table or index.*
0630: 2a 20 20 20 20 20 61 72 67 76 5b 33 5d 20 3d 20  *     argv[3] = 
0640: 53 51 4c 20 63 72 65 61 74 65 20 73 74 61 74 65  SQL create state
0650: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 74 61 62  ment for the tab
0660: 6c 65 20 6f 72 20 69 6e 64 65 78 0a 2a 2a 0a 2a  le or index.**.*
0670: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
0680: 69 74 65 4f 70 65 6e 43 62 28 76 6f 69 64 20 2a  iteOpenCb(void *
0690: 70 44 62 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  pDb, int argc, c
06a0: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
06b0: 20 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20   **azColName){. 
06c0: 20 73 71 6c 69 74 65 20 2a 64 62 20 3d 20 28 73   sqlite *db = (s
06d0: 71 6c 69 74 65 2a 29 70 44 62 3b 0a 20 20 50 61  qlite*)pDb;.  Pa
06e0: 72 73 65 20 73 50 61 72 73 65 3b 0a 20 20 69 6e  rse sParse;.  in
06f0: 74 20 6e 45 72 72 20 3d 20 30 3b 0a 0a 20 20 61  t nErr = 0;..  a
0700: 73 73 65 72 74 28 20 61 72 67 63 3d 3d 34 20 29  ssert( argc==4 )
0710: 3b 0a 20 20 73 77 69 74 63 68 28 20 61 72 67 76  ;.  switch( argv
0720: 5b 30 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 63 61  [0][0] ){.    ca
0730: 73 65 20 27 6d 27 3a 20 7b 20 20 2f 2a 20 4d 65  se 'm': {  /* Me
0740: 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  ta information *
0750: 2f 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63  /.      if( strc
0760: 6d 70 28 61 72 67 76 5b 31 5d 2c 22 66 69 6c 65  mp(argv[1],"file
0770: 2d 66 6f 72 6d 61 74 22 29 3d 3d 30 20 29 7b 0a  -format")==0 ){.
0780: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 69 6c 65          db->file
0790: 5f 66 6f 72 6d 61 74 20 3d 20 61 74 6f 69 28 61  _format = atoi(a
07a0: 72 67 76 5b 33 5d 29 3b 0a 20 20 20 20 20 20 7d  rgv[3]);.      }
07b0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
07c0: 61 72 67 76 5b 31 5d 2c 22 73 63 68 65 6d 61 2d  argv[1],"schema-
07d0: 63 6f 6f 6b 69 65 22 29 3d 3d 30 20 29 7b 0a 20  cookie")==0 ){. 
07e0: 20 20 20 20 20 20 20 64 62 2d 3e 73 63 68 65 6d         db->schem
07f0: 61 5f 63 6f 6f 6b 69 65 20 3d 20 61 74 6f 69 28  a_cookie = atoi(
0800: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 20 20 20 20  argv[3]);.      
0810: 20 20 64 62 2d 3e 6e 65 78 74 5f 63 6f 6f 6b 69    db->next_cooki
0820: 65 20 3d 20 64 62 2d 3e 73 63 68 65 6d 61 5f 63  e = db->schema_c
0830: 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 7d 0a 20  ookie;.      }. 
0840: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0850: 7d 0a 20 20 20 20 63 61 73 65 20 27 69 27 3a 0a  }.    case 'i':.
0860: 20 20 20 20 63 61 73 65 20 27 74 27 3a 20 7b 20      case 't': { 
0870: 20 2f 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45   /* CREATE TABLE
0880: 20 20 61 6e 64 20 43 52 45 41 54 45 20 49 4e 44    and CREATE IND
0890: 45 58 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  EX statements */
08a0: 0a 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73  .      memset(&s
08b0: 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66  Parse, 0, sizeof
08c0: 28 73 50 61 72 73 65 29 29 3b 0a 20 20 20 20 20  (sParse));.     
08d0: 20 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b   sParse.db = db;
08e0: 0a 20 20 20 20 20 20 73 50 61 72 73 65 2e 69 6e  .      sParse.in
08f0: 69 74 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  itFlag = 1;.    
0900: 20 20 73 50 61 72 73 65 2e 6e 65 77 54 6e 75 6d    sParse.newTnum
0910: 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29   = atoi(argv[2])
0920: 3b 0a 20 20 20 20 20 20 6e 45 72 72 20 3d 20 73  ;.      nErr = s
0930: 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72 28 26  qliteRunParser(&
0940: 73 50 61 72 73 65 2c 20 61 72 67 76 5b 33 5d 2c  sParse, argv[3],
0950: 20 30 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b   0);.      break
0960: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61  ;.    }.    defa
0970: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20  ult: {.      /* 
0980: 54 68 69 73 20 63 61 6e 20 6e 6f 74 20 68 61 70  This can not hap
0990: 70 65 6e 21 20 2a 2f 0a 20 20 20 20 20 20 6e 45  pen! */.      nE
09a0: 72 72 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  rr = 1;.      as
09b0: 73 65 72 74 28 20 6e 45 72 72 3d 3d 30 20 29 3b  sert( nErr==0 );
09c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
09d0: 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a  urn nErr;.}../*.
09e0: 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
09f0: 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
0a00: 73 63 68 65 6d 61 20 61 6e 64 20 69 6e 69 74 69  schema and initi
0a10: 61 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a  alize internal.*
0a20: 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
0a30: 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f  s.  Return one o
0a40: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 65 72  f the SQLITE_ er
0a50: 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a 2a 20  ror codes to.** 
0a60: 69 6e 64 69 63 61 74 65 20 73 75 63 63 65 73 73  indicate success
0a70: 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a 2a 0a   or failure..**.
0a80: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 64 61 74  ** After the dat
0a90: 61 62 61 73 65 20 69 73 20 69 6e 69 74 69 61 6c  abase is initial
0aa0: 69 7a 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45  ized, the SQLITE
0ab0: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 0a 2a 2a 20  _Initialized.** 
0ac0: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
0ad0: 65 20 66 6c 61 67 73 20 66 69 65 6c 64 20 6f 66  e flags field of
0ae0: 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75   the sqlite stru
0af0: 63 74 75 72 65 2e 20 20 41 6e 0a 2a 2a 20 61 74  cture.  An.** at
0b00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
0b10: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
0b20: 64 61 74 61 62 61 73 65 20 61 73 20 73 6f 6f 6e  database as soon
0b30: 20 61 73 20 69 74 0a 2a 2a 20 69 73 20 6f 70 65   as it.** is ope
0b40: 6e 65 64 2e 20 20 49 66 20 74 68 61 74 20 66 61  ned.  If that fa
0b50: 69 6c 73 20 28 70 65 72 68 61 70 73 20 62 65 63  ils (perhaps bec
0b60: 61 75 73 65 20 61 6e 6f 74 68 65 72 20 70 72 6f  ause another pro
0b70: 63 65 73 73 0a 2a 2a 20 68 61 73 20 74 68 65 20  cess.** has the 
0b80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
0b90: 62 6c 65 20 6c 6f 63 6b 65 64 29 20 74 68 61 6e  ble locked) than
0ba0: 20 61 6e 6f 74 68 65 72 20 61 74 74 65 6d 70 74   another attempt
0bb0: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 74 68 65 20  .** is made the 
0bc0: 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 64  first time the d
0bd0: 61 74 61 62 61 73 65 20 69 73 20 61 63 63 65 73  atabase is acces
0be0: 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  sed..*/.static i
0bf0: 6e 74 20 73 71 6c 69 74 65 49 6e 69 74 28 73 71  nt sqliteInit(sq
0c00: 6c 69 74 65 20 2a 64 62 2c 20 63 68 61 72 20 2a  lite *db, char *
0c10: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 56 64  *pzErrMsg){.  Vd
0c20: 62 65 20 2a 76 64 62 65 3b 0a 20 20 69 6e 74 20  be *vdbe;.  int 
0c30: 72 63 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54  rc;..  /*.  ** T
0c40: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
0c50: 73 65 20 74 61 62 6c 65 20 68 61 73 20 61 20 73  se table has a s
0c60: 74 72 75 63 74 75 72 65 20 6c 69 6b 65 20 74 68  tructure like th
0c70: 69 73 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63  is.  */.  static
0c80: 20 63 68 61 72 20 6d 61 73 74 65 72 5f 73 63 68   char master_sch
0c90: 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20 20 22 43  ema[] = .     "C
0ca0: 52 45 41 54 45 20 54 41 42 4c 45 20 22 20 4d 41  REATE TABLE " MA
0cb0: 53 54 45 52 5f 4e 41 4d 45 20 22 20 28 5c 6e 22  STER_NAME " (\n"
0cc0: 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65  .     "  type te
0cd0: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 6e  xt,\n".     "  n
0ce0: 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
0cf0: 20 20 22 20 20 74 6e 75 6d 20 69 6e 74 65 67 65    "  tnum intege
0d00: 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62  r,\n".     "  tb
0d10: 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a  l_name text,\n".
0d20: 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74       "  sql text
0d30: 5c 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b  \n".     ")".  ;
0d40: 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
0d50: 77 69 6e 67 20 70 72 6f 67 72 61 6d 20 69 73 20  wing program is 
0d60: 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  used to initiali
0d70: 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a  ze the internal.
0d80: 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65 20 68    ** structure h
0d90: 6f 6c 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65  olding the table
0da0: 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 6f 66  s and indexes of
0db0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
0dc0: 20 2a 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   ** The database
0dd0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 70 65 63   contains a spec
0de0: 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  ial table named 
0df0: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
0e00: 20 20 2a 2a 20 64 65 66 69 6e 65 64 20 61 73 20    ** defined as 
0e10: 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 0a 20 20  follows:.  **.  
0e20: 2a 2a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  **    CREATE TAB
0e30: 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  LE sqlite_master
0e40: 20 28 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 74   (.  **        t
0e50: 79 70 65 20 20 20 20 20 20 20 74 65 78 74 2c 20  ype       text, 
0e60: 20 20 20 2d 2d 20 20 45 69 74 68 65 72 20 22 74     --  Either "t
0e70: 61 62 6c 65 22 20 6f 72 20 22 69 6e 64 65 78 22  able" or "index"
0e80: 20 6f 72 20 22 6d 65 74 61 22 0a 20 20 2a 2a 20   or "meta".  ** 
0e90: 20 20 20 20 20 20 20 6e 61 6d 65 20 20 20 20 20         name     
0ea0: 20 20 74 65 78 74 2c 20 20 20 20 2d 2d 20 20 4e    text,    --  N
0eb0: 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 6f 72 20  ame of table or 
0ec0: 69 6e 64 65 78 0a 20 20 2a 2a 20 20 20 20 20 20  index.  **      
0ed0: 20 20 74 6e 75 6d 20 20 20 20 20 20 20 69 6e 74    tnum       int
0ee0: 65 67 65 72 2c 20 2d 2d 20 20 54 68 65 20 69 6e  eger, --  The in
0ef0: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
0f00: 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 0a 20  r of root page. 
0f10: 20 2a 2a 20 20 20 20 20 20 20 20 74 62 6c 5f 6e   **        tbl_n
0f20: 61 6d 65 20 20 20 74 65 78 74 2c 20 20 20 20 2d  ame   text,    -
0f30: 2d 20 20 41 73 73 6f 63 69 61 74 65 64 20 74 61  -  Associated ta
0f40: 62 6c 65 20 0a 20 20 2a 2a 20 20 20 20 20 20 20  ble .  **       
0f50: 20 73 71 6c 20 20 20 20 20 20 20 20 74 65 78 74   sql        text
0f60: 20 20 20 20 20 2d 2d 20 20 54 68 65 20 43 52 45       --  The CRE
0f70: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  ATE statement fo
0f80: 72 20 74 68 69 73 20 6f 62 6a 65 63 74 0a 20 20  r this object.  
0f90: 2a 2a 20 20 20 20 29 3b 0a 20 20 2a 2a 0a 20 20  **    );.  **.  
0fa0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  ** The sqlite_ma
0fb0: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
0fc0: 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 65 6e 74  ins a single ent
0fd0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
0fe0: 65 0a 20 20 2a 2a 20 61 6e 64 20 65 61 63 68 20  e.  ** and each 
0ff0: 69 6e 64 65 78 2e 20 20 54 68 65 20 22 74 79 70  index.  The "typ
1000: 65 22 20 63 6f 6c 75 6d 6e 20 74 65 6c 6c 73 20  e" column tells 
1010: 77 68 65 74 68 65 72 20 74 68 65 20 65 6e 74 72  whether the entr
1020: 79 20 69 73 0a 20 20 2a 2a 20 61 20 74 61 62 6c  y is.  ** a tabl
1030: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65  e or index.  The
1040: 20 22 6e 61 6d 65 22 20 63 6f 6c 75 6d 6e 20 69   "name" column i
1050: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
1060: 65 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2a 20 54  e object..  ** T
1070: 68 65 20 22 74 62 6c 5f 6e 61 6d 65 22 20 69 73  he "tbl_name" is
1080: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
1090: 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c   associated tabl
10a0: 65 2e 20 20 46 6f 72 20 74 61 62 6c 65 73 2c 0a  e.  For tables,.
10b0: 20 20 2a 2a 20 74 68 65 20 74 62 6c 5f 6e 61 6d    ** the tbl_nam
10c0: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61  e column is alwa
10d0: 79 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 6e  ys the same as n
10e0: 61 6d 65 2e 20 20 46 6f 72 20 69 6e 64 69 63 65  ame.  For indice
10f0: 73 2c 20 74 68 65 0a 20 20 2a 2a 20 74 62 6c 5f  s, the.  ** tbl_
1100: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74  name column cont
1110: 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
1120: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
1130: 74 68 65 20 69 6e 64 65 78 0a 20 20 2a 2a 20 69  the index.  ** i
1140: 6e 64 65 78 65 73 2e 20 20 46 69 6e 61 6c 6c 79  ndexes.  Finally
1150: 2c 20 74 68 65 20 22 73 71 6c 22 20 63 6f 6c 75  , the "sql" colu
1160: 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  mn contains the 
1170: 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
1180: 0a 20 20 2a 2a 20 74 68 65 20 43 52 45 41 54 45  .  ** the CREATE
1190: 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45   TABLE or CREATE
11a0: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
11b0: 20 74 68 61 74 20 6f 72 69 67 69 6e 61 6c 6c 79   that originally
11c0: 20 63 72 65 61 74 65 64 0a 20 20 2a 2a 20 74 68   created.  ** th
11d0: 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
11e0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 74  ..  **.  ** If t
11f0: 68 65 20 22 74 79 70 65 22 20 63 6f 6c 75 6d 6e  he "type" column
1200: 20 68 61 73 20 74 68 65 20 76 61 6c 75 65 20 22   has the value "
1210: 6d 65 74 61 22 2c 20 74 68 65 6e 20 74 68 65 20  meta", then the 
1220: 22 73 71 6c 22 20 63 6f 6c 75 6d 6e 0a 20 20 2a  "sql" column.  *
1230: 2a 20 63 6f 6e 74 61 69 6e 73 20 65 78 74 72 61  * contains extra
1240: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1250: 75 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  ut the database,
1260: 20 73 75 63 68 20 61 73 20 74 68 65 0a 20 20 2a   such as the.  *
1270: 2a 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 76 65  * file format ve
1280: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20 41  rsion number.  A
1290: 6c 6c 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74  ll meta informat
12a0: 69 6f 6e 20 6d 75 73 74 20 62 65 20 70 72 6f 63  ion must be proc
12b0: 65 73 73 65 64 0a 20 20 2a 2a 20 62 65 66 6f 72  essed.  ** befor
12c0: 65 20 61 6e 79 20 74 61 62 6c 65 73 20 6f 72 20  e any tables or 
12d0: 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73  indices are cons
12e0: 74 72 75 63 74 65 64 2e 0a 20 20 2a 2a 0a 20 20  tructed..  **.  
12f0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1300: 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 6b 65 73   program invokes
1310: 20 69 74 73 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   its callback on
1320: 20 74 68 65 20 53 51 4c 20 66 6f 72 20 65 61 63   the SQL for eac
1330: 68 0a 20 20 2a 2a 20 74 61 62 6c 65 20 74 68 65  h.  ** table the
1340: 6e 20 67 6f 65 73 20 62 61 63 6b 20 61 6e 64 20  n goes back and 
1350: 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 61 6c 6c  invokes the call
1360: 62 61 63 6b 20 6f 6e 20 74 68 65 0a 20 20 2a 2a  back on the.  **
1370: 20 53 51 4c 20 66 6f 72 20 65 61 63 68 20 69 6e   SQL for each in
1380: 64 65 78 2e 20 20 54 68 65 20 63 61 6c 6c 62 61  dex.  The callba
1390: 63 6b 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74  ck will invoke t
13a0: 68 65 0a 20 20 2a 2a 20 70 61 72 73 65 72 20 74  he.  ** parser t
13b0: 6f 20 62 75 69 6c 64 20 74 68 65 20 69 6e 74 65  o build the inte
13c0: 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
13d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20  ion of the.  ** 
13e0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 65 2e  database scheme.
13f0: 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 56  .  */.  static V
1400: 64 62 65 4f 70 20 69 6e 69 74 50 72 6f 67 5b 5d  dbeOp initProg[]
1410: 20 3d 20 7b 0a 20 20 20 20 7b 20 4f 50 5f 4f 70   = {.    { OP_Op
1420: 65 6e 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 30  en,     0, 2,  0
1430: 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 52 65 77 69  },.    { OP_Rewi
1440: 6e 64 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c  nd,   0, 0,  0},
1450: 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20  .    { OP_Next, 
1460: 20 20 20 20 30 2c 20 31 32 2c 20 30 7d 2c 20 20      0, 12, 0},  
1470: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 20 2a 2f           /* 2 */
1480: 0a 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e  .    { OP_Column
1490: 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a 20  ,   0, 0,  0},. 
14a0: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20     { OP_String, 
14b0: 20 20 30 2c 20 30 2c 20 20 22 6d 65 74 61 22 7d    0, 0,  "meta"}
14c0: 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20  ,.    { OP_Ne,  
14d0: 20 20 20 20 20 30 2c 20 32 2c 20 20 30 7d 2c 0a       0, 2,  0},.
14e0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c      { OP_Column,
14f0: 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a 20 20     0, 0,  0},.  
1500: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20    { OP_Column,  
1510: 20 30 2c 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20   0, 1,  0},.    
1520: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30  { OP_Column,   0
1530: 2c 20 32 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 2,  0},.    { 
1540: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20  OP_Column,   0, 
1550: 34 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  4,  0},.    { OP
1560: 5f 43 61 6c 6c 62 61 63 6b 2c 20 34 2c 20 30 2c  _Callback, 4, 0,
1570: 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 47    0},.    { OP_G
1580: 6f 74 6f 2c 20 20 20 20 20 30 2c 20 32 2c 20 20  oto,     0, 2,  
1590: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 52 65 77  0},.    { OP_Rew
15a0: 69 6e 64 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d  ind,   0, 0,  0}
15b0: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ,           /* 1
15c0: 32 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 4e 65  2 */.    { OP_Ne
15d0: 78 74 2c 20 20 20 20 20 30 2c 20 32 33 2c 20 30  xt,     0, 23, 0
15e0: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  },           /* 
15f0: 31 33 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 43  13 */.    { OP_C
1600: 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 30 2c 20 20  olumn,   0, 0,  
1610: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 53 74 72  0},.    { OP_Str
1620: 69 6e 67 2c 20 20 20 30 2c 20 30 2c 20 20 22 74  ing,   0, 0,  "t
1630: 61 62 6c 65 22 7d 2c 0a 20 20 20 20 7b 20 4f 50  able"},.    { OP
1640: 5f 4e 65 2c 20 20 20 20 20 20 20 30 2c 20 31 33  _Ne,       0, 13
1650: 2c 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43  , 0},.    { OP_C
1660: 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 30 2c 20 20  olumn,   0, 0,  
1670: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 6f 6c  0},.    { OP_Col
1680: 75 6d 6e 2c 20 20 20 30 2c 20 31 2c 20 20 30 7d  umn,   0, 1,  0}
1690: 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d  ,.    { OP_Colum
16a0: 6e 2c 20 20 20 30 2c 20 32 2c 20 20 30 7d 2c 0a  n,   0, 2,  0},.
16b0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c      { OP_Column,
16c0: 20 20 20 30 2c 20 34 2c 20 20 30 7d 2c 0a 20 20     0, 4,  0},.  
16d0: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
16e0: 20 34 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20   4, 0,  0},.    
16f0: 7b 20 4f 50 5f 47 6f 74 6f 2c 20 20 20 20 20 30  { OP_Goto,     0
1700: 2c 20 31 33 2c 20 30 7d 2c 0a 20 20 20 20 7b 20  , 13, 0},.    { 
1710: 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20 30 2c 20  OP_Rewind,   0, 
1720: 30 2c 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20  0,  0},         
1730: 20 20 2f 2a 20 32 33 20 2a 2f 0a 20 20 20 20 7b    /* 23 */.    {
1740: 20 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20 30 2c   OP_Next,     0,
1750: 20 33 34 2c 20 30 7d 2c 20 20 20 20 20 20 20 20   34, 0},        
1760: 20 20 20 2f 2a 20 32 34 20 2a 2f 0a 20 20 20 20     /* 24 */.    
1770: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30  { OP_Column,   0
1780: 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 0,  0},.    { 
1790: 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 30 2c 20  OP_String,   0, 
17a0: 30 2c 20 20 22 69 6e 64 65 78 22 7d 2c 0a 20 20  0,  "index"},.  
17b0: 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20 20 20    { OP_Ne,      
17c0: 20 30 2c 20 32 34 2c 20 30 7d 2c 0a 20 20 20 20   0, 24, 0},.    
17d0: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30  { OP_Column,   0
17e0: 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 0,  0},.    { 
17f0: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20  OP_Column,   0, 
1800: 31 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  1,  0},.    { OP
1810: 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 32 2c  _Column,   0, 2,
1820: 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43    0},.    { OP_C
1830: 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 34 2c 20 20  olumn,   0, 4,  
1840: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 61 6c  0},.    { OP_Cal
1850: 6c 62 61 63 6b 2c 20 34 2c 20 30 2c 20 20 30 7d  lback, 4, 0,  0}
1860: 2c 0a 20 20 20 20 7b 20 4f 50 5f 47 6f 74 6f 2c  ,.    { OP_Goto,
1870: 20 20 20 20 20 30 2c 20 32 34 2c 20 30 7d 2c 0a       0, 24, 0},.
1880: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
1890: 20 20 20 30 2c 20 30 2c 20 20 22 6d 65 74 61 22     0, 0,  "meta"
18a0: 7d 2c 20 20 20 20 20 20 2f 2a 20 33 34 20 2a 2f  },      /* 34 */
18b0: 0a 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67  .    { OP_String
18c0: 2c 20 20 20 30 2c 20 30 2c 20 20 22 73 63 68 65  ,   0, 0,  "sche
18d0: 6d 61 2d 63 6f 6f 6b 69 65 22 7d 2c 0a 20 20 20  ma-cookie"},.   
18e0: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20   { OP_String,   
18f0: 30 2c 20 30 2c 20 20 22 22 7d 2c 0a 20 20 20 20  0, 0,  ""},.    
1900: 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
1910: 30 2c 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  0,0,  0},.    { 
1920: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 34 2c 20  OP_Callback, 4, 
1930: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  0,  0},.    { OP
1940: 5f 43 6c 6f 73 65 2c 20 20 20 20 30 2c 20 30 2c  _Close,    0, 0,
1950: 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 48    0},.    { OP_H
1960: 61 6c 74 2c 20 20 20 20 20 30 2c 20 30 2c 20 20  alt,     0, 0,  
1970: 30 7d 2c 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 20 43  0},.  };..  /* C
1980: 72 65 61 74 65 20 61 20 76 69 72 74 75 61 6c 20  reate a virtual 
1990: 6d 61 63 68 69 6e 65 20 74 6f 20 72 75 6e 20 74  machine to run t
19a0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
19b0: 6e 20 70 72 6f 67 72 61 6d 2e 20 20 52 75 6e 0a  n program.  Run.
19c0: 20 20 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d    ** the program
19d0: 2e 20 20 54 68 65 20 64 65 6c 65 74 65 20 74 68  .  The delete th
19e0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
19f0: 65 2e 0a 20 20 2a 2f 0a 20 20 76 64 62 65 20 3d  e..  */.  vdbe =
1a00: 20 73 71 6c 69 74 65 56 64 62 65 43 72 65 61 74   sqliteVdbeCreat
1a10: 65 28 64 62 29 3b 0a 20 20 69 66 28 20 76 64 62  e(db);.  if( vdb
1a20: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  e==0 ){.    sqli
1a30: 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  teSetString(pzEr
1a40: 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65  rMsg, "out of me
1a50: 6d 6f 72 79 22 29 3b 0a 20 20 20 20 72 65 74 75  mory");.    retu
1a60: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
1a70: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 56 64 62  .  }.  sqliteVdb
1a80: 65 41 64 64 4f 70 4c 69 73 74 28 76 64 62 65 2c  eAddOpList(vdbe,
1a90: 20 73 69 7a 65 6f 66 28 69 6e 69 74 50 72 6f 67   sizeof(initProg
1aa0: 29 2f 73 69 7a 65 6f 66 28 69 6e 69 74 50 72 6f  )/sizeof(initPro
1ab0: 67 5b 30 5d 29 2c 20 69 6e 69 74 50 72 6f 67 29  g[0]), initProg)
1ac0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 56  ;.  rc = sqliteV
1ad0: 64 62 65 45 78 65 63 28 76 64 62 65 2c 20 73 71  dbeExec(vdbe, sq
1ae0: 6c 69 74 65 4f 70 65 6e 43 62 2c 20 64 62 2c 20  liteOpenCb, db, 
1af0: 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20 20 20 20  pzErrMsg, .     
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b10: 20 64 62 2d 3e 70 42 75 73 79 41 72 67 2c 20 64   db->pBusyArg, d
1b20: 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b  b->xBusyCallback
1b30: 29 3b 0a 20 20 73 71 6c 69 74 65 56 64 62 65 44  );.  sqliteVdbeD
1b40: 65 6c 65 74 65 28 76 64 62 65 29 3b 0a 20 20 69  elete(vdbe);.  i
1b50: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b60: 20 26 26 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72   && db->file_for
1b70: 6d 61 74 3e 31 20 26 26 20 64 62 2d 3e 6e 54 61  mat>1 && db->nTa
1b80: 62 6c 65 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c  ble>0 ){.    sql
1b90: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
1ba0: 72 72 4d 73 67 2c 20 22 75 6e 73 75 70 70 6f 72  rrMsg, "unsuppor
1bb0: 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 22  ted file format"
1bc0: 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  , 0);.    rc = S
1bd0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1be0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1bf0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 61 62 6c  E_OK ){.    Tabl
1c00: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 63 68 61  e *pTab;.    cha
1c10: 72 20 2a 61 7a 41 72 67 5b 35 5d 3b 0a 20 20 20  r *azArg[5];.   
1c20: 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74 61 62   azArg[0] = "tab
1c30: 6c 65 22 3b 0a 20 20 20 20 61 7a 41 72 67 5b 31  le";.    azArg[1
1c40: 5d 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  ] = MASTER_NAME;
1c50: 0a 20 20 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20  .    azArg[2] = 
1c60: 22 32 22 3b 0a 20 20 20 20 61 7a 41 72 67 5b 33  "2";.    azArg[3
1c70: 5d 20 3d 20 6d 61 73 74 65 72 5f 73 63 68 65 6d  ] = master_schem
1c80: 61 3b 0a 20 20 20 20 61 7a 41 72 67 5b 34 5d 20  a;.    azArg[4] 
1c90: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 4f  = 0;.    sqliteO
1ca0: 70 65 6e 43 62 28 64 62 2c 20 34 2c 20 61 7a 41  penCb(db, 4, azA
1cb0: 72 67 2c 20 30 29 3b 0a 20 20 20 20 70 54 61 62  rg, 0);.    pTab
1cc0: 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 54 61 62   = sqliteFindTab
1cd0: 6c 65 28 64 62 2c 20 4d 41 53 54 45 52 5f 4e 41  le(db, MASTER_NA
1ce0: 4d 45 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  ME);.    if( pTa
1cf0: 62 20 29 7b 0a 20 20 20 20 20 20 70 54 61 62 2d  b ){.      pTab-
1d00: 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20  >readOnly = 1;. 
1d10: 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 66 6c 61     }.    db->fla
1d20: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 69  gs |= SQLITE_Ini
1d30: 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20 20 73 71  tialized;.    sq
1d40: 6c 69 74 65 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  liteCommitIntern
1d50: 61 6c 43 68 61 6e 67 65 73 28 64 62 29 3b 0a 20  alChanges(db);. 
1d60: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
1d70: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72  }../*.** The ver
1d80: 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  sion of the libr
1d90: 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  ary.*/.const cha
1da0: 72 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  r sqlite_version
1db0: 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53  [] = SQLITE_VERS
1dc0: 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73  ION;../*.** Does
1dd0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 65 78 70   the library exp
1de0: 65 63 74 20 64 61 74 61 20 74 6f 20 62 65 20 65  ect data to be e
1df0: 6e 63 6f 64 65 64 20 61 73 20 55 54 46 2d 38 20  ncoded as UTF-8 
1e00: 6f 72 20 69 73 6f 38 38 35 39 3f 20 20 54 68 65  or iso8859?  The
1e10: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  .** following gl
1e20: 6f 62 61 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c  obal constant al
1e30: 77 61 79 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f  ways lets us kno
1e40: 77 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  w..*/.#ifdef SQL
1e50: 49 54 45 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63  ITE_UTF8.const c
1e60: 68 61 72 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64  har sqlite_encod
1e70: 69 6e 67 5b 5d 20 3d 20 22 55 54 46 2d 38 22 3b  ing[] = "UTF-8";
1e80: 0a 23 65 6c 73 65 0a 63 6f 6e 73 74 20 63 68 61  .#else.const cha
1e90: 72 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e  r sqlite_encodin
1ea0: 67 5b 5d 20 3d 20 22 69 73 6f 38 38 35 39 22 3b  g[] = "iso8859";
1eb0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
1ec0: 70 65 6e 20 61 20 6e 65 77 20 53 51 4c 69 74 65  pen a new SQLite
1ed0: 20 64 61 74 61 62 61 73 65 2e 20 20 43 6f 6e 73   database.  Cons
1ee0: 74 72 75 63 74 20 61 6e 20 22 73 71 6c 69 74 65  truct an "sqlite
1ef0: 22 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 64  " structure to d
1f00: 65 66 69 6e 65 0a 2a 2a 20 74 68 65 20 73 74 61  efine.** the sta
1f10: 74 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  te of this datab
1f20: 61 73 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61  ase and return a
1f30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 61 74   pointer to that
1f40: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
1f50: 2a 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  * An attempt is 
1f60: 6d 61 64 65 20 74 6f 20 69 6e 69 74 69 61 6c 69  made to initiali
1f70: 7a 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  ze the in-memory
1f80: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
1f90: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 20 74 68   that.** hold th
1fa0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1fb0: 61 2e 20 20 42 75 74 20 69 66 20 74 68 69 73 20  a.  But if this 
1fc0: 66 61 69 6c 73 20 28 62 65 63 61 75 73 65 20 74  fails (because t
1fd0: 68 65 20 73 63 68 65 6d 61 20 66 69 6c 65 0a 2a  he schema file.*
1fe0: 2a 20 69 73 20 6c 6f 63 6b 65 64 29 20 74 68 65  * is locked) the
1ff0: 6e 20 74 68 61 74 20 73 74 65 70 20 69 73 20 64  n that step is d
2000: 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68  eferred until th
2010: 65 20 66 69 72 73 74 20 63 61 6c 6c 20 74 6f 0a  e first call to.
2020: 2a 2a 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29  ** sqlite_exec()
2030: 2e 0a 2a 2f 0a 73 71 6c 69 74 65 20 2a 73 71 6c  ..*/.sqlite *sql
2040: 69 74 65 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63  ite_open(const c
2050: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
2060: 69 6e 74 20 6d 6f 64 65 2c 20 63 68 61 72 20 2a  int mode, char *
2070: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 73 71  *pzErrMsg){.  sq
2080: 6c 69 74 65 20 2a 64 62 3b 0a 20 20 69 6e 74 20  lite *db;.  int 
2090: 72 63 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61  rc;..  /* Alloca
20a0: 74 65 20 74 68 65 20 73 71 6c 69 74 65 20 64 61  te the sqlite da
20b0: 74 61 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  ta structure */.
20c0: 20 20 64 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c    db = sqliteMal
20d0: 6c 6f 63 28 20 73 69 7a 65 6f 66 28 73 71 6c 69  loc( sizeof(sqli
20e0: 74 65 29 20 29 3b 0a 20 20 69 66 28 20 70 7a 45  te) );.  if( pzE
20f0: 72 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73  rrMsg ) *pzErrMs
2100: 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 3d  g = 0;.  if( db=
2110: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2120: 5f 6f 6e 5f 6f 70 65 6e 3b 0a 20 20 0a 20 20 2f  _on_open;.  .  /
2130: 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65  * Open the backe
2140: 6e 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76  nd database driv
2150: 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  er */.  rc = sql
2160: 69 74 65 42 74 72 65 65 4f 70 65 6e 28 7a 46 69  iteBtreeOpen(zFi
2170: 6c 65 6e 61 6d 65 2c 20 6d 6f 64 65 2c 20 4d 41  lename, mode, MA
2180: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 70 42  X_PAGES, &db->pB
2190: 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
21a0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
21b0: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
21c0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
21d0: 20 20 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d        if( pzErrM
21e0: 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  sg ){.          
21f0: 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28  sqliteSetString(
2200: 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 61 62 6c  pzErrMsg, "unabl
2210: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
2220: 73 65 3a 20 22 2c 20 7a 46 69 6c 65 6e 61 6d 65  se: ", zFilename
2230: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 0);.        }.
2240: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2250: 20 20 73 71 6c 69 74 65 46 72 65 65 28 64 62 29    sqliteFree(db)
2260: 3b 0a 20 20 20 20 73 71 6c 69 74 65 53 74 72 52  ;.    sqliteStrR
2270: 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29  ealloc(pzErrMsg)
2280: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
2290: 20 20 7d 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 65    }..  /* Assume
22a0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 31 20 75   file format 1 u
22b0: 6e 6c 65 73 73 20 74 68 65 20 64 61 74 61 62 61  nless the databa
22c0: 73 65 20 73 61 79 73 20 6f 74 68 65 72 77 69 73  se says otherwis
22d0: 65 20 2a 2f 0a 20 20 64 62 2d 3e 66 69 6c 65 5f  e */.  db->file_
22e0: 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 0a 20 20 2f  format = 1;..  /
22f0: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61  * Attempt to rea
2300: 64 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a  d the schema */.
2310: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69    rc = sqliteIni
2320: 74 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b  t(db, pzErrMsg);
2330: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 5f 6d 61  .  if( sqlite_ma
2340: 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20  lloc_failed ){. 
2350: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f     goto no_mem_o
2360: 6e 5f 6f 70 65 6e 3b 0a 20 20 7d 65 6c 73 65 20  n_open;.  }else 
2370: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
2380: 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  K && rc!=SQLITE_
2390: 42 55 53 59 20 29 7b 0a 20 20 20 20 73 71 6c 69  BUSY ){.    sqli
23a0: 74 65 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20  te_close(db);.  
23b0: 20 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c    sqliteStrReall
23c0: 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  oc(pzErrMsg);.  
23d0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
23e0: 6c 73 65 20 2f 2a 20 69 66 28 20 70 7a 45 72 72  lse /* if( pzErr
23f0: 4d 73 67 20 29 20 2a 2f 7b 0a 20 20 20 20 73 71  Msg ) */{.    sq
2400: 6c 69 74 65 46 72 65 65 28 2a 70 7a 45 72 72 4d  liteFree(*pzErrM
2410: 73 67 29 3b 0a 20 20 20 20 2a 70 7a 45 72 72 4d  sg);.    *pzErrM
2420: 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65  sg = 0;.  }.  re
2430: 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f 5f 6d 65 6d  turn db;..no_mem
2440: 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20 73 71 6c 69  _on_open:.  sqli
2450: 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  teSetString(pzEr
2460: 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65  rMsg, "out of me
2470: 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 73 71 6c  mory", 0);.  sql
2480: 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a  iteStrRealloc(pz
2490: 45 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72  ErrMsg);.  retur
24a0: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 72  n 0;.}../*.** Er
24b0: 61 73 65 20 61 6c 6c 20 73 63 68 65 6d 61 20 69  ase all schema i
24c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
24d0: 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 68 20  the schema hash 
24e0: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  table..**.** The
24f0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2500: 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 61   is normally rea
2510: 64 20 69 6e 20 6f 6e 63 65 20 77 68 65 6e 20 74  d in once when t
2520: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69  he database.** i
2530: 73 20 66 69 72 73 74 20 6f 70 65 6e 65 64 20 61  s first opened a
2540: 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 61 20 68  nd stored in a h
2550: 61 73 68 20 74 61 62 6c 65 20 69 6e 20 74 68 65  ash table in the
2560: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75 72   sqlite structur
2570: 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  e..** This routi
2580: 6e 65 20 65 72 61 73 65 73 20 74 68 65 20 73 74  ne erases the st
2590: 6f 72 65 64 20 73 63 68 65 6d 61 2e 20 20 54 68  ored schema.  Th
25a0: 69 73 20 65 72 61 73 75 72 65 20 6f 63 63 75 72  is erasure occur
25b0: 73 20 62 65 63 61 75 73 65 0a 2a 2a 20 65 69 74  s because.** eit
25c0: 68 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  her the database
25d0: 20 69 73 20 62 65 69 6e 67 20 63 6c 6f 73 65 64   is being closed
25e0: 20 6f 72 20 62 65 63 61 75 73 65 20 73 6f 6d 65   or because some
25f0: 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 2a   other process.*
2600: 2a 20 63 68 61 6e 67 65 64 20 74 68 65 20 73 63  * changed the sc
2610: 68 65 6d 61 20 61 6e 64 20 74 68 69 73 20 70 72  hema and this pr
2620: 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
2630: 65 72 65 61 64 20 69 74 2e 0a 2a 2f 0a 73 74 61  eread it..*/.sta
2640: 74 69 63 20 76 6f 69 64 20 63 6c 65 61 72 48 61  tic void clearHa
2650: 73 68 54 61 62 6c 65 28 73 71 6c 69 74 65 20 2a  shTable(sqlite *
2660: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  db){.  int i;.  
2670: 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 48 41 53  for(i=0; i<N_HAS
2680: 48 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 61 62  H; i++){.    Tab
2690: 6c 65 20 2a 70 4e 65 78 74 2c 20 2a 70 4c 69 73  le *pNext, *pLis
26a0: 74 20 3d 20 64 62 2d 3e 61 70 54 62 6c 48 61 73  t = db->apTblHas
26b0: 68 5b 69 5d 3b 0a 20 20 20 20 64 62 2d 3e 61 70  h[i];.    db->ap
26c0: 54 62 6c 48 61 73 68 5b 69 5d 20 3d 20 30 3b 0a  TblHash[i] = 0;.
26d0: 20 20 20 20 77 68 69 6c 65 28 20 70 4c 69 73 74      while( pList
26e0: 20 29 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20   ){.      pNext 
26f0: 3d 20 70 4c 69 73 74 2d 3e 70 48 61 73 68 3b 0a  = pList->pHash;.
2700: 20 20 20 20 20 20 70 4c 69 73 74 2d 3e 70 48 61        pList->pHa
2710: 73 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  sh = 0;.      sq
2720: 6c 69 74 65 44 65 6c 65 74 65 54 61 62 6c 65 28  liteDeleteTable(
2730: 64 62 2c 20 70 4c 69 73 74 29 3b 0a 20 20 20 20  db, pList);.    
2740: 20 20 70 4c 69 73 74 20 3d 20 70 4e 65 78 74 3b    pList = pNext;
2750: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 2d  .    }.  }.  db-
2760: 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54  >flags &= ~SQLIT
2770: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 7d  E_Initialized;.}
2780: 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e  ../*.** Close an
2790: 20 65 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65   existing SQLite
27a0: 20 64 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69   database.*/.voi
27b0: 64 20 73 71 6c 69 74 65 5f 63 6c 6f 73 65 28 73  d sqlite_close(s
27c0: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 73 71  qlite *db){.  sq
27d0: 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65 28 64  liteBtreeClose(d
27e0: 62 2d 3e 70 42 65 29 3b 0a 20 20 63 6c 65 61 72  b->pBe);.  clear
27f0: 48 61 73 68 54 61 62 6c 65 28 64 62 29 3b 0a 20  HashTable(db);. 
2800: 20 73 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b   sqliteFree(db);
2810: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
2820: 20 54 52 55 45 20 69 66 20 74 68 65 20 67 69 76   TRUE if the giv
2830: 65 6e 20 53 51 4c 20 73 74 72 69 6e 67 20 65 6e  en SQL string en
2840: 64 73 20 69 6e 20 61 20 73 65 6d 69 63 6f 6c 6f  ds in a semicolo
2850: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
2860: 5f 63 6f 6d 70 6c 65 74 65 28 63 6f 6e 73 74 20  _complete(const 
2870: 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69  char *zSql){.  i
2880: 6e 74 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20  nt isComplete = 
2890: 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 53 71  0;.  while( *zSq
28a0: 6c 20 29 7b 0a 20 20 20 20 73 77 69 74 63 68 28  l ){.    switch(
28b0: 20 2a 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20   *zSql ){.      
28c0: 63 61 73 65 20 27 3b 27 3a 20 7b 0a 20 20 20 20  case ';': {.    
28d0: 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d      isComplete =
28e0: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
28f0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
2900: 20 63 61 73 65 20 27 20 27 3a 0a 20 20 20 20 20   case ' ':.     
2910: 20 63 61 73 65 20 27 5c 74 27 3a 0a 20 20 20 20   case '\t':.    
2920: 20 20 63 61 73 65 20 27 5c 6e 27 3a 0a 20 20 20    case '\n':.   
2930: 20 20 20 63 61 73 65 20 27 5c 66 27 3a 20 7b 0a     case '\f': {.
2940: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2950: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
2960: 65 20 27 5c 27 27 3a 20 7b 0a 20 20 20 20 20 20  e '\'': {.      
2970: 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30    isComplete = 0
2980: 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b  ;.        zSql++
2990: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
29a0: 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21   *zSql && *zSql!
29b0: 3d 27 5c 27 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b  ='\'' ){ zSql++;
29c0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a   }.        if( *
29d0: 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e  zSql==0 ) return
29e0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
29f0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
2a00: 20 63 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20   case '"': {.   
2a10: 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20       isComplete 
2a20: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71  = 0;.        zSq
2a30: 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69  l++;.        whi
2a40: 6c 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53  le( *zSql && *zS
2a50: 71 6c 21 3d 27 22 27 20 29 7b 20 7a 53 71 6c 2b  ql!='"' ){ zSql+
2a60: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  +; }.        if(
2a70: 20 2a 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75   *zSql==0 ) retu
2a80: 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72  rn 0;.        br
2a90: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2aa0: 20 20 20 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20     case '-': {. 
2ab0: 20 20 20 20 20 20 20 69 66 28 20 7a 53 71 6c 5b         if( zSql[
2ac0: 31 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  1]!='-' ){.     
2ad0: 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20       isComplete 
2ae0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
2af0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
2b00: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
2b10: 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27  zSql && *zSql!='
2b20: 5c 6e 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d  \n' ){ zSql++; }
2b30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53  .        if( *zS
2b40: 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 69  ql==0 ) return i
2b50: 73 43 6f 6d 70 6c 65 74 65 3b 0a 20 20 20 20 20  sComplete;.     
2b60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2b70: 7d 20 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74  } .      default
2b80: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f  : {.        isCo
2b90: 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20  mplete = 0;.    
2ba0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2bb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71   }.    }.    zSq
2bc0: 6c 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  l++;.  }.  retur
2bd0: 6e 20 69 73 43 6f 6d 70 6c 65 74 65 3b 0a 7d 0a  n isComplete;.}.
2be0: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 53  ./*.** Execute S
2bf0: 51 4c 20 63 6f 64 65 2e 20 20 52 65 74 75 72 6e  QL code.  Return
2c00: 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
2c10: 54 45 5f 20 73 75 63 63 65 73 73 2f 66 61 69 6c  TE_ success/fail
2c20: 75 72 65 0a 2a 2a 20 63 6f 64 65 73 2e 20 20 41  ure.** codes.  A
2c30: 6c 73 6f 20 77 72 69 74 65 20 61 6e 20 65 72 72  lso write an err
2c40: 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20  or message into 
2c50: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
2c60: 66 72 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29  from.** malloc()
2c70: 20 61 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72   and make *pzErr
2c80: 4d 73 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61  Msg point to tha
2c90: 74 20 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a 2a 2a  t message..**.**
2ca0: 20 49 66 20 74 68 65 20 53 51 4c 20 69 73 20 61   If the SQL is a
2cb0: 20 71 75 65 72 79 2c 20 74 68 65 6e 20 66 6f 72   query, then for
2cc0: 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
2cd0: 20 71 75 65 72 79 20 72 65 73 75 6c 74 0a 2a 2a   query result.**
2ce0: 20 74 68 65 20 78 43 61 6c 6c 62 61 63 6b 28 29   the xCallback()
2cf0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c   function is cal
2d00: 6c 65 64 2e 20 20 70 41 72 67 20 62 65 63 6f 6d  led.  pArg becom
2d10: 65 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  es the first.** 
2d20: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c  argument to xCal
2d30: 6c 62 61 63 6b 28 29 2e 20 20 49 66 20 78 43 61  lback().  If xCa
2d40: 6c 6c 62 61 63 6b 3d 4e 55 4c 4c 20 74 68 65 6e  llback=NULL then
2d50: 20 6e 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20   no callback.** 
2d60: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 65 76 65 6e  is invoked, even
2d70: 20 66 6f 72 20 71 75 65 72 69 65 73 2e 0a 2a 2f   for queries..*/
2d80: 0a 69 6e 74 20 73 71 6c 69 74 65 5f 65 78 65 63  .int sqlite_exec
2d90: 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20  (.  sqlite *db, 
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2dc0: 6f 6e 20 77 68 69 63 68 20 74 68 65 20 53 51 4c  on which the SQL
2dd0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63   executes */.  c
2de0: 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20  har *zSql,      
2df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2e00: 65 20 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63  e SQL to be exec
2e10: 75 74 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  uted */.  sqlite
2e20: 5f 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c 62  _callback xCallb
2e30: 61 63 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  ack,  /* Invoke 
2e40: 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 72 6f  this callback ro
2e50: 75 74 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64 20  utine */.  void 
2e60: 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20  *pArg,          
2e70: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2e80: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c  argument to xCal
2e90: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 63 68 61  lback() */.  cha
2ea0: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20  r **pzErrMsg    
2eb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2ec0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
2ed0: 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 50 61   here */.){.  Pa
2ee0: 72 73 65 20 73 50 61 72 73 65 3b 0a 0a 20 20 69  rse sParse;..  i
2ef0: 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20 2a 70  f( pzErrMsg ) *p
2f00: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
2f10: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2f20: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2f30: 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  ed)==0 ){.    in
2f40: 74 20 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69  t rc = sqliteIni
2f50: 74 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b  t(db, pzErrMsg);
2f60: 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
2f70: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2f80: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
2f90: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  (pzErrMsg);.    
2fa0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20    return rc;.   
2fb0: 20 7d 0a 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28   }.  }.  memset(
2fc0: 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65  &sParse, 0, size
2fd0: 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73  of(sParse));.  s
2fe0: 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20  Parse.db = db;. 
2ff0: 20 73 50 61 72 73 65 2e 70 42 65 20 3d 20 64 62   sParse.pBe = db
3000: 2d 3e 70 42 65 3b 0a 20 20 73 50 61 72 73 65 2e  ->pBe;.  sParse.
3010: 78 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  xCallback = xCal
3020: 6c 62 61 63 6b 3b 0a 20 20 73 50 61 72 73 65 2e  lback;.  sParse.
3030: 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 73  pArg = pArg;.  s
3040: 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72 28 26  qliteRunParser(&
3050: 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20 70 7a  sParse, zSql, pz
3060: 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 73  ErrMsg);.  if( s
3070: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
3080: 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  led ){.    sqlit
3090: 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  eSetString(pzErr
30a0: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
30b0: 6f 72 79 22 2c 20 30 29 3b 0a 20 20 20 20 73 50  ory", 0);.    sP
30c0: 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45  arse.rc = SQLITE
30d0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 73 71  _NOMEM;.  }.  sq
30e0: 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70  liteStrRealloc(p
30f0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
3100: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
3110: 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20  E_SCHEMA ){.    
3120: 63 6c 65 61 72 48 61 73 68 54 61 62 6c 65 28 64  clearHashTable(d
3130: 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  b);.  }.  return
3140: 20 73 50 61 72 73 65 2e 72 63 3b 0a 7d 0a 0a 2f   sParse.rc;.}../
3150: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
3160: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
3170: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
3180: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
3190: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
31a0: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
31b0: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
31c0: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
31d0: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
31e0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
31f0: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
3200: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
3210: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
3220: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
3230: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
3240: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69 6d  back(. void *Tim
3250: 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20 20  eout,           
3260: 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e  /* Maximum amoun
3270: 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61 69  t of time to wai
3280: 74 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68 61 72  t */. const char
3290: 20 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20 20 2f   *NotUsed,     /
32a0: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
32b0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
32c0: 62 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63 6f 75  busy */. int cou
32d0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nt              
32e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
32f0: 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62  imes table has b
3300: 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23  een busy */.){.#
3310: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
3320: 55 53 4c 45 45 50 29 20 26 26 20 48 41 56 45 5f  USLEEP) && HAVE_
3330: 55 53 4c 45 45 50 0a 20 20 69 6e 74 20 64 65 6c  USLEEP.  int del
3340: 61 79 20 3d 20 31 30 30 30 30 3b 0a 20 20 69 6e  ay = 10000;.  in
3350: 74 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 3d 20  t prior_delay = 
3360: 30 3b 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  0;.  int timeout
3370: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
3380: 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72  .  int i;..  for
3390: 28 69 3d 31 3b 20 69 3c 63 6f 75 6e 74 3b 20 69  (i=1; i<count; i
33a0: 2b 2b 29 7b 20 0a 20 20 20 20 70 72 69 6f 72 5f  ++){ .    prior_
33b0: 64 65 6c 61 79 20 2b 3d 20 64 65 6c 61 79 3b 0a  delay += delay;.
33c0: 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61      delay = dela
33d0: 79 2a 32 3b 0a 20 20 20 20 69 66 28 20 64 65 6c  y*2;.    if( del
33e0: 61 79 3e 3d 31 30 30 30 30 30 30 20 29 7b 0a 20  ay>=1000000 ){. 
33f0: 20 20 20 20 20 64 65 6c 61 79 20 3d 20 31 30 30       delay = 100
3400: 30 30 30 30 3b 0a 20 20 20 20 20 20 70 72 69 6f  0000;.      prio
3410: 72 5f 64 65 6c 61 79 20 2b 3d 20 31 30 30 30 30  r_delay += 10000
3420: 30 30 2a 28 63 6f 75 6e 74 20 2d 20 69 20 2d 20  00*(count - i - 
3430: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  1);.      break;
3440: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
3450: 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b 20 64   prior_delay + d
3460: 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 2a 31  elay > timeout*1
3470: 30 30 30 20 29 7b 0a 20 20 20 20 64 65 6c 61 79  000 ){.    delay
3480: 20 3d 20 74 69 6d 65 6f 75 74 2a 31 30 30 30 20   = timeout*1000 
3490: 2d 20 70 72 69 6f 72 5f 64 65 6c 61 79 3b 0a 20  - prior_delay;. 
34a0: 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20     if( delay<=0 
34b0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a  ) return 0;.  }.
34c0: 20 20 75 73 6c 65 65 70 28 64 65 6c 61 79 29 3b    usleep(delay);
34d0: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c  .  return 1;.#el
34e0: 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  se.  int timeout
34f0: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
3500: 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29  .  if( (count+1)
3510: 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20  *1000 > timeout 
3520: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
3530: 0a 20 20 7d 0a 20 20 73 6c 65 65 70 28 31 29 3b  .  }.  sleep(1);
3540: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e  .  return 1;.#en
3550: 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  dif.}../*.** Thi
3560: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
3570: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
3580: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
3590: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
35a0: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
35b0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
35c0: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
35d0: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
35e0: 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  e_busy_handler(.
35f0: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20 20    sqlite *db,.  
3600: 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69  int (*xBusy)(voi
3610: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  d*,const char*,i
3620: 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  nt),.  void *pAr
3630: 67 0a 29 7b 0a 20 20 64 62 2d 3e 78 42 75 73 79  g.){.  db->xBusy
3640: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 42 75 73 79  Callback = xBusy
3650: 3b 0a 20 20 64 62 2d 3e 70 42 75 73 79 41 72 67  ;.  db->pBusyArg
3660: 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a 2f 2a 0a 2a   = pArg;.}../*.*
3670: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
3680: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
3690: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
36a0: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
36b0: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
36c0: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
36d0: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
36e0: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69  urning 0..*/.voi
36f0: 64 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 74 69  d sqlite_busy_ti
3700: 6d 65 6f 75 74 28 73 71 6c 69 74 65 20 2a 64 62  meout(sqlite *db
3710: 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28  , int ms){.  if(
3720: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c   ms>0 ){.    sql
3730: 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  ite_busy_handler
3740: 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75  (db, sqliteDefau
3750: 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20  ltBusyCallback, 
3760: 28 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65  (void*)ms);.  }e
3770: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f  lse{.    sqlite_
3780: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
3790: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f   0, 0);.  }.}../
37a0: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
37b0: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
37c0: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
37d0: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
37e0: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
37f0: 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 28 73  lite_interrupt(s
3800: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64 62  qlite *db){.  db
3810: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
3820: 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a     E_Interrupt;.}.