/ Hex Artifact Content
Login

Artifact 0a13c7a2beb8ce36aee43daf8c95989b200727a7:


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: 32 39 20 32 30 30 31 2f 30 34 2f 32 38 20 31 36  29 2001/04/28 16
04b0: 3a 35 32 3a 34 32 20 64 72 68 20 45 78 70 20 24  :52:42 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 62 6c 5f  \n".     "  tbl_
0be0: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
0bf0: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
0c00: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a  ".     ")".  ;..
0c10: 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
0c20: 6e 67 20 70 72 6f 67 72 61 6d 20 69 73 20 75 73  ng program is us
0c30: 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
0c40: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 20 20   the internal.  
0c50: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ** structure hol
0c60: 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65 73 20  ding the tables 
0c70: 61 6e 64 20 69 6e 64 65 78 65 73 20 6f 66 20 74  and indexes of t
0c80: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  he database..  *
0c90: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
0ca0: 6f 6e 74 61 69 6e 73 20 61 20 73 70 65 63 69 61  ontains a specia
0cb0: 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73  l table named "s
0cc0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20  qlite_master".  
0cd0: 2a 2a 20 64 65 66 69 6e 65 64 20 61 73 20 66 6f  ** defined as fo
0ce0: 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  llows:.  **.  **
0cf0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0d00: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
0d10: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 74 79 70  .  **        typ
0d20: 65 20 20 20 20 20 20 20 74 65 78 74 2c 20 20 20  e       text,   
0d30: 20 2d 2d 20 20 45 69 74 68 65 72 20 22 74 61 62   --  Either "tab
0d40: 6c 65 22 20 6f 72 20 22 69 6e 64 65 78 22 20 6f  le" or "index" o
0d50: 72 20 22 6d 65 74 61 22 0a 20 20 2a 2a 20 20 20  r "meta".  **   
0d60: 20 20 20 20 20 6e 61 6d 65 20 20 20 20 20 20 20       name       
0d70: 74 65 78 74 2c 20 20 20 20 2d 2d 20 20 4e 61 6d  text,    --  Nam
0d80: 65 20 6f 66 20 74 61 62 6c 65 20 6f 72 20 69 6e  e of table or in
0d90: 64 65 78 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  dex.  **        
0da0: 74 62 6c 5f 6e 61 6d 65 20 20 20 74 65 78 74 2c  tbl_name   text,
0db0: 20 20 20 20 2d 2d 20 20 41 73 73 6f 63 69 61 74      --  Associat
0dc0: 65 64 20 74 61 62 6c 65 20 0a 20 20 2a 2a 20 20  ed table .  **  
0dd0: 20 20 20 20 20 20 73 71 6c 20 20 20 20 20 20 20        sql       
0de0: 20 74 65 78 74 20 20 20 20 20 2d 2d 20 20 54 68   text     --  Th
0df0: 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  e CREATE stateme
0e00: 6e 74 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65  nt for this obje
0e10: 63 74 0a 20 20 2a 2a 20 20 20 20 29 3b 0a 20 20  ct.  **    );.  
0e20: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 71 6c 69  **.  ** The sqli
0e30: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
0e40: 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
0e50: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
0e60: 20 74 61 62 6c 65 0a 20 20 2a 2a 20 61 6e 64 20   table.  ** and 
0e70: 65 61 63 68 20 69 6e 64 65 78 2e 20 20 54 68 65  each index.  The
0e80: 20 22 74 79 70 65 22 20 63 6f 6c 75 6d 6e 20 74   "type" column t
0e90: 65 6c 6c 73 20 77 68 65 74 68 65 72 20 74 68 65  ells whether the
0ea0: 20 65 6e 74 72 79 20 69 73 0a 20 20 2a 2a 20 61   entry is.  ** a
0eb0: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
0ec0: 20 20 54 68 65 20 22 6e 61 6d 65 22 20 63 6f 6c    The "name" col
0ed0: 75 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  umn is the name 
0ee0: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 20  of the object.. 
0ef0: 20 2a 2a 20 54 68 65 20 22 74 62 6c 5f 6e 61 6d   ** The "tbl_nam
0f00: 65 22 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  e" is the name o
0f10: 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
0f20: 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 74 61 62   table.  For tab
0f30: 6c 65 73 2c 0a 20 20 2a 2a 20 74 68 65 20 74 62  les,.  ** the tb
0f40: 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73  l_name column is
0f50: 20 61 6c 77 61 79 73 20 74 68 65 20 73 61 6d 65   always the same
0f60: 20 61 73 20 6e 61 6d 65 2e 20 20 46 6f 72 20 69   as name.  For i
0f70: 6e 64 69 63 65 73 2c 20 74 68 65 0a 20 20 2a 2a  ndices, the.  **
0f80: 20 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e   tbl_name column
0f90: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
0fa0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
0fb0: 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a 20  that the index. 
0fc0: 20 2a 2a 20 69 6e 64 65 78 65 73 2e 20 20 46 69   ** indexes.  Fi
0fd0: 6e 61 6c 6c 79 2c 20 74 68 65 20 22 73 71 6c 22  nally, the "sql"
0fe0: 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
0ff0: 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65   the complete te
1000: 78 74 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 43  xt of.  ** the C
1010: 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43  REATE TABLE or C
1020: 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
1030: 65 6d 65 6e 74 20 74 68 61 74 20 6f 72 69 67 69  ement that origi
1040: 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 0a 20 20  nally created.  
1050: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ** the table or 
1060: 69 6e 64 65 78 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  index..  **.  **
1070: 20 49 66 20 74 68 65 20 22 74 79 70 65 22 20 63   If the "type" c
1080: 6f 6c 75 6d 6e 20 68 61 73 20 74 68 65 20 76 61  olumn has the va
1090: 6c 75 65 20 22 6d 65 74 61 22 2c 20 74 68 65 6e  lue "meta", then
10a0: 20 74 68 65 20 22 73 71 6c 22 20 63 6f 6c 75 6d   the "sql" colum
10b0: 6e 0a 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  n.  ** contains 
10c0: 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69 6f  extra informatio
10d0: 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74 61  n about the data
10e0: 62 61 73 65 2c 20 73 75 63 68 20 61 73 20 74 68  base, such as th
10f0: 65 0a 20 20 2a 2a 20 66 69 6c 65 20 66 6f 72 6d  e.  ** file form
1100: 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  at version numbe
1110: 72 2e 20 20 41 6c 6c 20 6d 65 74 61 20 69 6e 66  r.  All meta inf
1120: 6f 72 6d 61 74 69 6f 6e 20 6d 75 73 74 20 62 65  ormation must be
1130: 20 70 72 6f 63 65 73 73 65 64 0a 20 20 2a 2a 20   processed.  ** 
1140: 62 65 66 6f 72 65 20 61 6e 79 20 74 61 62 6c 65  before any table
1150: 73 20 6f 72 20 69 6e 64 69 63 65 73 20 61 72 65  s or indices are
1160: 20 63 6f 6e 73 74 72 75 63 74 65 64 2e 0a 20 20   constructed..  
1170: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 6f 6c 6c  **.  ** The foll
1180: 6f 77 69 6e 67 20 70 72 6f 67 72 61 6d 20 69 6e  owing program in
1190: 76 6f 6b 65 73 20 69 74 73 20 63 61 6c 6c 62 61  vokes its callba
11a0: 63 6b 20 6f 6e 20 74 68 65 20 53 51 4c 20 66 6f  ck on the SQL fo
11b0: 72 20 65 61 63 68 0a 20 20 2a 2a 20 74 61 62 6c  r each.  ** tabl
11c0: 65 20 74 68 65 6e 20 67 6f 65 73 20 62 61 63 6b  e then goes back
11d0: 20 61 6e 64 20 69 6e 76 6f 6b 65 73 20 74 68 65   and invokes the
11e0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 20 74 68 65   callback on the
11f0: 0a 20 20 2a 2a 20 53 51 4c 20 66 6f 72 20 65 61  .  ** SQL for ea
1200: 63 68 20 69 6e 64 65 78 2e 20 20 54 68 65 20 63  ch index.  The c
1210: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 20 69 6e 76  allback will inv
1220: 6f 6b 65 20 74 68 65 0a 20 20 2a 2a 20 70 61 72  oke the.  ** par
1230: 73 65 72 20 74 6f 20 62 75 69 6c 64 20 74 68 65  ser to build the
1240: 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
1250: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
1260: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63    ** database sc
1270: 68 65 6d 65 2e 0a 20 20 2a 2f 0a 20 20 73 74 61  heme..  */.  sta
1280: 74 69 63 20 56 64 62 65 4f 70 20 69 6e 69 74 50  tic VdbeOp initP
1290: 72 6f 67 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20  rog[] = {.    { 
12a0: 4f 50 5f 4f 70 65 6e 54 62 6c 2c 20 20 30 2c 20  OP_OpenTbl,  0, 
12b0: 30 2c 20 20 4d 41 53 54 45 52 5f 4e 41 4d 45 7d  0,  MASTER_NAME}
12c0: 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c  ,.    { OP_Next,
12d0: 20 20 20 20 20 30 2c 20 39 2c 20 20 30 7d 2c 20       0, 9,  0}, 
12e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 2a            /* 1 *
12f0: 2f 0a 20 20 20 20 7b 20 4f 50 5f 46 69 65 6c 64  /.    { OP_Field
1300: 2c 20 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a  ,    0, 0,  0},.
1310: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
1320: 20 20 20 30 2c 20 30 2c 20 20 22 6d 65 74 61 22     0, 0,  "meta"
1330: 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20  },.    { OP_Ne, 
1340: 20 20 20 20 20 20 30 2c 20 31 2c 20 20 30 7d 2c        0, 1,  0},
1350: 0a 20 20 20 20 7b 20 4f 50 5f 46 69 65 6c 64 2c  .    { OP_Field,
1360: 20 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a 20      0, 0,  0},. 
1370: 20 20 20 7b 20 4f 50 5f 46 69 65 6c 64 2c 20 20     { OP_Field,  
1380: 20 20 30 2c 20 33 2c 20 20 30 7d 2c 0a 20 20 20    0, 3,  0},.   
1390: 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20   { OP_Callback, 
13a0: 32 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b  2, 0,  0},.    {
13b0: 20 4f 50 5f 47 6f 74 6f 2c 20 20 20 20 20 30 2c   OP_Goto,     0,
13c0: 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f   1,  0},.    { O
13d0: 50 5f 52 65 77 69 6e 64 2c 20 20 20 30 2c 20 30  P_Rewind,   0, 0
13e0: 2c 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20  ,  0},          
13f0: 20 2f 2a 20 39 20 2a 2f 0a 20 20 20 20 7b 20 4f   /* 9 */.    { O
1400: 50 5f 4e 65 78 74 2c 20 20 20 20 20 30 2c 20 31  P_Next,     0, 1
1410: 37 2c 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20  7, 0},          
1420: 20 2f 2a 20 31 30 20 2a 2f 0a 20 20 20 20 7b 20   /* 10 */.    { 
1430: 4f 50 5f 46 69 65 6c 64 2c 20 20 20 20 30 2c 20  OP_Field,    0, 
1440: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  0,  0},.    { OP
1450: 5f 53 74 72 69 6e 67 2c 20 20 20 30 2c 20 30 2c  _String,   0, 0,
1460: 20 20 22 74 61 62 6c 65 22 7d 2c 0a 20 20 20 20    "table"},.    
1470: 7b 20 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 30  { OP_Ne,       0
1480: 2c 20 31 30 2c 20 30 7d 2c 0a 20 20 20 20 7b 20  , 10, 0},.    { 
1490: 4f 50 5f 46 69 65 6c 64 2c 20 20 20 20 30 2c 20  OP_Field,    0, 
14a0: 33 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50  3,  0},.    { OP
14b0: 5f 43 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 2c  _Callback, 1, 0,
14c0: 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 47    0},.    { OP_G
14d0: 6f 74 6f 2c 20 20 20 20 20 30 2c 20 31 30 2c 20  oto,     0, 10, 
14e0: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 52 65 77  0},.    { OP_Rew
14f0: 69 6e 64 2c 20 20 20 30 2c 20 30 2c 20 20 30 7d  ind,   0, 0,  0}
1500: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ,           /* 1
1510: 37 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 4e 65  7 */.    { OP_Ne
1520: 78 74 2c 20 20 20 20 20 30 2c 20 32 35 2c 20 30  xt,     0, 25, 0
1530: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  },           /* 
1540: 31 38 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 46  18 */.    { OP_F
1550: 69 65 6c 64 2c 20 20 20 20 30 2c 20 30 2c 20 20  ield,    0, 0,  
1560: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 53 74 72  0},.    { OP_Str
1570: 69 6e 67 2c 20 20 20 30 2c 20 30 2c 20 20 22 69  ing,   0, 0,  "i
1580: 6e 64 65 78 22 7d 2c 0a 20 20 20 20 7b 20 4f 50  ndex"},.    { OP
1590: 5f 4e 65 2c 20 20 20 20 20 20 20 30 2c 20 31 38  _Ne,       0, 18
15a0: 2c 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 46  , 0},.    { OP_F
15b0: 69 65 6c 64 2c 20 20 20 20 30 2c 20 33 2c 20 20  ield,    0, 3,  
15c0: 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 61 6c  0},.    { OP_Cal
15d0: 6c 62 61 63 6b 2c 20 31 2c 20 30 2c 20 20 30 7d  lback, 1, 0,  0}
15e0: 2c 0a 20 20 20 20 7b 20 4f 50 5f 47 6f 74 6f 2c  ,.    { OP_Goto,
15f0: 20 20 20 20 20 30 2c 20 31 38 2c 20 30 7d 2c 0a       0, 18, 0},.
1600: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
1610: 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 20 20 20     0, 0,  0},   
1620: 20 20 20 20 20 20 20 20 2f 2a 20 32 35 20 2a 2f          /* 25 */
1630: 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 20 43 72 65 61  .  };..  /* Crea
1640: 74 65 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63  te a virtual mac
1650: 68 69 6e 65 20 74 6f 20 72 75 6e 20 74 68 65 20  hine to run the 
1660: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 70  initialization p
1670: 72 6f 67 72 61 6d 2e 20 20 52 75 6e 0a 20 20 2a  rogram.  Run.  *
1680: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  * the program.  
1690: 54 68 65 20 64 65 6c 65 74 65 20 74 68 65 20 76  The delete the v
16a0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 0a  irtual machine..
16b0: 20 20 2a 2f 0a 20 20 76 64 62 65 20 3d 20 73 71    */.  vdbe = sq
16c0: 6c 69 74 65 56 64 62 65 43 72 65 61 74 65 28 64  liteVdbeCreate(d
16d0: 62 29 3b 0a 20 20 69 66 28 20 76 64 62 65 3d 3d  b);.  if( vdbe==
16e0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53  0 ){.    sqliteS
16f0: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
1700: 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  g, "out of memor
1710: 79 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  y");.    return 
1720: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
1730: 7d 0a 20 20 73 71 6c 69 74 65 56 64 62 65 41 64  }.  sqliteVdbeAd
1740: 64 4f 70 4c 69 73 74 28 76 64 62 65 2c 20 73 69  dOpList(vdbe, si
1750: 7a 65 6f 66 28 69 6e 69 74 50 72 6f 67 29 2f 73  zeof(initProg)/s
1760: 69 7a 65 6f 66 28 69 6e 69 74 50 72 6f 67 5b 30  izeof(initProg[0
1770: 5d 29 2c 20 69 6e 69 74 50 72 6f 67 29 3b 0a 20  ]), initProg);. 
1780: 20 72 63 20 3d 20 73 71 6c 69 74 65 56 64 62 65   rc = sqliteVdbe
1790: 45 78 65 63 28 76 64 62 65 2c 20 73 71 6c 69 74  Exec(vdbe, sqlit
17a0: 65 4f 70 65 6e 43 62 2c 20 64 62 2c 20 70 7a 45  eOpenCb, db, pzE
17b0: 72 72 4d 73 67 2c 20 0a 20 20 20 20 20 20 20 20  rrMsg, .        
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
17d0: 2d 3e 70 42 75 73 79 41 72 67 2c 20 64 62 2d 3e  ->pBusyArg, db->
17e0: 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 29 3b 0a  xBusyCallback);.
17f0: 20 20 73 71 6c 69 74 65 56 64 62 65 44 65 6c 65    sqliteVdbeDele
1800: 74 65 28 76 64 62 65 29 3b 0a 20 20 69 66 28 20  te(vdbe);.  if( 
1810: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1820: 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74   db->file_format
1830: 3c 32 20 26 26 20 64 62 2d 3e 6e 54 61 62 6c 65  <2 && db->nTable
1840: 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
1850: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
1860: 73 67 2c 20 22 6f 62 73 6f 6c 65 74 65 20 66 69  sg, "obsolete fi
1870: 6c 65 20 66 6f 72 6d 61 74 22 2c 20 30 29 3b 0a  le format", 0);.
1880: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1890: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
18a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
18b0: 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
18c0: 62 3b 0a 20 20 20 20 63 68 61 72 20 2a 61 7a 41  b;.    char *azA
18d0: 72 67 5b 32 5d 3b 0a 20 20 20 20 61 7a 41 72 67  rg[2];.    azArg
18e0: 5b 30 5d 20 3d 20 6d 61 73 74 65 72 5f 73 63 68  [0] = master_sch
18f0: 65 6d 61 3b 0a 20 20 20 20 61 7a 41 72 67 5b 31  ema;.    azArg[1
1900: 5d 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  ] = 0;.    sqlit
1910: 65 4f 70 65 6e 43 62 28 64 62 2c 20 31 2c 20 61  eOpenCb(db, 1, a
1920: 7a 41 72 67 2c 20 30 29 3b 0a 20 20 20 20 70 54  zArg, 0);.    pT
1930: 61 62 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 54  ab = sqliteFindT
1940: 61 62 6c 65 28 64 62 2c 20 4d 41 53 54 45 52 5f  able(db, MASTER_
1950: 4e 41 4d 45 29 3b 0a 20 20 20 20 69 66 28 20 70  NAME);.    if( p
1960: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 54 61  Tab ){.      pTa
1970: 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b  b->readOnly = 1;
1980: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 66  .    }.    db->f
1990: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
19a0: 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a  nitialized;.  }.
19b0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
19c0: 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73 69 6f  /*.** The versio
19d0: 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  n of the library
19e0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 73  .*/.const char s
19f0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 5b 5d 20  qlite_version[] 
1a00: 3d 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  = SQLITE_VERSION
1a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73 20 74 68  ;../*.** Does th
1a20: 65 20 6c 69 62 72 61 72 79 20 65 78 70 65 63 74  e library expect
1a30: 20 64 61 74 61 20 74 6f 20 62 65 20 65 6e 63 6f   data to be enco
1a40: 64 65 64 20 61 73 20 55 54 46 2d 38 20 6f 72 20  ded as UTF-8 or 
1a50: 69 73 6f 38 38 35 39 3f 20 20 54 68 65 0a 2a 2a  iso8859?  The.**
1a60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61   following globa
1a70: 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c 77 61 79  l constant alway
1a80: 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f 77 2e 0a  s lets us know..
1a90: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1aa0: 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63 68 61 72  _UTF8.const char
1ab0: 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67   sqlite_encoding
1ac0: 5b 5d 20 3d 20 22 55 54 46 2d 38 22 3b 0a 23 65  [] = "UTF-8";.#e
1ad0: 6c 73 65 0a 63 6f 6e 73 74 20 63 68 61 72 20 73  lse.const char s
1ae0: 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d  qlite_encoding[]
1af0: 20 3d 20 22 69 73 6f 38 38 35 39 22 3b 0a 23 65   = "iso8859";.#e
1b00: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  ndif../*.** Open
1b10: 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 64 61   a new SQLite da
1b20: 74 61 62 61 73 65 2e 20 20 43 6f 6e 73 74 72 75  tabase.  Constru
1b30: 63 74 20 61 6e 20 22 73 71 6c 69 74 65 22 20 73  ct an "sqlite" s
1b40: 74 72 75 63 74 75 72 65 20 74 6f 20 64 65 66 69  tructure to defi
1b50: 6e 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 20  ne.** the state 
1b60: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
1b70: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f   and return a po
1b80: 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73 74  inter to that st
1b90: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
1ba0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
1bb0: 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  e to initialize 
1bc0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
1bd0: 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
1be0: 61 74 0a 2a 2a 20 68 6f 6c 64 20 74 68 65 20 64  at.** hold the d
1bf0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
1c00: 20 42 75 74 20 69 66 20 74 68 69 73 20 66 61 69   But if this fai
1c10: 6c 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ls (because the 
1c20: 73 63 68 65 6d 61 20 66 69 6c 65 0a 2a 2a 20 69  schema file.** i
1c30: 73 20 6c 6f 63 6b 65 64 29 20 74 68 65 6e 20 74  s locked) then t
1c40: 68 61 74 20 73 74 65 70 20 69 73 20 64 65 66 65  hat step is defe
1c50: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  rred until the f
1c60: 69 72 73 74 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20  irst call to.** 
1c70: 73 71 6c 69 74 65 5f 65 78 65 63 28 29 2e 0a 2a  sqlite_exec()..*
1c80: 2f 0a 73 71 6c 69 74 65 20 2a 73 71 6c 69 74 65  /.sqlite *sqlite
1c90: 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  _open(const char
1ca0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69 6e 74   *zFilename, int
1cb0: 20 6d 6f 64 65 2c 20 63 68 61 72 20 2a 2a 70 7a   mode, char **pz
1cc0: 45 72 72 4d 73 67 29 7b 0a 20 20 73 71 6c 69 74  ErrMsg){.  sqlit
1cd0: 65 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  e *db;.  int rc;
1ce0: 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20  ..  /* Allocate 
1cf0: 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61 20  the sqlite data 
1d00: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64  structure */.  d
1d10: 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  b = sqliteMalloc
1d20: 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 29  ( sizeof(sqlite)
1d30: 20 29 3b 0a 20 20 69 66 28 20 70 7a 45 72 72 4d   );.  if( pzErrM
1d40: 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67 20 3d  sg ) *pzErrMsg =
1d50: 20 30 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20   0;.  if( db==0 
1d60: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e  ) goto no_mem_on
1d70: 5f 6f 70 65 6e 3b 0a 20 20 0a 20 20 2f 2a 20 4f  _open;.  .  /* O
1d80: 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20  pen the backend 
1d90: 64 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20  database driver 
1da0: 2a 2f 0a 20 20 64 62 2d 3e 70 42 65 20 3d 20 73  */.  db->pBe = s
1db0: 71 6c 69 74 65 44 62 62 65 4f 70 65 6e 28 7a 46  qliteDbbeOpen(zF
1dc0: 69 6c 65 6e 61 6d 65 2c 20 28 6d 6f 64 65 26 30  ilename, (mode&0
1dd0: 32 32 32 29 21 3d 30 2c 20 6d 6f 64 65 21 3d 30  222)!=0, mode!=0
1de0: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69  , pzErrMsg);.  i
1df0: 66 28 20 64 62 2d 3e 70 42 65 3d 3d 30 20 29 7b  f( db->pBe==0 ){
1e00: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
1e10: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 53  db);.    sqliteS
1e20: 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d  trRealloc(pzErrM
1e30: 73 67 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  sg);.    return 
1e40: 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 73 73  0;.  }..  /* Ass
1e50: 75 6d 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  ume file format 
1e60: 31 20 75 6e 6c 65 73 73 20 74 68 65 20 64 61 74  1 unless the dat
1e70: 61 62 61 73 65 20 73 61 79 73 20 6f 74 68 65 72  abase says other
1e80: 77 69 73 65 20 2a 2f 0a 20 20 64 62 2d 3e 66 69  wise */.  db->fi
1e90: 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 0a  le_format = 1;..
1ea0: 20 20 2f 2a 20 41 74 74 65 6d 70 74 20 74 6f 20    /* Attempt to 
1eb0: 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  read the schema 
1ec0: 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1ed0: 49 6e 69 74 28 64 62 2c 20 70 7a 45 72 72 4d 73  Init(db, pzErrMs
1ee0: 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  g);.  if( sqlite
1ef0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
1f00: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
1f10: 6d 5f 6f 6e 5f 6f 70 65 6e 3b 0a 20 20 7d 65 6c  m_on_open;.  }el
1f20: 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  se if( rc!=SQLIT
1f30: 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49  E_OK && rc!=SQLI
1f40: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 73  TE_BUSY ){.    s
1f50: 71 6c 69 74 65 5f 63 6c 6f 73 65 28 64 62 29 3b  qlite_close(db);
1f60: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
1f70: 20 7d 65 6c 73 65 20 2f 2a 20 69 66 28 20 70 7a   }else /* if( pz
1f80: 45 72 72 4d 73 67 20 29 20 2a 2f 7b 0a 20 20 20  ErrMsg ) */{.   
1f90: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 45   sqliteFree(*pzE
1fa0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a 70 7a 45  rrMsg);.    *pzE
1fb0: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rrMsg = 0;.  }. 
1fc0: 20 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f 5f   return db;..no_
1fd0: 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20 73  mem_on_open:.  s
1fe0: 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70  qliteSetString(p
1ff0: 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66  zErrMsg, "out of
2000: 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20   memory", 0);.  
2010: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
2020: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  (pzErrMsg);.  re
2030: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
2040: 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69   Close an existi
2050: 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ng SQLite databa
2060: 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  se.*/.void sqlit
2070: 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20 2a  e_close(sqlite *
2080: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  db){.  int i;.  
2090: 64 62 2d 3e 70 42 65 2d 3e 78 2d 3e 43 6c 6f 73  db->pBe->x->Clos
20a0: 65 28 64 62 2d 3e 70 42 65 29 3b 0a 20 20 66 6f  e(db->pBe);.  fo
20b0: 72 28 69 3d 30 3b 20 69 3c 4e 5f 48 41 53 48 3b  r(i=0; i<N_HASH;
20c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 54 61 62 6c 65   i++){.    Table
20d0: 20 2a 70 4e 65 78 74 2c 20 2a 70 4c 69 73 74 20   *pNext, *pList 
20e0: 3d 20 64 62 2d 3e 61 70 54 62 6c 48 61 73 68 5b  = db->apTblHash[
20f0: 69 5d 3b 0a 20 20 20 20 64 62 2d 3e 61 70 54 62  i];.    db->apTb
2100: 6c 48 61 73 68 5b 69 5d 20 3d 20 30 3b 0a 20 20  lHash[i] = 0;.  
2110: 20 20 77 68 69 6c 65 28 20 70 4c 69 73 74 20 29    while( pList )
2120: 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20  {.      pNext = 
2130: 70 4c 69 73 74 2d 3e 70 48 61 73 68 3b 0a 20 20  pList->pHash;.  
2140: 20 20 20 20 70 4c 69 73 74 2d 3e 70 48 61 73 68      pList->pHash
2150: 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 0;.      sqli
2160: 74 65 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  teDeleteTable(db
2170: 2c 20 70 4c 69 73 74 29 3b 0a 20 20 20 20 20 20  , pList);.      
2180: 70 4c 69 73 74 20 3d 20 70 4e 65 78 74 3b 0a 20  pList = pNext;. 
2190: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
21a0: 65 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a  eFree(db);.}../*
21b0: 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
21c0: 69 66 20 74 68 65 20 67 69 76 65 6e 20 53 51 4c  if the given SQL
21d0: 20 73 74 72 69 6e 67 20 65 6e 64 73 20 69 6e 20   string ends in 
21e0: 61 20 73 65 6d 69 63 6f 6c 6f 6e 2e 0a 2a 2f 0a  a semicolon..*/.
21f0: 69 6e 74 20 73 71 6c 69 74 65 5f 63 6f 6d 70 6c  int sqlite_compl
2200: 65 74 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ete(const char *
2210: 7a 53 71 6c 29 7b 0a 20 20 69 6e 74 20 69 73 43  zSql){.  int isC
2220: 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 77  omplete = 0;.  w
2230: 68 69 6c 65 28 20 2a 7a 53 71 6c 20 29 7b 0a 20  hile( *zSql ){. 
2240: 20 20 20 73 77 69 74 63 68 28 20 2a 7a 53 71 6c     switch( *zSql
2250: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27   ){.      case '
2260: 3b 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73  ;': {.        is
2270: 43 6f 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20  Complete = 1;.  
2280: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2290: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
22a0: 27 20 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  ' ':.      case 
22b0: 27 5c 74 27 3a 0a 20 20 20 20 20 20 63 61 73 65  '\t':.      case
22c0: 20 27 5c 6e 27 3a 0a 20 20 20 20 20 20 63 61 73   '\n':.      cas
22d0: 65 20 27 5c 66 27 3a 20 7b 0a 20 20 20 20 20 20  e '\f': {.      
22e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
22f0: 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c 27 27  .      case '\''
2300: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f  : {.        isCo
2310: 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20  mplete = 0;.    
2320: 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20      zSql++;.    
2330: 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c      while( *zSql
2340: 20 26 26 20 2a 7a 53 71 6c 21 3d 27 5c 27 27 20   && *zSql!='\'' 
2350: 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20  ){ zSql++; }.   
2360: 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d       if( *zSql==
2370: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
2380: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2390: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
23a0: 27 22 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  '"': {.        i
23b0: 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20  sComplete = 0;. 
23c0: 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20         zSql++;. 
23d0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a         while( *z
23e0: 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27 22  Sql && *zSql!='"
23f0: 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20  ' ){ zSql++; }. 
2400: 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c         if( *zSql
2410: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
2420: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2430: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
2440: 65 20 27 2d 27 3a 20 7b 0a 20 20 20 20 20 20 20  e '-': {.       
2450: 20 69 66 28 20 7a 53 71 6c 5b 31 5d 21 3d 27 2d   if( zSql[1]!='-
2460: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ' ){.          i
2470: 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20  sComplete = 0;. 
2480: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2490: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
24a0: 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20 26    while( *zSql &
24b0: 26 20 2a 7a 53 71 6c 21 3d 27 5c 6e 27 20 29 7b  & *zSql!='\n' ){
24c0: 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20 20   zSql++; }.     
24d0: 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30 20     if( *zSql==0 
24e0: 29 20 72 65 74 75 72 6e 20 69 73 43 6f 6d 70 6c  ) return isCompl
24f0: 65 74 65 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ete;.        bre
2500: 61 6b 3b 0a 20 20 20 20 20 20 7d 20 0a 20 20 20  ak;.      } .   
2510: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
2520: 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65 74 65        isComplete
2530: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72   = 0;.        br
2540: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2550: 20 7d 0a 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20   }.    zSql++;. 
2560: 20 7d 0a 20 20 72 65 74 75 72 6e 20 69 73 43 6f   }.  return isCo
2570: 6d 70 6c 65 74 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  mplete;.}../*.**
2580: 20 45 78 65 63 75 74 65 20 53 51 4c 20 63 6f 64   Execute SQL cod
2590: 65 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f  e.  Return one o
25a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75  f the SQLITE_ su
25b0: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a  ccess/failure.**
25c0: 20 63 6f 64 65 73 2e 20 20 41 6c 73 6f 20 77 72   codes.  Also wr
25d0: 69 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ite an error mes
25e0: 73 61 67 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  sage into memory
25f0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a   obtained from.*
2600: 2a 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d  * malloc() and m
2610: 61 6b 65 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f  ake *pzErrMsg po
2620: 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 73 73  int to that mess
2630: 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  age..**.** If th
2640: 65 20 53 51 4c 20 69 73 20 61 20 71 75 65 72 79  e SQL is a query
2650: 2c 20 74 68 65 6e 20 66 6f 72 20 65 61 63 68 20  , then for each 
2660: 72 6f 77 20 69 6e 20 74 68 65 20 71 75 65 72 79  row in the query
2670: 20 72 65 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78   result.** the x
2680: 43 61 6c 6c 62 61 63 6b 28 29 20 66 75 6e 63 74  Callback() funct
2690: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 2e 20 20  ion is called.  
26a0: 70 41 72 67 20 62 65 63 6f 6d 65 73 20 74 68 65  pArg becomes the
26b0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
26c0: 6e 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28  nt to xCallback(
26d0: 29 2e 20 20 49 66 20 78 43 61 6c 6c 62 61 63 6b  ).  If xCallback
26e0: 3d 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61  =NULL then no ca
26f0: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76  llback.** is inv
2700: 6f 6b 65 64 2c 20 65 76 65 6e 20 66 6f 72 20 71  oked, even for q
2710: 75 65 72 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73  ueries..*/.int s
2720: 71 6c 69 74 65 5f 65 78 65 63 28 0a 20 20 73 71  qlite_exec(.  sq
2730: 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20  lite *db,       
2740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2750: 20 64 61 74 61 62 61 73 65 20 6f 6e 20 77 68 69   database on whi
2760: 63 68 20 74 68 65 20 53 51 4c 20 65 78 65 63 75  ch the SQL execu
2770: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
2780: 53 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20  Sql,            
2790: 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
27a0: 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 2a  to be executed *
27b0: 2f 0a 20 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62  /.  sqlite_callb
27c0: 61 63 6b 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20  ack xCallback,  
27d0: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 69 73 20 63  /* Invoke this c
27e0: 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
27f0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c  */.  void *pArg,
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2810: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
2820: 6e 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28  nt to xCallback(
2830: 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  ) */.  char **pz
2840: 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20  ErrMsg          
2850: 20 20 20 2f 2a 20 57 72 69 74 65 20 65 72 72 6f     /* Write erro
2860: 72 20 6d 65 73 73 61 67 65 73 20 68 65 72 65 20  r messages here 
2870: 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50  */.){.  Parse sP
2880: 61 72 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45  arse;..  if( pzE
2890: 72 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73  rrMsg ) *pzErrMs
28a0: 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 28 64 62  g = 0;.  if( (db
28b0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
28c0: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30  _Initialized)==0
28d0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d   ){.    int rc =
28e0: 20 73 71 6c 69 74 65 49 6e 69 74 28 64 62 2c 20   sqliteInit(db, 
28f0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
2900: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2910: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2920: 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72  StrRealloc(pzErr
2930: 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75  Msg);.      retu
2940: 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d  rn rc;.    }.  }
2950: 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73  .  memset(&sPars
2960: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61  e, 0, sizeof(sPa
2970: 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e  rse));.  sParse.
2980: 64 62 20 3d 20 64 62 3b 0a 20 20 73 50 61 72 73  db = db;.  sPars
2990: 65 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43  e.xCallback = xC
29a0: 61 6c 6c 62 61 63 6b 3b 0a 20 20 73 50 61 72 73  allback;.  sPars
29b0: 65 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  e.pArg = pArg;. 
29c0: 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72   sqliteRunParser
29d0: 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20  (&sParse, zSql, 
29e0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28  pzErrMsg);.  if(
29f0: 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66   sqlite_malloc_f
2a00: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c  ailed ){.    sql
2a10: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
2a20: 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d  rrMsg, "out of m
2a30: 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 20 20  emory", 0);.    
2a40: 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49  sParse.rc = SQLI
2a50: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20  TE_NOMEM;.  }.  
2a60: 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f 63  sqliteStrRealloc
2a70: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  (pzErrMsg);.  re
2a80: 74 75 72 6e 20 73 50 61 72 73 65 2e 72 63 3b 0a  turn sParse.rc;.
2a90: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
2aa0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73  utine implements
2ab0: 20 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b   a busy callback
2ac0: 20 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e 64   that sleeps and
2ad0: 20 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20   tries.** again 
2ae0: 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74 20  until a timeout 
2af0: 76 61 6c 75 65 20 69 73 20 72 65 61 63 68 65 64  value is reached
2b00: 2e 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20 76  .  The timeout v
2b10: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e  alue is.** an in
2b20: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
2b30: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61 73  milliseconds pas
2b40: 73 65 64 20 69 6e 20 61 73 20 74 68 65 20 66 69  sed in as the fi
2b50: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  rst.** argument.
2b60: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
2b70: 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79  qliteDefaultBusy
2b80: 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20  Callback(. void 
2b90: 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20 20 20 20  *Timeout,       
2ba0: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
2bb0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f  mount of time to
2bc0: 20 77 61 69 74 20 2a 2f 0a 20 63 6f 6e 73 74 20   wait */. const 
2bd0: 63 68 61 72 20 2a 4e 6f 74 55 73 65 64 2c 20 20  char *NotUsed,  
2be0: 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
2bf0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
2c00: 20 69 73 20 62 75 73 79 20 2a 2f 0a 20 69 6e 74   is busy */. int
2c10: 20 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20   count          
2c20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2c30: 6f 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68  of times table h
2c40: 61 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a  as been busy */.
2c50: 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48  ){.#if defined(H
2c60: 41 56 45 5f 55 53 4c 45 45 50 29 20 26 26 20 48  AVE_USLEEP) && H
2c70: 41 56 45 5f 55 53 4c 45 45 50 0a 20 20 69 6e 74  AVE_USLEEP.  int
2c80: 20 64 65 6c 61 79 20 3d 20 31 30 30 30 30 3b 0a   delay = 10000;.
2c90: 20 20 69 6e 74 20 70 72 69 6f 72 5f 64 65 6c 61    int prior_dela
2ca0: 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 74 69 6d  y = 0;.  int tim
2cb0: 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65  eout = (int)Time
2cc0: 6f 75 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  out;.  int i;.. 
2cd0: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 63 6f 75 6e   for(i=1; i<coun
2ce0: 74 3b 20 69 2b 2b 29 7b 20 0a 20 20 20 20 70 72  t; i++){ .    pr
2cf0: 69 6f 72 5f 64 65 6c 61 79 20 2b 3d 20 64 65 6c  ior_delay += del
2d00: 61 79 3b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20  ay;.    delay = 
2d10: 64 65 6c 61 79 2a 32 3b 0a 20 20 20 20 69 66 28  delay*2;.    if(
2d20: 20 64 65 6c 61 79 3e 3d 31 30 30 30 30 30 30 20   delay>=1000000 
2d30: 29 7b 0a 20 20 20 20 20 20 64 65 6c 61 79 20 3d  ){.      delay =
2d40: 20 31 30 30 30 30 30 30 3b 0a 20 20 20 20 20 20   1000000;.      
2d50: 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b 3d 20 31  prior_delay += 1
2d60: 30 30 30 30 30 30 2a 28 63 6f 75 6e 74 20 2d 20  000000*(count - 
2d70: 69 20 2d 20 31 29 3b 0a 20 20 20 20 20 20 62 72  i - 1);.      br
2d80: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
2d90: 20 69 66 28 20 70 72 69 6f 72 5f 64 65 6c 61 79   if( prior_delay
2da0: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
2db0: 75 74 2a 31 30 30 30 20 29 7b 0a 20 20 20 20 64  ut*1000 ){.    d
2dc0: 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 2a 31  elay = timeout*1
2dd0: 30 30 30 20 2d 20 70 72 69 6f 72 5f 64 65 6c 61  000 - prior_dela
2de0: 79 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  y;.    if( delay
2df0: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
2e00: 20 20 7d 0a 20 20 75 73 6c 65 65 70 28 64 65 6c    }.  usleep(del
2e10: 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  ay);.  return 1;
2e20: 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d  .#else.  int tim
2e30: 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65  eout = (int)Time
2e40: 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e  out;.  if( (coun
2e50: 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65  t+1)*1000 > time
2e60: 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72  out ){.    retur
2e70: 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 6c 65 65 70  n 0;.  }.  sleep
2e80: 28 31 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  (1);.  return 1;
2e90: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
2ea0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
2eb0: 74 73 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c  ts the busy call
2ec0: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
2ed0: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
2ee0: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
2ef0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
2f00: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
2f10: 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ument..*/.void s
2f20: 71 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c  qlite_busy_handl
2f30: 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  er(.  sqlite *db
2f40: 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29  ,.  int (*xBusy)
2f50: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
2f60: 72 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20  r*,int),.  void 
2f70: 2a 70 41 72 67 0a 29 7b 0a 20 20 64 62 2d 3e 78  *pArg.){.  db->x
2f80: 42 75 73 79 43 61 6c 6c 62 61 63 6b 20 3d 20 78  BusyCallback = x
2f90: 42 75 73 79 3b 0a 20 20 64 62 2d 3e 70 42 75 73  Busy;.  db->pBus
2fa0: 79 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a  yArg = pArg;.}..
2fb0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
2fc0: 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64 65  ne installs a de
2fd0: 66 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64 6c  fault busy handl
2fe0: 65 72 20 74 68 61 74 20 77 61 69 74 73 20 66 6f  er that waits fo
2ff0: 72 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66 69  r the.** specifi
3000: 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c  ed number of mil
3010: 6c 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72 65  liseconds before
3020: 20 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f   returning 0..*/
3030: 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73  .void sqlite_bus
3040: 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74 65  y_timeout(sqlite
3050: 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20   *db, int ms){. 
3060: 20 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20   if( ms>0 ){.   
3070: 20 73 71 6c 69 74 65 5f 62 75 73 79 5f 68 61 6e   sqlite_busy_han
3080: 64 6c 65 72 28 64 62 2c 20 73 71 6c 69 74 65 44  dler(db, sqliteD
3090: 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61  efaultBusyCallba
30a0: 63 6b 2c 20 28 76 6f 69 64 2a 29 6d 73 29 3b 0a  ck, (void*)ms);.
30b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
30c0: 69 74 65 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  ite_busy_handler
30d0: 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  (db, 0, 0);.  }.
30e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61  }../*.** Cause a
30f0: 6e 79 20 70 65 6e 64 69 6e 67 20 6f 70 65 72 61  ny pending opera
3100: 74 69 6f 6e 20 74 6f 20 73 74 6f 70 20 61 74 20  tion to stop at 
3110: 69 74 73 20 65 61 72 6c 69 65 73 74 20 6f 70 70  its earliest opp
3120: 6f 72 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69  ortunity..*/.voi
3130: 64 20 73 71 6c 69 74 65 5f 69 6e 74 65 72 72 75  d sqlite_interru
3140: 70 74 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  pt(sqlite *db){.
3150: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
3160: 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b  QLITE_Interrupt;
3170: 0a 7d 0a                                         .}.