/ Hex Artifact Content
Login

Artifact c5f8931674ac1fa8e8c6e0062d3c5700e204f3b7:


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 32 20 32 30 30 31 2f 30 39 2f 31 33 20 31 35  32 2001/09/13 15
04b0: 3a 32 31 3a 33 32 20 64 72 68 20 45 78 70 20 24  :21:32 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 65 78 74 20 6f 66  contains text of
0590: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
05a0: 6f 72 0a 2a 2a 20 43 52 45 41 54 45 20 49 4e 44  or.** CREATE IND
05b0: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  EX statement tha
05c0: 74 20 6d 75 73 74 20 62 65 20 70 61 72 73 65 64  t must be parsed
05d0: 20 74 6f 20 79 69 65 6c 64 20 74 68 65 20 69 6e   to yield the in
05e0: 74 65 72 6e 61 6c 0a 2a 2a 20 73 74 72 75 63 74  ternal.** struct
05f0: 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
0600: 62 65 20 74 68 65 20 74 61 62 6c 65 73 2e 0a 2a  be the tables..*
0610: 2a 0a 2a 2a 20 54 68 69 73 20 63 61 6c 6c 62 61  *.** This callba
0620: 63 6b 20 69 73 20 61 6c 73 6f 20 63 61 6c 6c 65  ck is also calle
0630: 64 20 77 69 74 68 20 61 72 67 63 3d 3d 32 20 77  d with argc==2 w
0640: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6d 65 74  hen there is met
0650: 61 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  a.** information
0660: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   in the sqlite_m
0670: 61 73 74 65 72 20 66 69 6c 65 2e 20 20 54 68 65  aster file.  The
0680: 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f   meta informatio
0690: 6e 20 69 73 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  n is.** containe
06a0: 64 20 69 6e 20 61 72 67 76 5b 31 5d 2e 20 20 54  d in argv[1].  T
06b0: 79 70 69 63 61 6c 20 6d 65 74 61 20 69 6e 66 6f  ypical meta info
06c0: 72 6d 61 74 69 6f 6e 20 69 73 20 74 68 65 20 66  rmation is the f
06d0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 76 65  ile format.** ve
06e0: 72 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  rsion..*/.static
06f0: 20 69 6e 74 20 73 71 6c 69 74 65 4f 70 65 6e 43   int sqliteOpenC
0700: 62 28 76 6f 69 64 20 2a 70 44 62 2c 20 69 6e 74  b(void *pDb, int
0710: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
0720: 67 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  gv, char **azCol
0730: 4e 61 6d 65 29 7b 0a 20 20 73 71 6c 69 74 65 20  Name){.  sqlite 
0740: 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 2a 29 70  *db = (sqlite*)p
0750: 44 62 3b 0a 20 20 50 61 72 73 65 20 73 50 61 72  Db;.  Parse sPar
0760: 73 65 3b 0a 20 20 69 6e 74 20 6e 45 72 72 3b 0a  se;.  int nErr;.
0770: 0a 20 20 69 66 28 20 61 72 67 63 3d 3d 32 20 29  .  if( argc==2 )
0780: 7b 0a 20 20 20 20 69 66 28 20 73 73 63 61 6e 66  {.    if( sscanf
0790: 28 61 72 67 76 5b 31 5d 2c 22 66 69 6c 65 20 66  (argv[1],"file f
07a0: 6f 72 6d 61 74 20 25 64 22 2c 26 64 62 2d 3e 66  ormat %d",&db->f
07b0: 69 6c 65 5f 66 6f 72 6d 61 74 29 3d 3d 31 20 29  ile_format)==1 )
07c0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  {.      return 0
07d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 55  ;.    }.    /* U
07e0: 6e 6b 6e 6f 77 6e 20 6d 65 74 61 20 69 6e 66 6f  nknown meta info
07f0: 72 6d 61 74 69 6f 6e 2e 20 20 49 67 6e 6f 72 65  rmation.  Ignore
0800: 20 69 74 2e 20 2a 2f 0a 20 20 20 20 72 65 74 75   it. */.    retu
0810: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
0820: 61 72 67 63 21 3d 31 20 29 20 72 65 74 75 72 6e  argc!=1 ) return
0830: 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 50   0;.  memset(&sP
0840: 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28  arse, 0, sizeof(
0850: 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50 61 72  sParse));.  sPar
0860: 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 50  se.db = db;.  sP
0870: 61 72 73 65 2e 69 6e 69 74 46 6c 61 67 20 3d 20  arse.initFlag = 
0880: 31 3b 0a 20 20 6e 45 72 72 20 3d 20 73 71 6c 69  1;.  nErr = sqli
0890: 74 65 52 75 6e 50 61 72 73 65 72 28 26 73 50 61  teRunParser(&sPa
08a0: 72 73 65 2c 20 61 72 67 76 5b 30 5d 2c 20 30 29  rse, argv[0], 0)
08b0: 3b 0a 20 20 72 65 74 75 72 6e 20 6e 45 72 72 3b  ;.  return nErr;
08c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70  .}../*.** Attemp
08d0: 74 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  t to read the da
08e0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e  tabase schema an
08f0: 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74  d initialize int
0900: 65 72 6e 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74  ernal.** data st
0910: 72 75 63 74 75 72 65 73 2e 20 20 52 65 74 75 72  ructures.  Retur
0920: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  n one of the SQL
0930: 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65 73  ITE_ error codes
0940: 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65 20   to.** indicate 
0950: 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75  success or failu
0960: 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  re..**.** After 
0970: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
0980: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65  initialized, the
0990: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
09a0: 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73 65  zed.** bit is se
09b0: 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20 66  t in the flags f
09c0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
09d0: 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  te structure.  A
09e0: 6e 0a 2a 2a 20 61 74 74 65 6d 70 74 20 69 73 20  n.** attempt is 
09f0: 6d 61 64 65 20 74 6f 20 69 6e 69 74 69 61 6c 69  made to initiali
0a00: 7a 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ze the database 
0a10: 61 73 20 73 6f 6f 6e 20 61 73 20 69 74 0a 2a 2a  as soon as it.**
0a20: 20 69 73 20 6f 70 65 6e 65 64 2e 20 20 49 66 20   is opened.  If 
0a30: 74 68 61 74 20 66 61 69 6c 73 20 28 70 65 72 68  that fails (perh
0a40: 61 70 73 20 62 65 63 61 75 73 65 20 61 6e 6f 74  aps because anot
0a50: 68 65 72 20 70 72 6f 63 65 73 73 0a 2a 2a 20 68  her process.** h
0a60: 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  as the sqlite_ma
0a70: 73 74 65 72 20 74 61 62 6c 65 20 6c 6f 63 6b 65  ster table locke
0a80: 64 29 20 74 68 61 6e 20 61 6e 6f 74 68 65 72 20  d) than another 
0a90: 61 74 74 65 6d 70 74 0a 2a 2a 20 69 73 20 6d 61  attempt.** is ma
0aa0: 64 65 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  de the first tim
0ab0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
0ac0: 73 20 61 63 63 65 73 73 65 64 2e 0a 2a 2f 0a 73  s accessed..*/.s
0ad0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
0ae0: 49 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c  Init(sqlite *db,
0af0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
0b00: 29 7b 0a 20 20 56 64 62 65 20 2a 76 64 62 65 3b  ){.  Vdbe *vdbe;
0b10: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a  .  int rc;..  /*
0b20: 0a 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65 72  .  ** The master
0b30: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
0b40: 68 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20  has a structure 
0b50: 6c 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20  like this.  */. 
0b60: 20 73 74 61 74 69 63 20 63 68 61 72 20 6d 61 73   static char mas
0b70: 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a  ter_schema[] = .
0b80: 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42       "CREATE TAB
0b90: 4c 45 20 22 20 4d 41 53 54 45 52 5f 4e 41 4d 45  LE " MASTER_NAME
0ba0: 20 22 20 28 5c 6e 22 0a 20 20 20 20 20 22 20 20   " (\n".     "  
0bb0: 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  type text,\n".  
0bc0: 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c     "  name text,
0bd0: 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 6e 75 6d  \n".     "  tnum
0be0: 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20   integer,\n".   
0bf0: 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65    "  tbl_name te
0c00: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73  xt,\n".     "  s
0c10: 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
0c20: 22 29 22 0a 20 20 3b 0a 0a 20 20 2f 2a 20 54 68  ")".  ;..  /* Th
0c30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 67  e following prog
0c40: 72 61 6d 20 69 73 20 75 73 65 64 20 74 6f 20 69  ram is used to i
0c50: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
0c60: 74 65 72 6e 61 6c 0a 20 20 2a 2a 20 73 74 72 75  ternal.  ** stru
0c70: 63 74 75 72 65 20 68 6f 6c 64 69 6e 67 20 74 68  cture holding th
0c80: 65 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  e tables and ind
0c90: 65 78 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  exes of the data
0ca0: 62 61 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 64  base..  ** The d
0cb0: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 73  atabase contains
0cc0: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
0cd0: 20 6e 61 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d   named "sqlite_m
0ce0: 61 73 74 65 72 22 0a 20 20 2a 2a 20 64 65 66 69  aster".  ** defi
0cf0: 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ned as follows:.
0d00: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 43 52 45    **.  **    CRE
0d10: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
0d20: 5f 6d 61 73 74 65 72 20 28 0a 20 20 2a 2a 20 20  _master (.  **  
0d30: 20 20 20 20 20 20 74 79 70 65 20 20 20 20 20 20        type      
0d40: 20 74 65 78 74 2c 20 20 20 20 2d 2d 20 20 45 69   text,    --  Ei
0d50: 74 68 65 72 20 22 74 61 62 6c 65 22 20 6f 72 20  ther "table" or 
0d60: 22 69 6e 64 65 78 22 20 6f 72 20 22 6d 65 74 61  "index" or "meta
0d70: 22 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 6e 61  ".  **        na
0d80: 6d 65 20 20 20 20 20 20 20 74 65 78 74 2c 20 20  me       text,  
0d90: 20 20 2d 2d 20 20 4e 61 6d 65 20 6f 66 20 74 61    --  Name of ta
0da0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 0a 20 20 2a  ble or index.  *
0db0: 2a 20 20 20 20 20 20 20 20 74 6e 75 6d 20 20 20  *        tnum   
0dc0: 20 20 20 20 69 6e 74 65 67 65 72 2c 20 2d 2d 20      integer, -- 
0dd0: 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 67   The integer pag
0de0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74  e number of root
0df0: 20 70 61 67 65 0a 20 20 2a 2a 20 20 20 20 20 20   page.  **      
0e00: 20 20 74 62 6c 5f 6e 61 6d 65 20 20 20 74 65 78    tbl_name   tex
0e10: 74 2c 20 20 20 20 2d 2d 20 20 41 73 73 6f 63 69  t,    --  Associ
0e20: 61 74 65 64 20 74 61 62 6c 65 20 0a 20 20 2a 2a  ated table .  **
0e30: 20 20 20 20 20 20 20 20 73 71 6c 20 20 20 20 20          sql     
0e40: 20 20 20 74 65 78 74 20 20 20 20 20 2d 2d 20 20     text     --  
0e50: 54 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65  The CREATE state
0e60: 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 6f 62  ment for this ob
0e70: 6a 65 63 74 0a 20 20 2a 2a 20 20 20 20 29 3b 0a  ject.  **    );.
0e80: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 71    **.  ** The sq
0e90: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
0ea0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  e contains a sin
0eb0: 67 6c 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  gle entry for ea
0ec0: 63 68 20 74 61 62 6c 65 0a 20 20 2a 2a 20 61 6e  ch table.  ** an
0ed0: 64 20 65 61 63 68 20 69 6e 64 65 78 2e 20 20 54  d each index.  T
0ee0: 68 65 20 22 74 79 70 65 22 20 63 6f 6c 75 6d 6e  he "type" column
0ef0: 20 74 65 6c 6c 73 20 77 68 65 74 68 65 72 20 74   tells whether t
0f00: 68 65 20 65 6e 74 72 79 20 69 73 0a 20 20 2a 2a  he entry is.  **
0f10: 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
0f20: 78 2e 20 20 54 68 65 20 22 6e 61 6d 65 22 20 63  x.  The "name" c
0f30: 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d  olumn is the nam
0f40: 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e  e of the object.
0f50: 0a 20 20 2a 2a 20 54 68 65 20 22 74 62 6c 5f 6e  .  ** The "tbl_n
0f60: 61 6d 65 22 20 69 73 20 74 68 65 20 6e 61 6d 65  ame" is the name
0f70: 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
0f80: 65 64 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 74  ed table.  For t
0f90: 61 62 6c 65 73 2c 0a 20 20 2a 2a 20 74 68 65 20  ables,.  ** the 
0fa0: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
0fb0: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 61  is always the sa
0fc0: 6d 65 20 61 73 20 6e 61 6d 65 2e 20 20 46 6f 72  me as name.  For
0fd0: 20 69 6e 64 69 63 65 73 2c 20 74 68 65 0a 20 20   indices, the.  
0fe0: 2a 2a 20 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  ** tbl_name colu
0ff0: 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  mn contains the 
1000: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1010: 65 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78  e that the index
1020: 0a 20 20 2a 2a 20 69 6e 64 65 78 65 73 2e 20 20  .  ** indexes.  
1030: 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 22 73 71  Finally, the "sq
1040: 6c 22 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  l" column contai
1050: 6e 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ns the complete 
1060: 74 65 78 74 20 6f 66 0a 20 20 2a 2a 20 74 68 65  text of.  ** the
1070: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72   CREATE TABLE or
1080: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
1090: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 6f 72 69  atement that ori
10a0: 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 0a  ginally created.
10b0: 20 20 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6f    ** the table o
10c0: 72 20 69 6e 64 65 78 2e 0a 20 20 2a 2a 0a 20 20  r index..  **.  
10d0: 2a 2a 20 49 66 20 74 68 65 20 22 74 79 70 65 22  ** If the "type"
10e0: 20 63 6f 6c 75 6d 6e 20 68 61 73 20 74 68 65 20   column has the 
10f0: 76 61 6c 75 65 20 22 6d 65 74 61 22 2c 20 74 68  value "meta", th
1100: 65 6e 20 74 68 65 20 22 73 71 6c 22 20 63 6f 6c  en the "sql" col
1110: 75 6d 6e 0a 20 20 2a 2a 20 63 6f 6e 74 61 69 6e  umn.  ** contain
1120: 73 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74  s extra informat
1130: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61  ion about the da
1140: 74 61 62 61 73 65 2c 20 73 75 63 68 20 61 73 20  tabase, such as 
1150: 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 66 6f  the.  ** file fo
1160: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rmat version num
1170: 62 65 72 2e 20 20 41 6c 6c 20 6d 65 74 61 20 69  ber.  All meta i
1180: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6d 75 73 74 20  nformation must 
1190: 62 65 20 70 72 6f 63 65 73 73 65 64 0a 20 20 2a  be processed.  *
11a0: 2a 20 62 65 66 6f 72 65 20 61 6e 79 20 74 61 62  * before any tab
11b0: 6c 65 73 20 6f 72 20 69 6e 64 69 63 65 73 20 61  les or indices a
11c0: 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 2e 0a  re constructed..
11d0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 6f    **.  ** The fo
11e0: 6c 6c 6f 77 69 6e 67 20 70 72 6f 67 72 61 6d 20  llowing program 
11f0: 69 6e 76 6f 6b 65 73 20 69 74 73 20 63 61 6c 6c  invokes its call
1200: 62 61 63 6b 20 6f 6e 20 74 68 65 20 53 51 4c 20  back on the SQL 
1210: 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20 74 61  for each.  ** ta
1220: 62 6c 65 20 74 68 65 6e 20 67 6f 65 73 20 62 61  ble then goes ba
1230: 63 6b 20 61 6e 64 20 69 6e 76 6f 6b 65 73 20 74  ck and invokes t
1240: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 20 74  he callback on t
1250: 68 65 0a 20 20 2a 2a 20 53 51 4c 20 66 6f 72 20  he.  ** SQL for 
1260: 65 61 63 68 20 69 6e 64 65 78 2e 20 20 54 68 65  each index.  The
1270: 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 20 69   callback will i
1280: 6e 76 6f 6b 65 20 74 68 65 0a 20 20 2a 2a 20 70  nvoke the.  ** p
1290: 61 72 73 65 72 20 74 6f 20 62 75 69 6c 64 20 74  arser to build t
12a0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
12b0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
12c0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
12d0: 73 63 68 65 6d 65 2e 0a 20 20 2a 2f 0a 20 20 73  scheme..  */.  s
12e0: 74 61 74 69 63 20 56 64 62 65 4f 70 20 69 6e 69  tatic VdbeOp ini
12f0: 74 50 72 6f 67 5b 5d 20 3d 20 7b 0a 20 20 20 20  tProg[] = {.    
1300: 7b 20 4f 50 5f 4f 70 65 6e 2c 20 20 20 20 20 30  { OP_Open,     0
1310: 2c 20 32 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 2,  0},.    { 
1320: 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20 30 2c 20  OP_Next,     0, 
1330: 39 2c 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20  9,  0},         
1340: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 7b 20    /* 1 */.    { 
1350: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20  OP_Column,   0, 
1360: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  0,  0},.    { OP
1370: 5f 53 74 72 69 6e 67 2c 20 20 20 30 2c 20 30 2c  _String,   0, 0,
1380: 20 20 22 6d 65 74 61 22 7d 2c 0a 20 20 20 20 7b    "meta"},.    {
1390: 20 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 30 2c   OP_Ne,       0,
13a0: 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f   1,  0},.    { O
13b0: 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 30  P_Column,   0, 0
13c0: 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f  ,  0},.    { OP_
13d0: 43 6f 6c 75 6d 6e 2c 20 20 20 30 2c 20 34 2c 20  Column,   0, 4, 
13e0: 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 61   0},.    { OP_Ca
13f0: 6c 6c 62 61 63 6b 2c 20 32 2c 20 30 2c 20 20 30  llback, 2, 0,  0
1400: 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 47 6f 74 6f  },.    { OP_Goto
1410: 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 30 7d 2c  ,     0, 1,  0},
1420: 0a 20 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64  .    { OP_Rewind
1430: 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 20 20  ,   0, 0,  0},  
1440: 20 20 20 20 20 20 20 20 20 2f 2a 20 39 20 2a 2f           /* 9 */
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 37 2c 20 30 7d 2c 20 20      0, 17, 0},  
1470: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 30 20 2a           /* 10 *
1480: 2f 0a 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d  /.    { OP_Colum
1490: 6e 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a  n,   0, 0,  0},.
14a0: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
14b0: 20 20 20 30 2c 20 30 2c 20 20 22 74 61 62 6c 65     0, 0,  "table
14c0: 22 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 2c  "},.    { OP_Ne,
14d0: 20 20 20 20 20 20 20 30 2c 20 31 30 2c 20 30 7d         0, 10, 0}
14e0: 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d  ,.    { OP_Colum
14f0: 6e 2c 20 20 20 30 2c 20 34 2c 20 20 30 7d 2c 0a  n,   0, 4,  0},.
1500: 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63      { OP_Callbac
1510: 6b 2c 20 31 2c 20 30 2c 20 20 30 7d 2c 0a 20 20  k, 1, 0,  0},.  
1520: 20 20 7b 20 4f 50 5f 47 6f 74 6f 2c 20 20 20 20    { OP_Goto,    
1530: 20 30 2c 20 31 30 2c 20 30 7d 2c 0a 20 20 20 20   0, 10, 0},.    
1540: 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20 30  { OP_Rewind,   0
1550: 2c 20 30 2c 20 20 30 7d 2c 20 20 20 20 20 20 20  , 0,  0},       
1560: 20 20 20 20 2f 2a 20 31 37 20 2a 2f 0a 20 20 20      /* 17 */.   
1570: 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20   { OP_Next,     
1580: 30 2c 20 32 35 2c 20 30 7d 2c 20 20 20 20 20 20  0, 25, 0},      
1590: 20 20 20 20 20 2f 2a 20 31 38 20 2a 2f 0a 20 20       /* 18 */.  
15a0: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20    { OP_Column,  
15b0: 20 30 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20   0, 0,  0},.    
15c0: 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 30  { OP_String,   0
15d0: 2c 20 30 2c 20 20 22 69 6e 64 65 78 22 7d 2c 0a  , 0,  "index"},.
15e0: 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20      { OP_Ne,    
15f0: 20 20 20 30 2c 20 31 38 2c 20 30 7d 2c 0a 20 20     0, 18, 0},.  
1600: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20    { OP_Column,  
1610: 20 30 2c 20 34 2c 20 20 30 7d 2c 0a 20 20 20 20   0, 4,  0},.    
1620: 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 31  { OP_Callback, 1
1630: 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 0,  0},.    { 
1640: 4f 50 5f 47 6f 74 6f 2c 20 20 20 20 20 30 2c 20  OP_Goto,     0, 
1650: 31 38 2c 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  18, 0},.    { OP
1660: 5f 43 6c 6f 73 65 2c 20 20 20 20 32 2c 20 30 2c  _Close,    2, 0,
1670: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
1680: 2f 2a 20 32 35 20 2a 2f 0a 20 20 20 20 7b 20 4f  /* 25 */.    { O
1690: 50 5f 48 61 6c 74 2c 20 20 20 20 20 30 2c 20 30  P_Halt,     0, 0
16a0: 2c 20 20 30 7d 2c 0a 20 20 7d 3b 0a 0a 20 20 2f  ,  0},.  };..  /
16b0: 2a 20 43 72 65 61 74 65 20 61 20 76 69 72 74 75  * Create a virtu
16c0: 61 6c 20 6d 61 63 68 69 6e 65 20 74 6f 20 72 75  al machine to ru
16d0: 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  n the initializa
16e0: 74 69 6f 6e 20 70 72 6f 67 72 61 6d 2e 20 20 52  tion program.  R
16f0: 75 6e 0a 20 20 2a 2a 20 74 68 65 20 70 72 6f 67  un.  ** the prog
1700: 72 61 6d 2e 20 20 54 68 65 20 64 65 6c 65 74 65  ram.  The delete
1710: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
1720: 68 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 76 64 62  hine..  */.  vdb
1730: 65 20 3d 20 73 71 6c 69 74 65 56 64 62 65 43 72  e = sqliteVdbeCr
1740: 65 61 74 65 28 64 62 29 3b 0a 20 20 69 66 28 20  eate(db);.  if( 
1750: 76 64 62 65 3d 3d 30 20 29 7b 0a 20 20 20 20 73  vdbe==0 ){.    s
1760: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
1770: 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66  zErrMsg, "out of
1780: 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 20 20 72   memory");.    r
1790: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
17a0: 45 4d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  EM;.  }.  sqlite
17b0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 64  VdbeAddOpList(vd
17c0: 62 65 2c 20 73 69 7a 65 6f 66 28 69 6e 69 74 50  be, sizeof(initP
17d0: 72 6f 67 29 2f 73 69 7a 65 6f 66 28 69 6e 69 74  rog)/sizeof(init
17e0: 50 72 6f 67 5b 30 5d 29 2c 20 69 6e 69 74 50 72  Prog[0]), initPr
17f0: 6f 67 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  og);.  rc = sqli
1800: 74 65 56 64 62 65 45 78 65 63 28 76 64 62 65 2c  teVdbeExec(vdbe,
1810: 20 73 71 6c 69 74 65 4f 70 65 6e 43 62 2c 20 64   sqliteOpenCb, d
1820: 62 2c 20 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20  b, pzErrMsg, .  
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 20 64 62 2d 3e 70 42 75 73 79 41 72 67      db->pBusyArg
1850: 2c 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62  , db->xBusyCallb
1860: 61 63 6b 29 3b 0a 20 20 73 71 6c 69 74 65 56 64  ack);.  sqliteVd
1870: 62 65 44 65 6c 65 74 65 28 76 64 62 65 29 3b 0a  beDelete(vdbe);.
1880: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1890: 5f 4f 4b 20 26 26 20 64 62 2d 3e 66 69 6c 65 5f  _OK && db->file_
18a0: 66 6f 72 6d 61 74 3c 32 20 26 26 20 64 62 2d 3e  format<2 && db->
18b0: 6e 54 61 62 6c 65 3e 30 20 29 7b 0a 20 20 20 20  nTable>0 ){.    
18c0: 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28  sqliteSetString(
18d0: 70 7a 45 72 72 4d 73 67 2c 20 22 6f 62 73 6f 6c  pzErrMsg, "obsol
18e0: 65 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 22  ete file format"
18f0: 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  , 0);.    rc = S
1900: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1910: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1920: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 61 62 6c  E_OK ){.    Tabl
1930: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 63 68 61  e *pTab;.    cha
1940: 72 20 2a 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20  r *azArg[2];.   
1950: 20 61 7a 41 72 67 5b 30 5d 20 3d 20 6d 61 73 74   azArg[0] = mast
1960: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20 61  er_schema;.    a
1970: 7a 41 72 67 5b 31 5d 20 3d 20 30 3b 0a 20 20 20  zArg[1] = 0;.   
1980: 20 73 71 6c 69 74 65 4f 70 65 6e 43 62 28 64 62   sqliteOpenCb(db
1990: 2c 20 31 2c 20 61 7a 41 72 67 2c 20 30 29 3b 0a  , 1, azArg, 0);.
19a0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
19b0: 65 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 4d  eFindTable(db, M
19c0: 41 53 54 45 52 5f 4e 41 4d 45 29 3b 0a 20 20 20  ASTER_NAME);.   
19d0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
19e0: 20 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c     pTab->readOnl
19f0: 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 54 61  y = 1;.      pTa
1a00: 62 2d 3e 74 6e 75 6d 20 3d 20 32 3b 0a 20 20 20  b->tnum = 2;.   
1a10: 20 7d 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73   }.    db->flags
1a20: 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 69 74 69   |= SQLITE_Initi
1a30: 61 6c 69 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69  alized;.    sqli
1a40: 74 65 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  teCommitInternal
1a50: 43 68 61 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d  Changes(db);.  }
1a60: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
1a70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73 69  ./*.** The versi
1a80: 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  on of the librar
1a90: 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  y.*/.const char 
1aa0: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 5b 5d  sqlite_version[]
1ab0: 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   = SQLITE_VERSIO
1ac0: 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73 20 74  N;../*.** Does t
1ad0: 68 65 20 6c 69 62 72 61 72 79 20 65 78 70 65 63  he library expec
1ae0: 74 20 64 61 74 61 20 74 6f 20 62 65 20 65 6e 63  t data to be enc
1af0: 6f 64 65 64 20 61 73 20 55 54 46 2d 38 20 6f 72  oded as UTF-8 or
1b00: 20 69 73 6f 38 38 35 39 3f 20 20 54 68 65 0a 2a   iso8859?  The.*
1b10: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62  * following glob
1b20: 61 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c 77 61  al constant alwa
1b30: 79 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f 77 2e  ys lets us know.
1b40: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1b50: 45 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63 68 61  E_UTF8.const cha
1b60: 72 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e  r sqlite_encodin
1b70: 67 5b 5d 20 3d 20 22 55 54 46 2d 38 22 3b 0a 23  g[] = "UTF-8";.#
1b80: 65 6c 73 65 0a 63 6f 6e 73 74 20 63 68 61 72 20  else.const char 
1b90: 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b  sqlite_encoding[
1ba0: 5d 20 3d 20 22 69 73 6f 38 38 35 39 22 3b 0a 23  ] = "iso8859";.#
1bb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  endif../*.** Ope
1bc0: 6e 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 64  n a new SQLite d
1bd0: 61 74 61 62 61 73 65 2e 20 20 43 6f 6e 73 74 72  atabase.  Constr
1be0: 75 63 74 20 61 6e 20 22 73 71 6c 69 74 65 22 20  uct an "sqlite" 
1bf0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 64 65 66  structure to def
1c00: 69 6e 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65  ine.** the state
1c10: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
1c20: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70  e and return a p
1c30: 6f 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73  ointer to that s
1c40: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
1c50: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
1c60: 64 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  de to initialize
1c70: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
1c80: 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
1c90: 68 61 74 0a 2a 2a 20 68 6f 6c 64 20 74 68 65 20  hat.** hold the 
1ca0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
1cb0: 20 20 42 75 74 20 69 66 20 74 68 69 73 20 66 61    But if this fa
1cc0: 69 6c 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ils (because the
1cd0: 20 73 63 68 65 6d 61 20 66 69 6c 65 0a 2a 2a 20   schema file.** 
1ce0: 69 73 20 6c 6f 63 6b 65 64 29 20 74 68 65 6e 20  is locked) then 
1cf0: 74 68 61 74 20 73 74 65 70 20 69 73 20 64 65 66  that step is def
1d00: 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  erred until the 
1d10: 66 69 72 73 74 20 63 61 6c 6c 20 74 6f 0a 2a 2a  first call to.**
1d20: 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a   sqlite_exec()..
1d30: 2a 2f 0a 73 71 6c 69 74 65 20 2a 73 71 6c 69 74  */.sqlite *sqlit
1d40: 65 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61  e_open(const cha
1d50: 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e  r *zFilename, in
1d60: 74 20 6d 6f 64 65 2c 20 63 68 61 72 20 2a 2a 70  t mode, char **p
1d70: 7a 45 72 72 4d 73 67 29 7b 0a 20 20 73 71 6c 69  zErrMsg){.  sqli
1d80: 74 65 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  te *db;.  int rc
1d90: 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65  ;..  /* Allocate
1da0: 20 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61   the sqlite data
1db0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1dc0: 64 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  db = sqliteMallo
1dd0: 63 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  c( sizeof(sqlite
1de0: 29 20 29 3b 0a 20 20 69 66 28 20 70 7a 45 72 72  ) );.  if( pzErr
1df0: 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67 20  Msg ) *pzErrMsg 
1e00: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30  = 0;.  if( db==0
1e10: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f   ) goto no_mem_o
1e20: 6e 5f 6f 70 65 6e 3b 0a 20 20 0a 20 20 2f 2a 20  n_open;.  .  /* 
1e30: 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  Open the backend
1e40: 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65 72   database driver
1e50: 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1e60: 65 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65  eBtreeOpen(zFile
1e70: 6e 61 6d 65 2c 20 6d 6f 64 65 2c 20 31 30 30 2c  name, mode, 100,
1e80: 20 26 64 62 2d 3e 70 42 65 29 3b 0a 20 20 69 66   &db->pBe);.  if
1e90: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ea0: 29 7b 0a 20 20 20 20 73 77 69 74 63 68 28 20 72  ){.    switch( r
1eb0: 63 20 29 7b 0a 20 20 20 20 20 20 64 65 66 61 75  c ){.      defau
1ec0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
1ed0: 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  ( pzErrMsg ){.  
1ee0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 53 65          sqliteSe
1ef0: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
1f00: 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  , "unable to ope
1f10: 6e 20 64 61 74 61 62 61 73 65 3a 20 22 2c 20 7a  n database: ", z
1f20: 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3b 0a 20 20  Filename, 0);.  
1f30: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1f40: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1f50: 46 72 65 65 28 64 62 29 3b 0a 20 20 20 20 72 65  Free(db);.    re
1f60: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f  turn 0;.  }..  /
1f70: 2a 20 41 73 73 75 6d 65 20 66 69 6c 65 20 66 6f  * Assume file fo
1f80: 72 6d 61 74 20 31 20 75 6e 6c 65 73 73 20 74 68  rmat 1 unless th
1f90: 65 20 64 61 74 61 62 61 73 65 20 73 61 79 73 20  e database says 
1fa0: 6f 74 68 65 72 77 69 73 65 20 2a 2f 0a 20 20 64  otherwise */.  d
1fb0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
1fc0: 20 31 3b 0a 0a 20 20 2f 2a 20 41 74 74 65 6d 70   1;..  /* Attemp
1fd0: 74 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63  t to read the sc
1fe0: 68 65 6d 61 20 2a 2f 0a 20 20 72 63 20 3d 20 73  hema */.  rc = s
1ff0: 71 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a  qliteInit(db, pz
2000: 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 73  ErrMsg);.  if( s
2010: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
2020: 6c 65 64 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  led ){.    goto 
2030: 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3b 0a  no_mem_on_open;.
2040: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
2050: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
2060: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
2070: 20 20 20 20 73 71 6c 69 74 65 5f 63 6c 6f 73 65      sqlite_close
2080: 28 64 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  (db);.    return
2090: 20 30 3b 0a 20 20 7d 65 6c 73 65 20 2f 2a 20 69   0;.  }else /* i
20a0: 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20 2a 2f  f( pzErrMsg ) */
20b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  {.    sqliteFree
20c0: 28 2a 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  (*pzErrMsg);.   
20d0: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a   *pzErrMsg = 0;.
20e0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 3b    }.  return db;
20f0: 0a 0a 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e  ..no_mem_on_open
2100: 3a 0a 20 20 73 71 6c 69 74 65 53 65 74 53 74 72  :.  sqliteSetStr
2110: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f  ing(pzErrMsg, "o
2120: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 30  ut of memory", 0
2130: 29 3b 0a 20 20 73 71 6c 69 74 65 53 74 72 52 65  );.  sqliteStrRe
2140: 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b  alloc(pzErrMsg);
2150: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
2160: 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65  /*.** Close an e
2170: 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64  xisting SQLite d
2180: 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20  atabase.*/.void 
2190: 73 71 6c 69 74 65 5f 63 6c 6f 73 65 28 73 71 6c  sqlite_close(sql
21a0: 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  ite *db){.  int 
21b0: 69 3b 0a 20 20 73 71 6c 69 74 65 42 74 72 65 65  i;.  sqliteBtree
21c0: 43 6c 6f 73 65 28 64 62 2d 3e 70 42 65 29 3b 0a  Close(db->pBe);.
21d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 48    for(i=0; i<N_H
21e0: 41 53 48 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  ASH; i++){.    T
21f0: 61 62 6c 65 20 2a 70 4e 65 78 74 2c 20 2a 70 4c  able *pNext, *pL
2200: 69 73 74 20 3d 20 64 62 2d 3e 61 70 54 62 6c 48  ist = db->apTblH
2210: 61 73 68 5b 69 5d 3b 0a 20 20 20 20 64 62 2d 3e  ash[i];.    db->
2220: 61 70 54 62 6c 48 61 73 68 5b 69 5d 20 3d 20 30  apTblHash[i] = 0
2230: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 70 4c 69  ;.    while( pLi
2240: 73 74 20 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  st ){.      pNex
2250: 74 20 3d 20 70 4c 69 73 74 2d 3e 70 48 61 73 68  t = pList->pHash
2260: 3b 0a 20 20 20 20 20 20 70 4c 69 73 74 2d 3e 70  ;.      pList->p
2270: 48 61 73 68 20 3d 20 30 3b 0a 20 20 20 20 20 20  Hash = 0;.      
2280: 73 71 6c 69 74 65 44 65 6c 65 74 65 54 61 62 6c  sqliteDeleteTabl
2290: 65 28 64 62 2c 20 70 4c 69 73 74 29 3b 0a 20 20  e(db, pList);.  
22a0: 20 20 20 20 70 4c 69 73 74 20 3d 20 70 4e 65 78      pList = pNex
22b0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  t;.    }.  }.  s
22c0: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 7d  qliteFree(db);.}
22d0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  ../*.** Return T
22e0: 52 55 45 20 69 66 20 74 68 65 20 67 69 76 65 6e  RUE if the given
22f0: 20 53 51 4c 20 73 74 72 69 6e 67 20 65 6e 64 73   SQL string ends
2300: 20 69 6e 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2e   in a semicolon.
2310: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63  .*/.int sqlite_c
2320: 6f 6d 70 6c 65 74 65 28 63 6f 6e 73 74 20 63 68  omplete(const ch
2330: 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e 74  ar *zSql){.  int
2340: 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b   isComplete = 0;
2350: 0a 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20  .  while( *zSql 
2360: 29 7b 0a 20 20 20 20 73 77 69 74 63 68 28 20 2a  ){.    switch( *
2370: 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 63 61  zSql ){.      ca
2380: 73 65 20 27 3b 27 3a 20 7b 0a 20 20 20 20 20 20  se ';': {.      
2390: 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 31    isComplete = 1
23a0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
23b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
23c0: 61 73 65 20 27 20 27 3a 0a 20 20 20 20 20 20 63  ase ' ':.      c
23d0: 61 73 65 20 27 5c 74 27 3a 0a 20 20 20 20 20 20  ase '\t':.      
23e0: 63 61 73 65 20 27 5c 6e 27 3a 0a 20 20 20 20 20  case '\n':.     
23f0: 20 63 61 73 65 20 27 5c 66 27 3a 20 7b 0a 20 20   case '\f': {.  
2400: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2410: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
2420: 27 5c 27 27 3a 20 7b 0a 20 20 20 20 20 20 20 20  '\'': {.        
2430: 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a  isComplete = 0;.
2440: 20 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a          zSql++;.
2450: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
2460: 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27  zSql && *zSql!='
2470: 5c 27 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d  \'' ){ zSql++; }
2480: 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53  .        if( *zS
2490: 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ql==0 ) return 0
24a0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
24b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
24c0: 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20 20 20  ase '"': {.     
24d0: 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20     isComplete = 
24e0: 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 2b  0;.        zSql+
24f0: 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  +;.        while
2500: 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c  ( *zSql && *zSql
2510: 21 3d 27 22 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b  !='"' ){ zSql++;
2520: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a   }.        if( *
2530: 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e  zSql==0 ) return
2540: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
2550: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
2560: 20 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20 20 20   case '-': {.   
2570: 20 20 20 20 20 69 66 28 20 7a 53 71 6c 5b 31 5d       if( zSql[1]
2580: 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  !='-' ){.       
2590: 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20     isComplete = 
25a0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
25b0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
25c0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53        while( *zS
25d0: 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27 5c 6e  ql && *zSql!='\n
25e0: 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20  ' ){ zSql++; }. 
25f0: 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c         if( *zSql
2600: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 69 73 43  ==0 ) return isC
2610: 6f 6d 70 6c 65 74 65 3b 0a 20 20 20 20 20 20 20  omplete;.       
2620: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 20   break;.      } 
2630: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
2640: 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70  {.        isComp
2650: 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  lete = 0;.      
2660: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
2670: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 2b  .    }.    zSql+
2680: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  +;.  }.  return 
2690: 69 73 43 6f 6d 70 6c 65 74 65 3b 0a 7d 0a 0a 2f  isComplete;.}../
26a0: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 53 51 4c  *.** Execute SQL
26b0: 20 63 6f 64 65 2e 20 20 52 65 74 75 72 6e 20 6f   code.  Return o
26c0: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
26d0: 5f 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  _ success/failur
26e0: 65 0a 2a 2a 20 63 6f 64 65 73 2e 20 20 41 6c 73  e.** codes.  Als
26f0: 6f 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  o write an error
2700: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 6d 65   message into me
2710: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
2720: 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 61  om.** malloc() a
2730: 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d 73  nd make *pzErrMs
2740: 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20  g point to that 
2750: 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 49  message..**.** I
2760: 66 20 74 68 65 20 53 51 4c 20 69 73 20 61 20 71  f the SQL is a q
2770: 75 65 72 79 2c 20 74 68 65 6e 20 66 6f 72 20 65  uery, then for e
2780: 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 71  ach row in the q
2790: 75 65 72 79 20 72 65 73 75 6c 74 0a 2a 2a 20 74  uery result.** t
27a0: 68 65 20 78 43 61 6c 6c 62 61 63 6b 28 29 20 66  he xCallback() f
27b0: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
27c0: 64 2e 20 20 70 41 72 67 20 62 65 63 6f 6d 65 73  d.  pArg becomes
27d0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
27e0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62  gument to xCallb
27f0: 61 63 6b 28 29 2e 20 20 49 66 20 78 43 61 6c 6c  ack().  If xCall
2800: 62 61 63 6b 3d 4e 55 4c 4c 20 74 68 65 6e 20 6e  back=NULL then n
2810: 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 69 73  o callback.** is
2820: 20 69 6e 76 6f 6b 65 64 2c 20 65 76 65 6e 20 66   invoked, even f
2830: 6f 72 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 69  or queries..*/.i
2840: 6e 74 20 73 71 6c 69 74 65 5f 65 78 65 63 28 0a  nt sqlite_exec(.
2850: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20    sqlite *db,   
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2870: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6f 6e   The database on
2880: 20 77 68 69 63 68 20 74 68 65 20 53 51 4c 20 65   which the SQL e
2890: 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63 68 61  xecutes */.  cha
28a0: 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  r *zSql,        
28b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
28c0: 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75 74  SQL to be execut
28d0: 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f 63  ed */.  sqlite_c
28e0: 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c 62 61 63  allback xCallbac
28f0: 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  k,  /* Invoke th
2900: 69 73 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  is callback rout
2910: 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ine */.  void *p
2920: 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
2930: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
2940: 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62  gument to xCallb
2950: 61 63 6b 28 29 20 2a 2f 0a 20 20 63 68 61 72 20  ack() */.  char 
2960: 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20  **pzErrMsg      
2970: 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2980: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 68  error messages h
2990: 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73  ere */.){.  Pars
29a0: 65 20 73 50 61 72 73 65 3b 0a 0a 20 20 69 66 28  e sParse;..  if(
29b0: 20 70 7a 45 72 72 4d 73 67 20 29 20 2a 70 7a 45   pzErrMsg ) *pzE
29c0: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
29d0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
29e0: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
29f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
2a00: 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69 74 28  rc = sqliteInit(
2a10: 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20  db, pzErrMsg);. 
2a20: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
2a30: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
2a40: 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70  liteStrRealloc(p
2a50: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
2a60: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d  return rc;.    }
2a70: 0a 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 26 73  .  }.  memset(&s
2a80: 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66  Parse, 0, sizeof
2a90: 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50 61  (sParse));.  sPa
2aa0: 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73  rse.db = db;.  s
2ab0: 50 61 72 73 65 2e 70 42 65 20 3d 20 64 62 2d 3e  Parse.pBe = db->
2ac0: 70 42 65 3b 0a 20 20 73 50 61 72 73 65 2e 78 43  pBe;.  sParse.xC
2ad0: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
2ae0: 61 63 6b 3b 0a 20 20 73 50 61 72 73 65 2e 70 41  ack;.  sParse.pA
2af0: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c  rg = pArg;.  sql
2b00: 69 74 65 52 75 6e 50 61 72 73 65 72 28 26 73 50  iteRunParser(&sP
2b10: 61 72 73 65 2c 20 7a 53 71 6c 2c 20 70 7a 45 72  arse, zSql, pzEr
2b20: 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 73 71 6c  rMsg);.  if( sql
2b30: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  ite_malloc_faile
2b40: 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53  d ){.    sqliteS
2b50: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
2b60: 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  g, "out of memor
2b70: 79 22 2c 20 30 29 3b 0a 20 20 20 20 73 50 61 72  y", 0);.    sPar
2b80: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  se.rc = SQLITE_N
2b90: 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  OMEM;.  }.  sqli
2ba0: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
2bb0: 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e  rrMsg);.  return
2bc0: 20 73 50 61 72 73 65 2e 72 63 3b 0a 7d 0a 0a 2f   sParse.rc;.}../
2bd0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2be0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
2bf0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
2c00: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
2c10: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
2c20: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
2c30: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
2c40: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
2c50: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
2c60: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
2c70: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
2c80: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
2c90: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
2ca0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
2cb0: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
2cc0: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69 6d  back(. void *Tim
2cd0: 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20 20  eout,           
2ce0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e  /* Maximum amoun
2cf0: 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61 69  t of time to wai
2d00: 74 20 2a 2f 0a 20 63 6f 6e 73 74 20 63 68 61 72  t */. const char
2d10: 20 2a 4e 6f 74 55 73 65 64 2c 20 20 20 20 20 2f   *NotUsed,     /
2d20: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
2d30: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
2d40: 62 75 73 79 20 2a 2f 0a 20 69 6e 74 20 63 6f 75  busy */. int cou
2d50: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nt              
2d60: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2d70: 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62  imes table has b
2d80: 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23  een busy */.){.#
2d90: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
2da0: 55 53 4c 45 45 50 29 20 26 26 20 48 41 56 45 5f  USLEEP) && HAVE_
2db0: 55 53 4c 45 45 50 0a 20 20 69 6e 74 20 64 65 6c  USLEEP.  int del
2dc0: 61 79 20 3d 20 31 30 30 30 30 3b 0a 20 20 69 6e  ay = 10000;.  in
2dd0: 74 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 3d 20  t prior_delay = 
2de0: 30 3b 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  0;.  int timeout
2df0: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
2e00: 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72  .  int i;..  for
2e10: 28 69 3d 31 3b 20 69 3c 63 6f 75 6e 74 3b 20 69  (i=1; i<count; i
2e20: 2b 2b 29 7b 20 0a 20 20 20 20 70 72 69 6f 72 5f  ++){ .    prior_
2e30: 64 65 6c 61 79 20 2b 3d 20 64 65 6c 61 79 3b 0a  delay += delay;.
2e40: 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61      delay = dela
2e50: 79 2a 32 3b 0a 20 20 20 20 69 66 28 20 64 65 6c  y*2;.    if( del
2e60: 61 79 3e 3d 31 30 30 30 30 30 30 20 29 7b 0a 20  ay>=1000000 ){. 
2e70: 20 20 20 20 20 64 65 6c 61 79 20 3d 20 31 30 30       delay = 100
2e80: 30 30 30 30 3b 0a 20 20 20 20 20 20 70 72 69 6f  0000;.      prio
2e90: 72 5f 64 65 6c 61 79 20 2b 3d 20 31 30 30 30 30  r_delay += 10000
2ea0: 30 30 2a 28 63 6f 75 6e 74 20 2d 20 69 20 2d 20  00*(count - i - 
2eb0: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  1);.      break;
2ec0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2ed0: 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b 20 64   prior_delay + d
2ee0: 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 2a 31  elay > timeout*1
2ef0: 30 30 30 20 29 7b 0a 20 20 20 20 64 65 6c 61 79  000 ){.    delay
2f00: 20 3d 20 74 69 6d 65 6f 75 74 2a 31 30 30 30 20   = timeout*1000 
2f10: 2d 20 70 72 69 6f 72 5f 64 65 6c 61 79 3b 0a 20  - prior_delay;. 
2f20: 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20     if( delay<=0 
2f30: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a  ) return 0;.  }.
2f40: 20 20 75 73 6c 65 65 70 28 64 65 6c 61 79 29 3b    usleep(delay);
2f50: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c  .  return 1;.#el
2f60: 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  se.  int timeout
2f70: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
2f80: 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29  .  if( (count+1)
2f90: 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20  *1000 > timeout 
2fa0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
2fb0: 0a 20 20 7d 0a 20 20 73 6c 65 65 70 28 31 29 3b  .  }.  sleep(1);
2fc0: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e  .  return 1;.#en
2fd0: 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  dif.}../*.** Thi
2fe0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
2ff0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
3000: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
3010: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
3020: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
3030: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
3040: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
3050: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
3060: 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  e_busy_handler(.
3070: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20 20    sqlite *db,.  
3080: 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69  int (*xBusy)(voi
3090: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  d*,const char*,i
30a0: 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  nt),.  void *pAr
30b0: 67 0a 29 7b 0a 20 20 64 62 2d 3e 78 42 75 73 79  g.){.  db->xBusy
30c0: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 42 75 73 79  Callback = xBusy
30d0: 3b 0a 20 20 64 62 2d 3e 70 42 75 73 79 41 72 67  ;.  db->pBusyArg
30e0: 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a 2f 2a 0a 2a   = pArg;.}../*.*
30f0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
3100: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
3110: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
3120: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
3130: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
3140: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
3150: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
3160: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69  urning 0..*/.voi
3170: 64 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 74 69  d sqlite_busy_ti
3180: 6d 65 6f 75 74 28 73 71 6c 69 74 65 20 2a 64 62  meout(sqlite *db
3190: 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28  , int ms){.  if(
31a0: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c   ms>0 ){.    sql
31b0: 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  ite_busy_handler
31c0: 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75  (db, sqliteDefau
31d0: 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20  ltBusyCallback, 
31e0: 28 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65  (void*)ms);.  }e
31f0: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f  lse{.    sqlite_
3200: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
3210: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f   0, 0);.  }.}../
3220: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
3230: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
3240: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
3250: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
3260: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
3270: 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 28 73  lite_interrupt(s
3280: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64 62  qlite *db){.  db
3290: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
32a0: 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a     E_Interrupt;.}.