Documentation Source Text

Hex Artifact Content
Login

Artifact 01cf74cc93cf55d79c4960ecf7d8a6497d7fbd8c:


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 66 61 6e 63 79 5f 66 6f 72  itle>.<fancy_for
0030: 6d 61 74 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f 63  mat>..<tcl>.proc
0040: 20 72 65 6e 64 65 72 5f 61 72 63 68 20 7b 68 74   render_arch {ht
0050: 6d 6c 7d 20 7b 0a 20 20 72 65 67 73 75 62 20 2d  ml} {.  regsub -
0060: 61 6c 6c 20 3c 66 69 6c 65 3e 20 24 68 74 6d 6c  all <file> $html
0070: 20 3c 62 3e 20 68 74 6d 6c 0a 20 20 72 65 67 73   <b> html.  regs
0080: 75 62 20 2d 61 6c 6c 20 3c 2f 66 69 6c 65 3e 20  ub -all </file> 
0090: 24 68 74 6d 6c 20 3c 2f 62 3e 20 68 74 6d 6c 0a  $html </b> html.
00a0: 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 68 74    hd_resolve $ht
00b0: 6d 6c 0a 7d 0a 72 65 6e 64 65 72 5f 61 72 63 68  ml.}.render_arch
00c0: 20 7b 0a 3c 68 31 3e 49 6e 74 72 6f 64 75 63 74   {.<h1>Introduct
00d0: 69 6f 6e 3c 2f 68 31 3e 0a 0a 0a 3c 70 3e 54 68  ion</h1>...<p>Th
00e0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00f0: 72 69 62 65 73 20 74 68 65 20 61 72 63 68 69 74  ribes the archit
0100: 65 63 74 75 72 65 20 6f 66 20 74 68 65 20 53 51  ecture of the SQ
0110: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 54 68  Lite library..Th
0120: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  e information he
0130: 72 65 20 69 73 20 75 73 65 66 75 6c 20 74 6f 20  re is useful to 
0140: 74 68 6f 73 65 20 77 68 6f 20 77 61 6e 74 20 74  those who want t
0150: 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 6f 72 0a  o understand or.
0160: 6d 6f 64 69 66 79 20 74 68 65 20 69 6e 6e 65 72  modify the inner
0170: 20 77 6f 72 6b 69 6e 67 73 20 6f 66 20 53 51 4c   workings of SQL
0180: 69 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 64 69 76 20  ite..</p>..<div 
0190: 63 6c 61 73 73 3d 22 72 69 67 68 74 73 69 64 65  class="rightside
01a0: 62 61 72 20 62 6f 72 64 65 72 32 70 78 20 69 6d  bar border2px im
01b0: 67 63 6f 6e 74 61 69 6e 65 72 22 3e 0a 3c 69 6d  gcontainer">.<im
01c0: 67 20 73 72 63 3d 22 69 6d 61 67 65 73 2f 61 72  g src="images/ar
01d0: 63 68 32 2e 67 69 66 22 3e 3c 2f 69 6d 67 3e 0a  ch2.gif"></img>.
01e0: 3c 2f 64 69 76 3e 0a 0a 3c 70 3e 0a 41 20 6e 65  </div>..<p>.A ne
01f0: 61 72 62 79 20 64 69 61 67 72 61 6d 20 73 68 6f  arby diagram sho
0200: 77 73 20 74 68 65 20 6d 61 69 6e 20 63 6f 6d 70  ws the main comp
0210: 6f 6e 65 6e 74 73 20 6f 66 20 53 51 4c 69 74 65  onents of SQLite
0220: 0a 61 6e 64 20 68 6f 77 20 74 68 65 79 20 69 6e  .and how they in
0230: 74 65 72 6f 70 65 72 61 74 65 2e 20 20 54 68 65  teroperate.  The
0240: 20 74 65 78 74 20 62 65 6c 6f 77 0a 70 72 6f 76   text below.prov
0250: 69 64 65 73 20 61 20 6f 76 65 72 76 69 65 77 2e  ides a overview.
0260: 0a 3c 2f 70 3e 0a 0a 3c 68 31 3e 4f 76 65 72 76  .</p>..<h1>Overv
0270: 69 65 77 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c  iew</h1>..<p>SQL
0280: 69 74 65 20 77 6f 72 6b 73 20 62 79 20 63 6f 6d  ite works by com
0290: 70 69 6c 69 6e 67 20 53 51 4c 20 74 65 78 74 20  piling SQL text 
02a0: 69 6e 74 6f 20 5b 62 79 74 65 63 6f 64 65 5d 2c  into [bytecode],
02b0: 20 74 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 74 68   then running.th
02c0: 61 74 20 62 79 74 65 63 6f 64 65 20 75 73 69 6e  at bytecode usin
02d0: 67 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68  g a virtual mach
02e0: 69 6e 65 2e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71  ine...<p>The [sq
02f0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
0300: 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20  ()] and related 
0310: 69 6e 74 65 72 66 61 63 65 73 20 61 63 74 20 61  interfaces act a
0320: 73 20 61 20 63 6f 6d 70 69 6c 65 72 0a 66 6f 72  s a compiler.for
0330: 20 63 6f 6e 76 65 72 74 69 6e 67 20 53 51 4c 20   converting SQL 
0340: 74 65 78 74 20 69 6e 74 6f 20 62 79 74 65 63 6f  text into byteco
0350: 64 65 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  de.  The [sqlite
0360: 33 5f 73 74 6d 74 5d 20 6f 62 6a 65 63 74 20 69  3_stmt] object i
0370: 73 0a 61 20 63 6f 6e 74 61 69 6e 65 72 20 66 6f  s.a container fo
0380: 72 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 63  r a single bytec
0390: 6f 64 65 20 70 72 6f 67 72 61 6d 20 75 73 69 6e  ode program usin
03a0: 67 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 61  g to implement a
03b0: 20 73 69 6e 67 6c 65 0a 53 51 4c 20 73 74 61 74   single.SQL stat
03c0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c  ement.  The [sql
03d0: 69 74 65 33 5f 73 74 65 70 28 29 5d 20 69 6e 74  ite3_step()] int
03e0: 65 72 66 61 63 65 20 70 61 73 73 65 73 20 61 20  erface passes a 
03f0: 62 79 74 65 63 6f 64 65 20 70 72 6f 67 72 61 6d  bytecode program
0400: 0a 69 6e 74 6f 20 74 68 65 20 76 69 72 74 75 61  .into the virtua
0410: 6c 20 6d 61 63 68 69 6e 65 2c 20 61 6e 64 20 72  l machine, and r
0420: 75 6e 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  uns the program 
0430: 75 6e 74 69 6c 20 69 74 20 65 69 74 68 65 72 20  until it either 
0440: 63 6f 6d 70 6c 65 74 65 73 2c 0a 6f 72 20 66 6f  completes,.or fo
0450: 72 6d 73 20 61 20 72 6f 77 20 6f 66 20 72 65 73  rms a row of res
0460: 75 6c 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ult to be return
0470: 65 64 2c 20 6f 72 20 68 69 74 73 20 61 20 66 61  ed, or hits a fa
0480: 74 61 6c 20 65 72 72 6f 72 2c 20 6f 72 20 69 73  tal error, or is
0490: 0a 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  .[sqlite3_interr
04a0: 75 70 74 28 29 7c 69 6e 74 65 72 72 75 70 74 65  upt()|interrupte
04b0: 64 5d 2e 0a 0a 3c 68 31 3e 49 6e 74 65 72 66 61  d]...<h1>Interfa
04c0: 63 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 4d 75 63 68  ce</h1>..<p>Much
04d0: 20 6f 66 20 74 68 65 20 5b 43 2d 6c 61 6e 67 75   of the [C-langu
04e0: 61 67 65 20 49 6e 74 65 72 66 61 63 65 5d 20 69  age Interface] i
04f0: 73 20 66 6f 75 6e 64 20 69 6e 20 73 6f 75 72 63  s found in sourc
0500: 65 0a 66 69 6c 65 73 20 3c 66 69 6c 65 3e 6d 61  e.files <file>ma
0510: 69 6e 2e 63 3c 2f 66 69 6c 65 3e 2c 20 3c 66 69  in.c</file>, <fi
0520: 6c 65 3e 6c 65 67 61 63 79 2e 63 3c 2f 66 69 6c  le>legacy.c</fil
0530: 65 3e 2c 20 61 6e 64 0a 3c 66 69 6c 65 3e 76 64  e>, and.<file>vd
0540: 62 65 61 70 69 2e 63 3c 2f 66 69 6c 65 3e 0a 74  beapi.c</file>.t
0550: 68 6f 75 67 68 20 73 6f 6d 65 20 72 6f 75 74 69  hough some routi
0560: 6e 65 73 20 61 72 65 0a 73 63 61 74 74 65 72 65  nes are.scattere
0570: 64 20 61 62 6f 75 74 20 69 6e 20 6f 74 68 65 72  d about in other
0580: 20 66 69 6c 65 73 20 77 68 65 72 65 20 74 68 65   files where the
0590: 79 20 63 61 6e 20 68 61 76 65 20 61 63 63 65 73  y can have acces
05a0: 73 20 74 6f 20 64 61 74 61 20 0a 73 74 72 75 63  s to data .struc
05b0: 74 75 72 65 73 20 77 69 74 68 20 66 69 6c 65 20  tures with file 
05c0: 73 63 6f 70 65 2e 20 20 0a 54 68 65 20 5b 73 71  scope.  .The [sq
05d0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28  lite3_get_table(
05e0: 29 5d 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d  )] routine is im
05f0: 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 3c 66 69  plemented in <fi
0600: 6c 65 3e 74 61 62 6c 65 2e 63 3c 2f 66 69 6c 65  le>table.c</file
0610: 3e 2e 0a 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  >..The [sqlite3_
0620: 6d 70 72 69 6e 74 66 28 29 5d 20 72 6f 75 74 69  mprintf()] routi
0630: 6e 65 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 3c  ne is found in <
0640: 66 69 6c 65 3e 70 72 69 6e 74 66 2e 63 3c 2f 66  file>printf.c</f
0650: 69 6c 65 3e 2e 0a 54 68 65 20 5b 73 71 6c 69 74  ile>..The [sqlit
0660: 65 33 5f 63 6f 6d 70 6c 65 74 65 28 29 5d 20 69  e3_complete()] i
0670: 6e 74 65 72 66 61 63 65 20 69 73 20 69 6e 20 3c  nterface is in <
0680: 66 69 6c 65 3e 74 6f 6b 65 6e 69 7a 65 2e 63 3c  file>tokenize.c<
0690: 2f 66 69 6c 65 3e 2e 0a 54 68 65 20 5b 54 43 4c  /file>..The [TCL
06a0: 20 49 6e 74 65 72 66 61 63 65 5d 20 69 73 20 69   Interface] is i
06b0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 3c 66  mplemented by <f
06c0: 69 6c 65 3e 74 63 6c 73 71 6c 69 74 65 2e 63 3c  ile>tclsqlite.c<
06d0: 2f 66 69 6c 65 3e 2e 0a 0a 3c 70 3e 54 6f 20 61  /file>...<p>To a
06e0: 76 6f 69 64 20 6e 61 6d 65 20 63 6f 6c 6c 69 73  void name collis
06f0: 69 6f 6e 73 2c 20 61 6c 6c 20 65 78 74 65 72 6e  ions, all extern
0700: 61 6c 0a 73 79 6d 62 6f 6c 73 20 69 6e 20 74 68  al.symbols in th
0710: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
0720: 20 62 65 67 69 6e 20 77 69 74 68 20 74 68 65 20   begin with the 
0730: 70 72 65 66 69 78 20 3c 62 3e 73 71 6c 69 74 65  prefix <b>sqlite
0740: 33 3c 2f 62 3e 2e 0a 54 68 6f 73 65 20 73 79 6d  3</b>..Those sym
0750: 62 6f 6c 73 20 74 68 61 74 20 61 72 65 20 69 6e  bols that are in
0760: 74 65 6e 64 65 64 20 66 6f 72 20 65 78 74 65 72  tended for exter
0770: 6e 61 6c 20 75 73 65 20 28 69 6e 20 6f 74 68 65  nal use (in othe
0780: 72 20 77 6f 72 64 73 2c 0a 74 68 6f 73 65 20 73  r words,.those s
0790: 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 66 6f 72  ymbols which for
07a0: 6d 20 74 68 65 20 41 50 49 20 66 6f 72 20 53 51  m the API for SQ
07b0: 4c 69 74 65 29 20 61 64 64 20 61 6e 20 75 6e 64  Lite) add an und
07c0: 65 72 73 63 6f 72 65 2c 20 61 6e 64 0a 74 68 75  erscore, and.thu
07d0: 73 20 62 65 67 69 6e 20 77 69 74 68 20 3c 62 3e  s begin with <b>
07e0: 73 71 6c 69 74 65 33 5f 3c 2f 62 3e 2e 20 20 45  sqlite3_</b>.  E
07f0: 78 74 65 6e 73 69 6f 6e 20 41 50 49 73 20 73 6f  xtension APIs so
0800: 6d 65 74 69 6d 65 73 20 61 64 64 20 74 68 65 0a  metimes add the.
0810: 65 78 74 65 6e 73 69 6f 6e 20 6e 61 6d 65 20 70  extension name p
0820: 72 69 6f 72 20 74 6f 20 74 68 65 20 75 6e 64 65  rior to the unde
0830: 72 73 63 6f 72 65 3b 20 66 6f 72 20 65 78 61 6d  rscore; for exam
0840: 70 6c 65 3a 0a 3c 62 3e 73 71 6c 69 74 65 33 72  ple:.<b>sqlite3r
0850: 62 75 5f 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71  bu_</b> or <b>sq
0860: 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 3c 2f 62  lite3session_</b
0870: 3e 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 54 6f 6b 65  >.</p>..<h1>Toke
0880: 6e 69 7a 65 72 3c 2f 68 31 3e 0a 0a 3c 70 3e 57  nizer</h1>..<p>W
0890: 68 65 6e 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  hen a string con
08a0: 74 61 69 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  taining SQL stat
08b0: 65 6d 65 6e 74 73 20 69 73 20 74 6f 20 62 65 20  ements is to be 
08c0: 65 76 61 6c 75 61 74 65 64 20 69 74 20 69 73 0a  evaluated it is.
08d0: 66 69 72 73 74 20 73 65 6e 74 20 74 6f 20 74 68  first sent to th
08e0: 65 20 74 6f 6b 65 6e 69 7a 65 72 2e 0a 54 68 65  e tokenizer..The
08f0: 20 74 6f 6b 65 6e 69 7a 65 72 20 62 72 65 61 6b   tokenizer break
0900: 73 0a 74 68 65 20 53 51 4c 20 74 65 78 74 20 69  s.the SQL text i
0910: 6e 74 6f 20 74 6f 6b 65 6e 73 20 61 6e 64 20 68  nto tokens and h
0920: 61 6e 64 73 20 74 68 6f 73 65 20 74 6f 6b 65 6e  ands those token
0930: 73 0a 6f 6e 65 20 62 79 20 6f 6e 65 20 74 6f 20  s.one by one to 
0940: 74 68 65 20 70 61 72 73 65 72 2e 20 20 54 68 65  the parser.  The
0950: 20 74 6f 6b 65 6e 69 7a 65 72 20 69 73 20 68 61   tokenizer is ha
0960: 6e 64 2d 63 6f 64 65 64 20 69 6e 20 0a 74 68 65  nd-coded in .the
0970: 20 66 69 6c 65 20 3c 66 69 6c 65 3e 74 6f 6b 65   file <file>toke
0980: 6e 69 7a 65 2e 63 3c 2f 62 3e 2e 0a 0a 3c 70 3e  nize.c</b>...<p>
0990: 4e 6f 74 65 20 74 68 61 74 20 69 6e 20 74 68 69  Note that in thi
09a0: 73 20 64 65 73 69 67 6e 2c 20 74 68 65 20 74 6f  s design, the to
09b0: 6b 65 6e 69 7a 65 72 20 63 61 6c 6c 73 20 74 68  kenizer calls th
09c0: 65 20 70 61 72 73 65 72 2e 20 20 50 65 6f 70 6c  e parser.  Peopl
09d0: 65 0a 77 68 6f 20 61 72 65 20 66 61 6d 69 6c 69  e.who are famili
09e0: 61 72 20 77 69 74 68 20 59 41 43 43 20 61 6e 64  ar with YACC and
09f0: 20 42 49 53 4f 4e 20 6d 61 79 20 62 65 20 61 63   BISON may be ac
0a00: 63 75 73 74 6f 6d 65 64 20 74 6f 20 64 6f 69 6e  customed to doin
0a10: 67 20 74 68 69 6e 67 73 20 74 68 65 0a 6f 74 68  g things the.oth
0a20: 65 72 20 77 61 79 20 61 72 6f 75 6e 64 20 26 6d  er way around &m
0a30: 64 61 73 68 3b 20 68 61 76 69 6e 67 20 74 68 65  dash; having the
0a40: 20 70 61 72 73 65 72 20 63 61 6c 6c 20 74 68 65   parser call the
0a50: 20 74 6f 6b 65 6e 69 7a 65 72 2e 20 20 48 61 76   tokenizer.  Hav
0a60: 69 6e 67 0a 74 68 65 20 74 6f 6b 65 6e 69 7a 65  ing.the tokenize
0a70: 72 20 63 61 6c 6c 20 74 68 65 20 70 61 72 73 65  r call the parse
0a80: 72 20 69 73 20 62 65 74 74 65 72 2c 20 74 68 6f  r is better, tho
0a90: 75 67 68 2c 20 62 65 63 61 75 73 65 20 69 74 20  ugh, because it 
0aa0: 63 61 6e 20 62 65 20 6d 61 64 65 0a 74 68 72 65  can be made.thre
0ab0: 61 64 73 61 66 65 20 61 6e 64 20 69 74 20 72 75  adsafe and it ru
0ac0: 6e 73 20 66 61 73 74 65 72 2e 3c 2f 70 3e 0a 0a  ns faster.</p>..
0ad0: 3c 68 31 3e 50 61 72 73 65 72 3c 2f 68 31 3e 0a  <h1>Parser</h1>.
0ae0: 0a 3c 70 3e 54 68 65 20 70 61 72 73 65 72 20 61  .<p>The parser a
0af0: 73 73 69 67 6e 73 20 6d 65 61 6e 69 6e 67 20 74  ssigns meaning t
0b00: 6f 20 74 6f 6b 65 6e 73 20 62 61 73 65 64 20 6f  o tokens based o
0b10: 6e 0a 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2e  n.their context.
0b20: 20 20 54 68 65 20 70 61 72 73 65 72 20 66 6f 72    The parser for
0b30: 20 53 51 4c 69 74 65 20 69 73 20 67 65 6e 65 72   SQLite is gener
0b40: 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 0a 3c  ated using the.<
0b50: 61 20 68 72 65 66 3d 22 2e 2f 6c 65 6d 6f 6e 2e  a href="./lemon.
0b60: 68 74 6d 6c 22 3e 4c 65 6d 6f 6e 3c 2f 61 3e 20  html">Lemon</a> 
0b70: 4c 41 4c 52 28 31 29 20 70 61 72 73 65 72 20 67  LALR(1) parser g
0b80: 65 6e 65 72 61 74 6f 72 2e 0a 4c 65 6d 6f 6e 20  enerator..Lemon 
0b90: 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 6a 6f  does the same jo
0ba0: 62 20 61 73 20 59 41 43 43 2f 42 49 53 4f 4e 2c  b as YACC/BISON,
0bb0: 20 62 75 74 20 69 74 20 75 73 65 73 0a 61 20 64   but it uses.a d
0bc0: 69 66 66 65 72 65 6e 74 20 69 6e 70 75 74 20 73  ifferent input s
0bd0: 79 6e 74 61 78 20 77 68 69 63 68 20 69 73 20 6c  yntax which is l
0be0: 65 73 73 20 65 72 72 6f 72 2d 70 72 6f 6e 65 2e  ess error-prone.
0bf0: 0a 4c 65 6d 6f 6e 20 61 6c 73 6f 20 67 65 6e 65  .Lemon also gene
0c00: 72 61 74 65 73 20 61 20 70 61 72 73 65 72 20 77  rates a parser w
0c10: 68 69 63 68 20 69 73 20 72 65 65 6e 74 72 61 6e  hich is reentran
0c20: 74 20 61 6e 64 20 74 68 72 65 61 64 2d 73 61 66  t and thread-saf
0c30: 65 2e 0a 41 6e 64 20 4c 65 6d 6f 6e 20 64 65 66  e..And Lemon def
0c40: 69 6e 65 73 20 74 68 65 20 63 6f 6e 63 65 70 74  ines the concept
0c50: 20 6f 66 20 61 20 6e 6f 6e 2d 74 65 72 6d 69 6e   of a non-termin
0c60: 61 6c 20 64 65 73 74 72 75 63 74 6f 72 20 73 6f  al destructor so
0c70: 0a 74 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f  .that it does no
0c80: 74 20 6c 65 61 6b 20 6d 65 6d 6f 72 79 20 77 68  t leak memory wh
0c90: 65 6e 20 73 79 6e 74 61 78 20 65 72 72 6f 72 73  en syntax errors
0ca0: 20 61 72 65 20 65 6e 63 6f 75 6e 74 65 72 65 64   are encountered
0cb0: 2e 0a 54 68 65 20 67 72 61 6d 6d 61 72 20 66 69  ..The grammar fi
0cc0: 6c 65 20 74 68 61 74 20 64 72 69 76 65 73 20 4c  le that drives L
0cd0: 65 6d 6f 6e 20 61 6e 64 20 74 68 61 74 20 64 65  emon and that de
0ce0: 66 69 6e 65 73 20 74 68 65 20 53 51 4c 20 6c 61  fines the SQL la
0cf0: 6e 67 75 61 67 65 0a 74 68 61 74 20 53 51 4c 69  nguage.that SQLi
0d00: 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 69  te understands i
0d10: 73 20 66 6f 75 6e 64 20 69 6e 20 3c 66 69 6c 65  s found in <file
0d20: 3e 70 61 72 73 65 2e 79 3c 2f 66 69 6c 65 3e 2e  >parse.y</file>.
0d30: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 0a 4c 65 6d  ..<p>Because.Lem
0d40: 6f 6e 20 69 73 20 61 20 70 72 6f 67 72 61 6d 20  on is a program 
0d50: 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f 75  not normally fou
0d60: 6e 64 20 6f 6e 20 64 65 76 65 6c 6f 70 6d 65 6e  nd on developmen
0d70: 74 20 6d 61 63 68 69 6e 65 73 2c 20 74 68 65 0a  t machines, the.
0d80: 63 6f 6d 70 6c 65 74 65 20 73 6f 75 72 63 65 20  complete source 
0d90: 63 6f 64 65 20 74 6f 20 4c 65 6d 6f 6e 20 28 6a  code to Lemon (j
0da0: 75 73 74 20 6f 6e 65 20 43 20 66 69 6c 65 29 20  ust one C file) 
0db0: 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
0dc0: 68 65 0a 53 51 4c 69 74 65 20 64 69 73 74 72 69  he.SQLite distri
0dd0: 62 75 74 69 6f 6e 20 69 6e 20 74 68 65 20 22 74  bution in the "t
0de0: 6f 6f 6c 22 20 73 75 62 64 69 72 65 63 74 6f 72  ool" subdirector
0df0: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 31 3e 43 6f 64  y..</p>..<h1>Cod
0e00: 65 20 47 65 6e 65 72 61 74 6f 72 3c 2f 68 31 3e  e Generator</h1>
0e10: 0a 0a 3c 70 3e 41 66 74 65 72 20 74 68 65 20 70  ..<p>After the p
0e20: 61 72 73 65 72 20 61 73 73 65 6d 62 6c 65 73 20  arser assembles 
0e30: 74 6f 6b 65 6e 73 20 69 6e 74 6f 20 61 20 70 61  tokens into a pa
0e40: 72 73 65 20 74 72 65 65 2c 0a 74 68 65 20 63 6f  rse tree,.the co
0e50: 64 65 20 67 65 6e 65 72 61 74 6f 72 20 72 75 6e  de generator run
0e60: 73 20 74 6f 20 61 6e 61 6c 79 7a 65 20 74 68 65  s to analyze the
0e70: 20 70 61 72 73 65 72 20 74 72 65 65 20 61 6e 64   parser tree and
0e80: 20 67 65 6e 65 72 61 74 65 0a 5b 62 79 74 65 63   generate.[bytec
0e90: 6f 64 65 5d 20 74 68 61 74 20 70 65 72 66 6f 72  ode] that perfor
0ea0: 6d 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 74  ms the work of t
0eb0: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
0ec0: 2e 0a 54 68 65 20 5b 70 72 65 70 61 72 65 64 20  ..The [prepared 
0ed0: 73 74 61 74 65 6d 65 6e 74 5d 20 6f 62 6a 65 63  statement] objec
0ee0: 74 20 69 73 20 61 20 63 6f 6e 74 61 69 6e 65 72  t is a container
0ef0: 20 66 6f 72 20 74 68 69 73 20 62 79 74 65 63 6f   for this byteco
0f00: 64 65 2e 0a 54 68 65 72 65 20 61 72 65 20 6d 61  de..There are ma
0f10: 6e 79 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20  ny files in the 
0f20: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2c 20  code generator, 
0f30: 69 6e 63 6c 75 64 69 6e 67 3a 0a 3c 66 69 6c 65  including:.<file
0f40: 3e 61 74 74 61 63 68 2e 63 3c 2f 66 69 6c 65 3e  >attach.c</file>
0f50: 2c 0a 3c 66 69 6c 65 3e 61 75 74 68 2e 63 3c 2f  ,.<file>auth.c</
0f60: 66 69 6c 65 3e 2c 0a 3c 66 69 6c 65 3e 62 75 69  file>,.<file>bui
0f70: 6c 64 2e 63 3c 2f 66 69 6c 65 3e 2c 0a 3c 66 69  ld.c</file>,.<fi
0f80: 6c 65 3e 64 65 6c 65 74 65 2e 63 3c 2f 66 69 6c  le>delete.c</fil
0f90: 65 3e 2c 0a 3c 66 69 6c 65 3e 65 78 70 72 2e 63  e>,.<file>expr.c
0fa0: 3c 2f 66 69 6c 65 3e 2c 0a 3c 66 69 6c 65 3e 69  </file>,.<file>i
0fb0: 6e 73 65 72 74 2e 63 3c 2f 66 69 6c 65 3e 2c 0a  nsert.c</file>,.
0fc0: 3c 66 69 6c 65 3e 70 72 61 67 6d 61 2e 63 3c 2f  <file>pragma.c</
0fd0: 66 69 6c 65 3e 2c 0a 3c 66 69 6c 65 3e 73 65 6c  file>,.<file>sel
0fe0: 65 63 74 2e 63 3c 2f 66 69 6c 65 3e 2c 0a 3c 66  ect.c</file>,.<f
0ff0: 69 6c 65 3e 74 72 69 67 67 65 72 2e 63 3c 2f 66  ile>trigger.c</f
1000: 69 6c 65 3e 2c 0a 3c 66 69 6c 65 3e 75 70 64 61  ile>,.<file>upda
1010: 74 65 2e 63 3c 2f 66 69 6c 65 3e 2c 0a 3c 66 69  te.c</file>,.<fi
1020: 6c 65 3e 76 61 63 75 75 6d 2e 63 3c 2f 66 69 6c  le>vacuum.c</fil
1030: 65 3e 2c 0a 3c 66 69 6c 65 3e 77 68 65 72 65 2e  e>,.<file>where.
1040: 63 3c 2f 66 69 6c 65 3e 2c 0a 3c 66 69 6c 65 3e  c</file>,.<file>
1050: 77 68 65 72 65 63 6f 64 65 2e 63 3c 2f 66 69 6c  wherecode.c</fil
1060: 65 3e 2c 20 61 6e 64 0a 3c 66 69 6c 65 3e 77 68  e>, and.<file>wh
1070: 65 72 65 65 78 70 72 2e 63 3c 2f 66 69 6c 65 3e  ereexpr.c</file>
1080: 2e 0a 49 6e 20 74 68 65 73 65 20 66 69 6c 65 73  ..In these files
1090: 20 69 73 20 77 68 65 72 65 20 6d 6f 73 74 20 6f   is where most o
10a0: 66 20 74 68 65 20 73 65 72 69 6f 75 73 20 6d 61  f the serious ma
10b0: 67 69 63 20 68 61 70 70 65 6e 73 2e 0a 3c 66 69  gic happens..<fi
10c0: 6c 65 3e 65 78 70 72 2e 63 3c 2f 66 69 6c 65 3e  le>expr.c</file>
10d0: 20 68 61 6e 64 6c 65 73 20 63 6f 64 65 20 67 65   handles code ge
10e0: 6e 65 72 61 74 69 6f 6e 20 66 6f 72 20 65 78 70  neration for exp
10f0: 72 65 73 73 69 6f 6e 73 2e 0a 3c 62 3e 77 68 65  ressions..<b>whe
1100: 72 65 2a 2e 63 3c 2f 62 3e 20 68 61 6e 64 6c 65  re*.c</b> handle
1110: 73 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  s code generatio
1120: 6e 20 66 6f 72 20 57 48 45 52 45 20 63 6c 61 75  n for WHERE clau
1130: 73 65 73 20 6f 6e 0a 53 45 4c 45 43 54 2c 20 55  ses on.SELECT, U
1140: 50 44 41 54 45 20 61 6e 64 20 44 45 4c 45 54 45  PDATE and DELETE
1150: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
1160: 65 20 66 69 6c 65 73 20 3c 66 69 6c 65 3e 61 74  e files <file>at
1170: 74 61 63 68 2e 63 3c 2f 66 69 6c 65 3e 2c 0a 3c  tach.c</file>,.<
1180: 66 69 6c 65 3e 64 65 6c 65 74 65 2e 63 3c 2f 66  file>delete.c</f
1190: 69 6c 65 3e 2c 20 3c 66 69 6c 65 3e 69 6e 73 65  ile>, <file>inse
11a0: 72 74 2e 63 3c 2f 66 69 6c 65 3e 2c 20 3c 66 69  rt.c</file>, <fi
11b0: 6c 65 3e 73 65 6c 65 63 74 2e 63 3c 2f 66 69 6c  le>select.c</fil
11c0: 65 3e 2c 20 0a 3c 66 69 6c 65 3e 74 72 69 67 67  e>, .<file>trigg
11d0: 65 72 2e 63 3c 2f 66 69 6c 65 3e 0a 3c 66 69 6c  er.c</file>.<fil
11e0: 65 3e 75 70 64 61 74 65 2e 63 3c 2f 66 69 6c 65  e>update.c</file
11f0: 3e 2c 20 61 6e 64 20 3c 66 69 6c 65 3e 76 61 63  >, and <file>vac
1200: 75 75 6d 2e 63 3c 2f 66 69 6c 65 3e 20 68 61 6e  uum.c</file> han
1210: 64 6c 65 20 74 68 65 20 63 6f 64 65 20 67 65 6e  dle the code gen
1220: 65 72 61 74 69 6f 6e 0a 66 6f 72 20 53 51 4c 20  eration.for SQL 
1230: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
1240: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 73 2e 20  the same names. 
1250: 20 28 45 61 63 68 20 6f 66 20 74 68 65 73 65 20   (Each of these 
1260: 66 69 6c 65 73 20 63 61 6c 6c 73 20 72 6f 75 74  files calls rout
1270: 69 6e 65 73 0a 69 6e 20 3c 66 69 6c 65 3e 65 78  ines.in <file>ex
1280: 70 72 2e 63 3c 2f 66 69 6c 65 3e 20 61 6e 64 20  pr.c</file> and 
1290: 3c 66 69 6c 65 3e 77 68 65 72 65 2e 63 3c 2f 66  <file>where.c</f
12a0: 69 6c 65 3e 20 61 73 20 6e 65 63 65 73 73 61 72  ile> as necessar
12b0: 79 2e 29 20 20 41 6c 6c 20 6f 74 68 65 72 0a 53  y.)  All other.S
12c0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  QL statements ar
12d0: 65 20 63 6f 64 65 64 20 6f 75 74 20 6f 66 20 3c  e coded out of <
12e0: 66 69 6c 65 3e 62 75 69 6c 64 2e 63 3c 2f 66 69  file>build.c</fi
12f0: 6c 65 3e 2e 0a 54 68 65 20 3c 66 69 6c 65 3e 61  le>..The <file>a
1300: 75 74 68 2e 63 3c 2f 66 69 6c 65 3e 20 66 69 6c  uth.c</file> fil
1310: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  e implements the
1320: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f   functionality o
1330: 66 0a 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  f.[sqlite3_set_a
1340: 75 74 68 6f 72 69 7a 65 72 28 29 5d 2e 3c 2f 70  uthorizer()].</p
1350: 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 64 65 20 67  >..<p>The code g
1360: 65 6e 65 72 61 74 6f 72 2c 20 61 6e 64 20 65 73  enerator, and es
1370: 70 65 63 69 61 6c 6c 79 20 74 68 65 20 6c 6f 67  pecially the log
1380: 69 63 20 69 6e 20 3c 62 3e 77 68 65 72 65 2a 2e  ic in <b>where*.
1390: 63 3c 2f 62 3e 0a 61 6e 64 20 69 6e 20 3c 66 69  c</b>.and in <fi
13a0: 6c 65 3e 73 65 6c 65 63 74 2e 63 3c 2f 66 69 6c  le>select.c</fil
13b0: 65 3e 2c 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  e>, is sometimes
13c0: 20 63 61 6c 6c 65 64 20 74 68 65 0a 5b 71 75 65   called the.[que
13d0: 72 79 20 70 6c 61 6e 6e 65 72 5d 2e 20 20 46 6f  ry planner].  Fo
13e0: 72 20 61 6e 79 20 70 61 72 74 69 63 75 6c 61 72  r any particular
13f0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20   SQL statement, 
1400: 74 68 65 72 65 20 6d 69 67 68 74 20 62 65 0a 68  there might be.h
1410: 75 6e 64 72 65 64 73 2c 20 74 68 6f 75 73 61 6e  undreds, thousan
1420: 64 73 2c 20 6f 72 20 6d 69 6c 6c 69 6f 6e 73 20  ds, or millions 
1430: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 61 6c 67  of different alg
1440: 6f 72 69 74 68 6d 73 20 74 6f 20 63 6f 6d 70 75  orithms to compu
1450: 74 65 0a 74 68 65 20 61 6e 73 77 65 72 2e 20 20  te.the answer.  
1460: 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  The query planne
1470: 72 20 69 73 20 61 6e 20 41 49 20 74 68 61 74 20  r is an AI that 
1480: 73 74 72 69 76 65 73 20 74 6f 20 73 65 6c 65 63  strives to selec
1490: 74 20 74 68 65 0a 62 65 73 74 20 61 6c 67 6f 72  t the.best algor
14a0: 69 74 68 6d 20 66 72 6f 6d 20 74 68 65 73 65 20  ithm from these 
14b0: 6d 69 6c 6c 69 6f 6e 73 20 6f 66 20 63 68 6f 69  millions of choi
14c0: 63 65 73 2e 0a 0a 3c 68 31 3e 42 79 74 65 63 6f  ces...<h1>Byteco
14d0: 64 65 20 45 6e 67 69 6e 65 3c 2f 68 31 3e 0a 0a  de Engine</h1>..
14e0: 3c 70 3e 54 68 65 20 5b 62 79 74 65 63 6f 64 65  <p>The [bytecode
14f0: 5d 20 70 72 6f 67 72 61 6d 20 63 72 65 61 74 65  ] program create
1500: 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1510: 6e 65 72 61 74 6f 72 20 69 73 20 72 75 6e 20 62  nerator is run b
1520: 79 0a 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68  y.a virtual mach
1530: 69 6e 65 2e 0a 0a 3c 70 3e 54 68 65 20 76 69 72  ine...<p>The vir
1540: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 74 73  tual machine its
1550: 65 6c 66 20 69 73 20 65 6e 74 69 72 65 6c 79 20  elf is entirely 
1560: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 20 73  contained in a s
1570: 69 6e 67 6c 65 0a 73 6f 75 72 63 65 20 66 69 6c  ingle.source fil
1580: 65 20 3c 66 69 6c 65 3e 76 64 62 65 2e 63 3c 2f  e <file>vdbe.c</
1590: 66 69 6c 65 3e 2e 20 20 54 68 65 0a 3c 66 69 6c  file>.  The.<fil
15a0: 65 3e 76 64 62 65 2e 68 3c 2f 66 69 6c 65 3e 20  e>vdbe.h</file> 
15b0: 68 65 61 64 65 72 20 66 69 6c 65 20 64 65 66 69  header file defi
15c0: 6e 65 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65  nes an interface
15d0: 0a 62 65 74 77 65 65 6e 20 74 68 65 20 76 69 72  .between the vir
15e0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 61 6e 64  tual machine and
15f0: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
1600: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
1610: 61 6e 64 0a 3c 66 69 6c 65 3e 76 64 62 65 49 6e  and.<file>vdbeIn
1620: 74 2e 68 3c 2f 66 69 6c 65 3e 20 77 68 69 63 68  t.h</file> which
1630: 20 64 65 66 69 6e 65 73 20 73 74 72 75 63 74 75   defines structu
1640: 72 65 73 20 61 6e 64 20 69 6e 74 65 72 66 61 63  res and interfac
1650: 65 73 20 74 68 61 74 0a 61 72 65 20 70 72 69 76  es that.are priv
1660: 61 74 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ate the virtual 
1670: 6d 61 63 68 69 6e 65 20 69 74 73 65 6c 66 2e 0a  machine itself..
1680: 56 61 72 69 6f 75 73 20 6f 74 68 65 72 20 3c 62  Various other <b
1690: 3e 76 64 62 65 2a 2e 63 3c 2f 62 3e 20 66 69 6c  >vdbe*.c</b> fil
16a0: 65 73 20 61 72 65 20 68 65 6c 70 65 72 73 20 74  es are helpers t
16b0: 6f 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  o the virtual ma
16c0: 63 68 69 6e 65 2e 0a 54 68 65 20 3c 66 69 6c 65  chine..The <file
16d0: 3e 76 64 62 65 61 75 78 2e 63 3c 2f 66 69 6c 65  >vdbeaux.c</file
16e0: 3e 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20  > file contains 
16f0: 75 74 69 6c 69 74 69 65 73 20 75 73 65 64 20 62  utilities used b
1700: 79 20 74 68 65 20 76 69 72 74 75 61 6c 0a 6d 61  y the virtual.ma
1710: 63 68 69 6e 65 20 61 6e 64 20 69 6e 74 65 72 66  chine and interf
1720: 61 63 65 20 6d 6f 64 75 6c 65 73 20 75 73 65 64  ace modules used
1730: 20 62 79 20 74 68 65 20 72 65 73 74 20 6f 66 20   by the rest of 
1740: 74 68 65 20 6c 69 62 72 61 72 79 20 74 6f 0a 63  the library to.c
1750: 6f 6e 73 74 72 75 63 74 20 56 4d 20 70 72 6f 67  onstruct VM prog
1760: 72 61 6d 73 2e 20 20 54 68 65 20 3c 66 69 6c 65  rams.  The <file
1770: 3e 76 64 62 65 61 70 69 2e 63 3c 2f 66 69 6c 65  >vdbeapi.c</file
1780: 3e 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20  > file contains 
1790: 65 78 74 65 72 6e 61 6c 0a 69 6e 74 65 72 66 61  external.interfa
17a0: 63 65 73 20 74 6f 20 74 68 65 20 76 69 72 74 75  ces to the virtu
17b0: 61 6c 20 6d 61 63 68 69 6e 65 20 73 75 63 68 20  al machine such 
17c0: 61 73 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33  as the .[sqlite3
17d0: 5f 62 69 6e 64 5f 69 6e 74 28 29 5d 20 61 6e 64  _bind_int()] and
17e0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
17f0: 5d 2e 20 20 49 6e 64 69 76 69 64 75 61 6c 20 76  ].  Individual v
1800: 61 6c 75 65 73 0a 28 73 74 72 69 6e 67 73 2c 20  alues.(strings, 
1810: 69 6e 74 65 67 65 72 2c 20 66 6c 6f 61 74 69 6e  integer, floatin
1820: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c  g point numbers,
1830: 20 61 6e 64 20 42 4c 4f 42 73 29 20 61 72 65 20   and BLOBs) are 
1840: 73 74 6f 72 65 64 0a 69 6e 20 61 6e 20 69 6e 74  stored.in an int
1850: 65 72 6e 61 6c 20 6f 62 6a 65 63 74 20 6e 61 6d  ernal object nam
1860: 65 64 20 22 4d 65 6d 22 20 77 68 69 63 68 20 69  ed "Mem" which i
1870: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
1880: 0a 3c 66 69 6c 65 3e 76 64 62 65 6d 65 6d 2e 63  .<file>vdbemem.c
1890: 3c 2f 66 69 6c 65 3e 2e 3c 2f 70 3e 0a 0a 3c 70  </file>.</p>..<p
18a0: 3e 0a 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65  >.SQLite impleme
18b0: 6e 74 73 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  nts SQL function
18c0: 73 20 75 73 69 6e 67 20 63 61 6c 6c 62 61 63 6b  s using callback
18d0: 73 20 74 6f 20 43 2d 6c 61 6e 67 75 61 67 65 20  s to C-language 
18e0: 72 6f 75 74 69 6e 65 73 2e 0a 45 76 65 6e 20 74  routines..Even t
18f0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 51 4c 20  he built-in SQL 
1900: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6d  functions are im
1910: 70 6c 65 6d 65 6e 74 65 64 20 74 68 69 73 20 77  plemented this w
1920: 61 79 2e 20 20 4d 6f 73 74 20 6f 66 0a 74 68 65  ay.  Most of.the
1930: 20 62 75 69 6c 74 2d 69 6e 20 53 51 4c 20 66 75   built-in SQL fu
1940: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 5b 61 62  nctions (ex: [ab
1950: 73 28 29 5d 2c 20 5b 63 6f 75 6e 74 28 29 5d 2c  s()], [count()],
1960: 0a 5b 73 75 62 73 74 72 28 29 5d 2c 20 61 6e 64  .[substr()], and
1970: 20 73 6f 20 66 6f 72 74 68 29 20 63 61 6e 20 62   so forth) can b
1980: 65 20 66 6f 75 6e 64 20 69 6e 20 3c 66 69 6c 65  e found in <file
1990: 3e 66 75 6e 63 2e 63 3c 2f 66 69 6c 65 3e 20 73  >func.c</file> s
19a0: 6f 75 72 63 65 0a 66 69 6c 65 2e 0a 44 61 74 65  ource.file..Date
19b0: 20 61 6e 64 20 74 69 6d 65 20 63 6f 6e 76 65 72   and time conver
19c0: 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  sion functions a
19d0: 72 65 20 66 6f 75 6e 64 20 69 6e 20 3c 66 69 6c  re found in <fil
19e0: 65 3e 64 61 74 65 2e 63 3c 2f 66 69 6c 65 3e 2e  e>date.c</file>.
19f0: 0a 53 6f 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20  .Some functions 
1a00: 73 75 63 68 20 61 73 20 5b 63 6f 61 6c 65 73 63  such as [coalesc
1a10: 65 28 29 5d 20 61 6e 64 20 5b 74 79 70 65 6f 66  e()] and [typeof
1a20: 28 29 5d 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e  ()] are implemen
1a30: 74 65 64 0a 61 73 20 62 79 74 65 63 6f 64 65 20  ted.as bytecode 
1a40: 64 69 72 65 63 74 6c 79 20 62 79 20 74 68 65 20  directly by the 
1a50: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
1a60: 3c 2f 70 3e 0a 0a 3c 68 31 3e 42 2d 54 72 65 65  </p>..<h1>B-Tree
1a70: 3c 2f 68 31 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c  </h1>..<p>An SQL
1a80: 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73 20  ite database is 
1a90: 6d 61 69 6e 74 61 69 6e 65 64 20 6f 6e 20 64 69  maintained on di
1aa0: 73 6b 20 75 73 69 6e 67 20 61 20 42 2d 74 72 65  sk using a B-tre
1ab0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1ac0: 0a 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 3c 66  .found in the <f
1ad0: 69 6c 65 3e 62 74 72 65 65 2e 63 3c 2f 66 69 6c  ile>btree.c</fil
1ae0: 65 3e 20 73 6f 75 72 63 65 20 66 69 6c 65 2e 20  e> source file. 
1af0: 20 41 20 73 65 70 61 72 61 74 65 20 42 2d 74 72   A separate B-tr
1b00: 65 65 20 69 73 20 75 73 65 64 20 66 6f 72 0a 65  ee is used for.e
1b10: 61 63 68 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ach table and in
1b20: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
1b30: 61 73 65 2e 20 20 41 6c 6c 20 42 2d 74 72 65 65  ase.  All B-tree
1b40: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1b50: 74 68 65 0a 73 61 6d 65 20 64 69 73 6b 20 66 69  the.same disk fi
1b60: 6c 65 2e 20 20 54 68 65 20 5b 66 69 6c 65 20 66  le.  The [file f
1b70: 6f 72 6d 61 74 5d 20 64 65 74 61 69 6c 73 20 61  ormat] details a
1b80: 72 65 20 73 74 61 62 6c 65 20 61 6e 64 20 77 65  re stable and we
1b90: 6c 6c 2d 64 65 66 69 6e 65 64 20 61 6e 64 0a 61  ll-defined and.a
1ba0: 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  re guaranteed to
1bb0: 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 20 6d   be compatible m
1bc0: 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2e 3c 2f  oving forward.</
1bd0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 74 65 72  p>..<p>The inter
1be0: 66 61 63 65 20 74 6f 20 74 68 65 20 42 2d 74 72  face to the B-tr
1bf0: 65 65 20 73 75 62 73 79 73 74 65 6d 20 61 6e 64  ee subsystem and
1c00: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
1c10: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a   SQLite library.
1c20: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 74 68  is defined by th
1c30: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 3c 66  e header file <f
1c40: 69 6c 65 3e 62 74 72 65 65 2e 68 3c 2f 66 69 6c  ile>btree.h</fil
1c50: 65 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 68 31 3e 50 61  e>..</p>..<h1>Pa
1c60: 67 65 20 43 61 63 68 65 3c 2f 68 31 3e 0a 0a 3c  ge Cache</h1>..<
1c70: 70 3e 54 68 65 20 42 2d 74 72 65 65 20 6d 6f 64  p>The B-tree mod
1c80: 75 6c 65 20 72 65 71 75 65 73 74 73 20 69 6e 66  ule requests inf
1c90: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
1ca0: 65 20 64 69 73 6b 20 69 6e 20 66 69 78 65 64 2d  e disk in fixed-
1cb0: 73 69 7a 65 0a 70 61 67 65 73 2e 20 20 54 68 65  size.pages.  The
1cc0: 20 64 65 66 61 75 6c 74 20 5b 70 61 67 65 5f 73   default [page_s
1cd0: 69 7a 65 5d 20 69 73 20 34 30 39 36 20 62 79 74  ize] is 4096 byt
1ce0: 65 73 20 62 75 74 20 63 61 6e 20 62 65 20 61 6e  es but can be an
1cf0: 79 20 70 6f 77 65 72 20 6f 66 0a 74 77 6f 20 62  y power of.two b
1d00: 65 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36  etween 512 and 6
1d10: 35 35 33 36 20 62 79 74 65 73 2e 0a 54 68 65 20  5536 bytes..The 
1d20: 70 61 67 65 20 63 61 63 68 65 20 69 73 20 72 65  page cache is re
1d30: 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 72 65  sponsible for re
1d40: 61 64 69 6e 67 2c 20 77 72 69 74 69 6e 67 2c 20  ading, writing, 
1d50: 61 6e 64 0a 63 61 63 68 69 6e 67 20 74 68 65 73  and.caching thes
1d60: 65 20 70 61 67 65 73 2e 0a 54 68 65 20 70 61 67  e pages..The pag
1d70: 65 20 63 61 63 68 65 20 61 6c 73 6f 20 70 72 6f  e cache also pro
1d80: 76 69 64 65 73 20 74 68 65 20 72 6f 6c 6c 62 61  vides the rollba
1d90: 63 6b 20 61 6e 64 20 61 74 6f 6d 69 63 20 63 6f  ck and atomic co
1da0: 6d 6d 69 74 20 61 62 73 74 72 61 63 74 69 6f 6e  mmit abstraction
1db0: 0a 61 6e 64 20 74 61 6b 65 73 20 63 61 72 65 20  .and takes care 
1dc0: 6f 66 20 6c 6f 63 6b 69 6e 67 20 6f 66 20 74 68  of locking of th
1dd0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1de0: 20 20 54 68 65 0a 42 2d 74 72 65 65 20 64 72 69    The.B-tree dri
1df0: 76 65 72 20 72 65 71 75 65 73 74 73 20 70 61 72  ver requests par
1e00: 74 69 63 75 6c 61 72 20 70 61 67 65 73 20 66 72  ticular pages fr
1e10: 6f 6d 20 74 68 65 20 70 61 67 65 20 63 61 63 68  om the page cach
1e20: 65 20 61 6e 64 20 6e 6f 74 69 66 69 65 73 0a 74  e and notifies.t
1e30: 68 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  he page cache wh
1e40: 65 6e 20 69 74 20 77 61 6e 74 73 20 74 6f 20 6d  en it wants to m
1e50: 6f 64 69 66 79 20 70 61 67 65 73 20 6f 72 20 63  odify pages or c
1e60: 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63  ommit or rollbac
1e70: 6b 0a 63 68 61 6e 67 65 73 2e 20 54 68 65 20 70  k.changes. The p
1e80: 61 67 65 20 63 61 63 68 65 20 68 61 6e 64 6c 65  age cache handle
1e90: 73 20 61 6c 6c 20 74 68 65 20 6d 65 73 73 79 20  s all the messy 
1ea0: 64 65 74 61 69 6c 73 20 6f 66 20 6d 61 6b 69 6e  details of makin
1eb0: 67 20 73 75 72 65 0a 74 68 65 20 72 65 71 75 65  g sure.the reque
1ec0: 73 74 73 20 61 72 65 20 68 61 6e 64 6c 65 64 20  sts are handled 
1ed0: 71 75 69 63 6b 6c 79 2c 20 73 61 66 65 6c 79 2c  quickly, safely,
1ee0: 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 6c 79   and efficiently
1ef0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 72  .</p>..<p>The pr
1f00: 69 6d 61 72 79 20 70 61 67 65 20 63 61 63 68 65  imary page cache
1f10: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1f20: 69 73 20 69 6e 20 74 68 65 0a 3c 66 69 6c 65 3e  is in the.<file>
1f30: 70 61 67 65 72 2e 63 3c 2f 66 69 6c 65 3e 20 66  pager.c</file> f
1f40: 69 6c 65 2e 20 20 5b 57 41 4c 20 6d 6f 64 65 5d  ile.  [WAL mode]
1f50: 20 6c 6f 67 69 63 20 69 73 20 69 6e 20 74 68 65   logic is in the
1f60: 20 73 65 70 61 72 61 74 65 0a 3c 66 69 6c 65 3e   separate.<file>
1f70: 77 61 6c 2e 63 3c 2f 66 69 6c 65 3e 2e 20 20 49  wal.c</file>.  I
1f80: 6e 2d 6d 65 6d 6f 72 79 20 63 61 63 68 69 6e 67  n-memory caching
1f90: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
1fa0: 62 79 20 74 68 65 0a 3c 66 69 6c 65 3e 70 63 61  by the.<file>pca
1fb0: 63 68 65 2e 63 3c 2f 66 69 6c 65 3e 20 61 6e 64  che.c</file> and
1fc0: 20 3c 66 69 6c 65 3e 70 63 61 63 68 65 31 2e 63   <file>pcache1.c
1fd0: 3c 2f 66 69 6c 65 3e 20 66 69 6c 65 73 2e 0a 54  </file> files..T
1fe0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 62 65 74  he interface bet
1ff0: 77 65 65 6e 20 70 61 67 65 20 63 61 63 68 65 20  ween page cache 
2000: 73 75 62 73 79 73 74 65 6d 0a 61 6e 64 20 74 68  subsystem.and th
2010: 65 20 72 65 73 74 20 6f 66 20 53 51 4c 69 74 65  e rest of SQLite
2020: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 74   is defined by t
2030: 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 3c  he header file <
2040: 66 69 6c 65 3e 70 61 67 65 72 2e 68 3c 2f 66 69  file>pager.h</fi
2050: 6c 65 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 68 31 3e 4f  le>..</p>..<h1>O
2060: 53 20 49 6e 74 65 72 66 61 63 65 3c 2f 68 31 3e  S Interface</h1>
2070: 0a 0a 3c 70 3e 0a 49 6e 20 6f 72 64 65 72 20 74  ..<p>.In order t
2080: 6f 20 70 72 6f 76 69 64 65 20 70 6f 72 74 61 62  o provide portab
2090: 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20 61 63  ility between ac
20a0: 72 6f 73 73 20 6f 70 65 72 61 74 69 6e 67 20 73  ross operating s
20b0: 79 73 74 65 6d 73 2c 0a 53 51 4c 69 74 65 20 75  ystems,.SQLite u
20c0: 73 65 73 20 61 62 73 74 72 61 63 74 20 6f 62 6a  ses abstract obj
20d0: 65 63 74 20 63 61 6c 6c 65 64 20 74 68 65 20 5b  ect called the [
20e0: 56 46 53 5d 2e 20 20 45 61 63 68 20 56 46 53 20  VFS].  Each VFS 
20f0: 70 72 6f 76 69 64 65 73 20 6d 65 74 68 6f 64 73  provides methods
2100: 0a 66 6f 72 20 6f 70 65 6e 69 6e 67 2c 20 72 65  .for opening, re
2110: 61 64 2c 20 77 72 69 74 69 6e 67 2c 20 61 6e 64  ad, writing, and
2120: 20 63 6c 6f 73 69 6e 67 20 66 69 6c 65 73 20 6f   closing files o
2130: 6e 20 64 69 73 6b 2c 20 61 6e 64 20 66 6f 72 20  n disk, and for 
2140: 6f 74 68 65 72 0a 4f 53 2d 73 70 65 63 69 66 69  other.OS-specifi
2150: 63 20 74 61 73 6b 20 73 75 63 68 20 61 73 20 66  c task such as f
2160: 69 6e 64 69 6e 67 20 74 68 65 20 63 75 72 72 65  inding the curre
2170: 6e 74 20 74 69 6d 65 2c 20 6f 72 20 6f 62 74 61  nt time, or obta
2180: 69 6e 69 6e 67 20 72 61 6e 64 6f 6d 6e 65 73 73  ining randomness
2190: 0a 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74  .to initialize t
21a0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 70 73 65 75  he built-in pseu
21b0: 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72  do-random number
21c0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 53 51 4c 69   generator..SQLi
21d0: 74 65 20 63 75 72 72 65 6e 74 6c 79 20 70 72 6f  te currently pro
21e0: 76 69 64 65 73 20 56 46 53 65 73 20 66 6f 72 20  vides VFSes for 
21f0: 75 6e 69 78 20 28 69 6e 20 74 68 65 20 3c 66 69  unix (in the <fi
2200: 6c 65 3e 6f 73 5f 75 6e 69 78 2e 63 3c 2f 66 69  le>os_unix.c</fi
2210: 6c 65 3e 0a 66 69 6c 65 29 20 61 6e 64 20 57 69  le>.file) and Wi
2220: 6e 64 6f 77 73 20 28 69 6e 20 74 68 65 20 3c 66  ndows (in the <f
2230: 69 6c 65 3e 6f 73 5f 77 69 6e 2e 63 3c 2f 66 69  ile>os_win.c</fi
2240: 6c 65 3e 20 66 69 6c 65 29 2e 0a 3c 2f 70 3e 0a  le> file)..</p>.
2250: 0a 3c 68 31 3e 55 74 69 6c 69 74 69 65 73 3c 2f  .<h1>Utilities</
2260: 68 31 3e 0a 0a 3c 70 3e 0a 4d 65 6d 6f 72 79 20  h1>..<p>.Memory 
2270: 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 63 61 73 65  allocation, case
2280: 6c 65 73 73 20 73 74 72 69 6e 67 20 63 6f 6d 70  less string comp
2290: 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 73 2c  arison routines,
22a0: 20 0a 70 6f 72 74 61 62 6c 65 20 74 65 78 74 2d   .portable text-
22b0: 74 6f 2d 6e 75 6d 62 65 72 20 63 6f 6e 76 65 72  to-number conver
22c0: 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 2c 20 61  sion routines, a
22d0: 6e 64 20 6f 74 68 65 72 20 75 74 69 6c 69 74 69  nd other utiliti
22e0: 65 73 0a 61 72 65 20 6c 6f 63 61 74 65 64 20 69  es.are located i
22f0: 6e 20 3c 66 69 6c 65 3e 75 74 69 6c 2e 63 3c 2f  n <file>util.c</
2300: 66 69 6c 65 3e 2e 0a 53 79 6d 62 6f 6c 20 74 61  file>..Symbol ta
2310: 62 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65  bles used by the
2320: 20 70 61 72 73 65 72 20 61 72 65 20 6d 61 69 6e   parser are main
2330: 74 61 69 6e 65 64 20 62 79 20 68 61 73 68 20 74  tained by hash t
2340: 61 62 6c 65 73 20 66 6f 75 6e 64 0a 69 6e 20 3c  ables found.in <
2350: 66 69 6c 65 3e 68 61 73 68 2e 63 3c 2f 66 69 6c  file>hash.c</fil
2360: 65 3e 2e 20 20 54 68 65 20 3c 66 69 6c 65 3e 75  e>.  The <file>u
2370: 74 66 2e 63 3c 2f 66 69 6c 65 3e 20 73 6f 75 72  tf.c</file> sour
2380: 63 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73  ce file contains
2390: 20 55 6e 69 63 6f 64 65 0a 63 6f 6e 76 65 72 73   Unicode.convers
23a0: 69 6f 6e 20 73 75 62 72 6f 75 74 69 6e 65 73 2e  ion subroutines.
23b0: 0a 53 51 4c 69 74 65 20 68 61 73 20 69 74 73 20  .SQLite has its 
23c0: 6f 77 6e 20 70 72 69 76 61 74 65 20 69 6d 70 6c  own private impl
23d0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 0a 5b  ementation of .[
23e0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 7c  sqlite3_mprintf|
23f0: 3e 70 72 69 6e 74 66 28 29 5d 20 28 77 69 74 68  >printf()] (with
2400: 0a 73 6f 6d 65 20 65 78 74 65 6e 73 69 6f 6e 73  .some extensions
2410: 29 20 69 6e 20 3c 66 69 6c 65 3e 70 72 69 6e 74  ) in <file>print
2420: 66 2e 63 3c 2f 66 69 6c 65 3e 20 61 6e 64 20 69  f.c</file> and i
2430: 74 73 20 6f 77 6e 0a 70 73 65 75 64 6f 2d 72 61  ts own.pseudo-ra
2440: 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65  ndom number gene
2450: 72 61 74 6f 72 20 28 50 52 4e 47 29 20 69 6e 20  rator (PRNG) in 
2460: 3c 66 69 6c 65 3e 72 61 6e 64 6f 6d 2e 63 3c 2f  <file>random.c</
2470: 66 69 6c 65 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 68 31  file>..</p>..<h1
2480: 3e 54 65 73 74 20 43 6f 64 65 3c 2f 68 31 3e 0a  >Test Code</h1>.
2490: 0a 3c 70 3e 0a 46 69 6c 65 73 20 69 6e 20 74 68  .<p>.Files in th
24a0: 65 20 22 73 72 63 2f 22 20 66 6f 6c 64 65 72 20  e "src/" folder 
24b0: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 72  of the source tr
24c0: 65 65 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 62  ee whose names b
24d0: 65 67 69 6e 20 77 69 74 68 0a 3c 62 3e 74 65 73  egin with.<b>tes
24e0: 74 3c 2f 62 3e 20 61 72 65 20 66 6f 72 20 74 65  t</b> are for te
24f0: 73 74 69 6e 67 20 6f 6e 6c 79 20 61 6e 64 20 61  sting only and a
2500: 72 65 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20  re not included 
2510: 69 6e 20 61 20 73 74 61 6e 64 61 72 64 0a 62 75  in a standard.bu
2520: 69 6c 64 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ild of the libra
2530: 72 79 2e 0a 3c 2f 70 3e 0a 7d 0a 3c 2f 74 63 6c  ry..</p>.}.</tcl
2540: 3e 0a                                            >.