/ Hex Artifact Content
Login

Artifact 56f77e435a6306b337b20b416e3b89500ba2d029:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 73 63 72  #.# Run this scr
0010: 69 70 74 20 74 6f 20 67 65 6e 65 72 61 74 65 64  ipt to generated
0020: 20 61 20 66 69 6c 65 66 6f 72 6d 61 74 2e 68 74   a fileformat.ht
0030: 6d 6c 20 6f 75 74 70 75 74 20 66 69 6c 65 0a 23  ml output file.#
0040: 0a 73 65 74 20 72 63 73 69 64 20 7b 24 49 64 3a  .set rcsid {$Id:
0050: 20 66 69 6c 65 66 6f 72 6d 61 74 2e 74 63 6c 2c   fileformat.tcl,
0060: 76 20 31 2e 31 31 20 32 30 30 33 2f 31 31 2f 32  v 1.11 2003/11/2
0070: 35 20 32 33 3a 34 38 3a 35 37 20 64 72 68 20 45  5 23:48:57 drh E
0080: 78 70 20 24 7d 0a 0a 70 75 74 73 20 7b 3c 68 74  xp $}..puts {<ht
0090: 6d 6c 3e 0a 3c 68 65 61 64 3e 0a 20 20 3c 74 69  ml>.<head>.  <ti
00a0: 74 6c 65 3e 53 51 4c 69 74 65 20 44 61 74 61 62  tle>SQLite Datab
00b0: 61 73 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c  ase File Format<
00c0: 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a  /title>.</head>.
00d0: 3c 62 6f 64 79 20 62 67 63 6f 6c 6f 72 3d 22 77  <body bgcolor="w
00e0: 68 69 74 65 22 3e 0a 3c 68 31 20 61 6c 69 67 6e  hite">.<h1 align
00f0: 3d 22 63 65 6e 74 65 72 22 3e 0a 53 51 4c 69 74  ="center">.SQLit
0100: 65 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 20  e Database File 
0110: 46 6f 72 6d 61 74 0a 3c 2f 68 31 3e 0a 7d 0a 70  Format.</h1>.}.p
0120: 75 74 73 20 22 3c 70 20 61 6c 69 67 6e 3d 63 65  uts "<p align=ce
0130: 6e 74 65 72 3e 0a 28 54 68 69 73 20 70 61 67 65  nter>.(This page
0140: 20 77 61 73 20 6c 61 73 74 20 6d 6f 64 69 66 69   was last modifi
0150: 65 64 20 6f 6e 20 5b 6c 72 61 6e 67 65 20 24 72  ed on [lrange $r
0160: 63 73 69 64 20 33 20 34 5d 20 55 54 43 29 0a 3c  csid 3 4] UTC).<
0170: 2f 70 3e 22 0a 0a 70 75 74 73 20 7b 0a 3c 68 32  /p>"..puts {.<h2
0180: 3e 31 2e 30 20 26 6e 62 73 70 3b 20 4c 61 79 65  >1.0 &nbsp; Laye
0190: 72 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 0a 53 51 4c  rs</h2>..<p>.SQL
01a0: 69 74 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ite is implement
01b0: 65 64 20 69 6e 20 6c 61 79 65 72 73 2e 0a 28 53  ed in layers..(S
01c0: 65 65 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  ee the <a href="
01d0: 61 72 63 68 2e 68 74 6d 6c 22 3e 61 72 63 68 69  arch.html">archi
01e0: 74 65 63 74 75 72 65 20 64 65 73 63 72 69 70 74  tecture descript
01f0: 69 6f 6e 3c 2f 61 3e 2e 29 0a 54 68 65 20 66 6f  ion</a>.).The fo
0200: 72 6d 61 74 20 6f 66 20 64 61 74 61 62 61 73 65  rmat of database
0210: 20 66 69 6c 65 73 20 69 73 20 64 65 74 65 72 6d   files is determ
0220: 69 6e 65 64 20 62 79 20 74 68 72 65 65 20 64 69  ined by three di
0230: 66 66 65 72 65 6e 74 0a 6c 61 79 65 72 73 20 69  fferent.layers i
0240: 6e 20 74 68 65 20 61 72 63 68 69 74 65 63 74 75  n the architectu
0250: 72 65 2e 0a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  re..</p>..<ul>.<
0260: 6c 69 3e 54 68 65 20 3c 62 3e 73 63 68 65 6d 61  li>The <b>schema
0270: 3c 2f 62 3e 20 6c 61 79 65 72 20 69 6d 70 6c 65  </b> layer imple
0280: 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 56 44  mented by the VD
0290: 42 45 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 54 68 65  BE.</li>.<li>The
02a0: 20 3c 62 3e 62 2d 74 72 65 65 3c 2f 62 3e 20 6c   <b>b-tree</b> l
02b0: 61 79 65 72 20 69 6d 70 6c 65 6d 65 6e 74 65 64  ayer implemented
02c0: 20 62 79 20 62 74 72 65 65 2e 63 3c 2f 6c 69 3e   by btree.c</li>
02d0: 0a 3c 6c 69 3e 54 68 65 20 3c 62 3e 70 61 67 65  .<li>The <b>page
02e0: 72 3c 2f 62 3e 20 6c 61 79 65 72 20 69 6d 70 6c  r</b> layer impl
02f0: 65 6d 65 6e 74 65 64 20 62 79 20 70 61 67 65 72  emented by pager
0300: 2e 63 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  .c</li>.</ul>..<
0310: 70 3e 0a 57 65 20 77 69 6c 20 64 65 73 63 72 69  p>.We wil descri
0320: 62 65 20 65 61 63 68 20 6c 61 79 65 72 20 62 65  be each layer be
0330: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65  ginning with the
0340: 20 62 6f 74 74 6f 6d 20 28 70 61 67 65 72 29 0a   bottom (pager).
0350: 6c 61 79 65 72 20 61 6e 64 20 77 6f 72 6b 69 6e  layer and workin
0360: 67 20 75 70 77 61 72 64 73 2e 0a 3c 2f 70 3e 0a  g upwards..</p>.
0370: 0a 3c 68 32 3e 32 2e 30 20 26 6e 62 73 70 3b 20  .<h2>2.0 &nbsp; 
0380: 54 68 65 20 50 61 67 65 72 20 4c 61 79 65 72 3c  The Pager Layer<
0390: 2f 68 32 3e 0a 0a 3c 70 3e 0a 41 6e 20 53 51 4c  /h2>..<p>.An SQL
03a0: 69 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ite database con
03b0: 73 69 73 74 73 20 6f 66 0a 22 70 61 67 65 73 22  sists of."pages"
03c0: 20 6f 66 20 64 61 74 61 2e 20 20 45 61 63 68 20   of data.  Each 
03d0: 70 61 67 65 20 69 73 20 31 30 32 34 20 62 79 74  page is 1024 byt
03e0: 65 73 20 69 6e 20 73 69 7a 65 2e 0a 50 61 67 65  es in size..Page
03f0: 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 62  s are numbered b
0400: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 2e  eginning with 1.
0410: 0a 41 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  .A page number o
0420: 66 20 30 20 69 73 20 75 73 65 64 20 74 6f 20 69  f 0 is used to i
0430: 6e 64 69 63 61 74 65 20 22 6e 6f 20 73 75 63 68  ndicate "no such
0440: 20 70 61 67 65 22 20 69 6e 20 74 68 65 0a 42 2d   page" in the.B-
0450: 54 72 65 65 20 61 6e 64 20 53 63 68 65 6d 61 20  Tree and Schema 
0460: 6c 61 79 65 72 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  layers..</p>..<p
0470: 3e 0a 54 68 65 20 70 61 67 65 72 20 6c 61 79 65  >.The pager laye
0480: 72 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65  r is responsible
0490: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e   for implementin
04a0: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 77  g transactions.w
04b0: 69 74 68 20 61 74 6f 6d 69 63 20 63 6f 6d 6d 69  ith atomic commi
04c0: 74 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 2e 20  t and rollback. 
04d0: 20 49 74 20 64 6f 65 73 20 74 68 69 73 20 75 73   It does this us
04e0: 69 6e 67 20 61 20 73 65 70 61 72 61 74 65 0a 6a  ing a separate.j
04f0: 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 20 20 57 68  ournal file.  Wh
0500: 65 6e 65 76 65 72 20 61 20 6e 65 77 20 74 72 61  enever a new tra
0510: 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
0520: 74 65 64 2c 20 61 20 6a 6f 75 72 6e 61 6c 0a 66  ted, a journal.f
0530: 69 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 74  ile is created t
0540: 68 61 74 20 72 65 63 6f 72 64 73 20 74 68 65 20  hat records the 
0550: 6f 72 69 67 69 6e 61 6c 20 73 74 61 74 65 20 6f  original state o
0560: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  f the database..
0570: 49 66 20 74 68 65 20 70 72 6f 67 72 61 6d 20 74  If the program t
0580: 65 72 6d 69 6e 61 74 65 73 20 62 65 66 6f 72 65  erminates before
0590: 20 63 6f 6d 70 6c 65 74 69 6e 67 20 74 68 65 20   completing the 
05a0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
05b0: 20 6e 65 78 74 0a 70 72 6f 63 65 73 73 20 74 6f   next.process to
05c0: 20 6f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61   open the databa
05d0: 73 65 20 63 61 6e 20 75 73 65 20 74 68 65 20 6a  se can use the j
05e0: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 74 6f 20 72  ournal file to r
05f0: 65 73 74 6f 72 65 0a 74 68 65 20 64 61 74 61 62  estore.the datab
0600: 61 73 65 20 74 6f 20 69 74 73 20 6f 72 69 67 69  ase to its origi
0610: 6e 61 6c 20 73 74 61 74 65 2e 0a 3c 2f 70 3e 0a  nal state..</p>.
0620: 0a 3c 70 3e 0a 54 68 65 20 6a 6f 75 72 6e 61 6c  .<p>.The journal
0630: 20 66 69 6c 65 20 69 73 20 6c 6f 63 61 74 65 64   file is located
0640: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
0650: 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
0660: 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
0670: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
0680: 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
0690: 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
06a0: 74 68 65 0a 63 68 61 72 61 63 74 65 72 73 20 22  the.characters "
06b0: 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74  <tt>-journal</tt
06c0: 3e 22 20 61 70 70 65 6e 64 65 64 2e 0a 3c 2f 70  >" appended..</p
06d0: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 70 61 67 65 72  >..<p>.The pager
06e0: 20 6c 61 79 65 72 20 64 6f 65 73 20 6e 6f 74 20   layer does not 
06f0: 69 6d 70 6f 73 65 20 61 6e 79 20 63 6f 6e 74 65  impose any conte
0700: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
0710: 6f 6e 20 74 68 65 0a 6d 61 69 6e 20 64 61 74 61  on the.main data
0720: 62 61 73 65 20 66 69 6c 65 2e 20 20 41 73 20 66  base file.  As f
0730: 61 72 20 61 73 20 74 68 65 20 70 61 67 65 72 20  ar as the pager 
0740: 69 73 20 63 6f 6e 63 65 72 6e 65 64 2c 20 65 61  is concerned, ea
0750: 63 68 20 70 61 67 65 0a 63 6f 6e 74 61 69 6e 73  ch page.contains
0760: 20 31 30 32 34 20 62 79 74 65 73 20 6f 66 20 61   1024 bytes of a
0770: 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20  rbitrary data.  
0780: 42 75 74 20 74 68 65 72 65 20 69 73 20 73 74 72  But there is str
0790: 75 63 74 75 72 65 20 74 6f 0a 74 68 65 20 6a 6f  ucture to.the jo
07a0: 75 72 6e 61 6c 20 66 69 6c 65 2e 0a 3c 2f 70 3e  urnal file..</p>
07b0: 0a 0a 3c 70 3e 0a 41 20 6a 6f 75 72 6e 61 6c 20  ..<p>.A journal 
07c0: 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74 68  file begins with
07d0: 20 38 20 62 79 74 65 73 20 61 73 20 66 6f 6c 6c   8 bytes as foll
07e0: 6f 77 73 3a 0a 30 78 64 39 2c 20 30 78 64 35 2c  ows:.0xd9, 0xd5,
07f0: 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30 78 32   0x05, 0xf9, 0x2
0800: 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c 20 61  0, 0xa1, 0x63, a
0810: 6e 64 20 30 78 64 36 2e 0a 50 72 6f 63 65 73 73  nd 0xd6..Process
0820: 65 73 20 74 68 61 74 20 61 72 65 20 61 74 74 65  es that are atte
0830: 6d 70 74 69 6e 67 20 74 6f 20 72 6f 6c 6c 62 61  mpting to rollba
0840: 63 6b 20 61 20 6a 6f 75 72 6e 61 6c 20 75 73 65  ck a journal use
0850: 20 74 68 65 73 65 20 38 20 62 79 74 65 73 0a 61   these 8 bytes.a
0860: 73 20 61 20 73 61 6e 69 74 79 20 63 68 65 63 6b  s a sanity check
0870: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0880: 65 20 66 69 6c 65 20 74 68 65 79 20 74 68 69 6e  e file they thin
0890: 6b 20 69 73 20 61 20 6a 6f 75 72 6e 61 6c 20 72  k is a journal r
08a0: 65 61 6c 6c 79 0a 69 73 20 61 20 76 61 6c 69 64  eally.is a valid
08b0: 20 6a 6f 75 72 6e 61 6c 2e 20 20 50 72 69 6f 72   journal.  Prior
08c0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
08d0: 74 65 20 75 73 65 64 20 64 69 66 66 65 72 65 6e  te used differen
08e0: 74 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 20 66  t journal.file f
08f0: 6f 72 6d 61 74 73 2e 20 20 54 68 65 20 6d 61 67  ormats.  The mag
0900: 69 63 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ic numbers for t
0910: 68 65 73 65 20 70 72 69 6f 72 20 66 6f 72 6d 61  hese prior forma
0920: 74 73 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ts are different
0930: 0a 73 6f 20 74 68 61 74 20 69 66 20 61 20 6e 65  .so that if a ne
0940: 77 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  w version of the
0950: 20 6c 69 62 72 61 72 79 20 61 74 74 65 6d 70 74   library attempt
0960: 73 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20  s to rollback a 
0970: 6a 6f 75 72 6e 61 6c 0a 63 72 65 61 74 65 64 20  journal.created 
0980: 62 79 20 61 6e 20 65 61 72 6c 69 65 72 20 76 65  by an earlier ve
0990: 72 73 69 6f 6e 2c 20 69 74 20 63 61 6e 20 64 65  rsion, it can de
09a0: 74 65 63 74 20 74 68 61 74 20 74 68 65 20 6a 6f  tect that the jo
09b0: 75 72 6e 61 6c 20 75 73 65 73 0a 61 6e 20 6f 62  urnal uses.an ob
09c0: 73 6f 6c 65 74 65 20 66 6f 72 6d 61 74 20 61 6e  solete format an
09d0: 64 20 6d 61 6b 65 20 74 68 65 20 6e 65 63 65 73  d make the neces
09e0: 73 61 72 79 20 61 64 6a 75 73 74 6d 65 6e 74 73  sary adjustments
09f0: 2e 20 20 54 68 69 73 20 61 72 74 69 63 6c 65 0a  .  This article.
0a00: 64 65 73 63 72 69 62 65 73 20 6f 6e 6c 79 20 74  describes only t
0a10: 68 65 20 6e 65 77 65 73 74 20 6a 6f 75 72 6e 61  he newest journa
0a20: 6c 20 66 6f 72 6d 61 74 20 2d 20 73 75 70 70 6f  l format - suppo
0a30: 72 74 65 64 20 61 73 20 6f 66 20 76 65 72 73 69  rted as of versi
0a40: 6f 6e 0a 32 2e 38 2e 30 2e 0a 3c 2f 70 3e 0a 0a  on.2.8.0..</p>..
0a50: 3c 70 3e 0a 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  <p>.Following th
0a60: 65 20 38 20 62 79 74 65 20 70 72 65 66 69 78 20  e 8 byte prefix 
0a70: 69 73 20 61 20 74 68 72 65 65 20 34 2d 62 79 74  is a three 4-byt
0a80: 65 20 69 6e 74 65 67 65 72 73 20 74 68 61 74 20  e integers that 
0a90: 74 65 6c 6c 20 75 73 0a 74 68 65 20 6e 75 6d 62  tell us.the numb
0aa0: 65 72 20 6f 66 20 70 61 67 65 73 20 74 68 61 74  er of pages that
0ab0: 20 68 61 76 65 20 62 65 65 6e 20 63 6f 6d 6d 69   have been commi
0ac0: 74 74 65 64 20 74 6f 20 74 68 65 20 6a 6f 75 72  tted to the jour
0ad0: 6e 61 6c 2c 0a 61 20 6d 61 67 69 63 20 6e 75 6d  nal,.a magic num
0ae0: 62 65 72 20 75 73 65 64 20 66 6f 72 0a 73 61 6e  ber used for.san
0af0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 65 61 63  ity checking eac
0b00: 68 20 70 61 67 65 2c 20 61 6e 64 20 74 68 65 0a  h page, and the.
0b10: 6f 72 69 67 69 6e 61 6c 20 73 69 7a 65 20 6f 66  original size of
0b20: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
0b30: 73 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20 74  se file before t
0b40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
0b50: 61 73 0a 73 74 61 72 74 65 64 2e 20 20 54 68 65  as.started.  The
0b60: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6d 6d 69   number of commi
0b70: 74 74 65 64 20 70 61 67 65 73 20 69 73 20 75 73  tted pages is us
0b80: 65 64 20 74 6f 20 6c 69 6d 69 74 20 68 6f 77 20  ed to limit how 
0b90: 66 61 72 0a 69 6e 74 6f 20 74 68 65 20 6a 6f 75  far.into the jou
0ba0: 72 6e 61 6c 20 74 6f 20 72 65 61 64 2e 20 20 54  rnal to read.  T
0bb0: 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 63 68  he use of the ch
0bc0: 65 63 6b 73 75 6d 20 6d 61 67 69 63 20 6e 75 6d  ecksum magic num
0bd0: 62 65 72 20 69 73 0a 64 65 73 63 72 69 62 65 64  ber is.described
0be0: 20 62 65 6c 6f 77 2e 0a 54 68 65 20 6f 72 69 67   below..The orig
0bf0: 69 6e 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  inal size of the
0c00: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
0c10: 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
0c20: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 62   database.file b
0c30: 61 63 6b 20 74 6f 20 69 74 73 20 6f 72 69 67 69  ack to its origi
0c40: 6e 61 6c 20 73 69 7a 65 2e 0a 54 68 65 20 73 69  nal size..The si
0c50: 7a 65 20 69 73 20 65 78 70 72 65 73 73 65 64 20  ze is expressed 
0c60: 69 6e 20 70 61 67 65 73 20 28 31 30 32 34 20 62  in pages (1024 b
0c70: 79 74 65 73 20 70 65 72 20 70 61 67 65 29 2e 0a  ytes per page)..
0c80: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6c 6c 20 74 68  </p>..<p>.All th
0c90: 72 65 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  ree integers in 
0ca0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
0cb0: 65 72 20 61 6e 64 20 61 6c 6c 20 6f 74 68 65 72  er and all other
0cc0: 20 6d 75 6c 74 69 2d 62 79 74 65 0a 6e 75 6d 62   multi-byte.numb
0cd0: 65 72 73 20 75 73 65 64 20 69 6e 20 74 68 65 20  ers used in the 
0ce0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 61 72 65  journal file are
0cf0: 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 61   big-endian..Tha
0d00: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
0d10: 20 6d 6f 73 74 20 73 69 67 6e 69 66 69 63 61 6e   most significan
0d20: 74 20 62 79 74 65 0a 6f 63 63 75 72 73 20 66 69  t byte.occurs fi
0d30: 72 73 74 2e 20 20 54 68 61 74 20 77 61 79 2c 20  rst.  That way, 
0d40: 61 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 74  a journal file t
0d50: 68 61 74 20 69 73 0a 6f 72 69 67 69 6e 61 6c 6c  hat is.originall
0d60: 79 20 63 72 65 61 74 65 64 20 6f 6e 20 6f 6e 65  y created on one
0d70: 20 6d 61 63 68 69 6e 65 20 63 61 6e 20 62 65 20   machine can be 
0d80: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 62 79 20 61  rolled back by a
0d90: 6e 6f 74 68 65 72 0a 6d 61 63 68 69 6e 65 20 74  nother.machine t
0da0: 68 61 74 20 75 73 65 73 20 61 20 64 69 66 66 65  hat uses a diffe
0db0: 72 65 6e 74 20 62 79 74 65 20 6f 72 64 65 72 2e  rent byte order.
0dc0: 20 20 53 6f 2c 20 66 6f 72 20 65 78 61 6d 70 6c    So, for exampl
0dd0: 65 2c 20 61 0a 74 72 61 6e 73 61 63 74 69 6f 6e  e, a.transaction
0de0: 20 74 68 61 74 20 66 61 69 6c 65 64 20 74 6f 20   that failed to 
0df0: 63 6f 6d 70 6c 65 74 65 20 6f 6e 20 79 6f 75 72  complete on your
0e00: 20 62 69 67 2d 65 6e 64 69 61 6e 20 53 70 61 72   big-endian Spar
0e10: 63 53 74 61 74 69 6f 6e 0a 63 61 6e 20 73 74 69  cStation.can sti
0e20: 6c 6c 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  ll be rolled bac
0e30: 6b 20 6f 6e 20 79 6f 75 72 20 6c 69 74 74 6c 65  k on your little
0e40: 2d 65 6e 64 69 61 6e 20 4c 69 6e 75 78 20 62 6f  -endian Linux bo
0e50: 78 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 66 74  x..</p>..<p>.Aft
0e60: 65 72 20 74 68 65 20 38 2d 62 79 74 65 20 70 72  er the 8-byte pr
0e70: 65 66 69 78 20 61 6e 64 20 74 68 65 20 74 68 72  efix and the thr
0e80: 65 65 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65  ee 4-byte intege
0e90: 72 73 2c 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20  rs, the.journal 
0ea0: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0eb0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
0ec0: 67 65 20 72 65 63 6f 72 64 73 2e 20 20 45 61 63  ge records.  Eac
0ed0: 68 20 70 61 67 65 0a 72 65 63 6f 72 64 20 69 73  h page.record is
0ee0: 20 61 20 34 2d 62 79 74 65 20 28 62 69 67 2d 65   a 4-byte (big-e
0ef0: 6e 64 69 61 6e 29 20 70 61 67 65 20 6e 75 6d 62  ndian) page numb
0f00: 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 31  er followed by 1
0f10: 30 32 34 20 62 79 74 65 73 0a 6f 66 20 64 61 74  024 bytes.of dat
0f20: 61 20 61 6e 64 20 61 20 34 2d 62 79 74 65 20 63  a and a 4-byte c
0f30: 68 65 63 6b 73 75 6d 2e 20 20 0a 54 68 65 20 64  hecksum.  .The d
0f40: 61 74 61 20 69 73 20 74 68 65 20 6f 72 69 67 69  ata is the origi
0f50: 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
0f60: 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
0f70: 0a 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e  .before the tran
0f80: 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72  saction was star
0f90: 74 65 64 2e 20 20 53 6f 20 74 6f 20 72 6f 6c 6c  ted.  So to roll
0fa0: 20 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61   back the transa
0fb0: 63 74 69 6f 6e 2c 0a 74 68 65 20 64 61 74 61 20  ction,.the data 
0fc0: 69 73 20 73 69 6d 70 6c 79 20 77 72 69 74 74 65  is simply writte
0fd0: 6e 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65  n into the corre
0fe0: 73 70 6f 6e 64 69 6e 67 20 70 61 67 65 20 6f 66  sponding page of
0ff0: 20 74 68 65 0a 6d 61 69 6e 20 64 61 74 61 62 61   the.main databa
1000: 73 65 20 66 69 6c 65 2e 20 20 50 61 67 65 73 20  se file.  Pages 
1010: 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 74 68  can appear in th
1020: 65 20 6a 6f 75 72 6e 61 6c 20 69 6e 20 61 6e 79  e journal in any
1030: 20 6f 72 64 65 72 2c 0a 62 75 74 20 74 68 65 79   order,.but they
1040: 20 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20   are guaranteed 
1050: 74 6f 20 61 70 70 65 61 72 20 6f 6e 6c 79 20 6f  to appear only o
1060: 6e 63 65 2e 20 41 6c 6c 20 70 61 67 65 20 6e 75  nce. All page nu
1070: 6d 62 65 72 73 20 77 69 6c 6c 20 62 65 0a 62 65  mbers will be.be
1080: 74 77 65 65 6e 20 31 20 61 6e 64 20 74 68 65 20  tween 1 and the 
1090: 6d 61 78 69 6d 75 6d 20 73 70 65 63 69 66 69 65  maximum specifie
10a0: 64 20 62 79 20 74 68 65 20 70 61 67 65 20 73 69  d by the page si
10b0: 7a 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 0a  ze integer that.
10c0: 61 70 70 65 61 72 65 64 20 61 74 20 74 68 65 20  appeared at the 
10d0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
10e0: 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 70 3e 0a 0a   journal..</p>..
10f0: 3c 70 3e 0a 54 68 65 20 73 6f 2d 63 61 6c 6c 65  <p>.The so-calle
1100: 64 20 63 68 65 63 6b 73 75 6d 20 61 74 20 74 68  d checksum at th
1110: 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 72 65  e end of each re
1120: 63 6f 72 64 20 69 73 20 6e 6f 74 20 72 65 61 6c  cord is not real
1130: 6c 79 20 61 0a 63 68 65 63 6b 73 75 6d 20 2d 20  ly a.checksum - 
1140: 69 74 20 69 73 20 74 68 65 20 73 75 6d 20 6f 66  it is the sum of
1150: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
1160: 20 61 6e 64 20 74 68 65 20 6d 61 67 69 63 20 6e   and the magic n
1170: 75 6d 62 65 72 20 77 68 69 63 68 0a 77 61 73 20  umber which.was 
1180: 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67  the second integ
1190: 65 72 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  er in the journa
11a0: 6c 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 70  l header.  The p
11b0: 75 72 70 6f 73 65 20 6f 66 20 74 68 69 73 0a 76  urpose of this.v
11c0: 61 6c 75 65 20 69 73 20 74 6f 20 74 72 79 20 74  alue is to try t
11d0: 6f 20 64 65 74 65 63 74 20 6a 6f 75 72 6e 61 6c  o detect journal
11e0: 20 63 6f 72 72 75 70 74 69 6f 6e 20 74 68 61 74   corruption that
11f0: 20 6d 69 67 68 74 20 68 61 76 65 20 6f 63 63 75   might have occu
1200: 72 72 65 64 0a 62 65 63 61 75 73 65 20 6f 66 20  rred.because of 
1210: 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 72 20  a power loss or 
1220: 4f 53 20 63 72 61 73 68 20 74 68 61 74 20 6f 63  OS crash that oc
1230: 63 75 72 72 65 64 20 77 68 69 63 68 20 74 68 65  curred which the
1240: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 20 77 61   journal.file wa
1250: 73 20 62 65 69 6e 67 20 77 72 69 74 74 65 6e 20  s being written 
1260: 74 6f 20 64 69 73 6b 2e 20 20 49 74 20 63 6f 75  to disk.  It cou
1270: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 68 65  ld have been the
1280: 20 63 61 73 65 20 74 68 61 74 20 74 68 65 0a 6d   case that the.m
1290: 65 74 61 2d 64 61 74 61 20 66 6f 72 20 74 68 65  eta-data for the
12a0: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2c 20 73   journal file, s
12b0: 70 65 63 69 66 69 63 61 6c 6c 79 20 74 68 65 20  pecifically the 
12c0: 73 69 7a 65 20 6f 66 20 74 68 65 20 66 69 6c 65  size of the file
12d0: 2c 20 68 61 64 0a 62 65 65 6e 20 77 72 69 74 74  , had.been writt
12e0: 65 6e 20 74 6f 20 74 68 65 20 64 69 73 6b 20 73  en to the disk s
12f0: 6f 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20  o that when the 
1300: 6d 61 63 68 69 6e 65 20 72 65 62 6f 6f 74 73 20  machine reboots 
1310: 69 74 20 61 70 70 65 61 72 73 20 74 68 61 74 0a  it appears that.
1320: 66 69 6c 65 20 69 73 20 6c 61 72 67 65 20 65 6e  file is large en
1330: 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65  ough to hold the
1340: 20 63 75 72 72 65 6e 74 20 72 65 63 6f 72 64 2e   current record.
1350: 20 20 42 75 74 20 65 76 65 6e 20 74 68 6f 75 67    But even thoug
1360: 68 20 74 68 65 0a 66 69 6c 65 20 73 69 7a 65 20  h the.file size 
1370: 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65  has changed, the
1380: 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 69   data for the fi
1390: 6c 65 20 6d 69 67 68 74 20 6e 6f 74 20 68 61 76  le might not hav
13a0: 65 20 6d 61 64 65 20 69 74 20 74 6f 0a 74 68 65  e made it to.the
13b0: 20 64 69 73 6b 20 73 75 72 66 61 63 65 20 61 74   disk surface at
13c0: 20 74 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65   the time of the
13d0: 20 4f 53 20 63 72 61 73 68 20 6f 72 20 70 6f 77   OS crash or pow
13e0: 65 72 20 6c 6f 73 73 2e 20 20 54 68 69 73 20 6d  er loss.  This m
13f0: 65 61 6e 73 0a 74 68 61 74 20 61 66 74 65 72 20  eans.that after 
1400: 72 65 62 6f 6f 74 2c 20 74 68 65 20 65 6e 64 20  reboot, the end 
1410: 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  of the journal f
1420: 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  ile will contain
1430: 20 71 75 61 73 69 2d 72 61 6e 64 6f 6d 0a 67 61   quasi-random.ga
1440: 72 62 61 67 65 20 64 61 74 61 2e 20 20 54 68 65  rbage data.  The
1450: 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61 6e 20   checksum is an 
1460: 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 63  attempt to detec
1470: 74 20 73 75 63 68 20 63 6f 72 72 75 70 74 69 6f  t such corruptio
1480: 6e 2e 20 20 49 66 0a 74 68 65 20 63 68 65 63 6b  n.  If.the check
1490: 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  sum does not mat
14a0: 63 68 2c 20 74 68 61 74 20 70 61 67 65 20 6f 66  ch, that page of
14b0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 69 73 20   the journal is 
14c0: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
14d0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 48 65 72 65 20  .</p>..<p>.Here 
14e0: 69 73 20 61 20 73 75 6d 6d 61 72 79 20 6f 66 20  is a summary of 
14f0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
1500: 20 66 6f 72 6d 61 74 3a 0a 3c 2f 70 3e 0a 0a 3c   format:.</p>..<
1510: 75 6c 3e 0a 3c 6c 69 3e 38 20 62 79 74 65 20 70  ul>.<li>8 byte p
1520: 72 65 66 69 78 3a 20 30 78 64 39 2c 20 30 78 64  refix: 0xd9, 0xd
1530: 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30  5, 0x05, 0xf9, 0
1540: 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c  x20, 0xa1, 0x63,
1550: 20 30 78 64 36 3c 2f 6c 69 3e 0a 3c 6c 69 3e 34   0xd6</li>.<li>4
1560: 20 62 79 74 65 20 6e 75 6d 62 65 72 20 6f 66 20   byte number of 
1570: 72 65 63 6f 72 64 73 20 69 6e 20 6a 6f 75 72 6e  records in journ
1580: 61 6c 3c 2f 6c 69 3e 0a 3c 6c 69 3e 34 20 62 79  al</li>.<li>4 by
1590: 74 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  te magic number 
15a0: 75 73 65 64 20 66 6f 72 20 70 61 67 65 20 63 68  used for page ch
15b0: 65 63 6b 73 75 6d 73 3c 2f 6c 69 3e 0a 3c 6c 69  ecksums</li>.<li
15c0: 3e 34 20 62 79 74 65 20 69 6e 69 74 69 61 6c 20  >4 byte initial 
15d0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 63 6f  database page co
15e0: 75 6e 74 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5a 65 72  unt</li>.<li>Zer
15f0: 6f 20 6f 72 20 6d 6f 72 65 20 69 6e 73 74 61 6e  o or more instan
1600: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  ces of the follo
1610: 77 69 6e 67 3a 0a 20 20 20 3c 75 6c 3e 0a 20 20  wing:.   <ul>.  
1620: 20 3c 6c 69 3e 34 20 62 79 74 65 20 70 61 67 65   <li>4 byte page
1630: 20 6e 75 6d 62 65 72 3c 2f 6c 69 3e 0a 20 20 20   number</li>.   
1640: 3c 6c 69 3e 31 30 32 34 20 62 79 74 65 73 20 6f  <li>1024 bytes o
1650: 66 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 20  f original data 
1660: 66 6f 72 20 74 68 65 20 70 61 67 65 3c 2f 6c 69  for the page</li
1670: 3e 0a 20 20 20 3c 6c 69 3e 34 20 62 79 74 65 20  >.   <li>4 byte 
1680: 63 68 65 63 6b 73 75 6d 3c 2f 6c 69 3e 0a 20 20  checksum</li>.  
1690: 20 3c 2f 75 6c 3e 0a 3c 2f 6c 69 3e 0a 3c 2f 75   </ul>.</li>.</u
16a0: 6c 3e 0a 0a 3c 68 32 3e 33 2e 30 20 26 6e 62 73  l>..<h2>3.0 &nbs
16b0: 70 3b 20 54 68 65 20 42 2d 54 72 65 65 20 4c 61  p; The B-Tree La
16c0: 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 0a 54 68  yer</h2>..<p>.Th
16d0: 65 20 42 2d 54 72 65 65 20 6c 61 79 65 72 20 62  e B-Tree layer b
16e0: 75 69 6c 64 73 20 6f 6e 20 74 6f 70 20 6f 66 20  uilds on top of 
16f0: 74 68 65 20 70 61 67 65 72 20 6c 61 79 65 72 20  the pager layer 
1700: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 6f 6e 65  to implement.one
1710: 20 6f 72 20 6d 6f 72 65 20 73 65 70 61 72 61 74   or more separat
1720: 65 20 62 2d 74 72 65 65 73 20 61 6c 6c 20 69 6e  e b-trees all in
1730: 20 74 68 65 20 73 61 6d 65 20 64 69 73 6b 20 66   the same disk f
1740: 69 6c 65 2e 20 20 54 68 65 0a 61 6c 67 6f 72 69  ile.  The.algori
1750: 74 68 6d 73 20 75 73 65 64 20 61 72 65 20 74 61  thms used are ta
1760: 6b 65 6e 20 66 72 6f 6d 20 4b 6e 75 74 68 27 73  ken from Knuth's
1770: 20 3c 69 3e 54 68 65 20 41 72 74 20 4f 66 20 43   <i>The Art Of C
1780: 6f 6d 70 75 74 65 72 0a 50 72 6f 67 72 61 6d 6d  omputer.Programm
1790: 69 6e 67 2e 3c 2f 69 3e 3c 2f 70 3e 0a 0a 3c 70  ing.</i></p>..<p
17a0: 3e 0a 50 61 67 65 20 31 20 6f 66 20 61 20 64 61  >.Page 1 of a da
17b0: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 73 20  tabase contains 
17c0: 61 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 20  a header string 
17d0: 75 73 65 64 20 66 6f 72 20 73 61 6e 69 74 79 0a  used for sanity.
17e0: 63 68 65 63 6b 69 6e 67 2c 20 61 20 66 65 77 20  checking, a few 
17f0: 33 32 2d 62 69 74 20 77 6f 72 64 73 20 6f 66 20  32-bit words of 
1800: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1810: 74 61 2c 20 61 6e 64 20 61 20 70 6f 69 6e 74 65  ta, and a pointe
1820: 72 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  r.to the beginni
1830: 6e 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ng of a list of 
1840: 75 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e 20  unused pages in 
1850: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 41 6c  the database..Al
1860: 6c 20 6f 74 68 65 72 20 70 61 67 65 73 20 69 6e  l other pages in
1870: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 61 72   the.database ar
1880: 65 20 65 69 74 68 65 72 20 70 61 67 65 73 20 6f  e either pages o
1890: 66 20 61 20 62 2d 74 72 65 65 2c 20 6f 76 65 72  f a b-tree, over
18a0: 66 6c 6f 77 20 70 61 67 65 73 2c 20 6f 72 20 75  flow pages, or u
18b0: 6e 75 73 65 64 0a 70 61 67 65 73 20 6f 6e 20 74  nused.pages on t
18c0: 68 65 20 66 72 65 65 6c 69 73 74 2e 0a 3c 2f 70  he freelist..</p
18d0: 3e 0a 0a 3c 70 3e 0a 45 61 63 68 20 62 2d 74 72  >..<p>.Each b-tr
18e0: 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ee page contains
18f0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 64 61   zero or more da
1900: 74 61 62 61 73 65 20 65 6e 74 72 69 65 73 2e 0a  tabase entries..
1910: 45 61 63 68 20 65 6e 74 72 79 20 68 61 73 20 61  Each entry has a
1920: 6e 20 75 6e 69 71 75 65 20 6b 65 79 20 6f 66 20  n unique key of 
1930: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  one or more byte
1940: 73 20 61 6e 64 20 64 61 74 61 20 6f 66 0a 7a 65  s and data of.ze
1950: 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73  ro or more bytes
1960: 2e 0a 42 6f 74 68 20 74 68 65 20 6b 65 79 20 61  ..Both the key a
1970: 6e 64 20 64 61 74 61 20 61 72 65 20 61 72 62 69  nd data are arbi
1980: 74 72 61 72 79 20 62 79 74 65 20 73 65 71 75 65  trary byte seque
1990: 6e 63 65 73 2e 20 20 54 68 65 20 63 6f 6d 62 69  nces.  The combi
19a0: 6e 61 74 69 6f 6e 0a 6f 66 20 6b 65 79 20 61 6e  nation.of key an
19b0: 64 20 64 61 74 61 20 61 72 65 20 63 6f 6c 6c 65  d data are colle
19c0: 63 74 69 76 65 6c 79 20 6b 6e 6f 77 6e 20 61 73  ctively known as
19d0: 20 22 70 61 79 6c 6f 61 64 22 2e 20 20 54 68 65   "payload".  The
19e0: 20 63 75 72 72 65 6e 74 0a 69 6d 70 6c 65 6d 65   current.impleme
19f0: 6e 74 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 74  ntation limits t
1a00: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79  he amount of pay
1a10: 6c 6f 61 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  load in a single
1a20: 20 65 6e 74 72 79 20 74 6f 0a 31 30 34 38 35 37   entry to.104857
1a30: 36 20 62 79 74 65 73 2e 20 20 54 68 69 73 20 6c  6 bytes.  This l
1a40: 69 6d 69 74 20 63 61 6e 20 62 65 20 72 61 69 73  imit can be rais
1a50: 65 64 20 74 6f 20 31 36 37 37 37 32 31 36 20 62  ed to 16777216 b
1a60: 79 20 61 64 6a 75 73 74 69 6e 67 0a 61 20 73 69  y adjusting.a si
1a70: 6e 67 6c 65 20 23 64 65 66 69 6e 65 20 69 6e 20  ngle #define in 
1a80: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
1a90: 61 6e 64 20 72 65 63 6f 6d 70 69 6c 69 6e 67 2e  and recompiling.
1aa0: 20 20 42 75 74 20 6d 6f 73 74 20 65 6e 74 72 69    But most entri
1ab0: 65 73 0a 63 6f 6e 74 61 69 6e 20 6c 65 73 73 20  es.contain less 
1ac0: 74 68 61 6e 20 61 20 68 75 6e 64 72 65 64 20 62  than a hundred b
1ad0: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 20  ytes of payload 
1ae0: 73 6f 20 61 20 6d 65 67 61 62 79 74 65 20 6c 69  so a megabyte li
1af0: 6d 69 74 20 73 65 65 6d 73 0a 6d 6f 72 65 20 74  mit seems.more t
1b00: 68 61 6e 20 65 6e 6f 75 67 68 2e 0a 3c 2f 70 3e  han enough..</p>
1b10: 0a 0a 3c 70 3e 0a 55 70 20 74 6f 20 32 33 38 20  ..<p>.Up to 238 
1b20: 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64  bytes of payload
1b30: 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 63 61   for an entry ca
1b40: 6e 20 62 65 20 68 65 6c 64 20 64 69 72 65 63 74  n be held direct
1b50: 6c 79 20 6f 6e 0a 61 20 62 2d 74 72 65 65 20 70  ly on.a b-tree p
1b60: 61 67 65 2e 20 20 41 6e 79 20 61 64 64 69 74 69  age.  Any additi
1b70: 6f 6e 61 6c 20 70 61 79 6c 6f 61 64 20 69 73 20  onal payload is 
1b80: 63 6f 6e 74 61 69 6e 65 64 20 6f 6e 20 61 20 6c  contained on a l
1b90: 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 6f 76  inked list.of ov
1ba0: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 54  erflow pages.  T
1bb0: 68 69 73 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65  his limit on the
1bc0: 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f   amount of paylo
1bd0: 61 64 20 68 65 6c 64 20 64 69 72 65 63 74 6c 79  ad held directly
1be0: 0a 6f 6e 20 62 2d 74 72 65 65 20 70 61 67 65 73  .on b-tree pages
1bf0: 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74   guarantees that
1c00: 20 65 61 63 68 20 62 2d 74 72 65 65 20 70 61 67   each b-tree pag
1c10: 65 20 63 61 6e 20 68 6f 6c 64 20 61 74 20 6c 65  e can hold at le
1c20: 61 73 74 0a 34 20 65 6e 74 72 69 65 73 2e 20 20  ast.4 entries.  
1c30: 49 6e 20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73  In practice, mos
1c40: 74 20 65 6e 74 72 69 65 73 20 61 72 65 20 73 6d  t entries are sm
1c50: 61 6c 6c 65 72 20 74 68 61 6e 20 32 33 38 20 62  aller than 238 b
1c60: 79 74 65 73 20 61 6e 64 0a 74 68 75 73 20 6d 6f  ytes and.thus mo
1c70: 73 74 20 70 61 67 65 73 20 63 61 6e 20 68 6f 6c  st pages can hol
1c80: 64 20 6d 6f 72 65 20 74 68 61 6e 20 34 20 65 6e  d more than 4 en
1c90: 74 72 69 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  tries..</p>..<p>
1ca0: 0a 41 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61  .A single databa
1cb0: 73 65 20 66 69 6c 65 20 63 61 6e 20 68 6f 6c 64  se file can hold
1cc0: 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 73   any number of s
1cd0: 65 70 61 72 61 74 65 2c 20 69 6e 64 65 70 65 6e  eparate, indepen
1ce0: 64 65 6e 74 20 62 2d 74 72 65 65 73 2e 0a 45 61  dent b-trees..Ea
1cf0: 63 68 20 62 2d 74 72 65 65 20 69 73 20 69 64 65  ch b-tree is ide
1d00: 6e 74 69 66 69 65 64 20 62 79 20 69 74 73 20 72  ntified by its r
1d10: 6f 6f 74 20 70 61 67 65 2c 20 77 68 69 63 68 20  oot page, which 
1d20: 6e 65 76 65 72 20 63 68 61 6e 67 65 73 2e 0a 43  never changes..C
1d30: 68 69 6c 64 20 70 61 67 65 73 20 6f 66 20 74 68  hild pages of th
1d40: 65 20 62 2d 74 72 65 65 20 6d 61 79 20 63 68 61  e b-tree may cha
1d50: 6e 67 65 20 61 73 20 65 6e 74 72 69 65 73 20 61  nge as entries a
1d60: 72 65 20 61 64 64 65 64 20 61 6e 64 20 72 65 6d  re added and rem
1d70: 6f 76 65 64 0a 61 6e 64 20 70 61 67 65 73 20 73  oved.and pages s
1d80: 70 6c 69 74 20 61 6e 64 20 63 6f 6d 62 69 6e 65  plit and combine
1d90: 2e 20 20 42 75 74 20 74 68 65 20 72 6f 6f 74 20  .  But the root 
1da0: 70 61 67 65 20 61 6c 77 61 79 73 20 73 74 61 79  page always stay
1db0: 73 20 74 68 65 20 73 61 6d 65 2e 0a 54 68 65 20  s the same..The 
1dc0: 62 2d 74 72 65 65 20 69 74 73 65 6c 66 20 64 6f  b-tree itself do
1dd0: 65 73 20 6e 6f 74 20 72 65 63 6f 72 64 20 77 68  es not record wh
1de0: 69 63 68 20 70 61 67 65 73 20 61 72 65 20 72 6f  ich pages are ro
1df0: 6f 74 20 70 61 67 65 73 20 61 6e 64 20 77 68 69  ot pages and whi
1e00: 63 68 0a 61 72 65 20 6e 6f 74 2e 20 20 54 68 61  ch.are not.  Tha
1e10: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  t information is
1e20: 20 68 61 6e 64 6c 65 64 20 65 6e 74 69 72 65 6c   handled entirel
1e30: 79 20 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  y at the schema 
1e40: 6c 61 79 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  layer..</p>..<h3
1e50: 3e 33 2e 31 20 26 6e 62 73 70 3b 20 42 2d 54 72  >3.1 &nbsp; B-Tr
1e60: 65 65 20 50 61 67 65 20 31 20 44 65 74 61 69 6c  ee Page 1 Detail
1e70: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 50 61 67 65  s</h3>..<p>.Page
1e80: 20 31 20 62 65 67 69 6e 73 20 77 69 74 68 20 74   1 begins with t
1e90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 34 38 2d  he following 48-
1ea0: 62 79 74 65 20 73 74 72 69 6e 67 3a 0a 3c 2f 70  byte string:.</p
1eb0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
1ec0: 70 72 65 3e 0a 2a 2a 20 54 68 69 73 20 66 69 6c  pre>.** This fil
1ed0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 53 51  e contains an SQ
1ee0: 4c 69 74 65 20 32 2e 31 20 64 61 74 61 62 61 73  Lite 2.1 databas
1ef0: 65 20 2a 2a 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  e **.</pre></blo
1f00: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 49 66  ckquote>..<p>.If
1f10: 20 79 6f 75 20 63 6f 75 6e 74 20 74 68 65 20 6e   you count the n
1f20: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
1f30: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
1f40: 67 20 61 62 6f 76 65 2c 20 79 6f 75 20 77 69 6c  g above, you wil
1f50: 6c 0a 73 65 65 20 74 68 61 74 20 74 68 65 72 65  l.see that there
1f60: 20 61 72 65 20 6f 6e 6c 79 20 34 37 2e 20 20 41   are only 47.  A
1f70: 20 27 5c 30 30 30 27 20 74 65 72 6d 69 6e 61 74   '\000' terminat
1f80: 6f 72 20 62 79 74 65 20 69 73 20 61 64 64 65 64  or byte is added
1f90: 20 74 6f 0a 62 72 69 6e 67 20 74 68 65 20 74 6f   to.bring the to
1fa0: 74 61 6c 20 74 6f 20 34 38 2e 0a 3c 2f 70 3e 0a  tal to 48..</p>.
1fb0: 0a 3c 70 3e 0a 41 20 66 72 65 71 75 65 6e 74 20  .<p>.A frequent 
1fc0: 71 75 65 73 74 69 6f 6e 20 69 73 20 77 68 79 20  question is why 
1fd0: 74 68 65 20 73 74 72 69 6e 67 20 73 61 79 73 20  the string says 
1fe0: 76 65 72 73 69 6f 6e 20 32 2e 31 20 77 68 65 6e  version 2.1 when
1ff0: 20 28 61 73 0a 6f 66 20 74 68 69 73 20 77 72 69   (as.of this wri
2000: 74 69 6e 67 29 20 77 65 20 61 72 65 20 75 70 20  ting) we are up 
2010: 74 6f 20 76 65 72 73 69 6f 6e 20 32 2e 37 2e 30  to version 2.7.0
2020: 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 61   of SQLite and a
2030: 6e 79 0a 63 68 61 6e 67 65 20 74 6f 20 74 68 65  ny.change to the
2040: 20 73 65 63 6f 6e 64 20 64 69 67 69 74 20 6f 66   second digit of
2050: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 69 73 20   the version is 
2060: 73 75 70 70 6f 73 65 20 74 6f 20 72 65 70 72 65  suppose to repre
2070: 73 65 6e 74 0a 61 20 64 61 74 61 62 61 73 65 20  sent.a database 
2080: 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 2e 20 20  format change.  
2090: 54 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68  The answer to th
20a0: 69 73 20 69 73 20 74 68 61 74 20 74 68 65 20 42  is is that the B
20b0: 2d 74 72 65 65 0a 6c 61 79 65 72 20 68 61 73 20  -tree.layer has 
20c0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 61 6e 79 20  not changed any 
20d0: 73 69 6e 63 65 20 76 65 72 73 69 6f 6e 20 32 2e  since version 2.
20e0: 31 2e 20 20 54 68 65 72 65 20 68 61 76 65 20 62  1.  There have b
20f0: 65 65 6e 0a 64 61 74 61 62 61 73 65 20 66 6f 72  een.database for
2100: 6d 61 74 20 63 68 61 6e 67 65 73 20 73 69 6e 63  mat changes sinc
2110: 65 20 76 65 72 73 69 6f 6e 20 32 2e 31 20 62 75  e version 2.1 bu
2120: 74 20 74 68 6f 73 65 20 63 68 61 6e 67 65 73 20  t those changes 
2130: 68 61 76 65 0a 61 6c 6c 20 62 65 65 6e 20 69 6e  have.all been in
2140: 20 74 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65   the schema laye
2150: 72 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  r.  Because the 
2160: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2170: 74 72 65 65 0a 6c 61 79 65 72 20 69 73 20 75 6e  tree.layer is un
2180: 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 76 65  changed since ve
2190: 72 73 69 6f 6e 20 32 2e 31 2e 30 2c 20 74 68 65  rsion 2.1.0, the
21a0: 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 20 73   header string s
21b0: 74 69 6c 6c 0a 73 61 79 73 20 76 65 72 73 69 6f  till.says versio
21c0: 6e 20 32 2e 31 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  n 2.1..</p>..<p>
21d0: 0a 41 66 74 65 72 20 74 68 65 20 66 6f 72 6d 61  .After the forma
21e0: 74 20 73 74 72 69 6e 67 20 69 73 20 61 20 34 2d  t string is a 4-
21f0: 62 79 74 65 20 69 6e 74 65 67 65 72 20 75 73 65  byte integer use
2200: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
2210: 68 65 0a 62 79 74 65 2d 6f 72 64 65 72 20 6f 66  he.byte-order of
2220: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
2230: 54 68 65 20 69 6e 74 65 67 65 72 20 68 61 73 20  The integer has 
2240: 61 20 76 61 6c 75 65 20 6f 66 0a 30 78 64 61 65  a value of.0xdae
2250: 33 37 35 32 38 2e 20 20 49 66 20 74 68 69 73 20  37528.  If this 
2260: 6e 75 6d 62 65 72 20 69 73 20 65 78 70 72 65 73  number is expres
2270: 73 65 64 20 61 73 20 30 78 64 61 2c 20 30 78 65  sed as 0xda, 0xe
2280: 33 2c 20 30 78 37 35 2c 20 30 78 32 38 2c 20 74  3, 0x75, 0x28, t
2290: 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65  hen.the database
22a0: 20 69 73 20 69 6e 20 61 20 62 69 67 2d 65 6e 64   is in a big-end
22b0: 69 61 6e 20 66 6f 72 6d 61 74 20 61 6e 64 20 61  ian format and a
22c0: 6c 6c 20 31 36 20 61 6e 64 20 33 32 2d 62 69 74  ll 16 and 32-bit
22d0: 20 69 6e 74 65 67 65 72 73 0a 65 6c 73 65 77 68   integers.elsewh
22e0: 65 72 65 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ere in the b-tre
22f0: 65 20 6c 61 79 65 72 20 61 72 65 20 61 6c 73 6f  e layer are also
2300: 20 62 69 67 2d 65 6e 64 69 61 6e 2e 20 20 49 66   big-endian.  If
2310: 20 74 68 65 20 6e 75 6d 62 65 72 20 69 73 0a 65   the number is.e
2320: 78 70 72 65 73 73 65 64 20 61 73 20 30 78 32 38  xpressed as 0x28
2330: 2c 20 30 78 37 35 2c 20 30 78 65 33 2c 20 61 6e  , 0x75, 0xe3, an
2340: 64 20 30 78 64 61 2c 20 74 68 65 6e 20 74 68 65  d 0xda, then the
2350: 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 20   database is in 
2360: 61 0a 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20  a.little-endian 
2370: 66 6f 72 6d 61 74 20 61 6e 64 20 61 6c 6c 20 6f  format and all o
2380: 74 68 65 72 20 6d 75 6c 74 69 2d 62 79 74 65 20  ther multi-byte 
2390: 6e 75 6d 62 65 72 73 20 69 6e 20 74 68 65 20 62  numbers in the b
23a0: 2d 74 72 65 65 20 0a 6c 61 79 65 72 20 61 72 65  -tree .layer are
23b0: 20 61 6c 73 6f 20 6c 69 74 74 6c 65 2d 65 6e 64   also little-end
23c0: 69 61 6e 2e 20 20 0a 50 72 69 6f 72 20 74 6f 20  ian.  .Prior to 
23d0: 76 65 72 73 69 6f 6e 20 32 2e 36 2e 33 2c 20 74  version 2.6.3, t
23e0: 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65  he SQLite engine
23f0: 20 77 61 73 20 6f 6e 6c 79 20 61 62 6c 65 20 74   was only able t
2400: 6f 20 72 65 61 64 20 64 61 74 61 62 61 73 65 73  o read databases
2410: 0a 74 68 61 74 20 75 73 65 64 20 74 68 65 20 73  .that used the s
2420: 61 6d 65 20 62 79 74 65 20 6f 72 64 65 72 20 61  ame byte order a
2430: 73 20 74 68 65 20 70 72 6f 63 65 73 73 6f 72 20  s the processor 
2440: 74 68 65 79 20 77 65 72 65 20 72 75 6e 6e 69 6e  they were runnin
2450: 67 20 6f 6e 2e 0a 42 75 74 20 62 65 67 69 6e 6e  g on..But beginn
2460: 69 6e 67 20 77 69 74 68 20 32 2e 36 2e 33 2c 20  ing with 2.6.3, 
2470: 53 51 4c 69 74 65 20 63 61 6e 20 72 65 61 64 20  SQLite can read 
2480: 6f 72 20 77 72 69 74 65 20 64 61 74 61 62 61 73  or write databas
2490: 65 73 20 69 6e 20 61 6e 79 0a 62 79 74 65 20 6f  es in any.byte o
24a0: 72 64 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  rder..</p>..<p>.
24b0: 41 66 74 65 72 20 74 68 65 20 62 79 74 65 2d 6f  After the byte-o
24c0: 72 64 65 72 20 63 6f 64 65 20 61 72 65 20 73 69  rder code are si
24d0: 78 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  x 4-byte integer
24e0: 73 2e 20 20 45 61 63 68 20 69 6e 74 65 67 65 72  s.  Each integer
24f0: 20 69 73 20 69 6e 20 74 68 65 0a 62 79 74 65 20   is in the.byte 
2500: 6f 72 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64  order determined
2510: 20 62 79 20 74 68 65 20 62 79 74 65 2d 6f 72 64   by the byte-ord
2520: 65 72 20 63 6f 64 65 2e 20 20 54 68 65 20 66 69  er code.  The fi
2530: 72 73 74 20 69 6e 74 65 67 65 72 20 69 73 20 74  rst integer is t
2540: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he.page number f
2550: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
2560: 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73  e of the freelis
2570: 74 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  t.  If there are
2580: 20 6e 6f 20 75 6e 75 73 65 64 0a 70 61 67 65 73   no unused.pages
2590: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
25a0: 2c 20 74 68 65 6e 20 74 68 69 73 20 69 6e 74 65  , then this inte
25b0: 67 65 72 20 69 73 20 30 2e 20 20 54 68 65 20 73  ger is 0.  The s
25c0: 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69 73  econd integer is
25d0: 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 75  .the number of u
25e0: 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e 20 74  nused pages in t
25f0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
2600: 65 20 6c 61 73 74 20 34 20 69 6e 74 65 67 65 72  e last 4 integer
2610: 73 20 61 72 65 0a 6e 6f 74 20 75 73 65 64 20 62  s are.not used b
2620: 79 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  y the b-tree lay
2630: 65 72 2e 20 20 54 68 65 73 65 20 61 72 65 20 74  er.  These are t
2640: 68 65 20 73 6f 2d 63 61 6c 6c 65 64 20 22 6d 65  he so-called "me
2650: 74 61 22 20 76 61 6c 75 65 73 20 74 68 61 74 0a  ta" values that.
2660: 61 72 65 20 70 61 73 73 65 64 20 75 70 20 74 6f  are passed up to
2670: 20 74 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65   the schema laye
2680: 72 0a 61 6e 64 20 75 73 65 64 20 74 68 65 72 65  r.and used there
2690: 20 66 6f 72 20 63 6f 6e 66 69 67 75 72 61 74 69   for configurati
26a0: 6f 6e 20 61 6e 64 20 66 6f 72 6d 61 74 20 76 65  on and format ve
26b0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
26c0: 6e 2e 0a 41 6c 6c 20 62 79 74 65 73 20 6f 66 20  n..All bytes of 
26d0: 70 61 67 65 20 31 20 70 61 73 74 20 62 65 79 6f  page 1 past beyo
26e0: 6e 64 20 74 68 65 20 6d 65 74 61 2d 76 61 6c 75  nd the meta-valu
26f0: 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 75  e integers are u
2700: 6e 75 73 65 64 20 0a 61 6e 64 20 61 72 65 20 69  nused .and are i
2710: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
2720: 72 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 48 65  ro..</p>..<p>.He
2730: 72 65 20 69 73 20 61 20 73 75 6d 6d 61 72 79 20  re is a summary 
2740: 6f 66 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  of the informati
2750: 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 6f 6e 20  on contained on 
2760: 70 61 67 65 20 31 20 69 6e 20 74 68 65 20 62 2d  page 1 in the b-
2770: 74 72 65 65 20 6c 61 79 65 72 3a 0a 3c 2f 70 3e  tree layer:.</p>
2780: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 34 38 20 62 79  ..<ul>.<li>48 by
2790: 74 65 20 68 65 61 64 65 72 20 73 74 72 69 6e 67  te header string
27a0: 3c 2f 6c 69 3e 0a 3c 6c 69 3e 34 20 62 79 74 65  </li>.<li>4 byte
27b0: 20 69 6e 74 65 67 65 72 20 75 73 65 64 20 74 6f   integer used to
27c0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62   determine the b
27d0: 79 74 65 2d 6f 72 64 65 72 3c 2f 6c 69 3e 0a 3c  yte-order</li>.<
27e0: 6c 69 3e 34 20 62 79 74 65 20 69 6e 74 65 67 65  li>4 byte intege
27f0: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 66  r which is the f
2800: 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65  irst page of the
2810: 20 66 72 65 65 6c 69 73 74 3c 2f 6c 69 3e 0a 3c   freelist</li>.<
2820: 6c 69 3e 34 20 62 79 74 65 20 69 6e 74 65 67 65  li>4 byte intege
2830: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6e  r which is the n
2840: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 6f  umber of pages o
2850: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 3c 2f  n the freelist</
2860: 6c 69 3e 0a 3c 6c 69 3e 33 36 20 62 79 74 65 73  li>.<li>36 bytes
2870: 20 6f 66 20 6d 65 74 61 2d 64 61 74 61 20 61 72   of meta-data ar
2880: 72 61 6e 67 65 64 20 61 73 20 6e 69 6e 65 20 34  ranged as nine 4
2890: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 73 3c 2f  -byte integers</
28a0: 6c 69 3e 0a 3c 6c 69 3e 39 32 38 20 62 79 74 65  li>.<li>928 byte
28b0: 73 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63  s of unused spac
28c0: 65 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  e</li>.</ul>..<h
28d0: 33 3e 33 2e 32 20 26 6e 62 73 70 3b 20 53 74 72  3>3.2 &nbsp; Str
28e0: 75 63 74 75 72 65 20 4f 66 20 41 20 53 69 6e 67  ucture Of A Sing
28f0: 6c 65 20 42 2d 54 72 65 65 20 50 61 67 65 3c 2f  le B-Tree Page</
2900: 68 33 3e 0a 0a 3c 70 3e 0a 43 6f 6e 63 65 70 74  h3>..<p>.Concept
2910: 75 61 6c 6c 79 2c 20 61 20 62 2d 74 72 65 65 20  ually, a b-tree 
2920: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 4e 20  page contains N 
2930: 64 61 74 61 62 61 73 65 20 65 6e 74 72 69 65 73  database entries
2940: 20 61 6e 64 20 4e 2b 31 20 70 6f 69 6e 74 65 72   and N+1 pointer
2950: 73 0a 74 6f 20 6f 74 68 65 72 20 62 2d 74 72 65  s.to other b-tre
2960: 65 20 70 61 67 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  e pages..</p>..<
2970: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
2980: 6c 65 20 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c  le border=1 cell
2990: 73 70 61 63 69 6e 67 3d 30 20 63 65 6c 6c 70 61  spacing=0 cellpa
29a0: 64 64 69 6e 67 3d 35 3e 0a 3c 74 72 3e 0a 3c 74  dding=5>.<tr>.<t
29b0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
29c0: 3e 50 74 72 3c 62 72 3e 30 3c 2f 74 64 3e 0a 3c  >Ptr<br>0</td>.<
29d0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
29e0: 22 3e 45 6e 74 72 79 3c 62 72 3e 30 3c 2f 74 64  ">Entry<br>0</td
29f0: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
2a00: 74 65 72 22 3e 50 74 72 3c 62 72 3e 31 3c 2f 74  ter">Ptr<br>1</t
2a10: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
2a20: 6e 74 65 72 22 3e 45 6e 74 72 79 3c 62 72 3e 31  nter">Entry<br>1
2a30: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
2a40: 22 63 65 6e 74 65 72 22 3e 3c 62 3e 2e 2e 2e 3c  "center"><b>...<
2a50: 2f 62 3e 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  /b></td>.<td ali
2a60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 50 74 72 3c  gn="center">Ptr<
2a70: 62 72 3e 4e 2d 31 3c 2f 74 64 3e 0a 3c 74 64 20  br>N-1</td>.<td 
2a80: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 45  align="center">E
2a90: 6e 74 72 79 3c 62 72 3e 4e 2d 31 3c 2f 74 64 3e  ntry<br>N-1</td>
2aa0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
2ab0: 65 72 22 3e 50 74 72 3c 62 72 3e 4e 3c 2f 74 64  er">Ptr<br>N</td
2ac0: 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  >.</tr>.</table>
2ad0: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
2ae0: 3c 70 3e 0a 54 68 65 20 65 6e 74 72 69 65 73 20  <p>.The entries 
2af0: 61 72 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20  are arranged in 
2b00: 69 6e 63 72 65 61 73 69 6e 67 20 6f 72 64 65 72  increasing order
2b10: 2e 20 20 54 68 61 74 20 69 73 2c 20 74 68 65 20  .  That is, the 
2b20: 6b 65 79 20 74 6f 0a 45 6e 74 72 79 20 30 20 69  key to.Entry 0 i
2b30: 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2b40: 6b 65 79 20 74 6f 20 45 6e 74 72 79 20 31 2c 20  key to Entry 1, 
2b50: 61 6e 64 20 74 68 65 20 6b 65 79 20 74 6f 20 45  and the key to E
2b60: 6e 74 72 79 20 31 20 69 73 0a 6c 65 73 73 20 74  ntry 1 is.less t
2b70: 68 61 6e 20 74 68 65 20 6b 65 79 20 6f 66 20 45  han the key of E
2b80: 6e 74 72 79 20 32 2c 20 61 6e 64 20 73 6f 20 66  ntry 2, and so f
2b90: 6f 72 74 68 2e 20 20 54 68 65 20 70 6f 69 6e 74  orth.  The point
2ba0: 65 72 73 20 70 6f 69 6e 74 20 74 6f 0a 70 61 67  ers point to.pag
2bb0: 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 64  es containing ad
2bc0: 64 69 74 69 6f 6e 61 6c 20 65 6e 74 72 69 65 73  ditional entries
2bd0: 20 74 68 61 74 20 68 61 76 65 20 6b 65 79 73 20   that have keys 
2be0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 0a 65  in between the.e
2bf0: 6e 74 72 69 65 73 20 6f 6e 20 65 69 74 68 65 72  ntries on either
2c00: 20 73 69 64 65 2e 20 20 53 6f 20 50 74 72 20 30   side.  So Ptr 0
2c10: 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e 6f 74 68   points to anoth
2c20: 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  er b-tree page t
2c30: 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 65 6e 74  hat.contains ent
2c40: 72 69 65 73 20 74 68 61 74 20 61 6c 6c 20 68 61  ries that all ha
2c50: 76 65 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ve keys less tha
2c60: 6e 20 4b 65 79 20 30 2c 20 61 6e 64 20 50 74 72  n Key 0, and Ptr
2c70: 20 31 0a 70 6f 69 6e 74 73 20 74 6f 20 61 20 62   1.points to a b
2c80: 2d 74 72 65 65 20 70 61 67 65 73 20 77 68 65 72  -tree pages wher
2c90: 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 68 61  e all entries ha
2ca0: 76 65 20 6b 65 79 73 20 67 72 65 61 74 65 72 20  ve keys greater 
2cb0: 74 68 61 6e 20 4b 65 79 20 30 0a 62 75 74 20 6c  than Key 0.but l
2cc0: 65 73 73 20 74 68 61 6e 20 4b 65 79 20 31 2c 20  ess than Key 1, 
2cd0: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 3c 2f  and so forth..</
2ce0: 70 3e 0a 0a 3c 70 3e 0a 45 61 63 68 20 62 2d 74  p>..<p>.Each b-t
2cf0: 72 65 65 20 70 61 67 65 20 69 6e 20 53 51 4c 69  ree page in SQLi
2d00: 74 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  te consists of a
2d10: 20 68 65 61 64 65 72 2c 20 7a 65 72 6f 20 6f 72   header, zero or
2d20: 20 6d 6f 72 65 20 22 63 65 6c 6c 73 22 0a 65 61   more "cells".ea
2d30: 63 68 20 68 6f 6c 64 69 6e 67 20 61 20 73 69 6e  ch holding a sin
2d40: 67 6c 65 20 65 6e 74 72 79 20 61 6e 64 20 70 6f  gle entry and po
2d50: 69 6e 74 65 72 2c 20 61 6e 64 20 7a 65 72 6f 20  inter, and zero 
2d60: 6f 72 20 6d 6f 72 65 20 22 66 72 65 65 20 62 6c  or more "free bl
2d70: 6f 63 6b 73 22 0a 74 68 61 74 20 72 65 70 72 65  ocks".that repre
2d80: 73 65 6e 74 20 75 6e 75 73 65 64 20 73 70 61 63  sent unused spac
2d90: 65 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c  e on the page..<
2da0: 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 68 65 61  /p>..<p>.The hea
2db0: 64 65 72 20 6f 6e 20 61 20 62 2d 74 72 65 65 20  der on a b-tree 
2dc0: 70 61 67 65 20 69 73 20 74 68 65 20 66 69 72 73  page is the firs
2dd0: 74 20 38 20 62 79 74 65 73 20 6f 66 20 74 68 65  t 8 bytes of the
2de0: 20 70 61 67 65 2e 0a 54 68 65 20 68 65 61 64 65   page..The heade
2df0: 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  r contains the v
2e00: 61 6c 75 65 0a 6f 66 20 74 68 65 20 72 69 67 68  alue.of the righ
2e10: 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20 28  t-most pointer (
2e20: 50 74 72 20 4e 29 20 61 6e 64 20 74 68 65 20 62  Ptr N) and the b
2e30: 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20  yte offset into 
2e40: 74 68 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20  the page.of the 
2e50: 66 69 72 73 74 20 63 65 6c 6c 20 61 6e 64 20 74  first cell and t
2e60: 68 65 20 66 69 72 73 74 20 66 72 65 65 20 62 6c  he first free bl
2e70: 6f 63 6b 2e 20 20 54 68 65 20 70 6f 69 6e 74 65  ock.  The pointe
2e80: 72 20 69 73 20 61 20 33 32 2d 62 69 74 0a 76 61  r is a 32-bit.va
2e90: 6c 75 65 20 61 6e 64 20 74 68 65 20 6f 66 66 73  lue and the offs
2ea0: 65 74 73 20 61 72 65 20 65 61 63 68 20 31 36 2d  ets are each 16-
2eb0: 62 69 74 20 76 61 6c 75 65 73 2e 20 20 57 65 20  bit values.  We 
2ec0: 68 61 76 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  have:.</p>..<blo
2ed0: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
2ee0: 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c 73 70 61  border=1 cellspa
2ef0: 63 69 6e 67 3d 30 20 63 65 6c 6c 70 61 64 64 69  cing=0 cellpaddi
2f00: 6e 67 3d 35 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  ng=5>.<tr>.<td a
2f10: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69  lign="center" wi
2f20: 64 74 68 3d 33 30 3e 30 3c 2f 74 64 3e 0a 3c 74  dth=30>0</td>.<t
2f30: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
2f40: 20 77 69 64 74 68 3d 33 30 3e 31 3c 2f 74 64 3e   width=30>1</td>
2f50: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
2f60: 65 72 22 20 77 69 64 74 68 3d 33 30 3e 32 3c 2f  er" width=30>2</
2f70: 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  td>.<td align="c
2f80: 65 6e 74 65 72 22 20 77 69 64 74 68 3d 33 30 3e  enter" width=30>
2f90: 33 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e  3</td>.<td align
2fa0: 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d  ="center" width=
2fb0: 33 30 3e 34 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c  30>4</td>.<td al
2fc0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64  ign="center" wid
2fd0: 74 68 3d 33 30 3e 35 3c 2f 74 64 3e 0a 3c 74 64  th=30>5</td>.<td
2fe0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
2ff0: 77 69 64 74 68 3d 33 30 3e 36 3c 2f 74 64 3e 0a  width=30>6</td>.
3000: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
3010: 72 22 20 77 69 64 74 68 3d 33 30 3e 37 3c 2f 74  r" width=30>7</t
3020: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
3030: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
3040: 20 63 6f 6c 73 70 61 6e 3d 34 3e 50 74 72 20 4e   colspan=4>Ptr N
3050: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
3060: 22 63 65 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e  "center" colspan
3070: 3d 32 3e 43 65 6c 6c 20 30 3c 2f 74 64 3e 0a 3c  =2>Cell 0</td>.<
3080: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
3090: 22 20 63 6f 6c 73 70 61 6e 3d 32 3e 46 72 65 65  " colspan=2>Free
30a0: 62 6c 6f 63 6b 20 30 3c 2f 74 64 3e 0a 3c 2f 74  block 0</td>.</t
30b0: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
30c0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54  ockquote>..<p>.T
30d0: 68 65 20 31 30 31 36 20 62 79 74 65 73 20 6f 66  he 1016 bytes of
30e0: 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 74   a b-tree page t
30f0: 68 61 74 20 63 6f 6d 65 20 61 66 74 65 72 20 74  hat come after t
3100: 68 65 20 68 65 61 64 65 72 20 63 6f 6e 74 61 69  he header contai
3110: 6e 0a 63 65 6c 6c 73 20 61 6e 64 20 66 72 65 65  n.cells and free
3120: 62 6c 6f 63 6b 73 2e 20 20 41 6c 6c 20 31 30 31  blocks.  All 101
3130: 36 20 62 79 74 65 73 20 61 72 65 20 63 6f 76 65  6 bytes are cove
3140: 72 65 64 20 62 79 20 65 69 74 68 65 72 20 61 20  red by either a 
3150: 63 65 6c 6c 0a 6f 72 20 61 20 66 72 65 65 62 6c  cell.or a freebl
3160: 6f 63 6b 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  ock..</p>..<p>.T
3170: 68 65 20 63 65 6c 6c 73 20 61 72 65 20 63 6f 6e  he cells are con
3180: 6e 65 63 74 65 64 20 69 6e 20 61 20 6c 69 6e 6b  nected in a link
3190: 65 64 20 6c 69 73 74 2e 20 20 43 65 6c 6c 20 30  ed list.  Cell 0
31a0: 20 63 6f 6e 74 61 69 6e 73 20 50 74 72 20 30 20   contains Ptr 0 
31b0: 61 6e 64 0a 45 6e 74 72 79 20 30 2e 20 20 42 79  and.Entry 0.  By
31c0: 74 65 73 20 34 20 61 6e 64 20 35 20 6f 66 20 74  tes 4 and 5 of t
31d0: 68 65 20 68 65 61 64 65 72 20 70 6f 69 6e 74 20  he header point 
31e0: 74 6f 20 43 65 6c 6c 20 30 2e 20 20 43 65 6c 6c  to Cell 0.  Cell
31f0: 20 30 20 74 68 65 6e 0a 70 6f 69 6e 74 73 20 74   0 then.points t
3200: 6f 20 43 65 6c 6c 20 31 20 77 68 69 63 68 20 63  o Cell 1 which c
3210: 6f 6e 74 61 69 6e 73 20 50 74 72 20 31 20 61 6e  ontains Ptr 1 an
3220: 64 20 45 6e 74 72 79 20 31 2e 20 20 41 6e 64 20  d Entry 1.  And 
3230: 73 6f 20 66 6f 72 74 68 2e 0a 43 65 6c 6c 73 20  so forth..Cells 
3240: 76 61 72 79 20 69 6e 20 73 69 7a 65 2e 20 20 45  vary in size.  E
3250: 76 65 72 79 20 63 65 6c 6c 20 68 61 73 20 61 20  very cell has a 
3260: 31 32 2d 62 79 74 65 20 68 65 61 64 65 72 20 61  12-byte header a
3270: 6e 64 20 61 74 20 6c 65 61 73 74 20 34 0a 62 79  nd at least 4.by
3280: 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 20 73  tes of payload s
3290: 70 61 63 65 2e 20 20 53 70 61 63 65 20 69 73 20  pace.  Space is 
32a0: 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 70 61 79  allocated to pay
32b0: 6c 6f 61 64 20 69 6e 20 69 6e 63 72 65 6d 65 6e  load in incremen
32c0: 74 73 0a 6f 66 20 34 20 62 79 74 65 73 2e 20 20  ts.of 4 bytes.  
32d0: 54 68 75 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  Thus the minimum
32e0: 20 73 69 7a 65 20 6f 66 20 61 20 63 65 6c 6c 20   size of a cell 
32f0: 69 73 20 31 36 20 62 79 74 65 73 20 61 6e 64 20  is 16 bytes and 
3300: 75 70 20 74 6f 0a 36 33 20 63 65 6c 6c 73 20 63  up to.63 cells c
3310: 61 6e 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  an fit on a sing
3320: 6c 65 20 70 61 67 65 2e 20 20 54 68 65 20 73 69  le page.  The si
3330: 7a 65 20 6f 66 20 61 20 63 65 6c 6c 20 69 73 20  ze of a cell is 
3340: 61 6c 77 61 79 73 20 61 20 6d 75 6c 74 69 70 6c  always a multipl
3350: 65 0a 6f 66 20 34 20 62 79 74 65 73 2e 0a 41 20  e.of 4 bytes..A 
3360: 63 65 6c 6c 20 63 61 6e 20 68 61 76 65 20 75 70  cell can have up
3370: 20 74 6f 20 32 33 38 20 62 79 74 65 73 20 6f 66   to 238 bytes of
3380: 20 70 61 79 6c 6f 61 64 20 73 70 61 63 65 2e 20   payload space. 
3390: 20 49 66 0a 74 68 65 20 70 61 79 6c 6f 61 64 20   If.the payload 
33a0: 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 32 33 38  is more than 238
33b0: 20 62 79 74 65 73 2c 20 74 68 65 6e 20 61 6e 20   bytes, then an 
33c0: 61 64 64 69 74 69 6f 6e 61 6c 20 34 20 62 79 74  additional 4 byt
33d0: 65 20 70 61 67 65 0a 6e 75 6d 62 65 72 20 69 73  e page.number is
33e0: 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
33f0: 20 63 65 6c 6c 20 77 68 69 63 68 20 69 73 20 74   cell which is t
3400: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
3410: 66 20 74 68 65 20 66 69 72 73 74 0a 6f 76 65 72  f the first.over
3420: 66 6c 6f 77 20 70 61 67 65 20 63 6f 6e 74 61 69  flow page contai
3430: 6e 69 6e 67 20 74 68 65 20 61 64 64 69 74 69 6f  ning the additio
3440: 6e 61 6c 20 70 61 79 6c 6f 61 64 2e 20 20 54 68  nal payload.  Th
3450: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 0a 6f  e maximum size.o
3460: 66 20 61 20 63 65 6c 6c 20 69 73 20 74 68 75 73  f a cell is thus
3470: 20 32 35 34 20 62 79 74 65 73 2c 20 6d 65 61 6e   254 bytes, mean
3480: 69 6e 67 20 74 68 61 74 20 61 20 6c 65 61 73 74  ing that a least
3490: 20 34 20 63 65 6c 6c 73 20 63 61 6e 20 66 69 74   4 cells can fit
34a0: 20 69 6e 74 6f 0a 74 68 65 20 31 30 31 36 20 62   into.the 1016 b
34b0: 79 74 65 73 20 6f 66 20 73 70 61 63 65 20 61 76  ytes of space av
34c0: 61 69 6c 61 62 6c 65 20 6f 6e 20 61 20 62 2d 74  ailable on a b-t
34d0: 72 65 65 20 70 61 67 65 2e 0a 41 6e 20 61 76 65  ree page..An ave
34e0: 72 61 67 65 20 63 65 6c 6c 20 69 73 20 75 73 75  rage cell is usu
34f0: 61 6c 6c 79 20 61 72 6f 75 6e 64 20 35 32 20 74  ally around 52 t
3500: 6f 20 31 30 30 20 62 79 74 65 73 20 69 6e 20 73  o 100 bytes in s
3510: 69 7a 65 20 77 69 74 68 20 61 62 6f 75 74 0a 31  ize with about.1
3520: 30 20 6f 72 20 32 30 20 63 65 6c 6c 73 20 74 6f  0 or 20 cells to
3530: 20 61 20 70 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c   a page..</p>..<
3540: 70 3e 0a 54 68 65 20 64 61 74 61 20 6c 61 79 6f  p>.The data layo
3550: 75 74 20 6f 66 20 61 20 63 65 6c 6c 20 6c 6f 6f  ut of a cell loo
3560: 6b 73 20 6c 69 6b 65 20 74 68 69 73 3a 0a 3c 2f  ks like this:.</
3570: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
3580: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
3590: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63   cellspacing=0 c
35a0: 65 6c 6c 70 61 64 64 69 6e 67 3d 35 3e 0a 3c 74  ellpadding=5>.<t
35b0: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
35c0: 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 30  nter" width=20>0
35d0: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
35e0: 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32  "center" width=2
35f0: 30 3e 31 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  0>1</td>.<td ali
3600: 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74  gn="center" widt
3610: 68 3d 32 30 3e 32 3c 2f 74 64 3e 0a 3c 74 64 20  h=20>2</td>.<td 
3620: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77  align="center" w
3630: 69 64 74 68 3d 32 30 3e 33 3c 2f 74 64 3e 0a 3c  idth=20>3</td>.<
3640: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
3650: 22 20 77 69 64 74 68 3d 32 30 3e 34 3c 2f 74 64  " width=20>4</td
3660: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
3670: 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 35 3c  ter" width=20>5<
3680: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
3690: 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30  center" width=20
36a0: 3e 36 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67  >6</td>.<td alig
36b0: 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74 68  n="center" width
36c0: 3d 32 30 3e 37 3c 2f 74 64 3e 0a 3c 74 64 20 61  =20>7</td>.<td a
36d0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69  lign="center" wi
36e0: 64 74 68 3d 32 30 3e 38 3c 2f 74 64 3e 0a 3c 74  dth=20>8</td>.<t
36f0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
3700: 20 77 69 64 74 68 3d 32 30 3e 39 3c 2f 74 64 3e   width=20>9</td>
3710: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
3720: 65 72 22 20 77 69 64 74 68 3d 32 30 3e 31 30 3c  er" width=20>10<
3730: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
3740: 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30  center" width=20
3750: 3e 31 31 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  >11</td>.<td ali
3760: 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74  gn="center" widt
3770: 68 3d 31 30 30 3e 31 32 20 2e 2e 2e 20 32 34 39  h=100>12 ... 249
3780: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
3790: 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32  "center" width=2
37a0: 30 3e 32 35 30 3c 2f 74 64 3e 0a 3c 74 64 20 61  0>250</td>.<td a
37b0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69  lign="center" wi
37c0: 64 74 68 3d 32 30 3e 32 35 31 3c 2f 74 64 3e 0a  dth=20>251</td>.
37d0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
37e0: 72 22 20 77 69 64 74 68 3d 32 30 3e 32 35 32 3c  r" width=20>252<
37f0: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
3800: 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30  center" width=20
3810: 3e 32 35 33 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  >253</td>.</tr>.
3820: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
3830: 63 65 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d  center" colspan=
3840: 34 3e 50 74 72 3c 2f 74 64 3e 0a 3c 74 64 20 61  4>Ptr</td>.<td a
3850: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 63 6f  lign="center" co
3860: 6c 73 70 61 6e 3d 32 3e 4b 65 79 73 69 7a 65 3c  lspan=2>Keysize<
3870: 62 72 3e 28 6c 6f 77 29 3c 2f 74 64 3e 0a 3c 74  br>(low)</td>.<t
3880: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
3890: 20 63 6f 6c 73 70 61 6e 3d 32 3e 4e 65 78 74 3c   colspan=2>Next<
38a0: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
38b0: 63 65 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d  center" colspan=
38c0: 31 3e 4b 73 7a 3c 62 72 3e 28 68 69 29 3c 2f 74  1>Ksz<br>(hi)</t
38d0: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
38e0: 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d 31 3e  nter" colspan=1>
38f0: 44 73 7a 3c 62 72 3e 28 68 69 29 3c 2f 74 64 3e  Dsz<br>(hi)</td>
3900: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
3910: 65 72 22 20 63 6f 6c 73 70 61 6e 3d 32 3e 44 61  er" colspan=2>Da
3920: 74 61 73 69 7a 65 3c 62 72 3e 28 6c 6f 77 29 3c  tasize<br>(low)<
3930: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
3940: 63 65 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d  center" colspan=
3950: 31 3e 50 61 79 6c 6f 61 64 3c 2f 74 64 3e 0a 3c  1>Payload</td>.<
3960: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
3970: 22 20 63 6f 6c 73 70 61 6e 3d 34 3e 4f 76 65 72  " colspan=4>Over
3980: 66 6c 6f 77 3c 62 72 3e 50 6f 69 6e 74 65 72 3c  flow<br>Pointer<
3990: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62  /td>.</tr>.</tab
39a0: 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
39b0: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 69 72 73 74  >..<p>.The first
39c0: 20 66 6f 75 72 20 62 79 74 65 73 20 61 72 65 20   four bytes are 
39d0: 74 68 65 20 70 6f 69 6e 74 65 72 2e 20 20 54 68  the pointer.  Th
39e0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6b 65  e size of the ke
39f0: 79 20 69 73 20 61 20 32 34 2d 62 69 74 0a 77 68  y is a 24-bit.wh
3a00: 65 72 65 20 74 68 65 20 75 70 70 65 72 20 38 20  ere the upper 8 
3a10: 62 69 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  bits are taken f
3a20: 72 6f 6d 20 62 79 74 65 20 38 20 61 6e 64 20 74  rom byte 8 and t
3a30: 68 65 20 6c 6f 77 65 72 20 31 36 20 62 69 74 73  he lower 16 bits
3a40: 20 61 72 65 0a 74 61 6b 65 6e 20 66 72 6f 6d 20   are.taken from 
3a50: 62 79 74 65 73 20 34 20 61 6e 64 20 35 20 28 6f  bytes 4 and 5 (o
3a60: 72 20 62 79 74 65 73 20 35 20 61 6e 64 20 34 20  r bytes 5 and 4 
3a70: 6f 6e 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e  on little-endian
3a80: 20 6d 61 63 68 69 6e 65 73 2e 29 0a 54 68 65 20   machines.).The 
3a90: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
3aa0: 20 69 73 20 61 6e 6f 74 68 65 72 20 32 34 2d 62   is another 24-b
3ab0: 69 74 20 76 61 6c 75 65 20 77 68 65 72 65 20 74  it value where t
3ac0: 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73 0a  he upper 8 bits.
3ad0: 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 62  are taken from b
3ae0: 79 74 65 20 39 20 61 6e 64 20 74 68 65 20 6c 6f  yte 9 and the lo
3af0: 77 65 72 20 31 36 20 62 69 74 73 20 61 72 65 20  wer 16 bits are 
3b00: 74 61 6b 65 6e 20 66 72 6f 6d 20 62 79 74 65 73  taken from bytes
3b10: 20 31 30 20 61 6e 64 0a 31 31 20 6f 72 20 31 31   10 and.11 or 11
3b20: 20 61 6e 64 20 31 30 2c 20 64 65 70 65 6e 64 69   and 10, dependi
3b30: 6e 67 20 6f 6e 20 74 68 65 20 62 79 74 65 20 6f  ng on the byte o
3b40: 72 64 65 72 2e 20 20 42 79 74 65 73 20 36 20 61  rder.  Bytes 6 a
3b50: 6e 64 20 37 20 61 72 65 20 74 68 65 0a 6f 66 66  nd 7 are the.off
3b60: 73 65 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  set to the next 
3b70: 63 65 6c 6c 20 69 6e 20 74 68 65 20 6c 69 6e 6b  cell in the link
3b80: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63  ed list of all c
3b90: 65 6c 6c 73 20 6f 6e 20 74 68 65 20 63 75 72 72  ells on the curr
3ba0: 65 6e 74 0a 70 61 67 65 2e 20 20 54 68 69 73 20  ent.page.  This 
3bb0: 6f 66 66 73 65 74 20 69 73 20 30 20 66 6f 72 20  offset is 0 for 
3bc0: 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 6f 6e  the last cell on
3bd0: 20 74 68 65 20 70 61 67 65 2e 0a 3c 2f 70 3e 0a   the page..</p>.
3be0: 0a 3c 70 3e 0a 54 68 65 20 70 61 79 6c 6f 61 64  .<p>.The payload
3bf0: 20 69 74 73 65 6c 66 20 63 61 6e 20 62 65 20 61   itself can be a
3c00: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  ny number of byt
3c10: 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  es between 1 and
3c20: 20 31 30 34 38 35 37 36 2e 0a 42 75 74 20 73 70   1048576..But sp
3c30: 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
3c40: 70 61 79 6c 6f 61 64 20 69 73 20 61 6c 6c 6f 63  payload is alloc
3c50: 61 74 65 64 20 69 6e 20 34 2d 62 79 74 65 20 63  ated in 4-byte c
3c60: 68 75 6e 6b 73 20 75 70 20 74 6f 0a 32 33 38 20  hunks up to.238 
3c70: 62 79 74 65 73 2e 20 20 49 66 20 74 68 65 20 65  bytes.  If the e
3c80: 6e 74 72 79 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  ntry contains mo
3c90: 72 65 20 74 68 61 6e 20 32 33 38 20 62 79 74 65  re than 238 byte
3ca0: 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 74 68  s of payload, th
3cb0: 65 6e 0a 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  en.additional pa
3cc0: 79 6c 6f 61 64 20 64 61 74 61 20 69 73 20 73 74  yload data is st
3cd0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
3ce0: 20 6c 69 73 74 20 6f 66 20 6f 76 65 72 66 6c 6f   list of overflo
3cf0: 77 20 70 61 67 65 73 2e 0a 41 20 34 20 62 79 74  w pages..A 4 byt
3d00: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e page number is
3d10: 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
3d20: 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
3d30: 69 6e 73 20 74 68 65 20 66 69 72 73 74 0a 70 61  ins the first.pa
3d40: 67 65 20 6f 66 20 74 68 69 73 20 6c 69 6e 6b 65  ge of this linke
3d50: 64 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70  d list..</p>..<p
3d60: 3e 0a 45 61 63 68 20 6f 76 65 72 66 6c 6f 77 20  >.Each overflow 
3d70: 70 61 67 65 20 62 65 67 69 6e 73 20 77 69 74 68  page begins with
3d80: 20 61 20 34 2d 62 79 74 65 20 76 61 6c 75 65 20   a 4-byte value 
3d90: 77 68 69 63 68 20 69 73 20 74 68 65 0a 70 61 67  which is the.pag
3da0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
3db0: 6e 65 78 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  next overflow pa
3dc0: 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 2e 20  ge in the list. 
3dd0: 20 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 0a    This value is.
3de0: 30 20 66 6f 72 20 74 68 65 20 6c 61 73 74 20 70  0 for the last p
3df0: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 2e  age in the list.
3e00: 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 0a    The remaining.
3e10: 31 30 32 30 20 62 79 74 65 73 20 6f 66 20 74 68  1020 bytes of th
3e20: 65 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e overflow page 
3e30: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
3e40: 72 20 73 74 6f 72 69 6e 67 20 70 61 79 6c 6f 61  r storing payloa
3e50: 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20 61 20 66  d..Note that a f
3e60: 75 6c 6c 20 70 61 67 65 20 69 73 20 61 6c 6c 6f  ull page is allo
3e70: 63 61 74 65 64 20 72 65 67 61 72 64 6c 65 73 73  cated regardless
3e80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3e90: 66 20 6f 76 65 72 66 6c 6f 77 0a 62 79 74 65 73  f overflow.bytes
3ea0: 20 73 74 6f 72 65 64 2e 20 20 54 68 75 73 2c 20   stored.  Thus, 
3eb0: 69 66 20 74 68 65 20 74 6f 74 61 6c 20 70 61 79  if the total pay
3ec0: 6c 6f 61 64 20 66 6f 72 20 61 6e 20 65 6e 74 72  load for an entr
3ed0: 79 20 69 73 20 32 33 39 20 62 79 74 65 73 2c 0a  y is 239 bytes,.
3ee0: 74 68 65 20 66 69 72 73 74 20 32 33 38 20 61 72  the first 238 ar
3ef0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
3f00: 63 65 6c 6c 20 61 6e 64 20 74 68 65 20 6f 76 65  cell and the ove
3f10: 72 66 6c 6f 77 20 70 61 67 65 20 73 74 6f 72 65  rflow page store
3f20: 73 20 6a 75 73 74 0a 6f 6e 65 20 62 79 74 65 2e  s just.one byte.
3f30: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 73  .</p>..<p>.The s
3f40: 74 72 75 63 74 75 72 65 20 6f 66 20 61 6e 20 6f  tructure of an o
3f50: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 6f 6f  verflow page loo
3f60: 6b 73 20 6c 69 6b 65 20 74 68 69 73 3a 0a 3c 2f  ks like this:.</
3f70: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
3f80: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
3f90: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63   cellspacing=0 c
3fa0: 65 6c 6c 70 61 64 64 69 6e 67 3d 35 3e 0a 3c 74  ellpadding=5>.<t
3fb0: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
3fc0: 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 30  nter" width=20>0
3fd0: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
3fe0: 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32  "center" width=2
3ff0: 30 3e 31 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  0>1</td>.<td ali
4000: 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74  gn="center" widt
4010: 68 3d 32 30 3e 32 3c 2f 74 64 3e 0a 3c 74 64 20  h=20>2</td>.<td 
4020: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77  align="center" w
4030: 69 64 74 68 3d 32 30 3e 33 3c 2f 74 64 3e 0a 3c  idth=20>3</td>.<
4040: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
4050: 22 20 77 69 64 74 68 3d 32 30 30 3e 34 20 2e 2e  " width=200>4 ..
4060: 2e 20 31 30 32 33 3c 2f 74 64 3e 0a 3c 2f 74 72  . 1023</td>.</tr
4070: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
4080: 3d 22 63 65 6e 74 65 72 22 20 63 6f 6c 73 70 61  ="center" colspa
4090: 6e 3d 34 3e 4e 65 78 74 20 50 61 67 65 3c 2f 74  n=4>Next Page</t
40a0: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
40b0: 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d 31 3e  nter" colspan=1>
40c0: 4f 76 65 72 66 6c 6f 77 20 44 61 74 61 3c 2f 74  Overflow Data</t
40d0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
40e0: 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
40f0: 0a 3c 70 3e 0a 41 6c 6c 20 73 70 61 63 65 20 6f  .<p>.All space o
4100: 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20  n a b-tree page 
4110: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 75 73 65  which is not use
4120: 64 20 62 79 20 74 68 65 20 68 65 61 64 65 72 20  d by the header 
4130: 6f 72 20 62 79 20 63 65 6c 6c 73 0a 69 73 20 66  or by cells.is f
4140: 69 6c 6c 65 64 20 62 79 20 66 72 65 65 62 6c 6f  illed by freeblo
4150: 63 6b 73 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73  cks.  Freeblocks
4160: 2c 20 6c 69 6b 65 20 63 65 6c 6c 73 2c 20 61 72  , like cells, ar
4170: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 73 69  e variable in si
4180: 7a 65 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20  ze..The size of 
4190: 61 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61  a freeblock is a
41a0: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
41b0: 61 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20  and is always a 
41c0: 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 34 20 62 79  multiple of.4 by
41d0: 74 65 73 2e 0a 54 68 65 20 66 69 72 73 74 20 34  tes..The first 4
41e0: 20 62 79 74 65 73 20 63 6f 6e 74 61 69 6e 20 61   bytes contain a
41f0: 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 65 20   header and the 
4200: 72 65 6d 61 69 6e 69 6e 67 20 62 79 74 65 73 0a  remaining bytes.
4210: 61 72 65 20 75 6e 75 73 65 64 2e 20 20 54 68 65  are unused.  The
4220: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
4230: 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61  e freeblock is a
4240: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
4250: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
4260: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 63 65  able border=1 ce
4270: 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63 65 6c 6c  llspacing=0 cell
4280: 70 61 64 64 69 6e 67 3d 35 3e 0a 3c 74 72 3e 0a  padding=5>.<tr>.
4290: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
42a0: 72 22 20 77 69 64 74 68 3d 32 30 3e 30 3c 2f 74  r" width=20>0</t
42b0: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
42c0: 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 31  nter" width=20>1
42d0: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
42e0: 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32  "center" width=2
42f0: 30 3e 32 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  0>2</td>.<td ali
4300: 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74  gn="center" widt
4310: 68 3d 32 30 3e 33 3c 2f 74 64 3e 0a 3c 74 64 20  h=20>3</td>.<td 
4320: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77  align="center" w
4330: 69 64 74 68 3d 32 30 30 3e 34 20 2e 2e 2e 20 31  idth=200>4 ... 1
4340: 30 31 35 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  015</td>.</tr>.<
4350: 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
4360: 65 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d 32  enter" colspan=2
4370: 3e 53 69 7a 65 3c 2f 74 64 3e 0a 3c 74 64 20 61  >Size</td>.<td a
4380: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 63 6f  lign="center" co
4390: 6c 73 70 61 6e 3d 32 3e 4e 65 78 74 3c 2f 74 64  lspan=2>Next</td
43a0: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
43b0: 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d 31 3e 55  ter" colspan=1>U
43c0: 6e 75 73 65 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  nused</td>.</tr>
43d0: 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
43e0: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 46 72 65  kquote>..<p>.Fre
43f0: 65 62 6c 6f 63 6b 73 20 61 72 65 20 73 74 6f 72  eblocks are stor
4400: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
4410: 69 73 74 20 69 6e 20 69 6e 63 72 65 61 73 69 6e  ist in increasin
4420: 67 20 6f 72 64 65 72 2e 20 20 54 68 61 74 20 69  g order.  That i
4430: 73 0a 74 6f 20 73 61 79 2c 20 74 68 65 20 66 69  s.to say, the fi
4440: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 20 6f 63  rst freeblock oc
4450: 63 75 72 73 20 61 74 20 61 20 6c 6f 77 65 72 20  curs at a lower 
4460: 69 6e 64 65 78 20 69 6e 74 6f 20 74 68 65 20 70  index into the p
4470: 61 67 65 20 74 68 61 6e 0a 74 68 65 20 73 65 63  age than.the sec
4480: 6f 6e 64 20 66 72 65 65 20 62 6c 6f 63 6b 2c 20  ond free block, 
4490: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 54  and so forth.  T
44a0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
44b0: 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 0a 61   of the header.a
44c0: 72 65 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  re an integer wh
44d0: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
44e0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
44f0: 20 69 6e 20 74 68 65 20 66 72 65 65 62 6c 6f 63   in the freebloc
4500: 6b 2e 0a 54 68 65 20 73 65 63 6f 6e 64 20 32 20  k..The second 2 
4510: 62 79 74 65 73 20 61 72 65 20 74 68 65 20 69 6e  bytes are the in
4520: 64 65 78 20 69 6e 74 6f 20 74 68 65 20 70 61 67  dex into the pag
4530: 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  e of the next fr
4540: 65 65 62 6c 6f 63 6b 0a 69 6e 20 74 68 65 20 6c  eeblock.in the l
4550: 69 73 74 2e 20 20 54 68 65 20 6c 61 73 74 20 66  ist.  The last f
4560: 72 65 65 62 6c 6f 63 6b 20 68 61 73 20 61 20 4e  reeblock has a N
4570: 65 78 74 20 76 61 6c 75 65 20 6f 66 20 30 2e 0a  ext value of 0..
4580: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 57 68 65 6e 20 61  </p>..<p>.When a
4590: 20 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 63   new b-tree is c
45a0: 72 65 61 74 65 64 20 69 6e 20 61 20 64 61 74 61  reated in a data
45b0: 62 61 73 65 2c 20 74 68 65 20 72 6f 6f 74 20 70  base, the root p
45c0: 61 67 65 20 6f 66 20 74 68 65 20 62 2d 74 72 65  age of the b-tre
45d0: 65 0a 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 68  e.consist of a h
45e0: 65 61 64 65 72 20 61 6e 64 20 61 20 73 69 6e 67  eader and a sing
45f0: 6c 65 20 31 30 31 36 20 62 79 74 65 20 66 72 65  le 1016 byte fre
4600: 65 62 6c 6f 63 6b 2e 20 20 41 73 20 65 6e 74 72  eblock.  As entr
4610: 69 65 73 20 61 72 65 0a 61 64 64 65 64 2c 20 73  ies are.added, s
4620: 70 61 63 65 20 69 73 20 63 61 72 76 65 64 20 6f  pace is carved o
4630: 66 66 20 6f 66 20 74 68 61 74 20 66 72 65 65 62  ff of that freeb
4640: 6c 6f 63 6b 20 61 6e 64 20 75 73 65 64 20 74 6f  lock and used to
4650: 20 6d 61 6b 65 20 63 65 6c 6c 73 2e 0a 57 68 65   make cells..Whe
4660: 6e 20 62 2d 74 72 65 65 20 65 6e 74 72 69 65 73  n b-tree entries
4670: 20 61 72 65 20 64 65 6c 65 74 65 64 2c 20 74 68   are deleted, th
4680: 65 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20  e space used by 
4690: 74 68 65 69 72 20 63 65 6c 6c 73 20 69 73 20 63  their cells is c
46a0: 6f 6e 76 65 72 74 65 64 0a 69 6e 74 6f 20 66 72  onverted.into fr
46b0: 65 65 62 6c 6f 63 6b 73 2e 20 20 41 64 6a 61 63  eeblocks.  Adjac
46c0: 65 6e 74 20 66 72 65 65 62 6c 6f 63 6b 73 20 61  ent freeblocks a
46d0: 72 65 20 6d 65 72 67 65 64 2c 20 62 75 74 20 74  re merged, but t
46e0: 68 65 20 70 61 67 65 20 63 61 6e 20 73 74 69 6c  he page can stil
46f0: 6c 0a 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e  l.become fragmen
4700: 74 65 64 2e 20 20 54 68 65 20 62 2d 74 72 65 65  ted.  The b-tree
4710: 20 63 6f 64 65 20 77 69 6c 6c 20 6f 63 63 61 73   code will occas
4720: 69 6f 6e 61 6c 6c 79 20 74 72 79 20 74 6f 20 64  ionally try to d
4730: 65 66 72 61 67 6d 65 6e 74 0a 74 68 65 20 70 61  efragment.the pa
4740: 67 65 20 62 79 20 6d 6f 76 69 6e 67 20 61 6c 6c  ge by moving all
4750: 20 63 65 6c 6c 73 20 74 6f 20 74 68 65 20 62 65   cells to the be
4760: 67 69 6e 6e 69 6e 67 20 61 6e 64 20 63 6f 6e 73  ginning and cons
4770: 74 72 75 63 74 69 6e 67 20 61 20 73 69 6e 67 6c  tructing a singl
4780: 65 0a 66 72 65 65 62 6c 6f 63 6b 20 61 74 20 74  e.freeblock at t
4790: 68 65 20 65 6e 64 20 74 6f 20 74 61 6b 65 20 75  he end to take u
47a0: 70 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  p all remaining 
47b0: 73 70 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  space..</p>..<h3
47c0: 3e 33 2e 33 20 26 6e 62 73 70 3b 20 54 68 65 20  >3.3 &nbsp; The 
47d0: 42 2d 54 72 65 65 20 46 72 65 65 20 50 61 67 65  B-Tree Free Page
47e0: 20 4c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a   List</h3>..<p>.
47f0: 57 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  When information
4800: 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
4810: 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
4820: 61 73 65 20 73 75 63 68 20 74 68 61 74 20 6f 6e  ase such that on
4830: 65 20 6f 72 0a 6d 6f 72 65 20 70 61 67 65 73 20  e or.more pages 
4840: 61 72 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65  are no longer ne
4850: 65 64 65 64 2c 20 74 68 6f 73 65 20 70 61 67 65  eded, those page
4860: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  s are added to a
4870: 20 6c 69 73 74 20 6f 66 0a 66 72 65 65 20 70 61   list of.free pa
4880: 67 65 73 20 73 6f 20 74 68 61 74 20 74 68 65 79  ges so that they
4890: 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20 6c   can be reused l
48a0: 61 74 65 72 20 77 68 65 6e 20 6e 65 77 20 69 6e  ater when new in
48b0: 66 6f 72 6d 61 74 69 6f 6e 20 69 73 0a 61 64 64  formation is.add
48c0: 65 64 2e 20 20 54 68 69 73 20 73 75 62 73 65 63  ed.  This subsec
48d0: 74 69 6f 6e 20 64 65 73 63 72 69 62 65 73 20 74  tion describes t
48e0: 68 65 20 73 74 72 75 63 74 75 72 65 20 6f 66 20  he structure of 
48f0: 74 68 69 73 20 66 72 65 65 6c 69 73 74 2e 0a 3c  this freelist..<
4900: 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 33 32 2d  /p>..<p>.The 32-
4910: 62 69 74 20 69 6e 74 65 67 65 72 20 62 65 67 69  bit integer begi
4920: 6e 6e 69 6e 67 20 61 74 20 62 79 74 65 2d 6f 66  nning at byte-of
4930: 66 73 65 74 20 35 32 20 69 6e 20 70 61 67 65 20  fset 52 in page 
4940: 31 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  1 of the databas
4950: 65 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  e.contains the a
4960: 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 66 69  ddress of the fi
4970: 72 73 74 20 70 61 67 65 20 69 6e 20 61 20 6c 69  rst page in a li
4980: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 66 72 65  nked list of fre
4990: 65 20 70 61 67 65 73 2e 0a 49 66 20 74 68 65 72  e pages..If ther
49a0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 20 70 61  e are no free pa
49b0: 67 65 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74  ges available, t
49c0: 68 69 73 20 69 6e 74 65 67 65 72 20 68 61 73 20  his integer has 
49d0: 61 20 76 61 6c 75 65 20 6f 66 20 30 2e 0a 54 68  a value of 0..Th
49e0: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
49f0: 20 61 74 20 62 79 74 65 2d 6f 66 66 73 65 74 20   at byte-offset 
4a00: 35 36 20 69 6e 20 70 61 67 65 20 31 20 63 6f 6e  56 in page 1 con
4a10: 74 61 69 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  tains the number
4a20: 20 6f 66 0a 66 72 65 65 20 70 61 67 65 73 20 6f   of.free pages o
4a30: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 2e 0a  n the freelist..
4a40: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 72  </p>..<p>.The fr
4a50: 65 65 6c 69 73 74 20 63 6f 6e 74 61 69 6e 73 20  eelist contains 
4a60: 61 20 74 72 75 6e 6b 20 61 6e 64 20 6d 61 6e 79  a trunk and many
4a70: 20 62 72 61 6e 63 68 65 73 2e 20 20 54 68 65 20   branches.  The 
4a80: 74 72 75 6e 6b 20 6f 66 0a 74 68 65 20 66 72 65  trunk of.the fre
4a90: 65 6c 69 73 74 20 69 73 20 63 6f 6d 70 6f 73 65  elist is compose
4aa0: 64 20 6f 66 20 6f 76 65 72 66 6c 6f 77 20 70 61  d of overflow pa
4ab0: 67 65 73 2e 20 20 54 68 61 74 20 69 73 20 74 6f  ges.  That is to
4ac0: 20 73 61 79 2c 20 65 61 63 68 20 70 61 67 65 0a   say, each page.
4ad0: 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
4ae0: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
4af0: 20 61 74 20 62 79 74 65 20 6f 66 66 73 65 74 20   at byte offset 
4b00: 30 20 77 68 69 63 68 0a 69 73 20 74 68 65 20 70  0 which.is the p
4b10: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
4b20: 65 20 6e 65 78 74 20 70 61 67 65 20 6f 6e 20 74  e next page on t
4b30: 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  he freelist trun
4b40: 6b 2e 0a 54 68 65 20 70 61 79 6c 6f 61 64 20 61  k..The payload a
4b50: 72 65 61 0a 6f 66 20 65 61 63 68 20 74 72 75 6e  rea.of each trun
4b60: 6b 20 70 61 67 65 20 69 73 20 75 73 65 64 20 74  k page is used t
4b70: 6f 20 72 65 63 6f 72 64 20 70 6f 69 6e 74 65 72  o record pointer
4b80: 73 20 74 6f 20 62 72 61 6e 63 68 20 70 61 67 65  s to branch page
4b90: 73 2e 20 0a 54 68 65 20 66 69 72 73 74 20 33 32  s. .The first 32
4ba0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 6e 20  -bit integer in 
4bb0: 74 68 65 20 70 61 79 6c 6f 61 64 20 61 72 65 61  the payload area
4bc0: 20 6f 66 20 61 20 74 72 75 6e 6b 20 70 61 67 65   of a trunk page
4bd0: 0a 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .is the number o
4be0: 66 20 62 72 61 6e 63 68 20 70 61 67 65 73 20 74  f branch pages t
4bf0: 6f 20 66 6f 6c 6c 6f 77 20 28 62 65 74 77 65 65  o follow (betwee
4c00: 6e 20 30 20 61 6e 64 20 32 35 34 29 0a 61 6e 64  n 0 and 254).and
4c10: 20 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74   each subsequent
4c20: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
4c30: 69 73 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72  is a page number
4c40: 20 66 6f 72 20 61 20 62 72 61 6e 63 68 20 70 61   for a branch pa
4c50: 67 65 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ge..The followin
4c60: 67 20 64 69 61 67 72 61 6d 20 73 68 6f 77 73 20  g diagram shows 
4c70: 74 68 65 20 73 74 72 75 63 74 75 72 65 20 6f 66  the structure of
4c80: 20 61 20 74 72 75 6e 6b 20 66 72 65 65 6c 69 73   a trunk freelis
4c90: 74 20 70 61 67 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62  t page:.</p>..<b
4ca0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
4cb0: 65 20 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c 73  e border=1 cells
4cc0: 70 61 63 69 6e 67 3d 30 20 63 65 6c 6c 70 61 64  pacing=0 cellpad
4cd0: 64 69 6e 67 3d 35 3e 0a 3c 74 72 3e 0a 3c 74 64  ding=5>.<tr>.<td
4ce0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
4cf0: 77 69 64 74 68 3d 32 30 3e 30 3c 2f 74 64 3e 0a  width=20>0</td>.
4d00: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
4d10: 72 22 20 77 69 64 74 68 3d 32 30 3e 31 3c 2f 74  r" width=20>1</t
4d20: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
4d30: 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 32  nter" width=20>2
4d40: 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  </td>.<td align=
4d50: 22 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32  "center" width=2
4d60: 30 3e 33 3c 2f 74 64 3e 0a 3c 74 64 20 61 6c 69  0>3</td>.<td ali
4d70: 67 6e 3d 22 63 65 6e 74 65 72 22 20 77 69 64 74  gn="center" widt
4d80: 68 3d 32 30 3e 34 3c 2f 74 64 3e 0a 3c 74 64 20  h=20>4</td>.<td 
4d90: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 77  align="center" w
4da0: 69 64 74 68 3d 32 30 3e 35 3c 2f 74 64 3e 0a 3c  idth=20>5</td>.<
4db0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
4dc0: 22 20 77 69 64 74 68 3d 32 30 3e 36 3c 2f 74 64  " width=20>6</td
4dd0: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
4de0: 74 65 72 22 20 77 69 64 74 68 3d 32 30 3e 37 3c  ter" width=20>7<
4df0: 2f 74 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  /td>.<td align="
4e00: 63 65 6e 74 65 72 22 20 77 69 64 74 68 3d 32 30  center" width=20
4e10: 30 3e 38 20 2e 2e 2e 20 31 30 32 33 3c 2f 74 64  0>8 ... 1023</td
4e20: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
4e30: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
4e40: 63 6f 6c 73 70 61 6e 3d 34 3e 4e 65 78 74 20 74  colspan=4>Next t
4e50: 72 75 6e 6b 20 70 61 67 65 3c 2f 74 64 3e 0a 3c  runk page</td>.<
4e60: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
4e70: 22 20 63 6f 6c 73 70 61 6e 3d 34 3e 23 20 6f 66  " colspan=4># of
4e80: 20 62 72 61 6e 63 68 20 70 61 67 65 73 3c 2f 74   branch pages</t
4e90: 64 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  d>.<td align="ce
4ea0: 6e 74 65 72 22 20 63 6f 6c 73 70 61 6e 3d 31 3e  nter" colspan=1>
4eb0: 50 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  Page numbers for
4ec0: 20 62 72 61 6e 63 68 20 70 61 67 65 73 3c 2f 74   branch pages</t
4ed0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
4ee0: 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
4ef0: 0a 3c 70 3e 0a 49 74 20 69 73 20 69 6d 70 6f 72  .<p>.It is impor
4f00: 74 61 6e 74 20 74 6f 20 6e 6f 74 65 20 74 68 61  tant to note tha
4f10: 74 20 6f 6e 6c 79 20 74 68 65 20 70 61 67 65 73  t only the pages
4f20: 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b 20 6f 66   on the trunk of
4f30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 63 6f   the freelist.co
4f40: 6e 74 61 69 6e 20 70 6f 69 6e 74 65 72 73 20 74  ntain pointers t
4f50: 6f 20 6f 74 68 65 72 20 70 61 67 65 73 2e 20 20  o other pages.  
4f60: 54 68 65 20 62 72 61 6e 63 68 20 70 61 67 65 73  The branch pages
4f70: 20 63 6f 6e 74 61 69 6e 20 6e 6f 0a 64 61 74 61   contain no.data
4f80: 20 77 68 61 74 73 6f 65 76 65 72 2e 20 20 54 68   whatsoever.  Th
4f90: 65 20 66 61 63 74 20 74 68 61 74 20 74 68 65 20  e fact that the 
4fa0: 62 72 61 6e 63 68 20 70 61 67 65 73 20 61 72 65  branch pages are
4fb0: 20 63 6f 6d 70 6c 65 74 65 6c 79 0a 62 6c 61 6e   completely.blan
4fc0: 6b 20 61 6c 6c 6f 77 73 20 66 6f 72 20 61 6e 20  k allows for an 
4fd0: 69 6d 70 6f 72 74 61 6e 74 20 6f 70 74 69 6d 69  important optimi
4fe0: 7a 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  zation in the pa
4ff0: 67 69 6e 67 20 6c 61 79 65 72 2e 20 20 57 68 65  ging layer.  Whe
5000: 6e 0a 61 20 62 72 61 6e 63 68 20 70 61 67 65 20  n.a branch page 
5010: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
5020: 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 6f 20  the freelist to 
5030: 62 65 20 72 65 75 73 65 64 2c 20 69 74 20 69 73  be reused, it is
5040: 20 6e 6f 74 0a 6e 65 63 65 73 73 61 72 79 20 74   not.necessary t
5050: 6f 20 77 72 69 74 65 20 74 68 65 20 6f 72 69 67  o write the orig
5060: 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20  inal content of 
5070: 74 68 61 74 20 70 61 67 65 20 69 6e 74 6f 20 74  that page into t
5080: 68 65 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72  he rollback.jour
5090: 6e 61 6c 2e 20 20 54 68 65 20 62 72 61 6e 63 68  nal.  The branch
50a0: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 65 64 20   page contained 
50b0: 6e 6f 20 64 61 74 61 20 74 6f 20 62 65 67 69 6e  no data to begin
50c0: 20 77 69 74 68 2c 20 73 6f 20 74 68 65 72 65 20   with, so there 
50d0: 69 73 0a 6e 6f 20 6e 65 65 64 20 74 6f 20 72 65  is.no need to re
50e0: 73 74 6f 72 65 20 74 68 65 20 70 61 67 65 20 69  store the page i
50f0: 6e 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20 61  n the event of a
5100: 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 53 69 6d 69   rollback.  Simi
5110: 6c 61 72 6c 79 2c 0a 77 68 65 6e 20 61 20 70 61  larly,.when a pa
5120: 67 65 20 69 73 20 6e 6f 74 20 6c 6f 6e 67 65 72  ge is not longer
5130: 20 6e 65 65 64 65 64 20 61 6e 64 20 69 73 20 61   needed and is a
5140: 64 64 65 64 20 74 6f 20 74 68 65 20 66 72 65 65  dded to the free
5150: 6c 69 73 74 20 61 73 20 61 20 62 72 61 6e 63 68  list as a branch
5160: 0a 70 61 67 65 2c 20 69 74 20 69 73 20 6e 6f 74  .page, it is not
5170: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 77 72   necessary to wr
5180: 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
5190: 6f 66 20 74 68 61 74 20 70 61 67 65 0a 69 6e 74  of that page.int
51a0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
51b0: 69 6c 65 2e 0a 41 67 61 69 6e 2c 20 74 68 65 20  ile..Again, the 
51c0: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  page contains no
51d0: 20 72 65 61 6c 20 64 61 74 61 20 73 6f 20 69 74   real data so it
51e0: 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   is not necessar
51f0: 79 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 0a  y to record the.
5200: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
5210: 70 61 67 65 2e 20 20 42 79 20 72 65 64 75 63 69  page.  By reduci
5220: 6e 67 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  ng the amount of
5230: 20 64 69 73 6b 20 49 2f 4f 20 72 65 71 75 69 72   disk I/O requir
5240: 65 64 2c 0a 74 68 65 73 65 20 74 77 6f 20 6f 70  ed,.these two op
5250: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 6c 6c 6f  timizations allo
5260: 77 20 73 6f 6d 65 20 64 61 74 61 62 61 73 65 20  w some database 
5270: 6f 70 65 72 61 74 69 6f 6e 73 0a 74 6f 20 67 6f  operations.to go
5280: 20 66 6f 75 72 20 74 6f 20 73 69 78 20 74 69 6d   four to six tim
5290: 65 73 20 66 61 73 74 65 72 20 74 68 61 6e 20 74  es faster than t
52a0: 68 65 79 20 77 6f 75 6c 64 20 6f 74 68 65 72 77  hey would otherw
52b0: 69 73 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 32 3e 34  ise..</p>..<h2>4
52c0: 2e 30 20 26 6e 62 73 70 3b 20 54 68 65 20 53 63  .0 &nbsp; The Sc
52d0: 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68 32 3e 0a  hema Layer</h2>.
52e0: 0a 3c 70 3e 0a 54 68 65 20 73 63 68 65 6d 61 20  .<p>.The schema 
52f0: 6c 61 79 65 72 20 69 6d 70 6c 65 6d 65 6e 74 73  layer implements
5300: 20 61 6e 20 53 51 4c 20 64 61 74 61 62 61 73 65   an SQL database
5310: 20 6f 6e 20 74 6f 70 20 6f 66 20 6f 6e 65 20 6f   on top of one o
5320: 72 20 6d 6f 72 65 0a 62 2d 74 72 65 65 73 20 61  r more.b-trees a
5330: 6e 64 20 6b 65 65 70 73 20 74 72 61 63 6b 20 6f  nd keeps track o
5340: 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
5350: 6e 75 6d 62 65 72 73 20 66 6f 72 20 61 6c 6c 20  numbers for all 
5360: 62 2d 74 72 65 65 73 2e 0a 57 68 65 72 65 20 74  b-trees..Where t
5370: 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
5380: 70 72 6f 76 69 64 65 73 20 6f 6e 6c 79 20 75 6e  provides only un
5390: 66 6f 72 6d 61 74 74 65 64 20 64 61 74 61 20 73  formatted data s
53a0: 74 6f 72 61 67 65 20 77 69 74 68 0a 61 20 75 6e  torage with.a un
53b0: 69 71 75 65 20 6b 65 79 2c 20 74 68 65 20 73 63  ique key, the sc
53c0: 68 65 6d 61 20 6c 61 79 65 72 20 61 6c 6c 6f 77  hema layer allow
53d0: 73 20 65 61 63 68 20 65 6e 74 72 79 20 74 6f 20  s each entry to 
53e0: 63 6f 6e 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65  contain multiple
53f0: 0a 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20 73  .columns.  The s
5400: 63 68 65 6d 61 20 6c 61 79 65 72 20 61 6c 73 6f  chema layer also
5410: 20 61 6c 6c 6f 77 73 20 69 6e 64 69 63 65 73 20   allows indices 
5420: 61 6e 64 20 6e 6f 6e 2d 75 6e 69 71 75 65 20 6b  and non-unique k
5430: 65 79 20 76 61 6c 75 65 73 2e 0a 3c 2f 70 3e 0a  ey values..</p>.
5440: 0a 3c 70 3e 0a 54 68 65 20 73 63 68 65 6d 61 20  .<p>.The schema 
5450: 6c 61 79 65 72 20 69 6d 70 6c 65 6d 65 6e 74 73  layer implements
5460: 20 74 77 6f 20 73 65 70 61 72 61 74 65 20 64 61   two separate da
5470: 74 61 20 73 74 6f 72 61 67 65 20 61 62 73 74 72  ta storage abstr
5480: 61 63 74 69 6f 6e 73 3a 0a 74 61 62 6c 65 73 20  actions:.tables 
5490: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 45 61  and indices.  Ea
54a0: 63 68 20 74 61 62 6c 65 20 61 6e 64 20 65 61 63  ch table and eac
54b0: 68 20 69 6e 64 65 78 20 75 73 65 73 20 69 74 73  h index uses its
54c0: 20 6f 77 6e 20 62 2d 74 72 65 65 0a 62 75 74 20   own b-tree.but 
54d0: 74 68 65 79 20 75 73 65 20 74 68 65 20 62 2d 74  they use the b-t
54e0: 72 65 65 20 63 61 70 61 62 69 6c 69 74 69 65 73  ree capabilities
54f0: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
5500: 79 73 2e 20 20 46 6f 72 20 61 20 74 61 62 6c 65  ys.  For a table
5510: 2c 0a 74 68 65 20 62 2d 74 72 65 65 20 6b 65 79  ,.the b-tree key
5520: 20 69 73 20 61 20 75 6e 69 71 75 65 20 34 2d 62   is a unique 4-b
5530: 79 74 65 20 69 6e 74 65 67 65 72 20 61 6e 64 20  yte integer and 
5540: 74 68 65 20 62 2d 74 72 65 65 20 64 61 74 61 20  the b-tree data 
5550: 69 73 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20 6f  is the.content o
5560: 66 20 74 68 65 20 74 61 62 6c 65 20 72 6f 77 2c  f the table row,
5570: 20 65 6e 63 6f 64 65 64 20 73 6f 20 74 68 61 74   encoded so that
5580: 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62 65 20   columns can be 
5590: 73 65 70 61 72 61 74 65 6c 79 0a 65 78 74 72 61  separately.extra
55a0: 63 74 65 64 2e 20 20 46 6f 72 20 69 6e 64 69 63  cted.  For indic
55b0: 65 73 2c 20 74 68 65 20 62 2d 74 72 65 65 20 6b  es, the b-tree k
55c0: 65 79 20 76 61 72 69 65 73 20 69 6e 20 73 69 7a  ey varies in siz
55d0: 65 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  e depending on t
55e0: 68 65 0a 73 69 7a 65 20 6f 66 20 74 68 65 20 66  he.size of the f
55f0: 69 65 6c 64 73 20 62 65 69 6e 67 20 69 6e 64 65  ields being inde
5600: 78 65 64 20 61 6e 64 20 74 68 65 20 62 2d 74 72  xed and the b-tr
5610: 65 65 20 64 61 74 61 20 69 73 20 65 6d 70 74 79  ee data is empty
5620: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20  ..</p>..<h3>4.1 
5630: 26 6e 62 73 70 3b 20 53 51 4c 20 54 61 62 6c 65  &nbsp; SQL Table
5640: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
5650: 44 65 74 61 69 6c 73 3c 2f 68 33 3e 0a 0a 3c 70  Details</h3>..<p
5660: 3e 45 61 63 68 20 72 6f 77 20 6f 66 20 61 6e 20  >Each row of an 
5670: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 73 74 6f  SQL table is sto
5680: 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
5690: 62 2d 74 72 65 65 20 65 6e 74 72 79 2e 0a 54 68  b-tree entry..Th
56a0: 65 20 62 2d 74 72 65 65 20 6b 65 79 20 69 73 20  e b-tree key is 
56b0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
56c0: 69 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74  ian integer that
56d0: 20 69 73 20 74 68 65 20 52 4f 57 49 44 0a 6f 72   is the ROWID.or
56e0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
56f0: 20 4b 45 59 20 66 6f 72 20 74 68 61 74 20 74 61   KEY for that ta
5700: 62 6c 65 20 72 6f 77 2e 0a 54 68 65 20 6b 65 79  ble row..The key
5710: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
5720: 62 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61  big-endian forma
5730: 74 20 73 6f 0a 74 68 61 74 20 6b 65 79 73 20 77  t so.that keys w
5740: 69 6c 6c 20 73 6f 72 74 20 69 6e 20 6e 75 6d 65  ill sort in nume
5750: 72 69 63 61 6c 20 6f 72 64 65 72 20 75 73 69 6e  rical order usin
5760: 67 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74  g memcmp() funct
5770: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ion.</p>..<p>The
5780: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
5790: 62 6c 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ble row is store
57a0: 64 20 69 6e 20 74 68 65 20 64 61 74 61 20 70 6f  d in the data po
57b0: 72 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 72  rtion of.the cor
57c0: 72 65 73 70 6f 6e 64 69 6e 67 20 62 2d 74 72 65  responding b-tre
57d0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  e table.  The co
57e0: 6e 74 65 6e 74 20 69 73 20 65 6e 63 6f 64 65 64  ntent is encoded
57f0: 20 74 6f 20 61 6c 6c 6f 77 0a 69 6e 64 69 76 69   to allow.indivi
5800: 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  dual columns of 
5810: 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 65 78  the row to be ex
5820: 74 72 61 63 74 65 64 20 61 73 20 6e 65 63 65 73  tracted as neces
5830: 73 61 72 79 2e 20 20 41 73 73 75 6d 69 6e 67 0a  sary.  Assuming.
5840: 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 68  that the table h
5850: 61 73 20 4e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  as N columns, th
5860: 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 65 6e 63  e content is enc
5870: 6f 64 65 64 20 61 73 20 4e 2b 31 20 6f 66 66 73  oded as N+1 offs
5880: 65 74 73 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ets.followed by 
5890: 4e 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c  N column values,
58a0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70   as follows:.</p
58b0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
58c0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20  <table border=1 
58d0: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63 65  cellspacing=0 ce
58e0: 6c 6c 70 61 64 64 69 6e 67 3d 35 3e 0a 3c 74 72  llpadding=5>.<tr
58f0: 3e 0a 3c 74 64 3e 6f 66 66 73 65 74 20 30 3c 2f  >.<td>offset 0</
5900: 74 64 3e 0a 3c 74 64 3e 6f 66 66 73 65 74 20 31  td>.<td>offset 1
5910: 3c 2f 74 64 3e 0a 3c 74 64 3e 3c 62 3e 2e 2e 2e  </td>.<td><b>...
5920: 3c 2f 62 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 6f 66  </b></td>.<td>of
5930: 66 73 65 74 20 4e 2d 31 3c 2f 74 64 3e 0a 3c 74  fset N-1</td>.<t
5940: 64 3e 6f 66 66 73 65 74 20 4e 3c 2f 74 64 3e 0a  d>offset N</td>.
5950: 3c 74 64 3e 76 61 6c 75 65 20 30 3c 2f 74 64 3e  <td>value 0</td>
5960: 0a 3c 74 64 3e 76 61 6c 75 65 20 31 3c 2f 74 64  .<td>value 1</td
5970: 3e 0a 3c 74 64 3e 3c 62 3e 2e 2e 2e 3c 2f 62 3e  >.<td><b>...</b>
5980: 3c 2f 74 64 3e 0a 3c 74 64 3e 76 61 6c 75 65 20  </td>.<td>value 
5990: 4e 2d 31 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  N-1</td>.</tr>.<
59a0: 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
59b0: 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6f  uote>..<p>.The o
59c0: 66 66 73 65 74 73 20 63 61 6e 20 62 65 20 65 69  ffsets can be ei
59d0: 74 68 65 72 20 38 2d 62 69 74 2c 20 31 36 2d 62  ther 8-bit, 16-b
59e0: 69 74 2c 20 6f 72 20 32 34 2d 62 69 74 20 69 6e  it, or 24-bit in
59f0: 74 65 67 65 72 73 20 64 65 70 65 6e 64 69 6e 67  tegers depending
5a00: 0a 6f 6e 20 68 6f 77 20 6d 75 63 68 20 64 61 74  .on how much dat
5a10: 61 20 69 73 20 74 6f 20 62 65 20 73 74 6f 72 65  a is to be store
5a20: 64 2e 20 20 49 66 20 74 68 65 20 74 6f 74 61 6c  d.  If the total
5a30: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6e   size of the con
5a40: 74 65 6e 74 0a 69 73 20 6c 65 73 73 20 74 68 61  tent.is less tha
5a50: 6e 20 32 35 36 20 62 79 74 65 73 20 74 68 65 6e  n 256 bytes then
5a60: 20 38 2d 62 69 74 20 6f 66 66 73 65 74 73 20 61   8-bit offsets a
5a70: 72 65 20 75 73 65 64 2e 20 20 49 66 20 74 68 65  re used.  If the
5a80: 20 74 6f 74 61 6c 20 73 69 7a 65 0a 6f 66 20 74   total size.of t
5a90: 68 65 20 62 2d 74 72 65 65 20 64 61 74 61 20 69  he b-tree data i
5aa0: 73 20 6c 65 73 73 20 74 68 61 6e 20 36 35 35 33  s less than 6553
5ab0: 36 20 74 68 65 6e 20 31 36 2d 62 69 74 20 6f 66  6 then 16-bit of
5ac0: 66 73 65 74 73 20 61 72 65 20 75 73 65 64 2e 0a  fsets are used..
5ad0: 32 34 2d 62 69 74 20 6f 66 66 73 65 74 73 20 61  24-bit offsets a
5ae0: 72 65 20 75 73 65 64 20 6f 74 68 65 72 77 69 73  re used otherwis
5af0: 65 2e 20 20 4f 66 66 73 65 74 73 20 61 72 65 20  e.  Offsets are 
5b00: 61 6c 77 61 79 73 20 6c 69 74 74 6c 65 2d 65 6e  always little-en
5b10: 64 69 61 6e 2c 0a 77 68 69 63 68 20 6d 65 61 6e  dian,.which mean
5b20: 73 20 74 68 61 74 20 74 68 65 20 6c 65 61 73 74  s that the least
5b30: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 79 74   significant byt
5b40: 65 20 6f 63 63 75 72 73 20 66 69 72 73 74 2e 0a  e occurs first..
5b50: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 44 61 74 61 20 69  </p>..<p>.Data i
5b60: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 6e 75  s stored as a nu
5b70: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  l-terminated str
5b80: 69 6e 67 2e 20 20 41 6e 79 20 65 6d 70 74 79 20  ing.  Any empty 
5b90: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 73 0a  string consists.
5ba0: 6f 66 20 6a 75 73 74 20 74 68 65 20 6e 75 6c 20  of just the nul 
5bb0: 74 65 72 6d 69 6e 61 74 6f 72 2e 20 20 41 20 4e  terminator.  A N
5bc0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 61 6e 20  ULL value is an 
5bd0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 77 69 74  empty string wit
5be0: 68 20 6e 6f 0a 6e 75 6c 2d 74 65 72 6d 69 6e 61  h no.nul-termina
5bf0: 74 6f 72 2e 20 20 54 68 75 73 20 61 20 4e 55 4c  tor.  Thus a NUL
5c00: 4c 20 76 61 6c 75 65 20 6f 63 63 75 70 69 65 73  L value occupies
5c10: 20 7a 65 72 6f 20 62 79 74 65 73 20 61 6e 64 20   zero bytes and 
5c20: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 0a  an empty string.
5c30: 6f 63 63 75 70 69 65 73 20 31 20 62 79 74 65 2e  occupies 1 byte.
5c40: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 43 6f 6c 75 6d  .</p>..<p>.Colum
5c50: 6e 20 76 61 6c 75 65 73 20 61 72 65 20 73 74 6f  n values are sto
5c60: 72 65 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72  red in the order
5c70: 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
5c80: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
5c90: 54 41 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74 2e  TABLE.statement.
5ca0: 20 20 54 68 65 20 6f 66 66 73 65 74 73 20 61 74    The offsets at
5cb0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
5cc0: 66 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  f the record con
5cd0: 74 61 69 6e 20 74 68 65 0a 62 79 74 65 20 69 6e  tain the.byte in
5ce0: 64 65 78 20 6f 66 20 74 68 65 20 63 6f 72 72 65  dex of the corre
5cf0: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
5d00: 76 61 6c 75 65 2e 20 20 54 68 75 73 2c 20 4f 66  value.  Thus, Of
5d10: 66 73 65 74 20 30 20 63 6f 6e 74 61 69 6e 73 0a  fset 0 contains.
5d20: 74 68 65 20 62 79 74 65 20 69 6e 64 65 78 20 66  the byte index f
5d30: 6f 72 20 56 61 6c 75 65 20 30 2c 20 4f 66 66 73  or Value 0, Offs
5d40: 65 74 20 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  et 1 contains th
5d50: 65 20 62 79 74 65 20 6f 66 66 73 65 74 0a 6f 66  e byte offset.of
5d60: 20 56 61 6c 75 65 20 31 2c 20 61 6e 64 20 73 6f   Value 1, and so
5d70: 20 66 6f 72 74 68 2e 20 20 54 68 65 20 6e 75 6d   forth.  The num
5d80: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
5d90: 61 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  a column value c
5da0: 61 6e 0a 61 6c 77 61 79 73 20 62 65 20 66 6f 75  an.always be fou
5db0: 6e 64 20 62 79 20 73 75 62 74 72 61 63 74 69 6e  nd by subtractin
5dc0: 67 20 6f 66 66 73 65 74 73 2e 20 20 54 68 69 73  g offsets.  This
5dd0: 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 73 20 74 6f   allows NULLs to
5de0: 20 62 65 0a 72 65 63 6f 76 65 72 65 64 20 66 72   be.recovered fr
5df0: 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 75 6e  om the record un
5e00: 61 62 69 67 75 6f 75 73 6c 79 2e 0a 3c 2f 70 3e  abiguously..</p>
5e10: 0a 0a 3c 70 3e 0a 4d 6f 73 74 20 63 6f 6c 75 6d  ..<p>.Most colum
5e20: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ns are stored in
5e30: 20 74 68 65 20 62 2d 74 72 65 65 20 64 61 74 61   the b-tree data
5e40: 20 61 73 20 64 65 73 63 72 69 62 65 64 20 61 62   as described ab
5e50: 6f 76 65 2e 0a 54 68 65 20 6f 6e 65 20 65 78 63  ove..The one exc
5e60: 65 70 74 69 6f 6e 20 69 73 20 63 6f 6c 75 6d 6e  eption is column
5e70: 20 74 68 61 74 20 68 61 73 20 74 79 70 65 20 49   that has type I
5e80: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
5e90: 45 59 2e 0a 49 4e 54 45 47 45 52 20 50 52 49 4d  EY..INTEGER PRIM
5ea0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20  ARY KEY columns 
5eb0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
5ec0: 65 20 34 2d 62 79 74 65 20 62 2d 74 72 65 65 20  e 4-byte b-tree 
5ed0: 6b 65 79 2e 0a 57 68 65 6e 20 61 6e 20 53 51 4c  key..When an SQL
5ee0: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
5ef0: 70 74 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  pts to read the 
5f00: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
5f10: 4b 45 59 2c 0a 74 68 65 20 34 2d 62 79 74 65 20  KEY,.the 4-byte 
5f20: 62 2d 74 72 65 65 20 6b 65 79 20 69 73 20 72 65  b-tree key is re
5f30: 61 64 20 72 61 74 68 65 72 20 74 68 61 6e 20 69  ad rather than i
5f40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f  nformation out o
5f50: 66 20 74 68 65 0a 62 2d 74 72 65 65 20 64 61 74  f the.b-tree dat
5f60: 61 2e 20 20 42 75 74 20 74 68 65 72 65 20 69 73  a.  But there is
5f70: 20 73 74 69 6c 6c 20 61 6e 20 4f 66 66 73 65 74   still an Offset
5f80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5f90: 20 74 68 65 0a 49 4e 54 45 47 45 52 20 50 52 49   the.INTEGER PRI
5fa0: 4d 41 52 59 20 4b 45 59 2c 20 6a 75 73 74 20 6c  MARY KEY, just l
5fb0: 69 6b 65 20 61 6e 79 20 6f 74 68 65 72 20 63 6f  ike any other co
5fc0: 6c 75 6d 6e 2e 20 20 42 75 74 20 74 68 65 20 56  lumn.  But the V
5fd0: 61 6c 75 65 0a 61 73 73 6f 63 69 61 74 65 64 20  alue.associated 
5fe0: 77 69 74 68 20 74 68 61 74 20 6f 66 66 73 65 74  with that offset
5ff0: 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
6000: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 32 20 26  .</p>..<h3>4.2 &
6010: 6e 62 73 70 3b 20 53 51 4c 20 49 6e 64 65 78 20  nbsp; SQL Index 
6020: 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 44  Implementation D
6030: 65 74 61 69 6c 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  etails</h3>..<p>
6040: 0a 53 51 4c 20 69 6e 64 69 63 65 73 20 61 72 65  .SQL indices are
6050: 20 69 6d 70 6c 65 6d 65 6e 74 20 75 73 69 6e 67   implement using
6060: 20 61 20 62 2d 74 72 65 65 20 69 6e 20 77 68 69   a b-tree in whi
6070: 63 68 20 74 68 65 20 6b 65 79 20 69 73 20 75 73  ch the key is us
6080: 65 64 0a 62 75 74 20 74 68 65 20 64 61 74 61 20  ed.but the data 
6090: 69 73 20 61 6c 77 61 79 73 20 65 6d 70 74 79 2e  is always empty.
60a0: 20 20 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66    The purpose of
60b0: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 6f 20   an index is to 
60c0: 6d 61 70 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  map.one or more 
60d0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 69 6e  column values in
60e0: 74 6f 20 74 68 65 20 52 4f 57 49 44 20 66 6f 72  to the ROWID for
60f0: 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
6100: 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74   that.contains t
6110: 68 6f 73 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  hose column valu
6120: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 61  es..</p>..<p>.Ea
6130: 63 68 20 62 2d 74 72 65 65 20 69 6e 20 61 6e 20  ch b-tree in an 
6140: 69 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f  index consists o
6150: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 63 6f  f one or more co
6160: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 66 6f 6c 6c  lumn values foll
6170: 6f 77 65 64 0a 62 79 20 61 20 34 2d 62 79 74 65  owed.by a 4-byte
6180: 20 52 4f 57 49 44 2e 20 20 45 61 63 68 20 63 6f   ROWID.  Each co
6190: 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 6e 75  lumn value is nu
61a0: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 28 65 76  l-terminated (ev
61b0: 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 29 0a  en NULL values).
61c0: 61 6e 64 20 62 65 67 69 6e 73 20 77 69 74 68 20  and begins with 
61d0: 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  a single charact
61e0: 65 72 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  er that indicate
61f0: 73 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66  s the datatype f
6200: 6f 72 20 74 68 61 74 0a 63 6f 6c 75 6d 6e 20 76  or that.column v
6210: 61 6c 75 65 2e 20 20 4f 6e 6c 79 20 74 68 72 65  alue.  Only thre
6220: 65 20 64 61 74 61 74 79 70 65 73 20 61 72 65 20  e datatypes are 
6230: 73 75 70 70 6f 72 74 65 64 3a 20 4e 55 4c 4c 2c  supported: NULL,
6240: 20 4e 75 6d 62 65 72 2c 20 61 6e 64 0a 54 65 78   Number, and.Tex
6250: 74 2e 20 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  t.  NULL values 
6260: 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 74  are encoded as t
6270: 68 65 20 63 68 61 72 61 63 74 65 72 20 27 61 27  he character 'a'
6280: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
6290: 0a 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 2e  .nul terminator.
62a0: 20 20 4e 75 6d 62 65 72 73 20 61 72 65 20 65 6e    Numbers are en
62b0: 63 6f 64 65 64 20 61 73 20 74 68 65 20 63 68 61  coded as the cha
62c0: 72 61 63 74 65 72 20 27 62 27 20 66 6f 6c 6c 6f  racter 'b' follo
62d0: 77 65 64 20 62 79 0a 61 20 73 74 72 69 6e 67 20  wed by.a string 
62e0: 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 63 72  that has been cr
62f0: 61 66 74 65 64 20 73 6f 20 74 68 61 74 20 73 6f  afted so that so
6300: 72 74 69 6e 67 20 74 68 65 20 73 74 72 69 6e 67  rting the string
6310: 20 75 73 69 6e 67 20 6d 65 6d 63 6d 70 28 29 0a   using memcmp().
6320: 77 69 6c 6c 20 73 6f 72 74 20 74 68 65 20 63 6f  will sort the co
6330: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6e 75 6d 62  rresponding numb
6340: 65 72 73 20 69 6e 20 6e 75 6d 65 72 69 63 61 6c  ers in numerical
6350: 20 6f 72 64 65 72 2e 20 20 28 53 65 65 20 74 68   order.  (See th
6360: 65 0a 73 71 6c 69 74 65 52 65 61 6c 54 6f 53 6f  e.sqliteRealToSo
6370: 72 74 61 62 6c 65 28 29 20 66 75 6e 63 74 69 6f  rtable() functio
6380: 6e 20 69 6e 20 75 74 69 6c 2e 63 20 6f 66 20 74  n in util.c of t
6390: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
63a0: 73 20 66 6f 72 0a 61 64 64 69 74 69 6f 6e 61 6c  s for.additional
63b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20   information on 
63c0: 74 68 69 73 20 65 6e 63 6f 64 69 6e 67 2e 29 20  this encoding.) 
63d0: 20 4e 75 6d 62 65 72 73 20 61 72 65 20 61 6c 73   Numbers are als
63e0: 6f 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  o nul-terminated
63f0: 2e 0a 54 65 78 74 20 76 61 6c 75 65 73 20 63 6f  ..Text values co
6400: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 63 68  nsists of the ch
6410: 61 72 61 63 74 65 72 20 27 63 27 20 66 6f 6c 6c  aracter 'c' foll
6420: 6f 77 65 64 20 62 79 20 61 20 63 6f 70 79 20 6f  owed by a copy o
6430: 66 20 74 68 65 0a 74 65 78 74 20 73 74 72 69 6e  f the.text strin
6440: 67 20 61 6e 64 20 61 20 6e 75 6c 2d 74 65 72 6d  g and a nul-term
6450: 69 6e 61 74 6f 72 2e 20 20 54 68 65 73 65 20 65  inator.  These e
6460: 6e 63 6f 64 69 6e 67 20 72 75 6c 65 73 20 72 65  ncoding rules re
6470: 73 75 6c 74 20 69 6e 0a 4e 55 4c 4c 73 20 62 65  sult in.NULLs be
6480: 69 6e 67 20 73 6f 72 74 65 64 20 66 69 72 73 74  ing sorted first
6490: 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 75  , followed by nu
64a0: 6d 65 72 69 63 61 6c 20 76 61 6c 75 65 73 20 69  merical values i
64b0: 6e 20 6e 75 6d 65 72 69 63 61 6c 0a 6f 72 64 65  n numerical.orde
64c0: 72 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  r, followed by t
64d0: 65 78 74 20 76 61 6c 75 65 73 20 69 6e 20 6c 65  ext values in le
64e0: 78 69 67 72 61 70 68 69 63 61 6c 20 6f 72 64 65  xigraphical orde
64f0: 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 34  r..</p>..<h3>4.4
6500: 20 26 6e 62 73 70 3b 20 53 51 4c 20 53 63 68 65   &nbsp; SQL Sche
6510: 6d 61 20 53 74 6f 72 61 67 65 20 41 6e 64 20 52  ma Storage And R
6520: 6f 6f 74 20 42 2d 54 72 65 65 20 50 61 67 65 20  oot B-Tree Page 
6530: 4e 75 6d 62 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  Numbers</h3>..<p
6540: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 73  >.The database s
6550: 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
6560: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6570: 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  in a special tab
6580: 6c 65 64 20 6e 61 6d 65 64 0a 22 73 71 6c 69 74  led named."sqlit
6590: 65 5f 6d 61 73 74 65 72 22 20 61 6e 64 20 77 68  e_master" and wh
65a0: 69 63 68 20 61 6c 77 61 79 73 20 68 61 73 20 61  ich always has a
65b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
65c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 32 2e 0a 54  e number of 2..T
65d0: 68 69 73 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  his table contai
65e0: 6e 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ns the original 
65f0: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 0a 43 52  CREATE TABLE,.CR
6600: 45 41 54 45 20 49 4e 44 45 58 2c 20 43 52 45 41  EATE INDEX, CREA
6610: 54 45 20 56 49 45 57 2c 20 61 6e 64 20 43 52 45  TE VIEW, and CRE
6620: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
6630: 65 6d 65 6e 74 73 20 75 73 65 64 20 74 6f 20 64  ements used to d
6640: 65 66 69 6e 65 0a 74 68 65 20 64 61 74 61 62 61  efine.the databa
6650: 73 65 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68  se to begin with
6660: 2e 20 20 57 68 65 6e 65 76 65 72 20 61 6e 20 53  .  Whenever an S
6670: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69  QLite database i
6680: 73 20 6f 70 65 6e 65 64 2c 0a 74 68 65 20 73 71  s opened,.the sq
6690: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
66a0: 65 20 69 73 20 73 63 61 6e 6e 65 64 20 66 72 6f  e is scanned fro
66b0: 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65  m beginning to e
66c0: 6e 64 20 61 6e 64 20 0a 61 6c 6c 20 74 68 65 20  nd and .all the 
66d0: 6f 72 69 67 69 6e 61 6c 20 43 52 45 41 54 45 20  original CREATE 
66e0: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 70  statements are p
66f0: 6c 61 79 65 64 20 62 61 63 6b 20 74 68 72 6f 75  layed back throu
6700: 67 68 20 74 68 65 20 70 61 72 73 65 72 0a 69 6e  gh the parser.in
6710: 20 6f 72 64 65 72 20 74 6f 20 72 65 63 6f 6e 73   order to recons
6720: 74 72 75 63 74 20 61 6e 20 69 6e 2d 6d 65 6d 6f  truct an in-memo
6730: 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ry representatio
6740: 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  n of the databas
6750: 65 0a 73 63 68 65 6d 61 20 66 6f 72 20 75 73 65  e.schema for use
6760: 20 69 6e 20 73 75 62 73 65 71 75 65 6e 74 20 63   in subsequent c
6770: 6f 6d 6d 61 6e 64 20 70 61 72 73 69 6e 67 2e 20  ommand parsing. 
6780: 20 46 6f 72 20 65 61 63 68 20 43 52 45 41 54 45   For each CREATE
6790: 20 54 41 42 4c 45 0a 61 6e 64 20 43 52 45 41 54   TABLE.and CREAT
67a0: 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
67b0: 74 2c 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  t, the root page
67c0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
67d0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 62 2d  corresponding.b-
67e0: 74 72 65 65 20 69 73 20 61 6c 73 6f 20 72 65 63  tree is also rec
67f0: 6f 72 64 65 64 20 69 6e 20 74 68 65 20 73 71 6c  orded in the sql
6800: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
6810: 20 73 6f 20 74 68 61 74 20 53 51 4c 69 74 65 20   so that SQLite 
6820: 77 69 6c 6c 0a 6b 6e 6f 77 20 77 68 65 72 65 20  will.know where 
6830: 74 6f 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 20  to look for the 
6840: 61 70 70 72 6f 70 72 69 61 74 65 20 62 2d 74 72  appropriate b-tr
6850: 65 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51  ee..</p>..<p>.SQ
6860: 4c 69 74 65 20 75 73 65 72 73 20 63 61 6e 20 71  Lite users can q
6870: 75 65 72 79 20 74 68 65 20 73 71 6c 69 74 65 5f  uery the sqlite_
6880: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6a 75 73  master table jus
6890: 74 20 6c 69 6b 65 20 61 6e 79 20 6f 74 68 65 72  t like any other
68a0: 20 74 61 62 6c 65 0a 69 6e 20 74 68 65 20 64 61   table.in the da
68b0: 74 61 62 61 73 65 2e 20 20 42 75 74 20 74 68 65  tabase.  But the
68c0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
68d0: 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 64  able cannot be d
68e0: 69 72 65 63 74 6c 79 20 77 72 69 74 74 65 6e 2e  irectly written.
68f0: 0a 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  .The sqlite_mast
6900: 65 72 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f  er table is auto
6910: 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65  matically update
6920: 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
6930: 20 43 52 45 41 54 45 0a 61 6e 64 20 44 52 4f 50   CREATE.and DROP
6940: 20 73 74 61 74 65 6d 65 6e 74 73 20 62 75 74 20   statements but 
6950: 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  it cannot be cha
6960: 6e 67 65 64 20 75 73 69 6e 67 20 49 4e 53 45 52  nged using INSER
6970: 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 0a 44 45  T, UPDATE, or.DE
6980: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
6990: 61 73 20 74 68 61 74 20 77 6f 75 6c 64 20 72 69  as that would ri
69a0: 73 6b 20 63 6f 72 72 75 70 74 69 6e 67 20 74 68  sk corrupting th
69b0: 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e  e database..</p>
69c0: 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 74 6f  ..<p>.SQLite sto
69d0: 72 65 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  res temporary ta
69e0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
69f0: 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 0a 66   in a separate.f
6a00: 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 6d 61 69  ile from the mai
6a10: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
6a20: 20 20 54 68 65 20 74 65 6d 70 6f 72 61 72 79 20    The temporary 
6a30: 74 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 66  table database f
6a40: 69 6c 65 0a 69 73 20 74 68 65 20 73 61 6d 65 20  ile.is the same 
6a50: 73 74 72 75 63 74 75 72 65 20 61 73 20 74 68 65  structure as the
6a60: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
6a70: 69 6c 65 2e 20 20 54 68 65 20 73 63 68 65 6d 61  ile.  The schema
6a80: 20 74 61 62 6c 65 0a 66 6f 72 20 74 68 65 20 74   table.for the t
6a90: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
6aa0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 70 61 67  is stored on pag
6ab0: 65 20 32 20 6a 75 73 74 20 61 73 20 69 6e 20 74  e 2 just as in t
6ac0: 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65  he main.database
6ad0: 2e 20 20 42 75 74 20 74 68 65 20 73 63 68 65 6d  .  But the schem
6ae0: 61 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20  a table for the 
6af0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
6b00: 73 65 20 6e 61 6d 65 64 0a 22 73 71 6c 69 74 65  se named."sqlite
6b10: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e  _temp_master" in
6b20: 73 74 65 61 64 20 6f 66 20 22 73 71 6c 69 74 65  stead of "sqlite
6b30: 5f 6d 61 73 74 65 72 22 2e 20 20 4f 74 68 65 72  _master".  Other
6b40: 20 74 68 61 6e 20 74 68 65 0a 6e 61 6d 65 20 63   than the.name c
6b50: 68 61 6e 67 65 2c 20 69 74 20 77 6f 72 6b 73 20  hange, it works 
6b60: 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
6b70: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 34 20  ..</p>..<h3>4.4 
6b80: 26 6e 62 73 70 3b 20 53 63 68 65 6d 61 20 56 65  &nbsp; Schema Ve
6b90: 72 73 69 6f 6e 20 4e 75 6d 62 65 72 69 6e 67 20  rsion Numbering 
6ba0: 41 6e 64 20 4f 74 68 65 72 20 4d 65 74 61 2d 49  And Other Meta-I
6bb0: 6e 66 6f 72 6d 61 74 69 6f 6e 3c 2f 68 33 3e 0a  nformation</h3>.
6bc0: 0a 3c 70 3e 0a 54 68 65 20 6e 69 6e 65 20 33 32  .<p>.The nine 32
6bd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 74 68  -bit integers th
6be0: 61 74 20 61 72 65 20 73 74 6f 72 65 64 20 62 65  at are stored be
6bf0: 67 69 6e 6e 69 6e 67 20 61 74 20 62 79 74 65 20  ginning at byte 
6c00: 6f 66 66 73 65 74 0a 36 30 20 6f 66 20 50 61 67  offset.60 of Pag
6c10: 65 20 31 20 69 6e 20 74 68 65 20 62 2d 74 72 65  e 1 in the b-tre
6c20: 65 20 6c 61 79 65 72 20 61 72 65 20 70 61 73 73  e layer are pass
6c30: 65 64 20 75 70 20 69 6e 74 6f 20 74 68 65 20 73  ed up into the s
6c40: 63 68 65 6d 61 20 6c 61 79 65 72 0a 61 6e 64 20  chema layer.and 
6c50: 75 73 65 64 20 66 6f 72 20 76 65 72 73 69 6f 6e  used for version
6c60: 69 6e 67 20 61 6e 64 20 63 6f 6e 66 69 67 75 72  ing and configur
6c70: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
6c80: 6e 2e 20 20 54 68 65 20 6d 65 61 6e 69 6e 67 0a  n.  The meaning.
6c90: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 6f 75  of the first fou
6ca0: 72 20 69 6e 74 65 67 65 72 73 20 69 73 20 73 68  r integers is sh
6cb0: 6f 77 6e 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  own below.  The 
6cc0: 6f 74 68 65 72 20 66 69 76 65 20 61 72 65 20 63  other five are c
6cd0: 75 72 72 65 6e 74 6c 79 0a 75 6e 75 73 65 64 2e  urrently.unused.
6ce0: 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  .</p>..<ol>.<li>
6cf0: 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
6d00: 6f 6e 20 6e 75 6d 62 65 72 3c 2f 6c 69 3e 0a 3c  on number</li>.<
6d10: 6c 69 3e 54 68 65 20 66 6f 72 6d 61 74 20 76 65  li>The format ve
6d20: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f 6c 69  rsion number</li
6d30: 3e 0a 3c 6c 69 3e 54 68 65 20 72 65 63 6f 6d 6d  >.<li>The recomm
6d40: 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
6d50: 65 20 73 69 7a 65 3c 2f 6c 69 3e 0a 3c 6c 69 3e  e size</li>.<li>
6d60: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
6d70: 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
6d80: 0a 54 68 65 20 66 69 72 73 74 20 6d 65 74 61 2d  .The first meta-
6d90: 76 61 6c 75 65 2c 20 74 68 65 20 73 63 68 65 6d  value, the schem
6da0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
6db0: 2c 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  , is used to det
6dc0: 65 63 74 20 77 68 65 6e 0a 74 68 65 20 73 63 68  ect when.the sch
6dd0: 65 6d 61 20 6f 66 20 74 68 65 20 64 61 74 61 62  ema of the datab
6de0: 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 62  ase is changed b
6df0: 79 20 61 20 43 52 45 41 54 45 20 6f 72 20 44 52  y a CREATE or DR
6e00: 4f 50 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65  OP statement..Re
6e10: 63 61 6c 6c 20 74 68 61 74 20 77 68 65 6e 20 61  call that when a
6e20: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
6e30: 73 74 20 6f 70 65 6e 65 64 20 74 68 65 20 73 71  st opened the sq
6e40: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
6e50: 65 20 69 73 0a 73 63 61 6e 6e 65 64 20 61 6e 64  e is.scanned and
6e60: 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 72 65 70   an internal rep
6e70: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
6e80: 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  he tables, indic
6e90: 65 73 2c 20 76 69 65 77 73 2c 0a 61 6e 64 20 74  es, views,.and t
6ea0: 72 69 67 67 65 72 73 20 66 6f 72 20 74 68 65 20  riggers for the 
6eb0: 64 61 74 61 62 61 73 65 20 69 73 20 62 75 69 6c  database is buil
6ec0: 74 20 69 6e 20 6d 65 6d 6f 72 79 2e 20 20 54 68  t in memory.  Th
6ed0: 69 73 20 69 6e 74 65 72 6e 61 6c 0a 72 65 70 72  is internal.repr
6ee0: 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 75 73  esentation is us
6ef0: 65 64 20 66 6f 72 20 61 6c 6c 20 73 75 62 73 65  ed for all subse
6f00: 71 75 65 6e 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  quent SQL comman
6f10: 64 20 70 61 72 73 69 6e 67 20 61 6e 64 0a 65 78  d parsing and.ex
6f20: 65 63 75 74 69 6f 6e 2e 20 20 42 75 74 20 77 68  ecution.  But wh
6f30: 61 74 20 69 66 20 61 6e 6f 74 68 65 72 20 70 72  at if another pr
6f40: 6f 63 65 73 73 20 77 65 72 65 20 74 6f 20 63 68  ocess were to ch
6f50: 61 6e 67 65 20 74 68 65 20 73 63 68 65 6d 61 0a  ange the schema.
6f60: 62 79 20 61 64 64 69 6e 67 20 6f 72 20 72 65 6d  by adding or rem
6f70: 6f 76 69 6e 67 20 61 20 74 61 62 6c 65 2c 20 69  oving a table, i
6f80: 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74  ndex, view, or t
6f90: 72 69 67 67 65 72 3f 20 20 49 66 20 74 68 65 20  rigger?  If the 
6fa0: 6f 72 69 67 69 6e 61 6c 0a 70 72 6f 63 65 73 73  original.process
6fb0: 20 77 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75   were to continu
6fc0: 65 20 75 73 69 6e 67 20 74 68 65 20 6f 6c 64 20  e using the old 
6fd0: 73 63 68 65 6d 61 2c 20 69 74 20 63 6f 75 6c 64  schema, it could
6fe0: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 0a 63 6f 72   potentially.cor
6ff0: 72 75 70 74 20 74 68 65 20 64 61 74 61 62 61 73  rupt the databas
7000: 65 20 62 79 20 77 72 69 74 69 6e 67 20 74 6f 20  e by writing to 
7010: 61 20 74 61 62 6c 65 20 74 68 61 74 20 6e 6f 20  a table that no 
7020: 6c 6f 6e 67 65 72 20 65 78 69 73 74 73 2e 0a 54  longer exists..T
7030: 6f 20 61 76 6f 69 64 20 74 68 69 73 20 70 72 6f  o avoid this pro
7040: 62 6c 65 6d 2c 20 74 68 65 20 73 63 68 65 6d 61  blem, the schema
7050: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
7060: 69 73 20 63 68 61 6e 67 65 64 20 77 68 65 6e 65  is changed whene
7070: 76 65 72 0a 61 20 43 52 45 41 54 45 20 6f 72 20  ver.a CREATE or 
7080: 44 52 4f 50 20 73 74 61 74 65 6d 65 6e 74 20 69  DROP statement i
7090: 73 20 65 78 65 63 75 74 65 64 2e 20 20 42 65 66  s executed.  Bef
70a0: 6f 72 65 20 65 61 63 68 20 63 6f 6d 6d 61 6e 64  ore each command
70b0: 20 69 73 0a 65 78 65 63 75 74 65 64 2c 20 74 68   is.executed, th
70c0: 65 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d 61  e current schema
70d0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
70e0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
70f0: 20 66 69 6c 65 0a 69 73 20 63 6f 6d 70 61 72 65   file.is compare
7100: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 73 63  d against the sc
7110: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
7120: 62 65 72 20 66 72 6f 6d 20 77 68 65 6e 20 74 68  ber from when th
7130: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  e sqlite_master.
7140: 74 61 62 6c 65 20 77 61 73 20 6c 61 73 74 20 72  table was last r
7150: 65 61 64 2e 20 20 49 66 20 74 68 6f 73 65 20 6e  ead.  If those n
7160: 75 6d 62 65 72 73 20 61 72 65 20 64 69 66 66 65  umbers are diffe
7170: 72 65 6e 74 2c 20 74 68 65 20 69 6e 74 65 72 6e  rent, the intern
7180: 61 6c 0a 73 63 68 65 6d 61 20 72 65 70 72 65 73  al.schema repres
7190: 65 6e 74 61 74 69 6f 6e 20 69 73 20 65 72 61 73  entation is eras
71a0: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
71b0: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
71c0: 73 20 72 65 72 65 61 64 0a 74 6f 20 72 65 63 6f  s reread.to reco
71d0: 6e 73 74 72 75 63 74 20 74 68 65 20 69 6e 74 65  nstruct the inte
71e0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 72 65 70 72  rnal schema repr
71f0: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 28 43 61 6c  esentation..(Cal
7200: 6c 73 20 74 6f 20 73 71 6c 69 74 65 5f 65 78 65  ls to sqlite_exe
7210: 63 28 29 20 67 65 6e 65 72 61 6c 6c 79 20 72 65  c() generally re
7220: 74 75 72 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  turn SQLITE_SCHE
7230: 4d 41 20 77 68 65 6e 20 74 68 69 73 20 68 61 70  MA when this hap
7240: 70 65 6e 73 2e 29 0a 3c 2f 70 3e 0a 0a 3c 70 3e  pens.).</p>..<p>
7250: 0a 54 68 65 20 73 65 63 6f 6e 64 20 6d 65 74 61  .The second meta
7260: 2d 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 63  -value is the sc
7270: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
7280: 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ion number.  Thi
7290: 73 0a 6e 75 6d 62 65 72 20 74 65 6c 6c 73 20 77  s.number tells w
72a0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
72b0: 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72 20  he schema layer 
72c0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74  should be used t
72d0: 6f 0a 69 6e 74 65 72 70 72 65 74 20 74 68 65 20  o.interpret the 
72e0: 66 69 6c 65 2e 20 20 54 68 65 72 65 20 68 61 76  file.  There hav
72f0: 65 20 62 65 65 6e 20 63 68 61 6e 67 65 73 20 74  e been changes t
7300: 6f 20 74 68 65 20 73 63 68 65 6d 61 20 6c 61 79  o the schema lay
7310: 65 72 0a 6f 76 65 72 20 74 69 6d 65 20 61 6e 64  er.over time and
7320: 20 74 68 69 73 20 6e 75 6d 62 65 72 20 69 73 20   this number is 
7330: 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
7340: 68 65 6e 20 61 6e 20 6f 6c 64 65 72 20 64 61 74  hen an older dat
7350: 61 62 61 73 65 0a 66 69 6c 65 20 69 73 20 62 65  abase.file is be
7360: 69 6e 67 20 70 72 6f 63 65 73 73 65 64 20 62 79  ing processed by
7370: 20 61 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e   a newer version
7380: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
7390: 0a 41 73 20 6f 66 20 74 68 69 73 20 77 72 69 74  .As of this writ
73a0: 69 6e 67 20 28 53 51 4c 69 74 65 20 76 65 72 73  ing (SQLite vers
73b0: 69 6f 6e 20 32 2e 37 2e 30 29 20 74 68 65 20 63  ion 2.7.0) the c
73c0: 75 72 72 65 6e 74 20 66 6f 72 6d 61 74 20 76 65  urrent format ve
73d0: 72 73 69 6f 6e 0a 69 73 20 22 34 22 2e 0a 3c 2f  rsion.is "4"..</
73e0: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 74 68 69 72  p>..<p>.The thir
73f0: 64 20 6d 65 74 61 2d 76 61 6c 75 65 20 69 73 20  d meta-value is 
7400: 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
7410: 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
7420: 20 61 73 20 73 65 74 20 0a 62 79 20 74 68 65 20   as set .by the 
7430: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
7440: 5a 45 20 70 72 61 67 6d 61 2e 20 20 49 66 20 74  ZE pragma.  If t
7450: 68 65 20 76 61 6c 75 65 20 69 73 20 70 6f 73 69  he value is posi
7460: 74 69 76 65 20 69 74 0a 6d 65 61 6e 73 20 74 68  tive it.means th
7470: 61 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 62  at synchronous b
7480: 65 68 61 76 69 6f 72 20 69 73 20 65 6e 61 62 6c  ehavior is enabl
7490: 65 20 28 76 69 61 20 74 68 65 20 44 45 46 41 55  e (via the DEFAU
74a0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 70  LT_SYNCHRONOUS.p
74b0: 72 61 67 6d 61 29 20 61 6e 64 20 69 66 20 6e 65  ragma) and if ne
74c0: 67 61 74 69 76 65 20 69 74 20 6d 65 61 6e 73 20  gative it means 
74d0: 74 68 61 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  that synchronous
74e0: 20 62 65 68 61 76 69 6f 72 20 69 73 0a 64 69 73   behavior is.dis
74f0: 61 62 6c 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  abled..</p>..<p>
7500: 0a 54 68 65 20 66 6f 75 72 74 68 20 6d 65 74 61  .The fourth meta
7510: 2d 76 61 6c 75 65 20 69 73 20 73 61 66 65 74 79  -value is safety
7520: 20 6c 65 76 65 6c 20 61 64 64 65 64 20 69 6e 20   level added in 
7530: 76 65 72 73 69 6f 6e 20 32 2e 38 2e 30 2e 0a 41  version 2.8.0..A
7540: 20 76 61 6c 75 65 20 6f 66 20 31 20 63 6f 72 72   value of 1 corr
7550: 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 53 59 4e  esponds to a SYN
7560: 43 48 52 4f 4e 4f 55 53 20 73 65 74 74 69 6e 67  CHRONOUS setting
7570: 20 6f 66 20 4f 46 46 2e 20 20 49 6e 20 6f 74 68   of OFF.  In oth
7580: 65 72 0a 77 6f 72 64 73 2c 20 53 51 4c 69 74 65  er.words, SQLite
7590: 20 64 6f 65 73 20 6e 6f 74 20 70 61 75 73 65 20   does not pause 
75a0: 74 6f 20 77 61 69 74 20 66 6f 72 20 6a 6f 75 72  to wait for jour
75b0: 6e 61 6c 20 64 61 74 61 20 74 6f 20 72 65 61 63  nal data to reac
75c0: 68 20 74 68 65 20 64 69 73 6b 0a 73 75 72 66 61  h the disk.surfa
75d0: 63 65 20 62 65 66 6f 72 65 20 6f 76 65 72 77 72  ce before overwr
75e0: 69 74 69 6e 67 20 70 61 67 65 73 20 6f 66 20 74  iting pages of t
75f0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 41 20  he database.  A 
7600: 76 61 6c 75 65 20 6f 66 20 32 20 63 6f 72 72 65  value of 2 corre
7610: 73 70 6f 6e 64 73 0a 74 6f 20 61 20 53 59 4e 43  sponds.to a SYNC
7620: 48 52 4f 4e 4f 55 53 20 73 65 74 74 69 6e 67 20  HRONOUS setting 
7630: 6f 66 20 4e 4f 52 4d 41 4c 2e 20 20 41 20 76 61  of NORMAL.  A va
7640: 6c 75 65 20 6f 66 20 33 20 63 6f 72 72 65 73 70  lue of 3 corresp
7650: 6f 6e 64 73 20 74 6f 20 61 0a 53 59 4e 43 48 52  onds to a.SYNCHR
7660: 4f 4e 4f 55 53 20 73 65 74 74 69 6e 67 20 6f 66  ONOUS setting of
7670: 20 46 55 4c 4c 2e 20 49 66 20 74 68 65 20 76 61   FULL. If the va
7680: 6c 75 65 20 69 73 20 30 2c 20 74 68 61 74 20 6d  lue is 0, that m
7690: 65 61 6e 73 20 69 74 20 68 61 73 20 6e 6f 74 0a  eans it has not.
76a0: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
76b0: 20 73 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   so the default 
76c0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
76d0: 69 6e 67 20 6f 66 20 4e 4f 52 4d 41 4c 20 69 73  ing of NORMAL is
76e0: 20 75 73 65 64 2e 0a 3c 2f 70 3e 0a 0a 7d 0a 0a   used..</p>..}..
76f0: 70 75 74 73 20 7b 0a 3c 70 3e 3c 68 72 20 2f 3e  puts {.<p><hr />
7700: 3c 2f 70 3e 0a 3c 70 3e 3c 61 20 68 72 65 66 3d  </p>.<p><a href=
7710: 22 69 6e 64 65 78 2e 68 74 6d 6c 22 3e 3c 69 6d  "index.html"><im
7720: 67 20 73 72 63 3d 22 2f 67 6f 62 61 63 6b 2e 6a  g src="/goback.j
7730: 70 67 22 20 62 6f 72 64 65 72 3d 30 20 2f 3e 0a  pg" border=0 />.
7740: 42 61 63 6b 20 74 6f 20 74 68 65 20 53 51 4c 69  Back to the SQLi
7750: 74 65 20 48 6f 6d 65 20 50 61 67 65 3c 2f 61 3e  te Home Page</a>
7760: 0a 3c 2f 70 3e 0a 0a 3c 2f 62 6f 64 79 3e 3c 2f  .</p>..</body></
7770: 68 74 6d 6c 3e 7d 0a                             html>}.