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

Artifact fe5c26620c46770539056525d8a79e3afb6e75e8:


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 37 20 32 30 30 31 2f 30 34 2f 30 36 20 31 36  27 2001/04/06 16
04b0: 3a 31 33 3a 34 33 20 64 72 68 20 45 78 70 20 24  :13:43 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 6e 63 6c  liteInt.h".#incl
04e0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 0a  ude <unistd.h>..
04f0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
0500: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
0510: 6e 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ne for the code 
0520: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
0530: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
0540: 2e 20 20 45 61 63 68 20 63 61 6c 6c 62 61 63 6b  .  Each callback
0550: 20 63 6f 6e 74 61 69 6e 73 20 74 65 78 74 20 6f   contains text o
0560: 66 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  f a CREATE TABLE
0570: 20 6f 72 0a 2a 2a 20 43 52 45 41 54 45 20 49 4e   or.** CREATE IN
0580: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 74 68  DEX statement th
0590: 61 74 20 6d 75 73 74 20 62 65 20 70 61 72 73 65  at must be parse
05a0: 64 20 74 6f 20 79 69 65 6c 64 20 74 68 65 20 69  d to yield the i
05b0: 6e 74 65 72 6e 61 6c 0a 2a 2a 20 73 74 72 75 63  nternal.** struc
05c0: 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
05d0: 69 62 65 20 74 68 65 20 74 61 62 6c 65 73 2e 0a  ibe the tables..
05e0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 61 6c 6c 62  **.** This callb
05f0: 61 63 6b 20 69 73 20 61 6c 73 6f 20 63 61 6c 6c  ack is also call
0600: 65 64 20 77 69 74 68 20 61 72 67 63 3d 3d 32 20  ed with argc==2 
0610: 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6d 65  when there is me
0620: 74 61 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  ta.** informatio
0630: 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n in the sqlite_
0640: 6d 61 73 74 65 72 20 66 69 6c 65 2e 20 20 54 68  master file.  Th
0650: 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  e meta informati
0660: 6f 6e 20 69 73 0a 2a 2a 20 63 6f 6e 74 61 69 6e  on is.** contain
0670: 65 64 20 69 6e 20 61 72 67 76 5b 31 5d 2e 20 20  ed in argv[1].  
0680: 54 79 70 69 63 61 6c 20 6d 65 74 61 20 69 6e 66  Typical meta inf
0690: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 74 68 65 20  ormation is the 
06a0: 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 76  file format.** v
06b0: 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  ersion..*/.stati
06c0: 63 20 69 6e 74 20 73 71 6c 69 74 65 4f 70 65 6e  c int sqliteOpen
06d0: 43 62 28 76 6f 69 64 20 2a 70 44 62 2c 20 69 6e  Cb(void *pDb, in
06e0: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
06f0: 72 67 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f  rgv, char **azCo
0700: 6c 4e 61 6d 65 29 7b 0a 20 20 73 71 6c 69 74 65  lName){.  sqlite
0710: 20 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 2a 29   *db = (sqlite*)
0720: 70 44 62 3b 0a 20 20 50 61 72 73 65 20 73 50 61  pDb;.  Parse sPa
0730: 72 73 65 3b 0a 20 20 69 6e 74 20 6e 45 72 72 3b  rse;.  int nErr;
0740: 0a 0a 20 20 69 66 28 20 61 72 67 63 3d 3d 32 20  ..  if( argc==2 
0750: 29 7b 0a 20 20 20 20 69 66 28 20 73 73 63 61 6e  ){.    if( sscan
0760: 66 28 61 72 67 76 5b 31 5d 2c 22 66 69 6c 65 20  f(argv[1],"file 
0770: 66 6f 72 6d 61 74 20 25 64 22 2c 26 64 62 2d 3e  format %d",&db->
0780: 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3d 3d 31 20  file_format)==1 
0790: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
07a0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  0;.    }.    /* 
07b0: 55 6e 6b 6e 6f 77 6e 20 6d 65 74 61 20 69 6e 66  Unknown meta inf
07c0: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 67 6e 6f 72  ormation.  Ignor
07d0: 65 20 69 74 2e 20 2a 2f 0a 20 20 20 20 72 65 74  e it. */.    ret
07e0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  urn 0;.  }.  if(
07f0: 20 61 72 67 63 21 3d 31 20 29 20 72 65 74 75 72   argc!=1 ) retur
0800: 6e 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n 0;.  memset(&s
0810: 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66  Parse, 0, sizeof
0820: 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50 61  (sParse));.  sPa
0830: 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73  rse.db = db;.  s
0840: 50 61 72 73 65 2e 69 6e 69 74 46 6c 61 67 20 3d  Parse.initFlag =
0850: 20 31 3b 0a 20 20 6e 45 72 72 20 3d 20 73 71 6c   1;.  nErr = sql
0860: 69 74 65 52 75 6e 50 61 72 73 65 72 28 26 73 50  iteRunParser(&sP
0870: 61 72 73 65 2c 20 61 72 67 76 5b 30 5d 2c 20 30  arse, argv[0], 0
0880: 29 3b 0a 20 20 72 65 74 75 72 6e 20 6e 45 72 72  );.  return nErr
0890: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d  ;.}../*.** Attem
08a0: 70 74 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  pt to read the d
08b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
08c0: 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e  nd initialize in
08d0: 74 65 72 6e 61 6c 0a 2a 2a 20 64 61 74 61 20 73  ternal.** data s
08e0: 74 72 75 63 74 75 72 65 73 2e 20 20 52 65 74 75  tructures.  Retu
08f0: 72 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51  rn one of the SQ
0900: 4c 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65  LITE_ error code
0910: 73 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65  s to.** indicate
0920: 20 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c   success or fail
0930: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72  ure..**.** After
0940: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0950: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68   initialized, th
0960: 65 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  e SQLITE_Initial
0970: 69 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73  ized.** bit is s
0980: 65 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20  et in the flags 
0990: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
09a0: 69 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 20  ite structure.  
09b0: 41 6e 0a 2a 2a 20 61 74 74 65 6d 70 74 20 69 73  An.** attempt is
09c0: 20 6d 61 64 65 20 74 6f 20 69 6e 69 74 69 61 6c   made to initial
09d0: 69 7a 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ize the database
09e0: 20 61 73 20 73 6f 6f 6e 20 61 73 20 69 74 0a 2a   as soon as it.*
09f0: 2a 20 69 73 20 6f 70 65 6e 65 64 2e 20 20 49 66  * is opened.  If
0a00: 20 74 68 61 74 20 66 61 69 6c 73 20 28 70 65 72   that fails (per
0a10: 68 61 70 73 20 62 65 63 61 75 73 65 20 61 6e 6f  haps because ano
0a20: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 2a 2a 20  ther process.** 
0a30: 68 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  has the sqlite_m
0a40: 61 73 74 65 72 20 74 61 62 6c 65 20 6c 6f 63 6b  aster table lock
0a50: 65 64 29 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ed) than another
0a60: 20 61 74 74 65 6d 70 74 0a 2a 2a 20 69 73 20 6d   attempt.** is m
0a70: 61 64 65 20 74 68 65 20 66 69 72 73 74 20 74 69  ade the first ti
0a80: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
0a90: 69 73 20 61 63 63 65 73 73 65 64 2e 0a 2a 2f 0a  is accessed..*/.
0aa0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
0ab0: 65 49 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62  eInit(sqlite *db
0ac0: 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73  , char **pzErrMs
0ad0: 67 29 7b 0a 20 20 56 64 62 65 20 2a 76 64 62 65  g){.  Vdbe *vdbe
0ae0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f  ;.  int rc;..  /
0af0: 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65  *.  ** The maste
0b00: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
0b10: 20 68 61 73 20 61 20 73 74 72 75 63 74 75 72 65   has a structure
0b20: 20 6c 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a   like this.  */.
0b30: 20 20 73 74 61 74 69 63 20 63 68 61 72 20 6d 61    static char ma
0b40: 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20  ster_schema[] = 
0b50: 0a 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41  .     "CREATE TA
0b60: 42 4c 45 20 22 20 4d 41 53 54 45 52 5f 4e 41 4d  BLE " MASTER_NAM
0b70: 45 20 22 20 28 5c 6e 22 0a 20 20 20 20 20 22 20  E " (\n".     " 
0b80: 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20   type text,\n". 
0b90: 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74      "  name text
0ba0: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62 6c  ,\n".     "  tbl
0bb0: 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
0bc0: 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c      "  sql text\
0bd0: 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a  n".     ")".  ;.
0be0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
0bf0: 69 6e 67 20 70 72 6f 67 72 61 6d 20 69 73 20 75  ing program is u
0c00: 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  sed to initializ
0c10: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 20  e the internal. 
0c20: 20 2a 2a 20 73 74 72 75 63 74 75 72 65 20 68 6f   ** structure ho
0c30: 6c 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65 73  lding the tables
0c40: 20 61 6e 64 20 69 6e 64 65 78 65 73 20 6f 66 20   and indexes of 
0c50: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
0c60: 2a 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  ** The database 
0c70: 63 6f 6e 74 61 69 6e 73 20 61 20 73 70 65 63 69  contains a speci
0c80: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
0c90: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
0ca0: 20 2a 2a 20 64 65 66 69 6e 65 64 20 61 73 20 66   ** defined as f
0cb0: 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 0a 20 20 2a  ollows:.  **.  *
0cc0: 2a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  *    CREATE TABL
0cd0: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  E sqlite_master 
0ce0: 28 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 74 79  (.  **        ty
0cf0: 70 65 20 20 20 20 20 20 20 74 65 78 74 2c 20 20  pe       text,  
0d00: 20 20 2d 2d 20 20 45 69 74 68 65 72 20 22 74 61    --  Either "ta
0d10: 62 6c 65 22 20 6f 72 20 22 69 6e 64 65 78 22 20  ble" or "index" 
0d20: 6f 72 20 22 6d 65 74 61 22 0a 20 20 2a 2a 20 20  or "meta".  **  
0d30: 20 20 20 20 20 20 6e 61 6d 65 20 20 20 20 20 20        name      
0d40: 20 74 65 78 74 2c 20 20 20 20 2d 2d 20 20 4e 61   text,    --  Na
0d50: 6d 65 20 6f 66 20 74 61 62 6c 65 20 6f 72 20 69  me of table or i
0d60: 6e 64 65 78 0a 20 20 2a 2a 20 20 20 20 20 20 20  ndex.  **       
0d70: 20 74 62 6c 5f 6e 61 6d 65 20 20 20 74 65 78 74   tbl_name   text
0d80: 2c 20 20 20 20 2d 2d 20 20 41 73 73 6f 63 69 61  ,    --  Associa
0d90: 74 65 64 20 74 61 62 6c 65 20 0a 20 20 2a 2a 20  ted table .  ** 
0da0: 20 20 20 20 20 20 20 73 71 6c 20 20 20 20 20 20         sql      
0db0: 20 20 74 65 78 74 20 20 20 20 20 2d 2d 20 20 54    text     --  T
0dc0: 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  he CREATE statem
0dd0: 65 6e 74 20 66 6f 72 20 74 68 69 73 20 6f 62 6a  ent for this obj
0de0: 65 63 74 0a 20 20 2a 2a 20 20 20 20 29 3b 0a 20  ect.  **    );. 
0df0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 71 6c   **.  ** The sql
0e00: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
0e10: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
0e20: 6c 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  le entry for eac
0e30: 68 20 74 61 62 6c 65 0a 20 20 2a 2a 20 61 6e 64  h table.  ** and
0e40: 20 65 61 63 68 20 69 6e 64 65 78 2e 20 20 54 68   each index.  Th
0e50: 65 20 22 74 79 70 65 22 20 63 6f 6c 75 6d 6e 20  e "type" column 
0e60: 74 65 6c 6c 73 20 77 68 65 74 68 65 72 20 74 68  tells whether th
0e70: 65 20 65 6e 74 72 79 20 69 73 0a 20 20 2a 2a 20  e entry is.  ** 
0e80: 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
0e90: 2e 20 20 54 68 65 20 22 6e 61 6d 65 22 20 63 6f  .  The "name" co
0ea0: 6c 75 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  lumn is the name
0eb0: 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a   of the object..
0ec0: 20 20 2a 2a 20 54 68 65 20 22 74 62 6c 5f 6e 61    ** The "tbl_na
0ed0: 6d 65 22 20 69 73 20 74 68 65 20 6e 61 6d 65 20  me" is the name 
0ee0: 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
0ef0: 64 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 74 61  d table.  For ta
0f00: 62 6c 65 73 2c 0a 20 20 2a 2a 20 74 68 65 20 74  bles,.  ** the t
0f10: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69  bl_name column i
0f20: 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 61 6d  s always the sam
0f30: 65 20 61 73 20 6e 61 6d 65 2e 20 20 46 6f 72 20  e as name.  For 
0f40: 69 6e 64 69 63 65 73 2c 20 74 68 65 0a 20 20 2a  indices, the.  *
0f50: 2a 20 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d  * tbl_name colum
0f60: 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
0f70: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
0f80: 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a   that the index.
0f90: 20 20 2a 2a 20 69 6e 64 65 78 65 73 2e 20 20 46    ** indexes.  F
0fa0: 69 6e 61 6c 6c 79 2c 20 74 68 65 20 22 73 71 6c  inally, the "sql
0fb0: 22 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  " column contain
0fc0: 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  s the complete t
0fd0: 65 78 74 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  ext of.  ** the 
0fe0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
0ff0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
1000: 74 65 6d 65 6e 74 20 74 68 61 74 20 6f 72 69 67  tement that orig
1010: 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 0a 20  inally created. 
1020: 20 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6f 72   ** the table or
1030: 20 69 6e 64 65 78 2e 0a 20 20 2a 2a 0a 20 20 2a   index..  **.  *
1040: 2a 20 49 66 20 74 68 65 20 22 74 79 70 65 22 20  * If the "type" 
1050: 63 6f 6c 75 6d 6e 20 68 61 73 20 74 68 65 20 76  column has the v
1060: 61 6c 75 65 20 22 6d 65 74 61 22 2c 20 74 68 65  alue "meta", the
1070: 6e 20 74 68 65 20 22 73 71 6c 22 20 63 6f 6c 75  n the "sql" colu
1080: 6d 6e 0a 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 73  mn.  ** contains
1090: 20 65 78 74 72 61 20 69 6e 66 6f 72 6d 61 74 69   extra informati
10a0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74  on about the dat
10b0: 61 62 61 73 65 2c 20 73 75 63 68 20 61 73 20 74  abase, such as t
10c0: 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 66 6f 72  he.  ** file for
10d0: 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  mat version numb
10e0: 65 72 2e 20 20 41 6c 6c 20 6d 65 74 61 20 69 6e  er.  All meta in
10f0: 66 6f 72 6d 61 74 69 6f 6e 20 6d 75 73 74 20 62  formation must b
1100: 65 20 70 72 6f 63 65 73 73 65 64 0a 20 20 2a 2a  e processed.  **
1110: 20 62 65 66 6f 72 65 20 61 6e 79 20 74 61 62 6c   before any tabl
1120: 65 73 20 6f 72 20 69 6e 64 69 63 65 73 20 61 72  es or indices ar
1130: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 2e 0a 20  e constructed.. 
1140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 6f 6c   **.  ** The fol
1150: 6c 6f 77 69 6e 67 20 70 72 6f 67 72 61 6d 20 69  lowing program i
1160: 6e 76 6f 6b 65 73 20 69 74 73 20 63 61 6c 6c 62  nvokes its callb
1170: 61 63 6b 20 6f 6e 20 74 68 65 20 53 51 4c 20 66  ack on the SQL f
1180: 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20 74 61 62  or each.  ** tab
1190: 6c 65 20 74 68 65 6e 20 67 6f 65 73 20 62 61 63  le then goes bac
11a0: 6b 20 61 6e 64 20 69 6e 76 6f 6b 65 73 20 74 68  k and invokes th
11b0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 20 74 68  e callback on th
11c0: 65 0a 20 20 2a 2a 20 53 51 4c 20 66 6f 72 20 65  e.  ** SQL for e
11d0: 61 63 68 20 69 6e 64 65 78 2e 20 20 54 68 65 20  ach index.  The 
11e0: 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 20 69 6e  callback will in
11f0: 76 6f 6b 65 20 74 68 65 0a 20 20 2a 2a 20 70 61  voke the.  ** pa
1200: 72 73 65 72 20 74 6f 20 62 75 69 6c 64 20 74 68  rser to build th
1210: 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
1220: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
1230: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73  .  ** database s
1240: 63 68 65 6d 65 2e 0a 20 20 2a 2f 0a 20 20 73 74  cheme..  */.  st
1250: 61 74 69 63 20 56 64 62 65 4f 70 20 69 6e 69 74  atic VdbeOp init
1260: 50 72 6f 67 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b  Prog[] = {.    {
1270: 20 4f 50 5f 4f 70 65 6e 54 62 6c 2c 20 20 30 2c   OP_OpenTbl,  0,
1280: 20 30 2c 20 20 4d 41 53 54 45 52 5f 4e 41 4d 45   0,  MASTER_NAME
1290: 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74  },.    { OP_Next
12a0: 2c 20 20 20 20 20 30 2c 20 39 2c 20 20 30 7d 2c  ,     0, 9,  0},
12b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
12c0: 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 46 69 65 6c  */.    { OP_Fiel
12d0: 64 2c 20 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c  d,    0, 0,  0},
12e0: 0a 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67  .    { OP_String
12f0: 2c 20 20 20 30 2c 20 30 2c 20 20 22 6d 65 74 61  ,   0, 0,  "meta
1300: 22 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 4e 65 2c  "},.    { OP_Ne,
1310: 20 20 20 20 20 20 20 30 2c 20 31 2c 20 20 30 7d         0, 1,  0}
1320: 2c 0a 20 20 20 20 7b 20 4f 50 5f 46 69 65 6c 64  ,.    { OP_Field
1330: 2c 20 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 0a  ,    0, 0,  0},.
1340: 20 20 20 20 7b 20 4f 50 5f 46 69 65 6c 64 2c 20      { OP_Field, 
1350: 20 20 20 30 2c 20 33 2c 20 20 30 7d 2c 0a 20 20     0, 3,  0},.  
1360: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
1370: 20 32 2c 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20   2, 0,  0},.    
1380: 7b 20 4f 50 5f 47 6f 74 6f 2c 20 20 20 20 20 30  { OP_Goto,     0
1390: 2c 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20  , 1,  0},.    { 
13a0: 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20 30 2c 20  OP_Rewind,   0, 
13b0: 30 2c 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20  0,  0},         
13c0: 20 20 2f 2a 20 39 20 2a 2f 0a 20 20 20 20 7b 20    /* 9 */.    { 
13d0: 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20 30 2c 20  OP_Next,     0, 
13e0: 31 37 2c 20 30 7d 2c 20 20 20 20 20 20 20 20 20  17, 0},         
13f0: 20 20 2f 2a 20 31 30 20 2a 2f 0a 20 20 20 20 7b    /* 10 */.    {
1400: 20 4f 50 5f 46 69 65 6c 64 2c 20 20 20 20 30 2c   OP_Field,    0,
1410: 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f   0,  0},.    { O
1420: 50 5f 53 74 72 69 6e 67 2c 20 20 20 30 2c 20 30  P_String,   0, 0
1430: 2c 20 20 22 74 61 62 6c 65 22 7d 2c 0a 20 20 20  ,  "table"},.   
1440: 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20   { OP_Ne,       
1450: 30 2c 20 31 30 2c 20 30 7d 2c 0a 20 20 20 20 7b  0, 10, 0},.    {
1460: 20 4f 50 5f 46 69 65 6c 64 2c 20 20 20 20 30 2c   OP_Field,    0,
1470: 20 33 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f   3,  0},.    { O
1480: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30  P_Callback, 1, 0
1490: 2c 20 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f  ,  0},.    { OP_
14a0: 47 6f 74 6f 2c 20 20 20 20 20 30 2c 20 31 30 2c  Goto,     0, 10,
14b0: 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 52 65   0},.    { OP_Re
14c0: 77 69 6e 64 2c 20 20 20 30 2c 20 30 2c 20 20 30  wind,   0, 0,  0
14d0: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  },           /* 
14e0: 31 37 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f 4e  17 */.    { OP_N
14f0: 65 78 74 2c 20 20 20 20 20 30 2c 20 32 35 2c 20  ext,     0, 25, 
1500: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0},           /*
1510: 20 31 38 20 2a 2f 0a 20 20 20 20 7b 20 4f 50 5f   18 */.    { OP_
1520: 46 69 65 6c 64 2c 20 20 20 20 30 2c 20 30 2c 20  Field,    0, 0, 
1530: 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 53 74   0},.    { OP_St
1540: 72 69 6e 67 2c 20 20 20 30 2c 20 30 2c 20 20 22  ring,   0, 0,  "
1550: 69 6e 64 65 78 22 7d 2c 0a 20 20 20 20 7b 20 4f  index"},.    { O
1560: 50 5f 4e 65 2c 20 20 20 20 20 20 20 30 2c 20 31  P_Ne,       0, 1
1570: 38 2c 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f  8, 0},.    { OP_
1580: 46 69 65 6c 64 2c 20 20 20 20 30 2c 20 33 2c 20  Field,    0, 3, 
1590: 20 30 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 43 61   0},.    { OP_Ca
15a0: 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 2c 20 20 30  llback, 1, 0,  0
15b0: 7d 2c 0a 20 20 20 20 7b 20 4f 50 5f 47 6f 74 6f  },.    { OP_Goto
15c0: 2c 20 20 20 20 20 30 2c 20 31 38 2c 20 30 7d 2c  ,     0, 18, 0},
15d0: 0a 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20  .    { OP_Halt, 
15e0: 20 20 20 20 30 2c 20 30 2c 20 20 30 7d 2c 20 20      0, 0,  0},  
15f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 35 20 2a           /* 25 *
1600: 2f 0a 20 20 7d 3b 0a 0a 20 20 2f 2a 20 43 72 65  /.  };..  /* Cre
1610: 61 74 65 20 61 20 76 69 72 74 75 61 6c 20 6d 61  ate a virtual ma
1620: 63 68 69 6e 65 20 74 6f 20 72 75 6e 20 74 68 65  chine to run the
1630: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1640: 70 72 6f 67 72 61 6d 2e 20 20 52 75 6e 0a 20 20  program.  Run.  
1650: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  ** the program. 
1660: 20 54 68 65 20 64 65 6c 65 74 65 20 74 68 65 20   The delete the 
1670: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
1680: 0a 20 20 2a 2f 0a 20 20 76 64 62 65 20 3d 20 73  .  */.  vdbe = s
1690: 71 6c 69 74 65 56 64 62 65 43 72 65 61 74 65 28  qliteVdbeCreate(
16a0: 64 62 29 3b 0a 20 20 69 66 28 20 76 64 62 65 3d  db);.  if( vdbe=
16b0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
16c0: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
16d0: 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  sg, "out of memo
16e0: 72 79 22 2c 30 29 3b 20 0a 20 20 20 20 72 65 74  ry",0); .    ret
16f0: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 1;.  }.  sql
1700: 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74  iteVdbeAddOpList
1710: 28 76 64 62 65 2c 20 73 69 7a 65 6f 66 28 69 6e  (vdbe, sizeof(in
1720: 69 74 50 72 6f 67 29 2f 73 69 7a 65 6f 66 28 69  itProg)/sizeof(i
1730: 6e 69 74 50 72 6f 67 5b 30 5d 29 2c 20 69 6e 69  nitProg[0]), ini
1740: 74 50 72 6f 67 29 3b 0a 20 20 72 63 20 3d 20 73  tProg);.  rc = s
1750: 71 6c 69 74 65 56 64 62 65 45 78 65 63 28 76 64  qliteVdbeExec(vd
1760: 62 65 2c 20 73 71 6c 69 74 65 4f 70 65 6e 43 62  be, sqliteOpenCb
1770: 2c 20 64 62 2c 20 70 7a 45 72 72 4d 73 67 2c 20  , db, pzErrMsg, 
1780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1790: 20 20 20 20 20 20 20 64 62 2d 3e 70 42 75 73 79         db->pBusy
17a0: 41 72 67 2c 20 64 62 2d 3e 78 42 75 73 79 43 61  Arg, db->xBusyCa
17b0: 6c 6c 62 61 63 6b 29 3b 0a 20 20 73 71 6c 69 74  llback);.  sqlit
17c0: 65 56 64 62 65 44 65 6c 65 74 65 28 76 64 62 65  eVdbeDelete(vdbe
17d0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
17e0: 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 66 69  ITE_OK && db->fi
17f0: 6c 65 5f 66 6f 72 6d 61 74 3c 32 20 26 26 20 64  le_format<2 && d
1800: 62 2d 3e 6e 54 61 62 6c 65 3e 30 20 29 7b 0a 20  b->nTable>0 ){. 
1810: 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72 69     sqliteSetStri
1820: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 62  ng(pzErrMsg, "ob
1830: 73 6f 6c 65 74 65 20 66 69 6c 65 20 66 6f 72 6d  solete file form
1840: 61 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  at", 0);.    rc 
1850: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
1860: 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1870: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
1880: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
1890: 63 68 61 72 20 2a 61 7a 41 72 67 5b 32 5d 3b 0a  char *azArg[2];.
18a0: 20 20 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 6d      azArg[0] = m
18b0: 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20  aster_schema;.  
18c0: 20 20 61 7a 41 72 67 5b 31 5d 20 3d 20 30 3b 0a    azArg[1] = 0;.
18d0: 20 20 20 20 73 71 6c 69 74 65 4f 70 65 6e 43 62      sqliteOpenCb
18e0: 28 64 62 2c 20 31 2c 20 61 7a 41 72 67 2c 20 30  (db, 1, azArg, 0
18f0: 29 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  );.    pTab = sq
1900: 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 64 62  liteFindTable(db
1910: 2c 20 4d 41 53 54 45 52 5f 4e 41 4d 45 29 3b 0a  , MASTER_NAME);.
1920: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
1930: 20 20 20 20 20 20 70 54 61 62 2d 3e 72 65 61 64        pTab->read
1940: 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  Only = 1;.    }.
1950: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
1960: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
1970: 7a 65 64 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  zed;.  }else{.  
1980: 20 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c    sqliteStrReall
1990: 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20  oc(pzErrMsg);.  
19a0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
19b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73  ../*.** The vers
19c0: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
19d0: 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  ry.*/.const char
19e0: 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 5b   sqlite_version[
19f0: 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53 49  ] = SQLITE_VERSI
1a00: 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73 20  ON;../*.** Does 
1a10: 74 68 65 20 6c 69 62 72 61 72 79 20 65 78 70 65  the library expe
1a20: 63 74 20 64 61 74 61 20 74 6f 20 62 65 20 65 6e  ct data to be en
1a30: 63 6f 64 65 64 20 61 73 20 55 54 46 2d 38 20 6f  coded as UTF-8 o
1a40: 72 20 69 73 6f 38 38 35 39 3f 20 20 54 68 65 0a  r iso8859?  The.
1a50: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f  ** following glo
1a60: 62 61 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c 77  bal constant alw
1a70: 61 79 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f 77  ays lets us know
1a80: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1a90: 54 45 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63 68  TE_UTF8.const ch
1aa0: 61 72 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69  ar sqlite_encodi
1ab0: 6e 67 5b 5d 20 3d 20 22 55 54 46 2d 38 22 3b 0a  ng[] = "UTF-8";.
1ac0: 23 65 6c 73 65 0a 63 6f 6e 73 74 20 63 68 61 72  #else.const char
1ad0: 20 73 71 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67   sqlite_encoding
1ae0: 5b 5d 20 3d 20 22 69 73 6f 38 38 35 39 22 3b 0a  [] = "iso8859";.
1af0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 70  #endif../*.** Op
1b00: 65 6e 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20  en a new SQLite 
1b10: 64 61 74 61 62 61 73 65 2e 20 20 43 6f 6e 73 74  database.  Const
1b20: 72 75 63 74 20 61 6e 20 22 73 71 6c 69 74 65 22  ruct an "sqlite"
1b30: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 64 65   structure to de
1b40: 66 69 6e 65 0a 2a 2a 20 74 68 65 20 73 74 61 74  fine.** the stat
1b50: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
1b60: 73 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20  se and return a 
1b70: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20  pointer to that 
1b80: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
1b90: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
1ba0: 61 64 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  ade to initializ
1bb0: 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  e the in-memory 
1bc0: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
1bd0: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 20 74 68 65  that.** hold the
1be0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1bf0: 2e 20 20 42 75 74 20 69 66 20 74 68 69 73 20 66  .  But if this f
1c00: 61 69 6c 73 20 28 62 65 63 61 75 73 65 20 74 68  ails (because th
1c10: 65 20 73 63 68 65 6d 61 20 66 69 6c 65 0a 2a 2a  e schema file.**
1c20: 20 69 73 20 6c 6f 63 6b 65 64 29 20 74 68 65 6e   is locked) then
1c30: 20 74 68 61 74 20 73 74 65 70 20 69 73 20 64 65   that step is de
1c40: 66 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65  ferred until the
1c50: 20 66 69 72 73 74 20 63 61 6c 6c 20 74 6f 0a 2a   first call to.*
1c60: 2a 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29 2e  * sqlite_exec().
1c70: 0a 2a 2f 0a 73 71 6c 69 74 65 20 2a 73 71 6c 69  .*/.sqlite *sqli
1c80: 74 65 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68  te_open(const ch
1c90: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69  ar *zFilename, i
1ca0: 6e 74 20 6d 6f 64 65 2c 20 63 68 61 72 20 2a 2a  nt mode, char **
1cb0: 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 73 71 6c  pzErrMsg){.  sql
1cc0: 69 74 65 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  ite *db;.  int r
1cd0: 63 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74  c;..  /* Allocat
1ce0: 65 20 74 68 65 20 73 71 6c 69 74 65 20 64 61 74  e the sqlite dat
1cf0: 61 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  a structure */. 
1d00: 20 64 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c   db = sqliteMall
1d10: 6f 63 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74  oc( sizeof(sqlit
1d20: 65 29 20 29 3b 0a 20 20 69 66 28 20 70 7a 45 72  e) );.  if( pzEr
1d30: 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67  rMsg ) *pzErrMsg
1d40: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 3d 3d   = 0;.  if( db==
1d50: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53  0 ){.    sqliteS
1d60: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
1d70: 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  g, "out of memor
1d80: 79 22 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  y", 0);.    sqli
1d90: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
1da0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75  rrMsg);.    retu
1db0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f  rn 0;.  }.  .  /
1dc0: 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65  * Open the backe
1dd0: 6e 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76  nd database driv
1de0: 65 72 20 2a 2f 0a 20 20 64 62 2d 3e 70 42 65 20  er */.  db->pBe 
1df0: 3d 20 73 71 6c 69 74 65 44 62 62 65 4f 70 65 6e  = sqliteDbbeOpen
1e00: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 28 6d 6f 64  (zFilename, (mod
1e10: 65 26 30 32 32 32 29 21 3d 30 2c 20 6d 6f 64 65  e&0222)!=0, mode
1e20: 21 3d 30 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  !=0, pzErrMsg);.
1e30: 20 20 69 66 28 20 64 62 2d 3e 70 42 65 3d 3d 30    if( db->pBe==0
1e40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 74   ){.    sqliteSt
1e50: 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73  rRealloc(pzErrMs
1e60: 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72  g);.    sqliteFr
1e70: 65 65 28 64 62 29 3b 0a 20 20 20 20 72 65 74 75  ee(db);.    retu
1e80: 72 6e 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rn 0;.  }..  /* 
1e90: 41 73 73 75 6d 65 20 66 69 6c 65 20 66 6f 72 6d  Assume file form
1ea0: 61 74 20 31 20 75 6e 6c 65 73 73 20 74 68 65 20  at 1 unless the 
1eb0: 64 61 74 61 62 61 73 65 20 73 61 79 73 20 6f 74  database says ot
1ec0: 68 65 72 77 69 73 65 20 2a 2f 0a 20 20 64 62 2d  herwise */.  db-
1ed0: 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31  >file_format = 1
1ee0: 3b 0a 0a 20 20 2f 2a 20 41 74 74 65 6d 70 74 20  ;..  /* Attempt 
1ef0: 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65  to read the sche
1f00: 6d 61 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ma */.  rc = sql
1f10: 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45 72  iteInit(db, pzEr
1f20: 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 72 63 21  rMsg);.  if( rc!
1f30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
1f40: 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  !=SQLITE_BUSY ){
1f50: 0a 20 20 20 20 73 71 6c 69 74 65 5f 63 6c 6f 73  .    sqlite_clos
1f60: 65 28 64 62 29 3b 0a 20 20 20 20 72 65 74 75 72  e(db);.    retur
1f70: 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 2f 2a 20  n 0;.  }else /* 
1f80: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20 2a  if( pzErrMsg ) *
1f90: 2f 7b 0a 20 20 20 20 66 72 65 65 28 2a 70 7a 45  /{.    free(*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 7d 0a 0a 2f   return db;.}../
1fd0: 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78  *.** Close an ex
1fe0: 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61  isting SQLite da
1ff0: 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73  tabase.*/.void s
2000: 71 6c 69 74 65 5f 63 6c 6f 73 65 28 73 71 6c 69  qlite_close(sqli
2010: 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  te *db){.  int i
2020: 3b 0a 20 20 64 62 2d 3e 70 42 65 2d 3e 78 2d 3e  ;.  db->pBe->x->
2030: 43 6c 6f 73 65 28 64 62 2d 3e 70 42 65 29 3b 0a  Close(db->pBe);.
2040: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 5f 48    for(i=0; i<N_H
2050: 41 53 48 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  ASH; i++){.    T
2060: 61 62 6c 65 20 2a 70 4e 65 78 74 2c 20 2a 70 4c  able *pNext, *pL
2070: 69 73 74 20 3d 20 64 62 2d 3e 61 70 54 62 6c 48  ist = db->apTblH
2080: 61 73 68 5b 69 5d 3b 0a 20 20 20 20 64 62 2d 3e  ash[i];.    db->
2090: 61 70 54 62 6c 48 61 73 68 5b 69 5d 20 3d 20 30  apTblHash[i] = 0
20a0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 70 4c 69  ;.    while( pLi
20b0: 73 74 20 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  st ){.      pNex
20c0: 74 20 3d 20 70 4c 69 73 74 2d 3e 70 48 61 73 68  t = pList->pHash
20d0: 3b 0a 20 20 20 20 20 20 70 4c 69 73 74 2d 3e 70  ;.      pList->p
20e0: 48 61 73 68 20 3d 20 30 3b 0a 20 20 20 20 20 20  Hash = 0;.      
20f0: 73 71 6c 69 74 65 44 65 6c 65 74 65 54 61 62 6c  sqliteDeleteTabl
2100: 65 28 64 62 2c 20 70 4c 69 73 74 29 3b 0a 20 20  e(db, pList);.  
2110: 20 20 20 20 70 4c 69 73 74 20 3d 20 70 4e 65 78      pList = pNex
2120: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  t;.    }.  }.  s
2130: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 7d  qliteFree(db);.}
2140: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  ../*.** Return T
2150: 52 55 45 20 69 66 20 74 68 65 20 67 69 76 65 6e  RUE if the given
2160: 20 53 51 4c 20 73 74 72 69 6e 67 20 65 6e 64 73   SQL string ends
2170: 20 69 6e 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2e   in a semicolon.
2180: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 63  .*/.int sqlite_c
2190: 6f 6d 70 6c 65 74 65 28 63 6f 6e 73 74 20 63 68  omplete(const ch
21a0: 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e 74  ar *zSql){.  int
21b0: 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b   isComplete = 0;
21c0: 0a 20 20 77 68 69 6c 65 28 20 2a 7a 53 71 6c 20  .  while( *zSql 
21d0: 29 7b 0a 20 20 20 20 73 77 69 74 63 68 28 20 2a  ){.    switch( *
21e0: 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 63 61  zSql ){.      ca
21f0: 73 65 20 27 3b 27 3a 20 7b 0a 20 20 20 20 20 20  se ';': {.      
2200: 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 31    isComplete = 1
2210: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
2220: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
2230: 61 73 65 20 27 20 27 3a 0a 20 20 20 20 20 20 63  ase ' ':.      c
2240: 61 73 65 20 27 5c 74 27 3a 0a 20 20 20 20 20 20  ase '\t':.      
2250: 63 61 73 65 20 27 5c 6e 27 3a 0a 20 20 20 20 20  case '\n':.     
2260: 20 63 61 73 65 20 27 5c 66 27 3a 20 7b 0a 20 20   case '\f': {.  
2270: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2280: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
2290: 27 5c 27 27 3a 20 7b 0a 20 20 20 20 20 20 20 20  '\'': {.        
22a0: 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a  isComplete = 0;.
22b0: 20 20 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a          zSql++;.
22c0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
22d0: 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27  zSql && *zSql!='
22e0: 5c 27 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d  \'' ){ zSql++; }
22f0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53  .        if( *zS
2300: 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ql==0 ) return 0
2310: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
2320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
2330: 61 73 65 20 27 22 27 3a 20 7b 0a 20 20 20 20 20  ase '"': {.     
2340: 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20     isComplete = 
2350: 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 2b  0;.        zSql+
2360: 2b 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  +;.        while
2370: 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c  ( *zSql && *zSql
2380: 21 3d 27 22 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b  !='"' ){ zSql++;
2390: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a   }.        if( *
23a0: 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e  zSql==0 ) return
23b0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
23c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
23d0: 20 63 61 73 65 20 27 2d 27 3a 20 7b 0a 20 20 20   case '-': {.   
23e0: 20 20 20 20 20 69 66 28 20 7a 53 71 6c 5b 31 5d       if( zSql[1]
23f0: 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  !='-' ){.       
2400: 20 20 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20     isComplete = 
2410: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
2420: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
2430: 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53        while( *zS
2440: 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 27 5c 6e  ql && *zSql!='\n
2450: 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20  ' ){ zSql++; }. 
2460: 20 20 20 20 20 20 20 69 66 28 20 2a 7a 53 71 6c         if( *zSql
2470: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 69 73 43  ==0 ) return isC
2480: 6f 6d 70 6c 65 74 65 3b 0a 20 20 20 20 20 20 20  omplete;.       
2490: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 20   break;.      } 
24a0: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
24b0: 7b 0a 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70  {.        isComp
24c0: 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  lete = 0;.      
24d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
24e0: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 2b  .    }.    zSql+
24f0: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  +;.  }.  return 
2500: 69 73 43 6f 6d 70 6c 65 74 65 3b 0a 7d 0a 0a 2f  isComplete;.}../
2510: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 53 51 4c  *.** Execute SQL
2520: 20 63 6f 64 65 2e 20 20 52 65 74 75 72 6e 20 6f   code.  Return o
2530: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
2540: 5f 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  _ success/failur
2550: 65 0a 2a 2a 20 63 6f 64 65 73 2e 20 20 41 6c 73  e.** codes.  Als
2560: 6f 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  o write an error
2570: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 6d 65   message into me
2580: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
2590: 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 61  om.** malloc() a
25a0: 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d 73  nd make *pzErrMs
25b0: 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20  g point to that 
25c0: 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 49  message..**.** I
25d0: 66 20 74 68 65 20 53 51 4c 20 69 73 20 61 20 71  f the SQL is a q
25e0: 75 65 72 79 2c 20 74 68 65 6e 20 66 6f 72 20 65  uery, then for e
25f0: 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 71  ach row in the q
2600: 75 65 72 79 20 72 65 73 75 6c 74 0a 2a 2a 20 74  uery result.** t
2610: 68 65 20 78 43 61 6c 6c 62 61 63 6b 28 29 20 66  he xCallback() f
2620: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
2630: 64 2e 20 20 70 41 72 67 20 62 65 63 6f 6d 65 73  d.  pArg becomes
2640: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
2650: 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62  gument to xCallb
2660: 61 63 6b 28 29 2e 20 20 49 66 20 78 43 61 6c 6c  ack().  If xCall
2670: 62 61 63 6b 3d 4e 55 4c 4c 20 74 68 65 6e 20 6e  back=NULL then n
2680: 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 69 73  o callback.** is
2690: 20 69 6e 76 6f 6b 65 64 2c 20 65 76 65 6e 20 66   invoked, even f
26a0: 6f 72 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 69  or queries..*/.i
26b0: 6e 74 20 73 71 6c 69 74 65 5f 65 78 65 63 28 0a  nt sqlite_exec(.
26c0: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20    sqlite *db,   
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26e0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6f 6e   The database on
26f0: 20 77 68 69 63 68 20 74 68 65 20 53 51 4c 20 65   which the SQL e
2700: 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63 68 61  xecutes */.  cha
2710: 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  r *zSql,        
2720: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2730: 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75 74  SQL to be execut
2740: 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f 63  ed */.  sqlite_c
2750: 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c 62 61 63  allback xCallbac
2760: 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  k,  /* Invoke th
2770: 69 73 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  is callback rout
2780: 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ine */.  void *p
2790: 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
27a0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
27b0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62  gument to xCallb
27c0: 61 63 6b 28 29 20 2a 2f 0a 20 20 63 68 61 72 20  ack() */.  char 
27d0: 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20  **pzErrMsg      
27e0: 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
27f0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 68  error messages h
2800: 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73  ere */.){.  Pars
2810: 65 20 73 50 61 72 73 65 3b 0a 0a 20 20 69 66 28  e sParse;..  if(
2820: 20 70 7a 45 72 72 4d 73 67 20 29 20 2a 70 7a 45   pzErrMsg ) *pzE
2830: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
2840: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
2850: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
2860: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
2870: 72 63 20 3d 20 73 71 6c 69 74 65 49 6e 69 74 28  rc = sqliteInit(
2880: 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20  db, pzErrMsg);. 
2890: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
28a0: 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
28b0: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 73 65 74 28 26  ;.  }.  memset(&
28c0: 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f  sParse, 0, sizeo
28d0: 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50  f(sParse));.  sP
28e0: 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20  arse.db = db;.  
28f0: 73 50 61 72 73 65 2e 78 43 61 6c 6c 62 61 63 6b  sParse.xCallback
2900: 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20   = xCallback;.  
2910: 73 50 61 72 73 65 2e 70 41 72 67 20 3d 20 70 41  sParse.pArg = pA
2920: 72 67 3b 0a 20 20 73 71 6c 69 74 65 52 75 6e 50  rg;.  sqliteRunP
2930: 61 72 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a  arser(&sParse, z
2940: 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  Sql, pzErrMsg);.
2950: 20 20 72 65 74 75 72 6e 20 73 50 61 72 73 65 2e    return sParse.
2960: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  rc;.}../*.** Thi
2970: 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  s routine implem
2980: 65 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c  ents a busy call
2990: 62 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73  back that sleeps
29a0: 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67   and tries.** ag
29b0: 61 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65  ain until a time
29c0: 6f 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61  out value is rea
29d0: 63 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f  ched.  The timeo
29e0: 75 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61  ut value is.** a
29f0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
2a00: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
2a10: 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68   passed in as th
2a20: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
2a30: 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ent..*/.static i
2a40: 6e 74 20 73 71 6c 69 74 65 5f 64 65 66 61 75 6c  nt sqlite_defaul
2a50: 74 5f 62 75 73 79 5f 63 61 6c 6c 62 61 63 6b 28  t_busy_callback(
2a60: 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c  . void *Timeout,
2a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
2a80: 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  ximum amount of 
2a90: 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a  time to wait */.
2aa0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 4e 6f 74   const char *Not
2ab0: 55 73 65 64 2c 20 20 20 20 20 2f 2a 20 54 68 65  Used,     /* The
2ac0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2ad0: 6c 65 20 74 68 61 74 20 69 73 20 62 75 73 79 20  le that is busy 
2ae0: 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20  */. int count   
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b00: 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
2b10: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62  table has been b
2b20: 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 64 65  usy */.){.#if de
2b30: 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c 45 45  fined(HAVE_USLEE
2b40: 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c 45 45  P) && HAVE_USLEE
2b50: 50 0a 20 20 69 6e 74 20 64 65 6c 61 79 20 3d 20  P.  int delay = 
2b60: 31 30 30 30 30 3b 0a 20 20 69 6e 74 20 70 72 69  10000;.  int pri
2b70: 6f 72 5f 64 65 6c 61 79 20 3d 20 30 3b 0a 20 20  or_delay = 0;.  
2b80: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
2b90: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e  nt)Timeout;.  in
2ba0: 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 31 3b  t i;..  for(i=1;
2bb0: 20 69 3c 63 6f 75 6e 74 3b 20 69 2b 2b 29 7b 20   i<count; i++){ 
2bc0: 0a 20 20 20 20 70 72 69 6f 72 5f 64 65 6c 61 79  .    prior_delay
2bd0: 20 2b 3d 20 64 65 6c 61 79 3b 0a 20 20 20 20 64   += delay;.    d
2be0: 65 6c 61 79 20 3d 20 64 65 6c 61 79 2a 32 3b 0a  elay = delay*2;.
2bf0: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3e 3d 31      if( delay>=1
2c00: 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 20 20  000000 ){.      
2c10: 64 65 6c 61 79 20 3d 20 31 30 30 30 30 30 30 3b  delay = 1000000;
2c20: 0a 20 20 20 20 20 20 70 72 69 6f 72 5f 64 65 6c  .      prior_del
2c30: 61 79 20 2b 3d 20 31 30 30 30 30 30 30 2a 28 63  ay += 1000000*(c
2c40: 6f 75 6e 74 20 2d 20 69 20 2d 20 31 29 3b 0a 20  ount - i - 1);. 
2c50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2c60: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f  }.  }.  if( prio
2c70: 72 5f 64 65 6c 61 79 20 2b 20 64 65 6c 61 79 20  r_delay + delay 
2c80: 3e 20 74 69 6d 65 6f 75 74 2a 31 30 30 30 20 29  > timeout*1000 )
2c90: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69  {.    delay = ti
2ca0: 6d 65 6f 75 74 2a 31 30 30 30 20 2d 20 70 72 69  meout*1000 - pri
2cb0: 6f 72 5f 64 65 6c 61 79 3b 0a 20 20 20 20 69 66  or_delay;.    if
2cc0: 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74  ( delay<=0 ) ret
2cd0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75 73 6c  urn 0;.  }.  usl
2ce0: 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65  eep(delay);.  re
2cf0: 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20  turn 1;.#else.  
2d00: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69  int timeout = (i
2d10: 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66  nt)Timeout;.  if
2d20: 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30  ( (count+1)*1000
2d30: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
2d40: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
2d50: 20 20 73 6c 65 65 70 28 31 29 3b 0a 20 20 72 65    sleep(1);.  re
2d60: 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d  turn 1;.#endif.}
2d70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
2d80: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75  tine sets the bu
2d90: 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  sy callback for 
2da0: 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61  an Sqlite databa
2db0: 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76  se to the.** giv
2dc0: 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  en callback func
2dd0: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69  tion with the gi
2de0: 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  ven argument..*/
2df0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73  .void sqlite_bus
2e00: 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c  y_handler(.  sql
2e10: 69 74 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28  ite *db,.  int (
2e20: 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f  *xBusy)(void*,co
2e30: 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a  nst char*,int),.
2e40: 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a    void *pArg.){.
2e50: 20 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62    db->xBusyCallb
2e60: 61 63 6b 20 3d 20 78 42 75 73 79 3b 0a 20 20 64  ack = xBusy;.  d
2e70: 62 2d 3e 70 42 75 73 79 41 72 67 20 3d 20 70 41  b->pBusyArg = pA
2e80: 72 67 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  rg;.}../*.** Thi
2e90: 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c  s routine instal
2ea0: 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73  ls a default bus
2eb0: 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77  y handler that w
2ec0: 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  aits for the.** 
2ed0: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
2ee0: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
2ef0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
2f00: 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  g 0..*/.void sql
2f10: 69 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  ite_busy_timeout
2f20: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74  (sqlite *db, int
2f30: 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30   ms){.  if( ms>0
2f40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62   ){.    sqlite_b
2f50: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
2f60: 73 71 6c 69 74 65 5f 64 65 66 61 75 6c 74 5f 62  sqlite_default_b
2f70: 75 73 79 5f 63 61 6c 6c 62 61 63 6b 2c 20 28 76  usy_callback, (v
2f80: 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73  oid*)ms);.  }els
2f90: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62 75  e{.    sqlite_bu
2fa0: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30  sy_handler(db, 0
2fb0: 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  , 0);.  }.}../*.
2fc0: 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e  ** Cause any pen
2fd0: 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74  ding operation t
2fe0: 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20 65 61  o stop at its ea
2ff0: 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69  rliest opportuni
3000: 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ty..*/.void sqli
3010: 74 65 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c  te_interrupt(sql
3020: 69 74 65 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e  ite *db){.  db->
3030: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
3040: 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a           Interrupt;.}.