Documentation Source Text

Hex Artifact Content
Login

Artifact b586617e3b3914a83f30be6a6a501f58d586d02a:


0000: 3c 74 69 74 6c 65 3e 41 72 63 68 69 74 65 63 74  <title>Architect
0010: 75 72 65 20 6f 66 20 53 51 4c 69 74 65 3c 2f 74  ure of SQLite</t
0020: 69 74 6c 65 3e 0a 3c 68 32 3e 54 68 65 20 41 72  itle>.<h2>The Ar
0030: 63 68 69 74 65 63 74 75 72 65 20 4f 66 20 53 51  chitecture Of SQ
0040: 4c 69 74 65 3c 2f 68 32 3e 0a 0a 3c 68 33 3e 49  Lite</h2>..<h3>I
0050: 6e 74 72 6f 64 75 63 74 69 6f 6e 3c 2f 68 33 3e  ntroduction</h3>
0060: 0a 0a 3c 74 61 62 6c 65 20 61 6c 69 67 6e 3d 22  ..<table align="
0070: 72 69 67 68 74 22 20 62 6f 72 64 65 72 3d 22 31  right" border="1
0080: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31  " cellpadding="1
0090: 35 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  5" cellspacing="
00a0: 31 22 3e 0a 3c 74 72 3e 3c 74 68 3e 42 6c 6f 63  1">.<tr><th>Bloc
00b0: 6b 20 44 69 61 67 72 61 6d 20 4f 66 20 53 51 4c  k Diagram Of SQL
00c0: 69 74 65 3c 2f 74 68 3e 3c 2f 74 72 3e 0a 3c 74  ite</th></tr>.<t
00d0: 72 3e 3c 74 64 3e 3c 69 6d 67 20 73 72 63 3d 22  r><td><img src="
00e0: 61 72 63 68 32 2e 67 69 66 22 3e 3c 2f 74 64 3e  arch2.gif"></td>
00f0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
0100: 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  p>This document 
0110: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 61 72  describes the ar
0120: 63 68 69 74 65 63 74 75 72 65 20 6f 66 20 74 68  chitecture of th
0130: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
0140: 2e 0a 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  ..The informatio
0150: 6e 20 68 65 72 65 20 69 73 20 75 73 65 66 75 6c  n here is useful
0160: 20 74 6f 20 74 68 6f 73 65 20 77 68 6f 20 77 61   to those who wa
0170: 6e 74 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64  nt to understand
0180: 20 6f 72 0a 6d 6f 64 69 66 79 20 74 68 65 20 69   or.modify the i
0190: 6e 6e 65 72 20 77 6f 72 6b 69 6e 67 73 20 6f 66  nner workings of
01a0: 20 53 51 4c 69 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c   SQLite..</p>..<
01b0: 70 3e 0a 41 20 62 6c 6f 63 6b 20 64 69 61 67 72  p>.A block diagr
01c0: 61 6d 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6d  am showing the m
01d0: 61 69 6e 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f  ain components o
01e0: 66 20 53 51 4c 69 74 65 0a 61 6e 64 20 68 6f 77  f SQLite.and how
01f0: 20 74 68 65 79 20 69 6e 74 65 72 72 65 6c 61 74   they interrelat
0200: 65 20 69 73 20 73 68 6f 77 6e 20 61 74 20 74 68  e is shown at th
0210: 65 20 72 69 67 68 74 2e 20 20 54 68 65 20 74 65  e right.  The te
0220: 78 74 20 74 68 61 74 0a 66 6f 6c 6c 6f 77 73 20  xt that.follows 
0230: 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 61 20 71  will provide a q
0240: 75 69 63 6b 20 6f 76 65 72 76 69 65 77 20 6f 66  uick overview of
0250: 20 65 61 63 68 20 6f 66 20 74 68 65 73 65 20 63   each of these c
0260: 6f 6d 70 6f 6e 65 6e 74 73 2e 0a 3c 2f 70 3e 0a  omponents..</p>.
0270: 0a 0a 3c 70 3e 0a 54 68 69 73 20 64 6f 63 75 6d  ..<p>.This docum
0280: 65 6e 74 20 64 65 73 63 72 69 62 65 73 20 53 51  ent describes SQ
0290: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30  Lite version 3.0
02a0: 2e 20 20 56 65 72 73 69 6f 6e 20 32 2e 38 20 61  .  Version 2.8 a
02b0: 6e 64 0a 65 61 72 6c 69 65 72 20 61 72 65 20 73  nd.earlier are s
02c0: 69 6d 69 6c 61 72 20 62 75 74 20 74 68 65 20 64  imilar but the d
02d0: 65 74 61 69 6c 73 20 64 69 66 66 65 72 2e 0a 3c  etails differ..<
02e0: 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 74 65 72 66 61  /p>..<h3>Interfa
02f0: 63 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 4d 75 63 68  ce</h3>..<p>Much
0300: 20 6f 66 20 74 68 65 20 70 75 62 6c 69 63 20 69   of the public i
0310: 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
0320: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 69  SQLite library i
0330: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
0340: 0a 66 75 6e 63 74 69 6f 6e 73 20 66 6f 75 6e 64  .functions found
0350: 20 69 6e 20 74 68 65 20 3c 62 3e 6d 61 69 6e 2e   in the <b>main.
0360: 63 3c 2f 62 3e 2c 20 3c 62 3e 6c 65 67 61 63 79  c</b>, <b>legacy
0370: 2e 63 3c 2f 62 3e 2c 20 61 6e 64 0a 3c 62 3e 76  .c</b>, and.<b>v
0380: 64 62 65 61 70 69 2e 63 3c 2f 62 3e 20 73 6f 75  dbeapi.c</b> sou
0390: 72 63 65 20 66 69 6c 65 73 0a 74 68 6f 75 67 68  rce files.though
03a0: 20 73 6f 6d 65 20 72 6f 75 74 69 6e 65 73 20 61   some routines a
03b0: 72 65 0a 73 63 61 74 74 65 72 65 64 20 61 62 6f  re.scattered abo
03c0: 75 74 20 69 6e 20 6f 74 68 65 72 20 66 69 6c 65  ut in other file
03d0: 73 20 77 68 65 72 65 20 74 68 65 79 20 63 61 6e  s where they can
03e0: 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20   have access to 
03f0: 64 61 74 61 20 0a 73 74 72 75 63 74 75 72 65 73  data .structures
0400: 20 77 69 74 68 20 66 69 6c 65 20 73 63 6f 70 65   with file scope
0410: 2e 20 20 54 68 65 0a 3c 62 3e 73 71 6c 69 74 65  .  The.<b>sqlite
0420: 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 3c 2f 62  3_get_table()</b
0430: 3e 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  > routine is imp
0440: 6c 65 6d 65 6e 74 65 64 20 69 6e 20 3c 62 3e 74  lemented in <b>t
0450: 61 62 6c 65 2e 63 3c 2f 62 3e 2e 0a 3c 62 3e 73  able.c</b>..<b>s
0460: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
0470: 3c 2f 62 3e 20 69 73 20 66 6f 75 6e 64 20 69 6e  </b> is found in
0480: 20 3c 62 3e 70 72 69 6e 74 66 2e 63 3c 2f 62 3e   <b>printf.c</b>
0490: 2e 0a 3c 62 3e 73 71 6c 69 74 65 33 5f 63 6f 6d  ..<b>sqlite3_com
04a0: 70 6c 65 74 65 28 29 3c 2f 62 3e 20 69 73 20 69  plete()</b> is i
04b0: 6e 20 3c 62 3e 74 6f 6b 65 6e 69 7a 65 2e 63 3c  n <b>tokenize.c<
04c0: 2f 62 3e 2e 0a 54 68 65 20 54 63 6c 20 69 6e 74  /b>..The Tcl int
04d0: 65 72 66 61 63 65 20 69 73 20 69 6d 70 6c 65 6d  erface is implem
04e0: 65 6e 74 65 64 20 62 79 20 3c 62 3e 74 63 6c 73  ented by <b>tcls
04f0: 71 6c 69 74 65 2e 63 3c 2f 62 3e 2e 20 20 4d 6f  qlite.c</b>.  Mo
0500: 72 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re.information o
0510: 6e 20 74 68 65 20 43 20 69 6e 74 65 72 66 61 63  n the C interfac
0520: 65 20 74 6f 20 53 51 4c 69 74 65 20 69 73 0a 3c  e to SQLite is.<
0530: 61 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66  a href="capi3ref
0540: 2e 68 74 6d 6c 22 3e 61 76 61 69 6c 61 62 6c 65  .html">available
0550: 20 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e   separately</a>.
0560: 3c 70 3e 0a 0a 3c 70 3e 54 6f 20 61 76 6f 69 64  <p>..<p>To avoid
0570: 20 6e 61 6d 65 20 63 6f 6c 6c 69 73 69 6f 6e 73   name collisions
0580: 20 77 69 74 68 20 6f 74 68 65 72 20 73 6f 66 74   with other soft
0590: 77 61 72 65 2c 20 61 6c 6c 20 65 78 74 65 72 6e  ware, all extern
05a0: 61 6c 0a 73 79 6d 62 6f 6c 73 20 69 6e 20 74 68  al.symbols in th
05b0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
05c0: 20 62 65 67 69 6e 20 77 69 74 68 20 74 68 65 20   begin with the 
05d0: 70 72 65 66 69 78 20 3c 62 3e 73 71 6c 69 74 65  prefix <b>sqlite
05e0: 33 3c 2f 62 3e 2e 0a 54 68 6f 73 65 20 73 79 6d  3</b>..Those sym
05f0: 62 6f 6c 73 20 74 68 61 74 20 61 72 65 20 69 6e  bols that are in
0600: 74 65 6e 64 65 64 20 66 6f 72 20 65 78 74 65 72  tended for exter
0610: 6e 61 6c 20 75 73 65 20 28 69 6e 20 6f 74 68 65  nal use (in othe
0620: 72 20 77 6f 72 64 73 2c 0a 74 68 6f 73 65 20 73  r words,.those s
0630: 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 66 6f 72  ymbols which for
0640: 6d 20 74 68 65 20 41 50 49 20 66 6f 72 20 53 51  m the API for SQ
0650: 4c 69 74 65 29 20 62 65 67 69 6e 0a 77 69 74 68  Lite) begin.with
0660: 20 3c 62 3e 73 71 6c 69 74 65 33 5f 3c 2f 62 3e   <b>sqlite3_</b>
0670: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 6f 6b 65 6e  .</p>..<h3>Token
0680: 69 7a 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 57 68  izer</h3>..<p>Wh
0690: 65 6e 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  en a string cont
06a0: 61 69 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  aining SQL state
06b0: 6d 65 6e 74 73 20 69 73 20 74 6f 20 62 65 20 65  ments is to be e
06c0: 78 65 63 75 74 65 64 2c 20 74 68 65 0a 69 6e 74  xecuted, the.int
06d0: 65 72 66 61 63 65 20 70 61 73 73 65 73 20 74 68  erface passes th
06e0: 61 74 20 73 74 72 69 6e 67 20 74 6f 20 74 68 65  at string to the
06f0: 20 74 6f 6b 65 6e 69 7a 65 72 2e 20 20 54 68 65   tokenizer.  The
0700: 20 6a 6f 62 20 6f 66 20 74 68 65 20 74 6f 6b 65   job of the toke
0710: 6e 69 7a 65 72 0a 69 73 20 74 6f 20 62 72 65 61  nizer.is to brea
0720: 6b 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73  k the original s
0730: 74 72 69 6e 67 20 75 70 20 69 6e 74 6f 20 74 6f  tring up into to
0740: 6b 65 6e 73 20 61 6e 64 20 70 61 73 73 20 74 68  kens and pass th
0750: 6f 73 65 20 74 6f 6b 65 6e 73 0a 6f 6e 65 20 62  ose tokens.one b
0760: 79 20 6f 6e 65 20 74 6f 20 74 68 65 20 70 61 72  y one to the par
0770: 73 65 72 2e 20 20 54 68 65 20 74 6f 6b 65 6e 69  ser.  The tokeni
0780: 7a 65 72 20 69 73 20 68 61 6e 64 2d 63 6f 64 65  zer is hand-code
0790: 64 20 69 6e 20 43 20 69 6e 20 0a 74 68 65 20 66  d in C in .the f
07a0: 69 6c 65 20 3c 62 3e 74 6f 6b 65 6e 69 7a 65 2e  ile <b>tokenize.
07b0: 63 3c 2f 62 3e 2e 0a 0a 3c 70 3e 4e 6f 74 65 20  c</b>...<p>Note 
07c0: 74 68 61 74 20 69 6e 20 74 68 69 73 20 64 65 73  that in this des
07d0: 69 67 6e 2c 20 74 68 65 20 74 6f 6b 65 6e 69 7a  ign, the tokeniz
07e0: 65 72 20 63 61 6c 6c 73 20 74 68 65 20 70 61 72  er calls the par
07f0: 73 65 72 2e 20 20 50 65 6f 70 6c 65 0a 77 68 6f  ser.  People.who
0800: 20 61 72 65 20 66 61 6d 69 6c 69 61 72 20 77 69   are familiar wi
0810: 74 68 20 59 41 43 43 20 61 6e 64 20 42 49 53 4f  th YACC and BISO
0820: 4e 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  N may be used to
0830: 20 64 6f 69 6e 67 20 74 68 69 6e 67 73 20 74 68   doing things th
0840: 65 0a 6f 74 68 65 72 20 77 61 79 20 61 72 6f 75  e.other way arou
0850: 6e 64 20 2d 2d 20 68 61 76 69 6e 67 20 74 68 65  nd -- having the
0860: 20 70 61 72 73 65 72 20 63 61 6c 6c 20 74 68 65   parser call the
0870: 20 74 6f 6b 65 6e 69 7a 65 72 2e 20 20 54 68 65   tokenizer.  The
0880: 20 61 75 74 68 6f 72 0a 6f 66 20 53 51 4c 69 74   author.of SQLit
0890: 65 20 0a 68 61 73 20 64 6f 6e 65 20 69 74 20 62  e .has done it b
08a0: 6f 74 68 20 77 61 79 73 20 61 6e 64 20 66 69 6e  oth ways and fin
08b0: 64 73 20 74 68 69 6e 67 73 20 67 65 6e 65 72 61  ds things genera
08c0: 6c 6c 79 20 77 6f 72 6b 20 6f 75 74 20 6e 69 63  lly work out nic
08d0: 65 72 20 66 6f 72 0a 74 68 65 20 74 6f 6b 65 6e  er for.the token
08e0: 69 7a 65 72 20 74 6f 20 63 61 6c 6c 20 74 68 65  izer to call the
08f0: 20 70 61 72 73 65 72 2e 20 20 59 41 43 43 20 68   parser.  YACC h
0900: 61 73 20 69 74 20 62 61 63 6b 77 61 72 64 73 2e  as it backwards.
0910: 3c 2f 70 3e 0a 0a 3c 68 33 3e 50 61 72 73 65 72  </p>..<h3>Parser
0920: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 70 61  </h3>..<p>The pa
0930: 72 73 65 72 20 69 73 20 74 68 65 20 70 69 65 63  rser is the piec
0940: 65 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 6d  e that assigns m
0950: 65 61 6e 69 6e 67 20 74 6f 20 74 6f 6b 65 6e 73  eaning to tokens
0960: 20 62 61 73 65 64 20 6f 6e 0a 74 68 65 69 72 20   based on.their 
0970: 63 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 61  context.  The pa
0980: 72 73 65 72 20 66 6f 72 20 53 51 4c 69 74 65 20  rser for SQLite 
0990: 69 73 20 67 65 6e 65 72 61 74 65 64 20 75 73 69  is generated usi
09a0: 6e 67 20 74 68 65 0a 3c 61 20 68 72 65 66 3d 22  ng the.<a href="
09b0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
09c0: 2e 63 6f 6d 2f 73 77 2f 6c 65 6d 6f 6e 2f 22 3e  .com/sw/lemon/">
09d0: 4c 65 6d 6f 6e 3c 2f 61 3e 20 4c 41 4c 52 28 31  Lemon</a> LALR(1
09e0: 29 20 70 61 72 73 65 72 0a 67 65 6e 65 72 61 74  ) parser.generat
09f0: 6f 72 2e 20 20 4c 65 6d 6f 6e 20 64 6f 65 73 20  or.  Lemon does 
0a00: 74 68 65 20 73 61 6d 65 20 6a 6f 62 20 61 73 20  the same job as 
0a10: 59 41 43 43 2f 42 49 53 4f 4e 2c 20 62 75 74 20  YACC/BISON, but 
0a20: 69 74 20 75 73 65 73 0a 61 20 64 69 66 66 65 72  it uses.a differ
0a30: 65 6e 74 20 69 6e 70 75 74 20 73 79 6e 74 61 78  ent input syntax
0a40: 20 77 68 69 63 68 20 69 73 20 6c 65 73 73 20 65   which is less e
0a50: 72 72 6f 72 2d 70 72 6f 6e 65 2e 0a 4c 65 6d 6f  rror-prone..Lemo
0a60: 6e 20 61 6c 73 6f 20 67 65 6e 65 72 61 74 65 73  n also generates
0a70: 20 61 20 70 61 72 73 65 72 20 77 68 69 63 68 20   a parser which 
0a80: 69 73 20 72 65 65 6e 74 72 61 6e 74 20 61 6e 64  is reentrant and
0a90: 20 74 68 72 65 61 64 2d 73 61 66 65 2e 0a 41 6e   thread-safe..An
0aa0: 64 20 6c 65 6d 6f 6e 20 64 65 66 69 6e 65 73 20  d lemon defines 
0ab0: 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 61  the concept of a
0ac0: 20 6e 6f 6e 2d 74 65 72 6d 69 6e 61 6c 20 64 65   non-terminal de
0ad0: 73 74 72 75 63 74 6f 72 20 73 6f 0a 74 68 61 74  structor so.that
0ae0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 6c 65 61   it does not lea
0af0: 6b 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20 73 79  k memory when sy
0b00: 6e 74 61 78 20 65 72 72 6f 72 73 20 61 72 65 20  ntax errors are 
0b10: 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 54 68 65  encountered..The
0b20: 20 73 6f 75 72 63 65 20 66 69 6c 65 20 74 68 61   source file tha
0b30: 74 20 64 72 69 76 65 73 20 4c 65 6d 6f 6e 20 69  t drives Lemon i
0b40: 73 20 66 6f 75 6e 64 20 69 6e 20 3c 62 3e 70 61  s found in <b>pa
0b50: 72 73 65 2e 79 3c 2f 62 3e 2e 3c 2f 70 3e 0a 0a  rse.y</b>.</p>..
0b60: 3c 70 3e 42 65 63 61 75 73 65 0a 6c 65 6d 6f 6e  <p>Because.lemon
0b70: 20 69 73 20 61 20 70 72 6f 67 72 61 6d 20 6e 6f   is a program no
0b80: 74 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f 75 6e 64  t normally found
0b90: 20 6f 6e 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20   on development 
0ba0: 6d 61 63 68 69 6e 65 73 2c 20 74 68 65 0a 63 6f  machines, the.co
0bb0: 6d 70 6c 65 74 65 20 73 6f 75 72 63 65 20 63 6f  mplete source co
0bc0: 64 65 20 74 6f 20 6c 65 6d 6f 6e 20 28 6a 75 73  de to lemon (jus
0bd0: 74 20 6f 6e 65 20 43 20 66 69 6c 65 29 20 69 73  t one C file) is
0be0: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
0bf0: 0a 53 51 4c 69 74 65 20 64 69 73 74 72 69 62 75  .SQLite distribu
0c00: 74 69 6f 6e 20 69 6e 20 74 68 65 20 22 74 6f 6f  tion in the "too
0c10: 6c 22 20 73 75 62 64 69 72 65 63 74 6f 72 79 2e  l" subdirectory.
0c20: 20 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20    Documentation 
0c30: 6f 6e 0a 6c 65 6d 6f 6e 20 69 73 20 66 6f 75 6e  on.lemon is foun
0c40: 64 20 69 6e 20 74 68 65 20 22 64 6f 63 22 20 73  d in the "doc" s
0c50: 75 62 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  ubdirectory of t
0c60: 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e  he distribution.
0c70: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 6f 64 65 20  .</p>..<h3>Code 
0c80: 47 65 6e 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a  Generator</h3>..
0c90: 3c 70 3e 41 66 74 65 72 20 74 68 65 20 70 61 72  <p>After the par
0ca0: 73 65 72 20 61 73 73 65 6d 62 6c 65 73 20 74 6f  ser assembles to
0cb0: 6b 65 6e 73 20 69 6e 74 6f 20 63 6f 6d 70 6c 65  kens into comple
0cc0: 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  te SQL statement
0cd0: 73 2c 0a 69 74 20 63 61 6c 6c 73 20 74 68 65 20  s,.it calls the 
0ce0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 74  code generator t
0cf0: 6f 20 70 72 6f 64 75 63 65 20 76 69 72 74 75 61  o produce virtua
0d00: 6c 20 6d 61 63 68 69 6e 65 20 63 6f 64 65 20 74  l machine code t
0d10: 68 61 74 0a 77 69 6c 6c 20 64 6f 20 74 68 65 20  hat.will do the 
0d20: 77 6f 72 6b 20 74 68 61 74 20 74 68 65 20 53 51  work that the SQ
0d30: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 72 65 71  L statements req
0d40: 75 65 73 74 2e 20 20 54 68 65 72 65 20 61 72 65  uest.  There are
0d50: 20 6d 61 6e 79 0a 66 69 6c 65 73 20 69 6e 20 74   many.files in t
0d60: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
0d70: 72 3a 0a 3c 62 3e 61 74 74 61 63 68 2e 63 3c 2f  r:.<b>attach.c</
0d80: 62 3e 2c 0a 3c 62 3e 61 75 74 68 2e 63 3c 2f 62  b>,.<b>auth.c</b
0d90: 3e 2c 0a 3c 62 3e 62 75 69 6c 64 2e 63 3c 2f 62  >,.<b>build.c</b
0da0: 3e 2c 0a 3c 62 3e 64 65 6c 65 74 65 2e 63 3c 2f  >,.<b>delete.c</
0db0: 62 3e 2c 0a 3c 62 3e 65 78 70 72 2e 63 3c 2f 62  b>,.<b>expr.c</b
0dc0: 3e 2c 0a 3c 62 3e 69 6e 73 65 72 74 2e 63 3c 2f  >,.<b>insert.c</
0dd0: 62 3e 2c 0a 3c 62 3e 70 72 61 67 6d 61 2e 63 3c  b>,.<b>pragma.c<
0de0: 2f 62 3e 2c 0a 3c 62 3e 73 65 6c 65 63 74 2e 63  /b>,.<b>select.c
0df0: 3c 2f 62 3e 2c 0a 3c 62 3e 74 72 69 67 67 65 72  </b>,.<b>trigger
0e00: 2e 63 3c 2f 62 3e 2c 0a 3c 62 3e 75 70 64 61 74  .c</b>,.<b>updat
0e10: 65 2e 63 3c 2f 62 3e 2c 0a 3c 62 3e 76 61 63 75  e.c</b>,.<b>vacu
0e20: 75 6d 2e 63 3c 2f 62 3e 0a 61 6e 64 20 3c 62 3e  um.c</b>.and <b>
0e30: 77 68 65 72 65 2e 63 3c 2f 62 3e 2e 0a 49 6e 20  where.c</b>..In 
0e40: 74 68 65 73 65 20 66 69 6c 65 73 20 69 73 20 77  these files is w
0e50: 68 65 72 65 20 6d 6f 73 74 20 6f 66 20 74 68 65  here most of the
0e60: 20 73 65 72 69 6f 75 73 20 6d 61 67 69 63 20 68   serious magic h
0e70: 61 70 70 65 6e 73 2e 0a 3c 62 3e 65 78 70 72 2e  appens..<b>expr.
0e80: 63 3c 2f 62 3e 20 68 61 6e 64 6c 65 73 20 63 6f  c</b> handles co
0e90: 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 66 6f  de generation fo
0ea0: 72 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 3c  r expressions..<
0eb0: 62 3e 77 68 65 72 65 2e 63 3c 2f 62 3e 20 68 61  b>where.c</b> ha
0ec0: 6e 64 6c 65 73 20 63 6f 64 65 20 67 65 6e 65 72  ndles code gener
0ed0: 61 74 69 6f 6e 20 66 6f 72 20 57 48 45 52 45 20  ation for WHERE 
0ee0: 63 6c 61 75 73 65 73 20 6f 6e 0a 53 45 4c 45 43  clauses on.SELEC
0ef0: 54 2c 20 55 50 44 41 54 45 20 61 6e 64 20 44 45  T, UPDATE and DE
0f00: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e  LETE statements.
0f10: 20 20 54 68 65 20 66 69 6c 65 73 20 3c 62 3e 61    The files <b>a
0f20: 74 74 61 63 68 2e 63 3c 2f 62 3e 2c 0a 3c 62 3e  ttach.c</b>,.<b>
0f30: 64 65 6c 65 74 65 2e 63 3c 2f 62 3e 2c 20 3c 62  delete.c</b>, <b
0f40: 3e 69 6e 73 65 72 74 2e 63 3c 2f 62 3e 2c 20 3c  >insert.c</b>, <
0f50: 62 3e 73 65 6c 65 63 74 2e 63 3c 2f 62 3e 2c 20  b>select.c</b>, 
0f60: 3c 62 3e 74 72 69 67 67 65 72 2e 63 3c 2f 62 3e  <b>trigger.c</b>
0f70: 0a 3c 62 3e 75 70 64 61 74 65 2e 63 3c 2f 62 3e  .<b>update.c</b>
0f80: 2c 20 61 6e 64 20 3c 62 3e 76 61 63 75 75 6d 2e  , and <b>vacuum.
0f90: 63 3c 2f 62 3e 20 68 61 6e 64 6c 65 20 74 68 65  c</b> handle the
0fa0: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
0fb0: 0a 66 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65  .for SQL stateme
0fc0: 6e 74 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  nts with the sam
0fd0: 65 20 6e 61 6d 65 73 2e 20 20 28 45 61 63 68 20  e names.  (Each 
0fe0: 6f 66 20 74 68 65 73 65 20 66 69 6c 65 73 20 63  of these files c
0ff0: 61 6c 6c 73 20 72 6f 75 74 69 6e 65 73 0a 69 6e  alls routines.in
1000: 20 3c 62 3e 65 78 70 72 2e 63 3c 2f 62 3e 20 61   <b>expr.c</b> a
1010: 6e 64 20 3c 62 3e 77 68 65 72 65 2e 63 3c 2f 62  nd <b>where.c</b
1020: 3e 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 29  > as necessary.)
1030: 20 20 41 6c 6c 20 6f 74 68 65 72 0a 53 51 4c 20    All other.SQL 
1040: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 63  statements are c
1050: 6f 64 65 64 20 6f 75 74 20 6f 66 20 3c 62 3e 62  oded out of <b>b
1060: 75 69 6c 64 2e 63 3c 2f 62 3e 2e 0a 54 68 65 20  uild.c</b>..The 
1070: 3c 62 3e 61 75 74 68 2e 63 3c 2f 62 3e 20 66 69  <b>auth.c</b> fi
1080: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  le implements th
1090: 65 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  e functionality 
10a0: 6f 66 0a 3c 62 3e 73 71 6c 69 74 65 33 5f 73 65  of.<b>sqlite3_se
10b0: 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 3c 2f  t_authorizer()</
10c0: 62 3e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 56 69 72  b>.</p>..<h3>Vir
10d0: 74 75 61 6c 20 4d 61 63 68 69 6e 65 3c 2f 68 33  tual Machine</h3
10e0: 3e 0a 0a 3c 70 3e 54 68 65 20 70 72 6f 67 72 61  >..<p>The progra
10f0: 6d 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  m generated by t
1100: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1110: 72 20 69 73 20 65 78 65 63 75 74 65 64 20 62 79  r is executed by
1120: 0a 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63  .the virtual mac
1130: 68 69 6e 65 2e 20 20 41 64 64 69 74 69 6f 6e 61  hine.  Additiona
1140: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  l information ab
1150: 6f 75 74 20 74 68 65 20 76 69 72 74 75 61 6c 0a  out the virtual.
1160: 6d 61 63 68 69 6e 65 20 69 73 20 3c 61 20 68 72  machine is <a hr
1170: 65 66 3d 22 6f 70 63 6f 64 65 2e 68 74 6d 6c 22  ef="opcode.html"
1180: 3e 61 76 61 69 6c 61 62 6c 65 20 73 65 70 61 72  >available separ
1190: 61 74 65 6c 79 3c 2f 61 3e 2e 0a 54 6f 20 73 75  ately</a>..To su
11a0: 6d 6d 61 72 69 7a 65 2c 20 74 68 65 20 76 69 72  mmarize, the vir
11b0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6d 70  tual machine imp
11c0: 6c 65 6d 65 6e 74 73 20 61 6e 20 61 62 73 74 72  lements an abstr
11d0: 61 63 74 20 63 6f 6d 70 75 74 69 6e 67 0a 65 6e  act computing.en
11e0: 67 69 6e 65 20 73 70 65 63 69 66 69 63 61 6c 6c  gine specificall
11f0: 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 6d 61  y designed to ma
1200: 6e 69 70 75 6c 61 74 65 20 64 61 74 61 62 61 73  nipulate databas
1210: 65 20 66 69 6c 65 73 2e 20 20 54 68 65 0a 6d 61  e files.  The.ma
1220: 63 68 69 6e 65 20 68 61 73 20 61 20 73 74 61 63  chine has a stac
1230: 6b 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20  k which is used 
1240: 66 6f 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65  for intermediate
1250: 20 73 74 6f 72 61 67 65 2e 0a 45 61 63 68 20 69   storage..Each i
1260: 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6e 74 61  nstruction conta
1270: 69 6e 73 20 61 6e 20 6f 70 63 6f 64 65 20 61 6e  ins an opcode an
1280: 64 0a 75 70 20 74 6f 20 74 68 72 65 65 20 61 64  d.up to three ad
1290: 64 69 74 69 6f 6e 61 6c 20 6f 70 65 72 61 6e 64  ditional operand
12a0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76  s.</p>..<p>The v
12b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69  irtual machine i
12c0: 74 73 65 6c 66 20 69 73 20 65 6e 74 69 72 65 6c  tself is entirel
12d0: 79 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61  y contained in a
12e0: 20 73 69 6e 67 6c 65 0a 73 6f 75 72 63 65 20 66   single.source f
12f0: 69 6c 65 20 3c 62 3e 76 64 62 65 2e 63 3c 2f 62  ile <b>vdbe.c</b
1300: 3e 2e 20 20 54 68 65 20 76 69 72 74 75 61 6c 20  >.  The virtual 
1310: 6d 61 63 68 69 6e 65 20 61 6c 73 6f 20 68 61 73  machine also has
1320: 0a 69 74 73 20 6f 77 6e 20 68 65 61 64 65 72 20  .its own header 
1330: 66 69 6c 65 73 3a 20 3c 62 3e 76 64 62 65 2e 68  files: <b>vdbe.h
1340: 3c 2f 62 3e 20 74 68 61 74 20 64 65 66 69 6e 65  </b> that define
1350: 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 0a 62  s an interface.b
1360: 65 74 77 65 65 6e 20 74 68 65 20 76 69 72 74 75  etween the virtu
1370: 61 6c 20 6d 61 63 68 69 6e 65 20 61 6e 64 20 74  al machine and t
1380: 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 53  he rest of the S
1390: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 61 6e  QLite library an
13a0: 64 0a 3c 62 3e 76 64 62 65 49 6e 74 2e 68 3c 2f  d.<b>vdbeInt.h</
13b0: 62 3e 20 77 68 69 63 68 20 64 65 66 69 6e 65 73  b> which defines
13c0: 20 73 74 72 75 63 74 75 72 65 20 70 72 69 76 61   structure priva
13d0: 74 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  te the virtual m
13e0: 61 63 68 69 6e 65 2e 0a 54 68 65 20 3c 62 3e 76  achine..The <b>v
13f0: 64 62 65 61 75 78 2e 63 3c 2f 62 3e 20 66 69 6c  dbeaux.c</b> fil
1400: 65 20 63 6f 6e 74 61 69 6e 73 20 75 74 69 6c 69  e contains utili
1410: 74 69 65 73 20 75 73 65 64 20 62 79 20 74 68 65  ties used by the
1420: 20 76 69 72 74 75 61 6c 0a 6d 61 63 68 69 6e 65   virtual.machine
1430: 20 61 6e 64 20 69 6e 74 65 72 66 61 63 65 20 6d   and interface m
1440: 6f 64 75 6c 65 73 20 75 73 65 64 20 62 79 20 74  odules used by t
1450: 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 6c  he rest of the l
1460: 69 62 72 61 72 79 20 74 6f 0a 63 6f 6e 73 74 72  ibrary to.constr
1470: 75 63 74 20 56 4d 20 70 72 6f 67 72 61 6d 73 2e  uct VM programs.
1480: 20 20 54 68 65 20 3c 62 3e 76 64 62 65 61 70 69    The <b>vdbeapi
1490: 2e 63 3c 2f 62 3e 20 66 69 6c 65 20 63 6f 6e 74  .c</b> file cont
14a0: 61 69 6e 73 20 65 78 74 65 72 6e 61 6c 0a 69 6e  ains external.in
14b0: 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20  terfaces to the 
14c0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
14d0: 73 75 63 68 20 61 73 20 74 68 65 20 0a 3c 62 3e  such as the .<b>
14e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 2e 2e 2e  sqlite3_bind_...
14f0: 3c 2f 62 3e 20 66 61 6d 69 6c 79 20 6f 66 20 66  </b> family of f
1500: 75 6e 63 74 69 6f 6e 73 2e 20 20 49 6e 64 69 76  unctions.  Indiv
1510: 69 64 75 61 6c 20 76 61 6c 75 65 73 0a 28 73 74  idual values.(st
1520: 72 69 6e 67 73 2c 20 69 6e 74 65 67 65 72 2c 20  rings, integer, 
1530: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
1540: 75 6d 62 65 72 73 2c 20 61 6e 64 20 42 4c 4f 42  umbers, and BLOB
1550: 73 29 20 61 72 65 20 73 74 6f 72 65 64 0a 69 6e  s) are stored.in
1560: 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 6f 62 6a   an internal obj
1570: 65 63 74 20 6e 61 6d 65 64 20 22 4d 65 6d 22 20  ect named "Mem" 
1580: 77 68 69 63 68 20 69 73 20 69 6d 70 6c 65 6d 65  which is impleme
1590: 6e 74 65 64 20 62 79 0a 3c 62 3e 76 64 62 65 6d  nted by.<b>vdbem
15a0: 65 6d 2e 63 3c 2f 62 3e 2e 3c 2f 70 3e 0a 0a 3c  em.c</b>.</p>..<
15b0: 70 3e 0a 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d  p>.SQLite implem
15c0: 65 6e 74 73 20 53 51 4c 20 66 75 6e 63 74 69 6f  ents SQL functio
15d0: 6e 73 20 75 73 69 6e 67 20 63 61 6c 6c 62 61 63  ns using callbac
15e0: 6b 73 20 74 6f 20 43 2d 6c 61 6e 67 75 61 67 65  ks to C-language
15f0: 20 72 6f 75 74 69 6e 65 73 2e 0a 45 76 65 6e 20   routines..Even 
1600: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 51 4c  the built-in SQL
1610: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69   functions are i
1620: 6d 70 6c 65 6d 65 6e 74 65 64 20 74 68 69 73 20  mplemented this 
1630: 77 61 79 2e 20 20 4d 6f 73 74 20 6f 66 0a 74 68  way.  Most of.th
1640: 65 20 62 75 69 6c 74 2d 69 6e 20 53 51 4c 20 66  e built-in SQL f
1650: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 3c 62  unctions (ex: <b
1660: 3e 63 6f 61 6c 65 73 63 65 28 29 3c 2f 62 3e 2c  >coalesce()</b>,
1670: 20 3c 62 3e 63 6f 75 6e 74 28 29 3c 2f 62 3e 2c   <b>count()</b>,
1680: 0a 3c 62 3e 73 75 62 73 74 72 28 29 3c 2f 62 3e  .<b>substr()</b>
1690: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 29 20  , and so forth) 
16a0: 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20  can be found in 
16b0: 3c 62 3e 66 75 6e 63 2e 63 3c 2f 62 3e 2e 0a 44  <b>func.c</b>..D
16c0: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 63 6f 6e  ate and time con
16d0: 76 65 72 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  version function
16e0: 73 20 61 72 65 20 66 6f 75 6e 64 20 69 6e 20 3c  s are found in <
16f0: 62 3e 64 61 74 65 2e 63 3c 2f 62 3e 2e 0a 3c 2f  b>date.c</b>..</
1700: 70 3e 0a 0a 3c 68 33 3e 42 2d 54 72 65 65 3c 2f  p>..<h3>B-Tree</
1710: 68 33 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 69 74  h3>..<p>An SQLit
1720: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6d 61  e database is ma
1730: 69 6e 74 61 69 6e 65 64 20 6f 6e 20 64 69 73 6b  intained on disk
1740: 20 75 73 69 6e 67 20 61 20 42 2d 74 72 65 65 20   using a B-tree 
1750: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 66  implementation.f
1760: 6f 75 6e 64 20 69 6e 20 74 68 65 20 3c 62 3e 62  ound in the <b>b
1770: 74 72 65 65 2e 63 3c 2f 62 3e 20 73 6f 75 72 63  tree.c</b> sourc
1780: 65 20 66 69 6c 65 2e 20 20 41 20 73 65 70 61 72  e file.  A separ
1790: 61 74 65 20 42 2d 74 72 65 65 20 69 73 20 75 73  ate B-tree is us
17a0: 65 64 20 66 6f 72 0a 65 61 63 68 20 74 61 62 6c  ed for.each tabl
17b0: 65 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74  e and index in t
17c0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 41 6c  he database.  Al
17d0: 6c 20 42 2d 74 72 65 65 73 20 61 72 65 20 73 74  l B-trees are st
17e0: 6f 72 65 64 20 69 6e 20 74 68 65 0a 73 61 6d 65  ored in the.same
17f0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 44 65 74   disk file.  Det
1800: 61 69 6c 73 20 6f 66 20 74 68 65 20 66 69 6c 65  ails of the file
1810: 20 66 6f 72 6d 61 74 20 61 72 65 20 72 65 63 6f   format are reco
1820: 72 64 65 64 20 69 6e 20 61 20 6c 61 72 67 65 0a  rded in a large.
1830: 63 6f 6d 6d 65 6e 74 20 61 74 20 74 68 65 20 62  comment at the b
1840: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 3c 62 3e 62  eginning of <b>b
1850: 74 72 65 65 2e 63 3c 2f 62 3e 2e 3c 2f 70 3e 0a  tree.c</b>.</p>.
1860: 0a 3c 70 3e 54 68 65 20 69 6e 74 65 72 66 61 63  .<p>The interfac
1870: 65 20 74 6f 20 74 68 65 20 42 2d 74 72 65 65 20  e to the B-tree 
1880: 73 75 62 73 79 73 74 65 6d 20 69 73 20 64 65 66  subsystem is def
1890: 69 6e 65 64 20 62 79 20 74 68 65 20 68 65 61 64  ined by the head
18a0: 65 72 20 66 69 6c 65 0a 3c 62 3e 62 74 72 65 65  er file.<b>btree
18b0: 2e 68 3c 2f 62 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 68  .h</b>..</p>..<h
18c0: 33 3e 50 61 67 65 20 43 61 63 68 65 3c 2f 68 33  3>Page Cache</h3
18d0: 3e 0a 0a 3c 70 3e 54 68 65 20 42 2d 74 72 65 65  >..<p>The B-tree
18e0: 20 6d 6f 64 75 6c 65 20 72 65 71 75 65 73 74 73   module requests
18f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1900: 6d 20 74 68 65 20 64 69 73 6b 20 69 6e 20 66 69  m the disk in fi
1910: 78 65 64 2d 73 69 7a 65 0a 63 68 75 6e 6b 73 2e  xed-size.chunks.
1920: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 68    The default ch
1930: 75 6e 6b 20 73 69 7a 65 20 69 73 20 31 30 32 34  unk size is 1024
1940: 20 62 79 74 65 73 20 62 75 74 20 63 61 6e 20 76   bytes but can v
1950: 61 72 79 20 62 65 74 77 65 65 6e 20 35 31 32 0a  ary between 512.
1960: 61 6e 64 20 36 35 35 33 36 20 62 79 74 65 73 2e  and 65536 bytes.
1970: 0a 54 68 65 20 70 61 67 65 20 63 61 63 68 65 20  .The page cache 
1980: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1990: 6f 72 20 72 65 61 64 69 6e 67 2c 20 77 72 69 74  or reading, writ
19a0: 69 6e 67 2c 20 61 6e 64 0a 63 61 63 68 69 6e 67  ing, and.caching
19b0: 20 74 68 65 73 65 20 63 68 75 6e 6b 73 2e 0a 54   these chunks..T
19c0: 68 65 20 70 61 67 65 20 63 61 63 68 65 20 61 6c  he page cache al
19d0: 73 6f 20 70 72 6f 76 69 64 65 73 20 74 68 65 20  so provides the 
19e0: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 61 74 6f  rollback and ato
19f0: 6d 69 63 20 63 6f 6d 6d 69 74 20 61 62 73 74 72  mic commit abstr
1a00: 61 63 74 69 6f 6e 0a 61 6e 64 20 74 61 6b 65 73  action.and takes
1a10: 20 63 61 72 65 20 6f 66 20 6c 6f 63 6b 69 6e 67   care of locking
1a20: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1a30: 20 66 69 6c 65 2e 20 20 54 68 65 0a 42 2d 74 72   file.  The.B-tr
1a40: 65 65 20 64 72 69 76 65 72 20 72 65 71 75 65 73  ee driver reques
1a50: 74 73 20 70 61 72 74 69 63 75 6c 61 72 20 70 61  ts particular pa
1a60: 67 65 73 20 66 72 6f 6d 20 74 68 65 20 70 61 67  ges from the pag
1a70: 65 20 63 61 63 68 65 20 61 6e 64 20 6e 6f 74 69  e cache and noti
1a80: 66 69 65 73 0a 74 68 65 20 70 61 67 65 20 63 61  fies.the page ca
1a90: 63 68 65 20 77 68 65 6e 20 69 74 20 77 61 6e 74  che when it want
1aa0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 70 61 67 65  s to modify page
1ab0: 73 20 6f 72 20 63 6f 6d 6d 69 74 20 6f 72 20 72  s or commit or r
1ac0: 6f 6c 6c 62 61 63 6b 0a 63 68 61 6e 67 65 73 20  ollback.changes 
1ad0: 61 6e 64 20 74 68 65 20 70 61 67 65 20 63 61 63  and the page cac
1ae0: 68 65 20 68 61 6e 64 6c 65 73 20 61 6c 6c 20 74  he handles all t
1af0: 68 65 20 6d 65 73 73 79 20 64 65 74 61 69 6c 73  he messy details
1b00: 20 6f 66 20 6d 61 6b 69 6e 67 20 73 75 72 65 0a   of making sure.
1b10: 74 68 65 20 72 65 71 75 65 73 74 73 20 61 72 65  the requests are
1b20: 20 68 61 6e 64 6c 65 64 20 71 75 69 63 6b 6c 79   handled quickly
1b30: 2c 20 73 61 66 65 6c 79 2c 20 61 6e 64 20 65 66  , safely, and ef
1b40: 66 69 63 69 65 6e 74 6c 79 2e 3c 2f 70 3e 0a 0a  ficiently.</p>..
1b50: 3c 70 3e 54 68 65 20 63 6f 64 65 20 74 6f 20 69  <p>The code to i
1b60: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 70 61 67  mplement the pag
1b70: 65 20 63 61 63 68 65 20 69 73 20 63 6f 6e 74 61  e cache is conta
1b80: 69 6e 65 64 20 69 6e 20 74 68 65 20 73 69 6e 67  ined in the sing
1b90: 6c 65 20 43 0a 73 6f 75 72 63 65 20 66 69 6c 65  le C.source file
1ba0: 20 3c 62 3e 70 61 67 65 72 2e 63 3c 2f 62 3e 2e   <b>pager.c</b>.
1bb0: 20 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20    The interface 
1bc0: 74 6f 20 74 68 65 20 70 61 67 65 20 63 61 63 68  to the page cach
1bd0: 65 20 73 75 62 73 79 73 74 65 6d 0a 69 73 20 64  e subsystem.is d
1be0: 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 68 65  efined by the he
1bf0: 61 64 65 72 20 66 69 6c 65 20 3c 62 3e 70 61 67  ader file <b>pag
1c00: 65 72 2e 68 3c 2f 62 3e 2e 0a 3c 2f 70 3e 0a 0a  er.h</b>..</p>..
1c10: 3c 68 33 3e 4f 53 20 49 6e 74 65 72 66 61 63 65  <h3>OS Interface
1c20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 49 6e 20 6f 72  </h3>..<p>.In or
1c30: 64 65 72 20 74 6f 20 70 72 6f 76 69 64 65 20 70  der to provide p
1c40: 6f 72 74 61 62 69 6c 69 74 79 20 62 65 74 77 65  ortability betwe
1c50: 65 6e 20 50 4f 53 49 58 20 61 6e 64 20 57 69 6e  en POSIX and Win
1c60: 33 32 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  32 operating sys
1c70: 74 65 6d 73 2c 0a 53 51 4c 69 74 65 20 75 73 65  tems,.SQLite use
1c80: 73 20 61 6e 20 61 62 73 74 72 61 63 74 69 6f 6e  s an abstraction
1c90: 20 6c 61 79 65 72 20 74 6f 20 69 6e 74 65 72 66   layer to interf
1ca0: 61 63 65 20 77 69 74 68 20 74 68 65 20 6f 70 65  ace with the ope
1cb0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0a 54  rating system..T
1cc0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
1cd0: 74 68 65 20 4f 53 20 61 62 73 74 72 61 63 74 69  the OS abstracti
1ce0: 6f 6e 20 6c 61 79 65 72 20 69 73 20 64 65 66 69  on layer is defi
1cf0: 6e 65 64 20 69 6e 0a 3c 62 3e 6f 73 2e 68 3c 2f  ned in.<b>os.h</
1d00: 62 3e 2e 20 20 45 61 63 68 20 73 75 70 70 6f 72  b>.  Each suppor
1d10: 74 65 64 20 6f 70 65 72 61 74 69 6e 67 20 73 79  ted operating sy
1d20: 73 74 65 6d 20 68 61 73 20 69 74 73 20 6f 77 6e  stem has its own
1d30: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 3a   implementation:
1d40: 0a 3c 62 3e 6f 73 5f 75 6e 69 78 2e 63 3c 2f 62  .<b>os_unix.c</b
1d50: 3e 20 66 6f 72 20 55 6e 69 78 2c 20 3c 62 3e 6f  > for Unix, <b>o
1d60: 73 5f 77 69 6e 2e 63 3c 2f 62 3e 20 66 6f 72 20  s_win.c</b> for 
1d70: 77 69 6e 64 6f 77 73 2c 20 61 6e 64 20 73 6f 20  windows, and so 
1d80: 66 6f 72 74 68 2e 0a 45 61 63 68 20 6f 66 20 74  forth..Each of t
1d90: 68 65 73 65 20 6f 70 65 72 61 74 69 6e 67 2d 73  hese operating-s
1da0: 70 65 63 69 66 69 63 20 69 6d 70 6c 65 6d 65 6e  pecific implemen
1db0: 74 73 20 74 79 70 69 63 61 6c 6c 79 20 68 61 73  ts typically has
1dc0: 20 69 74 73 20 6f 77 6e 0a 68 65 61 64 65 72 20   its own.header 
1dd0: 66 69 6c 65 3a 20 3c 62 3e 6f 73 5f 75 6e 69 78  file: <b>os_unix
1de0: 2e 68 3c 2f 62 3e 2c 20 3c 62 3e 6f 73 5f 77 69  .h</b>, <b>os_wi
1df0: 6e 2e 68 3c 2f 62 3e 2c 20 65 74 63 2e 0a 3c 2f  n.h</b>, etc..</
1e00: 70 3e 0a 0a 3c 68 33 3e 55 74 69 6c 69 74 69 65  p>..<h3>Utilitie
1e10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 4d 65 6d 6f  s</h3>..<p>.Memo
1e20: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61 6e  ry allocation an
1e30: 64 20 63 61 73 65 6c 65 73 73 20 73 74 72 69 6e  d caseless strin
1e40: 67 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  g comparison rou
1e50: 74 69 6e 65 73 20 61 72 65 20 6c 6f 63 61 74 65  tines are locate
1e60: 64 0a 69 6e 20 3c 62 3e 75 74 69 6c 2e 63 3c 2f  d.in <b>util.c</
1e70: 62 3e 2e 0a 53 79 6d 62 6f 6c 20 74 61 62 6c 65  b>..Symbol table
1e80: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
1e90: 72 73 65 72 20 61 72 65 20 6d 61 69 6e 74 61 69  rser are maintai
1ea0: 6e 65 64 20 62 79 20 68 61 73 68 20 74 61 62 6c  ned by hash tabl
1eb0: 65 73 20 66 6f 75 6e 64 0a 69 6e 20 3c 62 3e 68  es found.in <b>h
1ec0: 61 73 68 2e 63 3c 2f 62 3e 2e 20 20 54 68 65 20  ash.c</b>.  The 
1ed0: 3c 62 3e 75 74 66 2e 63 3c 2f 62 3e 20 73 6f 75  <b>utf.c</b> sou
1ee0: 72 63 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  rce file contain
1ef0: 73 20 55 6e 69 63 6f 64 65 0a 63 6f 6e 76 65 72  s Unicode.conver
1f00: 73 69 6f 6e 20 73 75 62 72 6f 75 74 69 6e 65 73  sion subroutines
1f10: 2e 0a 53 51 4c 69 74 65 20 68 61 73 20 69 74 73  ..SQLite has its
1f20: 20 6f 77 6e 20 70 72 69 76 61 74 65 20 69 6d 70   own private imp
1f30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 3c  lementation of <
1f40: 62 3e 70 72 69 6e 74 66 28 29 3c 2f 62 3e 20 28  b>printf()</b> (
1f50: 77 69 74 68 0a 73 6f 6d 65 20 65 78 74 65 6e 73  with.some extens
1f60: 69 6f 6e 73 29 20 69 6e 20 3c 62 3e 70 72 69 6e  ions) in <b>prin
1f70: 74 66 2e 63 3c 2f 62 3e 20 61 6e 64 20 69 74 73  tf.c</b> and its
1f80: 20 6f 77 6e 20 72 61 6e 64 6f 6d 20 6e 75 6d 62   own random numb
1f90: 65 72 20 67 65 6e 65 72 61 74 6f 72 0a 69 6e 20  er generator.in 
1fa0: 3c 62 3e 72 61 6e 64 6f 6d 2e 63 3c 2f 62 3e 2e  <b>random.c</b>.
1fb0: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 65 73 74 20  .</p>..<h3>Test 
1fc0: 43 6f 64 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 49  Code</h3>..<p>.I
1fd0: 66 20 79 6f 75 20 63 6f 75 6e 74 20 72 65 67 72  f you count regr
1fe0: 65 73 73 69 6f 6e 20 74 65 73 74 20 73 63 72 69  ession test scri
1ff0: 70 74 73 2c 0a 6d 6f 72 65 20 74 68 61 6e 20 68  pts,.more than h
2000: 61 6c 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f  alf the total co
2010: 64 65 20 62 61 73 65 20 6f 66 20 53 51 4c 69 74  de base of SQLit
2020: 65 20 69 73 20 64 65 76 6f 74 65 64 20 74 6f 20  e is devoted to 
2030: 74 65 73 74 69 6e 67 2e 0a 54 68 65 72 65 20 61  testing..There a
2040: 72 65 20 6d 61 6e 79 20 3c 62 3e 61 73 73 65 72  re many <b>asser
2050: 74 28 29 3c 2f 62 3e 20 73 74 61 74 65 6d 65 6e  t()</b> statemen
2060: 74 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 63  ts in the main c
2070: 6f 64 65 20 66 69 6c 65 73 2e 0a 49 6e 20 61 64  ode files..In ad
2080: 64 69 74 69 6f 6e 61 6c 2c 20 74 68 65 20 73 6f  ditional, the so
2090: 75 72 63 65 20 66 69 6c 65 73 20 3c 62 3e 74 65  urce files <b>te
20a0: 73 74 31 2e 63 3c 2f 62 3e 20 74 68 72 6f 75 67  st1.c</b> throug
20b0: 68 20 3c 62 3e 74 65 73 74 35 2e 63 3c 2f 62 3e  h <b>test5.c</b>
20c0: 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 3c  .together with <
20d0: 62 3e 6d 64 35 2e 63 3c 2f 62 3e 20 69 6d 70 6c  b>md5.c</b> impl
20e0: 65 6d 65 6e 74 20 65 78 74 65 6e 73 69 6f 6e 73  ement extensions
20f0: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
2100: 67 0a 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e  g.purposes only.
2110: 20 20 54 68 65 20 3c 62 3e 6f 73 5f 74 65 73 74    The <b>os_test
2120: 2e 63 3c 2f 62 3e 20 62 61 63 6b 65 6e 64 20 69  .c</b> backend i
2130: 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65 64  nterface is used
2140: 20 74 6f 0a 73 69 6d 75 6c 61 74 65 20 70 6f 77   to.simulate pow
2150: 65 72 20 66 61 69 6c 75 72 65 73 20 74 6f 20 76  er failures to v
2160: 65 72 69 66 79 20 74 68 65 20 63 72 61 73 68 2d  erify the crash-
2170: 72 65 63 6f 76 65 72 79 20 6d 65 63 68 61 6e 69  recovery mechani
2180: 73 6d 20 69 6e 0a 74 68 65 20 70 61 67 65 72 2e  sm in.the pager.
2190: 0a 3c 2f 70 3e 0a                                .</p>.