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

Artifact afdb7ecb5de4e0eb0d69d1e0d5db7ad070c8e0d6:


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 30 20 32 30 30 31 2f 30 39 2f 31 33 20 31 33  30 2001/09/13 13
04b0: 3a 34 36 3a 35 36 20 64 72 68 20 45 78 70 20 24  :46:56 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 7d 0a 20 20 20  y = 1;.    }.   
1a00: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
1a10: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
1a20: 3b 0a 20 20 20 20 73 71 6c 69 74 65 43 6f 6d 6d  ;.    sqliteComm
1a30: 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
1a40: 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74  s(db);.  }.  ret
1a50: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
1a60: 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20   The version of 
1a70: 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63  the library.*/.c
1a80: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
1a90: 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c  _version[] = SQL
1aa0: 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a  ITE_VERSION;../*
1ab0: 0a 2a 2a 20 44 6f 65 73 20 74 68 65 20 6c 69 62  .** Does the lib
1ac0: 72 61 72 79 20 65 78 70 65 63 74 20 64 61 74 61  rary expect data
1ad0: 20 74 6f 20 62 65 20 65 6e 63 6f 64 65 64 20 61   to be encoded a
1ae0: 73 20 55 54 46 2d 38 20 6f 72 20 69 73 6f 38 38  s UTF-8 or iso88
1af0: 35 39 3f 20 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c  59?  The.** foll
1b00: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  owing global con
1b10: 73 74 61 6e 74 20 61 6c 77 61 79 73 20 6c 65 74  stant always let
1b20: 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69  s us know..*/.#i
1b30: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38  fdef SQLITE_UTF8
1b40: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
1b50: 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20  te_encoding[] = 
1b60: 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73 65 0a 63  "UTF-8";.#else.c
1b70: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
1b80: 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20 22 69  _encoding[] = "i
1b90: 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64 69 66 0a  so8859";.#endif.
1ba0: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
1bb0: 77 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  w SQLite databas
1bc0: 65 2e 20 20 43 6f 6e 73 74 72 75 63 74 20 61 6e  e.  Construct an
1bd0: 20 22 73 71 6c 69 74 65 22 20 73 74 72 75 63 74   "sqlite" struct
1be0: 75 72 65 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a  ure to define.**
1bf0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1c00: 69 73 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  is database and 
1c10: 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
1c20: 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74 75   to that structu
1c30: 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 74 74  re..**.** An att
1c40: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
1c50: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
1c60: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 20 73 74  n-memory data st
1c70: 72 75 63 74 75 72 65 73 20 74 68 61 74 0a 2a 2a  ructures that.**
1c80: 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61   hold the databa
1c90: 73 65 20 73 63 68 65 6d 61 2e 20 20 42 75 74 20  se schema.  But 
1ca0: 69 66 20 74 68 69 73 20 66 61 69 6c 73 20 28 62  if this fails (b
1cb0: 65 63 61 75 73 65 20 74 68 65 20 73 63 68 65 6d  ecause the schem
1cc0: 61 20 66 69 6c 65 0a 2a 2a 20 69 73 20 6c 6f 63  a file.** is loc
1cd0: 6b 65 64 29 20 74 68 65 6e 20 74 68 61 74 20 73  ked) then that s
1ce0: 74 65 70 20 69 73 20 64 65 66 65 72 72 65 64 20  tep is deferred 
1cf0: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
1d00: 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  call to.** sqlit
1d10: 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 73 71 6c  e_exec()..*/.sql
1d20: 69 74 65 20 2a 73 71 6c 69 74 65 5f 6f 70 65 6e  ite *sqlite_open
1d30: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69  (const char *zFi
1d40: 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 6d 6f 64 65  lename, int mode
1d50: 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73  , char **pzErrMs
1d60: 67 29 7b 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  g){.  sqlite *db
1d70: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f  ;.  int rc;..  /
1d80: 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73  * Allocate the s
1d90: 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75 63  qlite data struc
1da0: 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73  ture */.  db = s
1db0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a  qliteMalloc( siz
1dc0: 65 6f 66 28 73 71 6c 69 74 65 29 20 29 3b 0a 20  eof(sqlite) );. 
1dd0: 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20   if( pzErrMsg ) 
1de0: 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  *pzErrMsg = 0;. 
1df0: 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74   if( db==0 ) got
1e00: 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e  o no_mem_on_open
1e10: 3b 0a 20 20 0a 20 20 2f 2a 20 4f 70 65 6e 20 74  ;.  .  /* Open t
1e20: 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62  he backend datab
1e30: 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20  ase driver */.  
1e40: 72 63 20 3d 20 73 71 6c 69 74 65 42 74 72 65 65  rc = sqliteBtree
1e50: 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  Open(zFilename, 
1e60: 6d 6f 64 65 2c 20 31 30 30 2c 20 26 64 62 2d 3e  mode, 100, &db->
1e70: 70 42 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  pBe);.  if( rc!=
1e80: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1e90: 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20   switch( rc ){. 
1ea0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
1eb0: 20 20 20 20 20 20 20 20 69 66 28 20 70 7a 45 72          if( pzEr
1ec0: 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20  rMsg ){.        
1ed0: 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e    sqliteSetStrin
1ee0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 61  g(pzErrMsg, "una
1ef0: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
1f00: 62 61 73 65 3a 20 22 2c 20 7a 46 69 6c 65 6e 61  base: ", zFilena
1f10: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
1f20: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
1f30: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 64      sqliteFree(d
1f40: 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72  b);.    return r
1f50: 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 73 73  c;.  }..  /* Ass
1f60: 75 6d 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  ume file format 
1f70: 31 20 75 6e 6c 65 73 73 20 74 68 65 20 64 61 74  1 unless the dat
1f80: 61 62 61 73 65 20 73 61 79 73 20 6f 74 68 65 72  abase says other
1f90: 77 69 73 65 20 2a 2f 0a 20 20 64 62 2d 3e 66 69  wise */.  db->fi
1fa0: 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 0a  le_format = 1;..
1fb0: 20 20 2f 2a 20 41 74 74 65 6d 70 74 20 74 6f 20    /* Attempt to 
1fc0: 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  read the schema 
1fd0: 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1fe0: 49 6e 69 74 28 64 62 2c 20 70 7a 45 72 72 4d 73  Init(db, pzErrMs
1ff0: 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  g);.  if( sqlite
2000: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
2010: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
2020: 6d 5f 6f 6e 5f 6f 70 65 6e 3b 0a 20 20 7d 65 6c  m_on_open;.  }el
2030: 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  se if( rc!=SQLIT
2040: 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49  E_OK && rc!=SQLI
2050: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 73  TE_BUSY ){.    s
2060: 71 6c 69 74 65 5f 63 6c 6f 73 65 28 64 62 29 3b  qlite_close(db);
2070: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
2080: 20 7d 65 6c 73 65 20 2f 2a 20 69 66 28 20 70 7a   }else /* if( pz
2090: 45 72 72 4d 73 67 20 29 20 2a 2f 7b 0a 20 20 20  ErrMsg ) */{.   
20a0: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 45   sqliteFree(*pzE
20b0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a 70 7a 45  rrMsg);.    *pzE
20c0: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rrMsg = 0;.  }. 
20d0: 20 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f 5f   return db;..no_
20e0: 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20 73  mem_on_open:.  s
20f0: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
2100: 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66  zErrMsg, "out of
2110: 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20   memory", 0);.  
2120: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
2130: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  (pzErrMsg);.  re
2140: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
2150: 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69   Close an existi
2160: 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ng SQLite databa
2170: 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  se.*/.void sqlit
2180: 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20 2a  e_close(sqlite *
2190: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  db){.  int i;.  
21a0: 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65  sqliteBtreeClose
21b0: 28 64 62 2d 3e 70 42 65 29 3b 0a 20 20 66 6f 72  (db->pBe);.  for
21c0: 28 69 3d 30 3b 20 69 3c 4e 5f 48 41 53 48 3b 20  (i=0; i<N_HASH; 
21d0: 69 2b 2b 29 7b 0a 20 20 20 20 54 61 62 6c 65 20  i++){.    Table 
21e0: 2a 70 4e 65 78 74 2c 20 2a 70 4c 69 73 74 20 3d  *pNext, *pList =
21f0: 20 64 62 2d 3e 61 70 54 62 6c 48 61 73 68 5b 69   db->apTblHash[i
2200: 5d 3b 0a 20 20 20 20 64 62 2d 3e 61 70 54 62 6c  ];.    db->apTbl
2210: 48 61 73 68 5b 69 5d 20 3d 20 30 3b 0a 20 20 20  Hash[i] = 0;.   
2220: 20 77 68 69 6c 65 28 20 70 4c 69 73 74 20 29 7b   while( pList ){
2230: 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20 70  .      pNext = p
2240: 4c 69 73 74 2d 3e 70 48 61 73 68 3b 0a 20 20 20  List->pHash;.   
2250: 20 20 20 70 4c 69 73 74 2d 3e 70 48 61 73 68 20     pList->pHash 
2260: 3d 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 0;.      sqlit
2270: 65 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  eDeleteTable(db,
2280: 20 70 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 70   pList);.      p
2290: 4c 69 73 74 20 3d 20 70 4e 65 78 74 3b 0a 20 20  List = pNext;.  
22a0: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
22b0: 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a  Free(db);.}../*.
22c0: 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69  ** Return TRUE i
22d0: 66 20 74 68 65 20 67 69 76 65 6e 20 53 51 4c 20  f the given SQL 
22e0: 73 74 72 69 6e 67 20 65 6e 64 73 20 69 6e 20 61  string ends in a
22f0: 20 73 65 6d 69 63 6f 6c 6f 6e 2e 0a 2a 2f 0a 69   semicolon..*/.i
2300: 6e 74 20 73 71 6c 69 74 65 5f 63 6f 6d 70 6c 65  nt sqlite_comple
2310: 74 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  te(const char *z
2320: 53 71 6c 29 7b 0a 20 20 69 6e 74 20 69 73 43 6f  Sql){.  int isCo
2330: 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 77 68  mplete = 0;.  wh
2340: 69 6c 65 28 20 2a 7a 53 71 6c 20 29 7b 0a 20 20  ile( *zSql ){.  
2350: 20 20 73 77 69 74 63 68 28 20 2a 7a 53 71 6c 20    switch( *zSql 
2360: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27 3b  ){.      case ';
2370: 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43  ': {.        isC
2380: 6f 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20 20  omplete = 1;.   
2390: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
23a0: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
23b0: 20 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27   ':.      case '
23c0: 5c 74 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  \t':.      case 
23d0: 27 5c 6e 27 3a 0a 20 20 20 20 20 20 63 61 73 65  '\n':.      case
23e0: 20 27 5c 66 27 3a 20 7b 0a 20 20 20 20 20 20 20   '\f': {.       
23f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
2400: 20 20 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a        case '\'':
2410: 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f 6d   {.        isCom
2420: 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20 20  plete = 0;.     
2430: 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20     zSql++;.     
2440: 20 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20     while( *zSql 
2450: 26 26 20 2a 7a 53 71 6c 21 3d 27 5c 27 27 20 29  && *zSql!='\'' )
2460: 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20  { zSql++; }.    
2470: 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30      if( *zSql==0
2480: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
2490: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
24a0: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
24b0: 22 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73  "': {.        is
24c0: 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20  Complete = 0;.  
24d0: 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20        zSql++;.  
24e0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53        while( *zS
24f0: 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27 22 27  ql && *zSql!='"'
2500: 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20   ){ zSql++; }.  
2510: 20 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d        if( *zSql=
2520: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
2530: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2540: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
2550: 20 27 2d 27 3a 20 7b 0a 20 20 20 20 20 20 20 20   '-': {.        
2560: 69 66 28 20 7a 53 71 6c 5b 31 5d 21 3d 27 2d 27  if( zSql[1]!='-'
2570: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73   ){.          is
2580: 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20  Complete = 0;.  
2590: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
25a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25b0: 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20 26 26   while( *zSql &&
25c0: 20 2a 7a 53 71 6c 21 3d 27 5c 6e 27 20 29 7b 20   *zSql!='\n' ){ 
25d0: 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20 20 20  zSql++; }.      
25e0: 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30 20 29    if( *zSql==0 )
25f0: 20 72 65 74 75 72 6e 20 69 73 43 6f 6d 70 6c 65   return isComple
2600: 74 65 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  te;.        brea
2610: 6b 3b 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  k;.      } .    
2620: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
2630: 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20       isComplete 
2640: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 0;.        bre
2650: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
2660: 7d 0a 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20  }.    zSql++;.  
2670: 7d 0a 20 20 72 65 74 75 72 6e 20 69 73 43 6f 6d  }.  return isCom
2680: 70 6c 65 74 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  plete;.}../*.** 
2690: 45 78 65 63 75 74 65 20 53 51 4c 20 63 6f 64 65  Execute SQL code
26a0: 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66  .  Return one of
26b0: 20 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75 63   the SQLITE_ suc
26c0: 63 65 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a 20  cess/failure.** 
26d0: 63 6f 64 65 73 2e 20 20 41 6c 73 6f 20 77 72 69  codes.  Also wri
26e0: 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
26f0: 61 67 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  age into memory 
2700: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a  obtained from.**
2710: 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61   malloc() and ma
2720: 6b 65 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f 69  ke *pzErrMsg poi
2730: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 73 73 61  nt to that messa
2740: 67 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ge..**.** If the
2750: 20 53 51 4c 20 69 73 20 61 20 71 75 65 72 79 2c   SQL is a query,
2760: 20 74 68 65 6e 20 66 6f 72 20 65 61 63 68 20 72   then for each r
2770: 6f 77 20 69 6e 20 74 68 65 20 71 75 65 72 79 20  ow in the query 
2780: 72 65 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78 43  result.** the xC
2790: 61 6c 6c 62 61 63 6b 28 29 20 66 75 6e 63 74 69  allback() functi
27a0: 6f 6e 20 69 73 20 63 61 6c 6c 65 64 2e 20 20 70  on is called.  p
27b0: 41 72 67 20 62 65 63 6f 6d 65 73 20 74 68 65 20  Arg becomes the 
27c0: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
27d0: 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29  t to xCallback()
27e0: 2e 20 20 49 66 20 78 43 61 6c 6c 62 61 63 6b 3d  .  If xCallback=
27f0: 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61 6c  NULL then no cal
2800: 6c 62 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76 6f  lback.** is invo
2810: 6b 65 64 2c 20 65 76 65 6e 20 66 6f 72 20 71 75  ked, even for qu
2820: 65 72 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  eries..*/.int sq
2830: 6c 69 74 65 5f 65 78 65 63 28 0a 20 20 73 71 6c  lite_exec(.  sql
2840: 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20  ite *db,        
2850: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2860: 64 61 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63  database on whic
2870: 68 20 74 68 65 20 53 51 4c 20 65 78 65 63 75 74  h the SQL execut
2880: 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  es */.  char *zS
2890: 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ql,             
28a0: 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
28b0: 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f  o be executed */
28c0: 0a 20 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62 61  .  sqlite_callba
28d0: 63 6b 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20 2f  ck xCallback,  /
28e0: 2a 20 49 6e 76 6f 6b 65 20 74 68 69 73 20 63 61  * Invoke this ca
28f0: 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 2a  llback routine *
2900: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 20  /.  void *pArg, 
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
2930: 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29  t to xCallback()
2940: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
2950: 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20  rrMsg           
2960: 20 20 2f 2a 20 57 72 69 74 65 20 65 72 72 6f 72    /* Write error
2970: 20 6d 65 73 73 61 67 65 73 20 68 65 72 65 20 2a   messages here *
2980: 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61  /.){.  Parse sPa
2990: 72 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45 72  rse;..  if( pzEr
29a0: 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67  rMsg ) *pzErrMsg
29b0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 28 64 62 2d   = 0;.  if( (db-
29c0: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
29d0: 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20  Initialized)==0 
29e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d 20  ){.    int rc = 
29f0: 73 71 6c 69 74 65 49 6e 69 74 28 64 62 2c 20 70  sqliteInit(db, p
2a00: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2a10: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
2a20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53  ){.      sqliteS
2a30: 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d  trRealloc(pzErrM
2a40: 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  sg);.      retur
2a50: 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  n rc;.    }.  }.
2a60: 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73 65    memset(&sParse
2a70: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61 72  , 0, sizeof(sPar
2a80: 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e 64  se));.  sParse.d
2a90: 62 20 3d 20 64 62 3b 0a 20 20 73 50 61 72 73 65  b = db;.  sParse
2aa0: 2e 70 42 65 20 3d 20 64 62 2d 3e 70 42 65 3b 0a  .pBe = db->pBe;.
2ab0: 20 20 73 50 61 72 73 65 2e 78 43 61 6c 6c 62 61    sParse.xCallba
2ac0: 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a  ck = xCallback;.
2ad0: 20 20 73 50 61 72 73 65 2e 70 41 72 67 20 3d 20    sParse.pArg = 
2ae0: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 52 75  pArg;.  sqliteRu
2af0: 6e 50 61 72 73 65 72 28 26 73 50 61 72 73 65 2c  nParser(&sParse,
2b00: 20 7a 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29   zSql, pzErrMsg)
2b10: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 5f 6d  ;.  if( sqlite_m
2b20: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
2b30: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
2b40: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f  ing(pzErrMsg, "o
2b50: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 30  ut of memory", 0
2b60: 29 3b 0a 20 20 20 20 73 50 61 72 73 65 2e 72 63  );.    sParse.rc
2b70: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2b80: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 53 74 72  .  }.  sqliteStr
2b90: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
2ba0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 50 61 72  );.  return sPar
2bb0: 73 65 2e 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  se.rc;.}../*.** 
2bc0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70  This routine imp
2bd0: 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20 63  lements a busy c
2be0: 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c 65  allback that sle
2bf0: 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a  eps and tries.**
2c00: 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20 74   again until a t
2c10: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 20  imeout value is 
2c20: 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74 69  reached.  The ti
2c30: 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a 2a  meout value is.*
2c40: 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  * an integer num
2c50: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
2c60: 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61 73  nds passed in as
2c70: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
2c80: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
2c90: 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66 61  c int sqliteDefa
2ca0: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 28  ultBusyCallback(
2cb0: 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c  . void *Timeout,
2cc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
2cd0: 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  ximum amount of 
2ce0: 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a  time to wait */.
2cf0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 4e 6f 74   const char *Not
2d00: 55 73 65 64 2c 20 20 20 20 20 2f 2a 20 54 68 65  Used,     /* The
2d10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2d20: 6c 65 20 74 68 61 74 20 69 73 20 62 75 73 79 20  le that is busy 
2d30: 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20  */. int count   
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2d50: 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
2d60: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62  table has been b
2d70: 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 64 65  usy */.){.#if de
2d80: 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c 45 45  fined(HAVE_USLEE
2d90: 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c 45 45  P) && HAVE_USLEE
2da0: 50 0a 20 20 69 6e 74 20 64 65 6c 61 79 20 3d 20  P.  int delay = 
2db0: 31 30 30 30 30 3b 0a 20 20 69 6e 74 20 70 72 69  10000;.  int pri
2dc0: 6f 72 5f 64 65 6c 61 79 20 3d 20 30 3b 0a 20 20  or_delay = 0;.  
2dd0: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
2de0: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e  nt)Timeout;.  in
2df0: 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 31 3b  t i;..  for(i=1;
2e00: 20 69 3c 63 6f 75 6e 74 3b 20 69 2b 2b 29 7b 20   i<count; i++){ 
2e10: 0a 20 20 20 20 70 72 69 6f 72 5f 64 65 6c 61 79  .    prior_delay
2e20: 20 2b 3d 20 64 65 6c 61 79 3b 0a 20 20 20 20 64   += delay;.    d
2e30: 65 6c 61 79 20 3d 20 64 65 6c 61 79 2a 32 3b 0a  elay = delay*2;.
2e40: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3e 3d 31      if( delay>=1
2e50: 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 20 20  000000 ){.      
2e60: 64 65 6c 61 79 20 3d 20 31 30 30 30 30 30 30 3b  delay = 1000000;
2e70: 0a 20 20 20 20 20 20 70 72 69 6f 72 5f 64 65 6c  .      prior_del
2e80: 61 79 20 2b 3d 20 31 30 30 30 30 30 30 2a 28 63  ay += 1000000*(c
2e90: 6f 75 6e 74 20 2d 20 69 20 2d 20 31 29 3b 0a 20  ount - i - 1);. 
2ea0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2eb0: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f  }.  }.  if( prio
2ec0: 72 5f 64 65 6c 61 79 20 2b 20 64 65 6c 61 79 20  r_delay + delay 
2ed0: 3e 20 74 69 6d 65 6f 75 74 2a 31 30 30 30 20 29  > timeout*1000 )
2ee0: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69  {.    delay = ti
2ef0: 6d 65 6f 75 74 2a 31 30 30 30 20 2d 20 70 72 69  meout*1000 - pri
2f00: 6f 72 5f 64 65 6c 61 79 3b 0a 20 20 20 20 69 66  or_delay;.    if
2f10: 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74  ( delay<=0 ) ret
2f20: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75 73 6c  urn 0;.  }.  usl
2f30: 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65  eep(delay);.  re
2f40: 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20  turn 1;.#else.  
2f50: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
2f60: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66  nt)Timeout;.  if
2f70: 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30  ( (count+1)*1000
2f80: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
2f90: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
2fa0: 20 20 73 6c 65 65 70 28 31 29 3b 0a 20 20 72 65    sleep(1);.  re
2fb0: 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d  turn 1;.#endif.}
2fc0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
2fd0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75  tine sets the bu
2fe0: 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  sy callback for 
2ff0: 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61  an Sqlite databa
3000: 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76  se to the.** giv
3010: 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  en callback func
3020: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69  tion with the gi
3030: 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  ven argument..*/
3040: 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73  .void sqlite_bus
3050: 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c  y_handler(.  sql
3060: 69 74 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28  ite *db,.  int (
3070: 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f  *xBusy)(void*,co
3080: 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a  nst char*,int),.
3090: 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a    void *pArg.){.
30a0: 20 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62    db->xBusyCallb
30b0: 61 63 6b 20 3d 20 78 42 75 73 79 3b 0a 20 20 64  ack = xBusy;.  d
30c0: 62 2d 3e 70 42 75 73 79 41 72 67 20 3d 20 70 41  b->pBusyArg = pA
30d0: 72 67 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  rg;.}../*.** Thi
30e0: 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c  s routine instal
30f0: 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73  ls a default bus
3100: 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77  y handler that w
3110: 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  aits for the.** 
3120: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
3130: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
3140: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
3150: 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  g 0..*/.void sql
3160: 69 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  ite_busy_timeout
3170: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74  (sqlite *db, int
3180: 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30   ms){.  if( ms>0
3190: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62   ){.    sqlite_b
31a0: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
31b0: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
31c0: 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64  yCallback, (void
31d0: 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  *)ms);.  }else{.
31e0: 20 20 20 20 73 71 6c 69 74 65 5f 62 75 73 79 5f      sqlite_busy_
31f0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30  handler(db, 0, 0
3200: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
3210: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
3220: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
3230: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
3240: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
3250: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f  .*/.void sqlite_
3260: 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65  interrupt(sqlite
3270: 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61   *db){.  db->fla
3280: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
3290: 65 72 72 75 70 74 3b 0a 7d 0a                    errupt;.}.