Documentation Source Text

Hex Artifact Content
Login

Artifact 7e1c74f0ee945e7210567da14b4d3a26783cff8b:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 4d 6f 73 74 20 6f 66 20 74 68 65  ..<p>Most of the
0140: 20 74 69 6d 65 20 74 68 65 20 63 6f 6d 70 6c 65   time the comple
0150: 74 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53  te state of an S
0160: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 0a  QLite database .
0170: 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 61 20 73  is contained a s
0180: 69 6e 67 6c 65 20 66 69 6c 65 20 6f 6e 20 64 69  ingle file on di
0190: 73 6b 20 63 61 6c 6c 65 64 20 74 68 65 20 22 6d  sk called the "m
01a0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
01b0: 65 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 69 6c  e".</p>..<p>Whil
01c0: 65 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 74  e performing a t
01d0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20  ransaction, the 
01e0: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
01f0: 20 69 73 20 74 6f 20 73 74 6f 72 65 73 20 0a 73   is to stores .s
0200: 6f 6d 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  ome temporary in
0210: 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 61 20 73  formation in a s
0220: 65 63 6f 6e 64 20 66 69 6c 65 20 63 61 6c 6c 65  econd file calle
0230: 64 20 74 68 65 20 22 72 6f 6c 6c 62 61 63 6b 20  d the "rollback 
0240: 6a 6f 75 72 6e 61 6c 22 2e 0a 28 54 68 65 20 61  journal"..(The a
0250: 6c 74 65 72 6e 61 74 69 76 65 20 69 73 20 74 6f  lternative is to
0260: 20 75 73 65 20 61 20 5b 77 72 69 74 65 2d 61 68   use a [write-ah
0270: 65 61 64 20 6c 6f 67 5d 20 2d 20 64 65 73 63 72  ead log] - descr
0280: 69 62 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e  ibed separately.
0290: 29 0a 49 66 20 74 68 65 20 61 70 70 6c 69 63 61  ).If the applica
02a0: 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20 63 6f 6d  tion or.host com
02b0: 70 75 74 65 72 20 63 72 61 73 68 65 73 20 62 65  puter crashes be
02c0: 66 6f 72 65 20 63 6f 6d 70 6c 65 74 69 6e 67 20  fore completing 
02d0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  the transaction,
02e0: 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c 62 61   then the rollba
02f0: 63 6b 0a 6a 6f 75 72 6e 61 6c 20 63 6f 6e 74 61  ck.journal conta
0300: 69 6e 73 20 63 72 69 74 69 63 61 6c 20 73 74 61  ins critical sta
0310: 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  te information n
0320: 65 65 64 65 64 20 74 6f 20 72 65 73 74 6f 72 65  eeded to restore
0330: 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20 6f 66 20   the.content of 
0340: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
0350: 65 20 66 69 6c 65 2e 20 20 57 68 65 6e 20 61 20  e file.  When a 
0360: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
0370: 20 63 6f 6e 74 61 69 6e 73 0a 69 6e 66 6f 72 6d   contains.inform
0380: 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79 20  ation necessary 
0390: 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20 74  for recovering t
03a0: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
03b0: 64 61 74 61 62 61 73 65 2c 20 77 65 20 73 61 79  database, we say
03c0: 0a 74 68 61 74 20 69 74 20 69 73 20 61 20 22 68  .that it is a "h
03d0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 2e 20 20 48 6f  ot journal".  Ho
03e0: 74 20 6a 6f 75 72 6e 61 6c 73 20 6f 6e 6c 79 20  t journals only 
03f0: 63 6f 6d 65 20 75 70 20 69 6e 20 61 6e 20 65 72  come up in an er
0400: 72 6f 72 20 72 65 63 6f 76 65 72 79 0a 73 63 65  ror recovery.sce
0410: 6e 61 72 69 6f 20 61 6e 64 20 73 6f 20 61 72 65  nario and so are
0420: 20 75 6e 63 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74   uncommon, but t
0430: 68 65 79 20 61 72 65 20 70 61 72 74 20 6f 66 20  hey are part of 
0440: 74 68 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20  the state of an 
0450: 53 51 4c 69 74 65 0a 64 61 74 61 62 61 73 65 20  SQLite.database 
0460: 61 6e 64 20 73 6f 20 73 68 6f 75 6c 64 20 6e 6f  and so should no
0470: 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20 20 54  t be ignored.  T
0480: 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 66  his document def
0490: 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 0a  ines the format.
04a0: 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  of a rollback jo
04b0: 75 72 6e 61 6c 20 28 61 6e 64 20 74 68 65 20 77  urnal (and the w
04c0: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
04d0: 69 6c 65 29 2c 20 62 75 74 20 6d 61 69 6e 20 66  ile), but main f
04e0: 6f 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d  ocus is.on the m
04f0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
0500: 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20  e.</p>..<h3>1.1 
0510: 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  Pages</h3>..<p>T
0520: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
0530: 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f   file consists o
0540: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61  f one or more pa
0550: 67 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20  ges.  ^The size 
0560: 6f 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70  of a.page is a p
0570: 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77  ower of two betw
0580: 65 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33  een 512 and 6553
0590: 36 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c  6 inclusive.  Al
05a0: 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74  l pages within.t
05b0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
05c0: 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69   are the same si
05d0: 7a 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73  ze.  ^The page s
05e0: 69 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61  ize for a databa
05f0: 73 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72  se file.is deter
0600: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62  mined by the 2-b
0610: 79 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61  yte integer loca
0620: 74 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74  ted at an offset
0630: 20 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f   of.16 bytes fro
0640: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
0650: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
0660: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  file.</p>..<p>Pa
0670: 67 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  ges are numbered
0680: 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
0690: 31 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  1.  The maximum 
06a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32  page number is.2
06b0: 31 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70  147483646 (2<sup
06c0: 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c  ><small>31</smal
06d0: 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20  l></sup> - 2).  
06e0: 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65  The minimum size
06f0: 0a 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65  .SQLite database
0700: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32   is a single 512
0710: 2d 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20  -byte page..The 
0720: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74  maximum size dat
0730: 61 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32  abase would be 2
0740: 31 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20  147483646 pages 
0750: 61 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70  at 65536 bytes p
0760: 65 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37  er.page or 140,7
0770: 33 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62  37,488,224,256 b
0780: 79 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20  ytes (about 140 
0790: 74 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75  terabytes).  Usu
07a0: 61 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c  ally SQLite will
07b0: 0a 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d  .hit the maximum
07c0: 20 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74   file size limit
07d0: 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
07e0: 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72  ng filesystem or
07f0: 20 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73   disk.hardware s
0800: 69 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62  ize limit long b
0810: 65 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74  efore it hits it
0820: 73 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73  s own internal s
0830: 69 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a  ize limit.</p>..
0840: 3c 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65  <p>In common use
0850: 2c 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  , SQLite databas
0860: 65 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65  es tend to range
0870: 20 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20   in size from a 
0880: 66 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f  few kilobytes.to
0890: 20 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73   a few gigabytes
08a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79  .</p>..<p>At any
08b0: 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20   point in time, 
08c0: 65 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68  every page in th
08d0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
08e0: 68 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65  has a single.use
08f0: 20 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66   which is one of
0900: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
0910: 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63  <ul>.<li>The loc
0920: 6b 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e  k-byte page.<li>
0930: 41 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a  A freelist page.
0940: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c  <ul>.<li>A freel
0950: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c  ist trunk page.<
0960: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65  li>A freelist le
0970: 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c  af page.</ul>.<l
0980: 69 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a  i>A b-tree page.
0990: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  <ul>.<li>A table
09a0: 20 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72   b-tree interior
09b0: 20 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c   page.<li>A tabl
09c0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
09d0: 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20  ge.<li>An index 
09e0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09f0: 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65  page.<li>An inde
0a00: 78 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  x b-tree leaf pa
0a10: 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70  ge.</ul>.<li>A p
0a20: 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20  ayload overflow 
0a30: 70 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74  page.<li>A point
0a40: 65 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c  er map page.</ul
0a50: 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20  >.</p>..<p>^All 
0a60: 72 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77  reads from and w
0a70: 72 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69  rites to the mai
0a80: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
0a90: 62 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a  begin at a page.
0aa0: 62 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c  boundary and all
0ab0: 20 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69   writes are an i
0ac0: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
0ad0: 20 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20   pages in size. 
0ae0: 20 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f   ^Reads.are also
0af0: 20 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65   usually an inte
0b00: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ger number of pa
0b10: 67 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74  ges in size, wit
0b20: 68 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74  h the one except
0b30: 69 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68  ion.that when th
0b40: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
0b50: 72 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20  rst opened, the 
0b60: 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20  first 100 bytes 
0b70: 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  of the.database 
0b80: 66 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61  file (the databa
0b90: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20  se file header) 
0ba0: 61 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75  are read as a su
0bb0: 62 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74  b-page size unit
0bc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72  .</p>..<p>^Befor
0bd0: 65 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f  e any informatio
0be0: 6e 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f  n-bearing page o
0bf0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
0c00: 73 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65  s modified, .the
0c10: 20 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69   original unmodi
0c20: 66 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  fied content of 
0c30: 74 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69  that page is wri
0c40: 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72  tten into the .r
0c50: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
0c60: 20 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69    If a transacti
0c70: 6f 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  on is interrupte
0c80: 64 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62  d and needs to b
0c90: 65 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20  e .rolled back, 
0ca0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
0cb0: 72 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65  rnal can then be
0cc0: 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65   used to restore
0cd0: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
0ce0: 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74   its original st
0cf0: 61 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20  ate.  ^Freelist 
0d00: 6c 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20  leaf pages bear 
0d10: 6e 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  no.information t
0d20: 68 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74  hat would need t
0d30: 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e  o be restored on
0d40: 20 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20   a rollback and 
0d50: 73 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20  so they.are not 
0d60: 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a  written to the j
0d70: 6f 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20  ournal prior to 
0d80: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e  modification, in
0d90: 20 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65   order to.reduce
0da0: 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a   disk I/O.</p>..
0db0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
0dc0: 20 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72   database_header
0dd0: 20 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65   {database heade
0de0: 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32  r}</tcl>.<h3>1.2
0df0: 20 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65   The Database He
0e00: 61 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ader</h3>..<p>Th
0e10: 65 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65  e first 100 byte
0e20: 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
0e30: 65 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20  e file comprise 
0e40: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0e50: 65 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20  e .header.  The 
0e60: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
0e70: 61 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20  ader is divided 
0e80: 69 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73  into fields as s
0e90: 68 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c  hown by.the tabl
0ea0: 65 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75  e below.  All mu
0eb0: 6c 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69  ltibyte fields i
0ec0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
0ed0: 69 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73  ile header are.s
0ee0: 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d  tored with the m
0ef0: 75 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20  ust significant 
0f00: 62 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d  byte first (big-
0f10: 65 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63  endian).</p>..<c
0f20: 65 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61  enter>.<i>Databa
0f30: 73 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  se Header Format
0f40: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
0f50: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
0f60: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
0f70: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
0f80: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
0f90: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
0fa0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
0fb0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
0fc0: 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61  n=center>16<td a
0fd0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68  lign=left>.The h
0fe0: 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53  eader string: "S
0ff0: 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30  QLite format 3\0
1000: 30 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  00".<tr><td vali
1010: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1020: 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
1030: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1040: 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>2<td align=lef
1050: 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20  t>.The database 
1060: 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74  page size in byt
1070: 65 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70  es.  Must be a p
1080: 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77  ower of two betw
1090: 65 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36  een 512.and 3276
10a0: 38 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20  8 inclusive, or 
10b0: 74 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72  the value 1 repr
10c0: 65 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20  esenting a page 
10d0: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c  size of 65536..<
10e0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
10f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1100: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
1110: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
1120: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1130: 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20  le format write 
1140: 76 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20  version.  1 for 
1150: 6c 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57  legacy; 2 for [W
1160: 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  AL]..<tr><td val
1170: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1180: 6e 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67  nter>19<td valig
1190: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
11a0: 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>1<td align=le
11b0: 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20  ft>.File format 
11c0: 72 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31  read version.  1
11d0: 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66   for legacy; 2 f
11e0: 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74  or [WAL]..<tr><t
11f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1200: 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20  gn=center>20<td 
1210: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1220: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
1230: 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f  gn=left>.Bytes o
1240: 66 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76  f unused "reserv
1250: 65 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65  ed" space at the
1260: 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67   end of each pag
1270: 65 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c  e.  Usually 0..<
1280: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1290: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12a0: 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  1<td valign=top 
12b0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
12c0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61  d align=left>.Ma
12d0: 78 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  ximum embedded p
12e0: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e  ayload fraction.
12f0: 20 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74    Must be 64..<t
1300: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1310: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32   align=center>22
1320: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1330: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1340: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e   align=left>.Min
1350: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
1360: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1370: 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72   Must be 32..<tr
1380: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1390: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c  align=center>23<
13a0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13b0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
13c0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66  align=left>.Leaf
13d0: 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f   payload fractio
13e0: 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a  n.  Must be 32..
13f0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1400: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1410: 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  24<td valign=top
1420: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1430: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46  td align=left>.F
1440: 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ile change count
1450: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
1460: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1470: 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e  ter>28<td valign
1480: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1490: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
14a0: 74 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64  t>.Size of the d
14b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20  atabase file in 
14c0: 70 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d  pages.  The "in-
14d0: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
14e0: 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76  size"..<tr><td v
14f0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1500: 63 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c  center>32<td val
1510: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1520: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1530: 6c 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65  left>.Page numbe
1540: 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66  r of the first f
1550: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
1560: 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ge..<tr><td vali
1570: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1580: 74 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e  ter>36<td valign
1590: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
15a0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
15b0: 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  t>.Total number 
15c0: 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65  of freelist page
15d0: 73 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  s..<tr><td valig
15e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
15f0: 65 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>40<td valign=
1600: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1610: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1620: 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  >.The schema coo
1630: 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  kie..<tr><td val
1640: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1650: 6e 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67  nter>44<td valig
1660: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1670: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1680: 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66  ft>.The schema f
1690: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53  ormat number.  S
16a0: 75 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20  upported schema 
16b0: 66 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32  formats are 1, 2
16c0: 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e  , 3, and 4..<tr>
16d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
16e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74  lign=center>48<t
16f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1700: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1710: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75  lign=left>.Defau
1720: 6c 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  lt page cache si
1730: 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ze..<tr><td vali
1740: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1750: 74 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e  ter>52<td valign
1760: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1770: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1780: 74 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62  t>.The page numb
1790: 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  er of the larges
17a0: 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  t root b-tree pa
17b0: 67 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d  ge when in auto-
17c0: 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d  vacuum or.increm
17d0: 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64  ental-vacuum mod
17e0: 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65  es, or zero othe
17f0: 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  rwise..<tr><td v
1800: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1810: 63 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c  center>56<td val
1820: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1830: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1840: 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61  left>.The databa
1850: 73 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  se text encoding
1860: 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20  .  A value of 1 
1870: 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20  means UTF-8.  A 
1880: 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73  value of 2.means
1890: 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61   UTF-16le.  A va
18a0: 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55  lue of 3 means U
18b0: 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64  TF-16be..<tr><td
18c0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
18d0: 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76  n=center>60<td v
18e0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
18f0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1900: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65  n=left>.The "use
1910: 72 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65  r version" as re
1920: 61 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68  ad and set by th
1930: 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e [user_version 
1940: 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64  pragma]..<tr><td
1950: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1960: 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76  n=center>64<td v
1970: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1980: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1990: 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f  n=left>.True (no
19a0: 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72  n-zero) for incr
19b0: 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d  emental-vacuum m
19c0: 6f 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72  ode.  False (zer
19d0: 6f 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74  o) otherwise..<t
19e0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
19f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38   align=center>68
1a00: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1a10: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74  lign=center>24<t
1a20: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 52 65  d align=left>.Re
1a30: 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e  served for expan
1a40: 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 7a  sion.  Must be z
1a50: 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ero..<tr><td val
1a60: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1a70: 6e 74 65 72 3e 39 32 3c 74 64 20 76 61 6c 69 67  nter>92<td valig
1a80: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1a90: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1aa0: 66 74 3e 0a 54 68 65 20 5b 76 65 72 73 69 6f 6e  ft>.The [version
1ab0: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
1ac0: 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  r]..<tr><td vali
1ad0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1ae0: 74 65 72 3e 39 36 3c 74 64 20 76 61 6c 69 67 6e  ter>96<td valign
1af0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1b00: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1b10: 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49  t>.[SQLITE_VERSI
1b20: 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f 74 61 62  ON_NUMBER].</tab
1b30: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 68  le></center>..<h
1b40: 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63 20 48 65  4>1.2.1 Magic He
1b50: 61 64 65 72 20 53 74 72 69 6e 67 3c 2f 68 34 3e  ader String</h4>
1b60: 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69  ..<p>^Every vali
1b70: 64 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  d SQLite databas
1b80: 65 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69  e file begins wi
1b90: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
1ba0: 20 31 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68   16 bytes .(in h
1bb0: 65 78 29 3a 20 35 33 20 35 31 20 34 63 20 36 39  ex): 53 51 4c 69
1bc0: 20 37 34 20 36 35 20 32 30 20 36 36 20 36 66 20   74 65 20 66 6f 
1bd0: 37 32 20 36 64 20 36 31 20 37 34 20 32 30 20 33  72 6d 61 74 20 3
1be0: 33 20 30 30 2e 20 20 54 68 69 73 20 62 79 74 65  3 00.  This byte
1bf0: 20 73 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73   sequence.corres
1c00: 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46  ponds to the UTF
1c10: 2d 38 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74  -8 string "SQLit
1c20: 65 20 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c  e format 3" incl
1c30: 75 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65  uding the nul.te
1c40: 72 6d 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74  rminator charact
1c50: 65 72 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f  er at the end.</
1c60: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32 20 50 61  p>..<h4>1.2.2 Pa
1c70: 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70  ge Size</h4>..<p
1c80: 3e 54 68 65 20 74 77 6f 2d 62 79 74 65 20 76 61  >The two-byte va
1c90: 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 74  lue beginning at
1ca0: 20 6f 66 66 73 65 74 20 31 36 20 64 65 74 65 72   offset 16 deter
1cb0: 6d 69 6e 65 73 20 74 68 65 20 70 61 67 65 20 73  mines the page s
1cc0: 69 7a 65 20 6f 66 20 0a 74 68 65 20 64 61 74 61  ize of .the data
1cd0: 62 61 73 65 2e 20 20 46 6f 72 20 53 51 4c 69 74  base.  For SQLit
1ce0: 65 20 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30  e versions 3.7.0
1cf0: 2e 31 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20  .1 and earlier, 
1d00: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 0a 69  this value is .i
1d10: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
1d20: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
1d30: 65 72 20 61 6e 64 20 6d 75 73 74 20 62 65 20 61  er and must be a
1d40: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65   power of two be
1d50: 74 77 65 65 6e 0a 35 31 32 20 61 6e 64 20 33 32  tween.512 and 32
1d60: 37 36 38 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20  768, inclusive. 
1d70: 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   Beginning with 
1d80: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
1d90: 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a 73 69 7a  .7.1, a page.siz
1da0: 65 20 6f 66 20 36 35 35 33 36 20 62 79 74 65 73  e of 65536 bytes
1db0: 20 69 73 20 73 75 70 70 6f 72 74 65 64 2e 20 20   is supported.  
1dc0: 54 68 65 20 76 61 6c 75 65 20 36 35 35 33 36 20  The value 65536 
1dd0: 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20  will not fit in 
1de0: 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67  a.two-byte integ
1df0: 65 72 2c 20 73 6f 20 74 6f 20 73 70 65 63 69 66  er, so to specif
1e00: 79 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  y a 65536-byte p
1e10: 61 67 65 20 73 69 7a 65 2c 20 74 68 65 20 76 61  age size, the va
1e20: 6c 75 65 20 69 73 0a 61 74 20 6f 66 66 73 65 74  lue is.at offset
1e30: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1e40: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1e50: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1e60: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1e70: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1e80: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1e90: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1ea0: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1eb0: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1ec0: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1ed0: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1ee0: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1ef0: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f00: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1f10: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1f20: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1f30: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1f40: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1f50: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1f60: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
1f70: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
1f80: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
1f90: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
1fa0: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
1fb0: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
1fc0: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
1fd0: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
1fe0: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
1ff0: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2000: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
2010: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
2020: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
2030: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
2040: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
2050: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
2060: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2070: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2080: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2090: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
20a0: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
20b0: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
20c0: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
20d0: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
20e0: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
20f0: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2100: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
2110: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
2120: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
2130: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
2140: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
2150: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
2160: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2170: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2180: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2190: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
21a0: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
21b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
21c0: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
21d0: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
21e0: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 2c 20 74   is encounter, t
21f0: 68 65 6e 20 74 68 61 74 20 64 61 74 61 62 61 73  hen that databas
2200: 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 61 64  e cannot be read
2210: 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e   or written.</p>
2220: 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65 73 65  ..<h4>1.2.4 Rese
2230: 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70  rved bytes per p
2240: 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53 51 4c  age</h4>..<p>SQL
2250: 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c  ite has the abil
2260: 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65  ity to set aside
2270: 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20   a small number 
2280: 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61  of extra bytes a
2290: 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t.the end of eve
22a0: 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20  ry page for use 
22b0: 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20  by extensions.  
22c0: 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65  These extra byte
22d0: 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20  s are.used, for 
22e0: 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20  example, by the 
22f0: 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f  SQLite Encryptio
2300: 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73  n Extension to s
2310: 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64  tore a nonce.and
2320: 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69  /or cryptographi
2330: 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63  c checksum assoc
2340: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
2350: 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65  page.  ^The ."re
2360: 73 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69  served space" si
2370: 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65  ze in the 1-byte
2380: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2390: 65 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d  et 20 is the num
23a0: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20  ber.of bytes of 
23b0: 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64  space at the end
23c0: 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f   of each page to
23d0: 20 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74   reserve for ext
23e0: 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61  ensions..This va
23f0: 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30  lue is usually 0
2400: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
2410: 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74   be odd.</p>..<t
2420: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
2430: 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62  sable_size {usab
2440: 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c  le size}</tcl>.<
2450: 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69  p>The "usable si
2460: 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73  ze" of a databas
2470: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61  e page is the pa
2480: 67 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20  ge size specify 
2490: 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e  by the.2-byte in
24a0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
24b0: 31 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  16 in the header
24c0: 20 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72   less the "reser
24d0: 76 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a  ved" space size.
24e0: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20  recorded in the 
24f0: 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  1-byte integer a
2500: 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74  t offset 20 in t
2510: 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20  he header.  The 
2520: 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61  usable.size of a
2530: 20 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61   page might be a
2540: 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e  n odd number.  ^
2550: 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73  (However, the us
2560: 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  able size is not
2570: 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c  .allowed to be l
2580: 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49  ess than 480.  I
2590: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
25a0: 66 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20  f the page size 
25b0: 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65  is 512,.then the
25c0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
25d0: 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65  size cannot exce
25e0: 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68  ed 32.)^</p>..<h
25f0: 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61 64 20  4>1.2.5 Payload 
2600: 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e 0a 0a  fractions</h4>..
2610: 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
2620: 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d 62 65  and minimum embe
2630: 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61  dded payload fra
2640: 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 6c  ctions and the l
2650: 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72 61 63  eaf.payload frac
2660: 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75 73 74  tion values must
2670: 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e 64 20   be 64, 32, and 
2680: 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c 75 65  32.  These value
2690: 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61 6c 6c  s were.originall
26a0: 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 73  y intended to as
26b0: 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d 65 74   tunable paramet
26c0: 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64 20 62  ers that could b
26d0: 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69 66 79  e used to.modify
26e0: 20 74 68 65 20 73 74 6f 72 61 67 65 20 66 6f 72   the storage for
26f0: 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74 72 65  mat of the b-tre
2700: 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20 48 6f  e algorithm.  Ho
2710: 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75 6e 63  wever, that.func
2720: 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e 6f 74  tionality is not
2730: 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20 74   supported and t
2740: 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75 72 72  here are no curr
2750: 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61 64 64  ent plans to add
2760: 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68 65 20  .support in the 
2770: 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65 2c 20  future.  Hence, 
2780: 74 68 65 73 65 20 74 68 72 65 65 20 62 79 74 65  these three byte
2790: 73 20 61 72 65 20 66 69 78 65 64 20 61 74 20 74  s are fixed at t
27a0: 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63 69 66  he.values specif
27b0: 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ied.</p>..<h4>1.
27c0: 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67 65 20  2.6 File change 
27d0: 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a 3c 74  counter</h4>..<t
27e0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
27f0: 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65 20 63  hngctr {change c
2800: 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70  ounter}</tcl>.<p
2810: 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67  >^The file chang
2820: 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34  e counter is a 4
2830: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
2840: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
2850: 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s.incremented wh
2860: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
2870: 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f  ase file is unlo
2880: 63 6b 65 64 20 61 66 74 65 72 20 68 61 76 69 6e  cked after havin
2890: 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e  g.been modified.
28a0: 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72  .When two or mor
28b0: 65 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20  e processes are 
28c0: 72 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65  reading the same
28d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
28e0: 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61  each .process ca
28f0: 6e 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73  n detect databas
2900: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f  e changes from o
2910: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62  ther processes b
2920: 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68  y monitoring .th
2930: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2940: 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c  ..A process will
2950: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74   normally want t
2960: 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61  o flush its data
2970: 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20  base page cache 
2980: 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f  when.another pro
2990: 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68  cess modified th
29a0: 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63  e database, sinc
29b0: 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20  e the cache has 
29c0: 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68  become stale..Th
29d0: 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  e file change co
29e0: 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65  unter facilitate
29f0: 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s this.</p>..<p>
2a00: 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61  In WAL mode, cha
2a10: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
2a20: 62 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65  base are detecte
2a30: 64 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d  d using the wal-
2a40: 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65  index.and so the
2a50: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a60: 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20  is not needed.  
2a70: 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67  Hence, the chang
2a80: 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a  e counter might.
2a90: 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  not be increment
2aa0: 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73  ed on each trans
2ab0: 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f  action in WAL mo
2ac0: 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  de.</p>..<h4>1.2
2ad0: 2e 37 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74  .7 In-header dat
2ae0: 61 62 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a  abase size</h4>.
2af0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2b00: 74 20 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68  t filesize {in-h
2b10: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2b20: 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ize}</tcl>.<p>^T
2b30: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
2b40: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
2b50: 6f 66 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74  offset 28 into t
2b60: 68 65 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65  he header .store
2b70: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
2b80: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2b90: 69 6e 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74  in pages.  ^If t
2ba0: 68 69 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  his in-header.da
2bb0: 74 61 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e  tasize size is n
2bc0: 6f 74 20 76 61 6c 69 64 20 28 73 65 65 20 74 68  ot valid (see th
2bd0: 65 20 6e 65 78 74 20 70 61 72 61 67 72 61 70 68  e next paragraph
2be0: 29 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  ), then the data
2bf0: 62 61 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f  base .size is co
2c00: 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e  mputed by lookin
2c10: 67 0a 61 74 20 74 68 65 20 61 63 74 75 61 6c 20  g.at the actual 
2c20: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
2c30: 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72  base file. Older
2c40: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2c50: 69 74 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20  ite.ignored the 
2c60: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2c70: 73 65 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64  se size and used
2c80: 20 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65   the actual file
2c90: 20 73 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c   size.exclusivel
2ca0: 79 2e 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69  y.  ^Newer versi
2cb0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
2cc0: 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  e the in-header 
2cd0: 64 61 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66  database.size if
2ce0: 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
2cf0: 20 62 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74   but fall back t
2d00: 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c  o the actual fil
2d10: 65 20 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e  e size if.the in
2d20: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d30: 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c   size is not val
2d40: 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  id.</p>..<p>^The
2d50: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2d60: 61 73 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79  ase size is only
2d70: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
2d80: 65 20 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73  e valid if.it is
2d90: 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66   non-zero and if
2da0: 20 74 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61   the 4-byte [cha
2db0: 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20  nge counter] at 
2dc0: 6f 66 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c  offset 24.exactl
2dd0: 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d  y matches the 4-
2de0: 62 79 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61  byte [version-va
2df0: 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20  lid-for number] 
2e00: 61 74 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28  at offset 92..^(
2e10: 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  The in-header da
2e20: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 61  tabase size is a
2e30: 6c 77 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65  lways valid .whe
2e40: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n the database i
2e50: 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20  s only modified 
2e60: 75 73 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72  using recent ver
2e70: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a  sions of SQLite.
2e80: 28 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20  (versions 3.7.0 
2e90: 61 6e 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66  and later).)^.If
2ea0: 20 61 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f   a legacy versio
2eb0: 6e 20 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74  n of SQLite writ
2ec0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ed0: 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a  se, it will not.
2ee0: 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74  know to update t
2ef0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2f00: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73  abase size and s
2f10: 6f 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a  o the in-header.
2f20: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f  database size co
2f30: 75 6c 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74  uld be incorrect
2f40: 2e 20 20 42 75 74 20 6c 65 67 61 63 79 20 76 65  .  But legacy ve
2f50: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2f60: 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65  .will also leave
2f70: 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c   the version-val
2f80: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74  id-for number at
2f90: 20 6f 66 66 73 65 74 20 39 32 20 75 6e 63 68 61   offset 92 uncha
2fa0: 6e 67 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20  nged.so it will 
2fb0: 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 63 68  not match the ch
2fc0: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48  ange-counter.  H
2fd0: 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e  ence, invalid in
2fe0: 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61 73 65  -header.database
2ff0: 20 73 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65   sizes can be de
3000: 74 65 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f  tected (and igno
3010: 72 65 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e  red) by observin
3020: 67 20 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67  g when.the chang
3030: 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e  e-counter does n
3040: 6f 74 20 6d 61 74 63 68 20 74 68 65 20 76 65 72  ot match the ver
3050: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
3060: 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  umber.</p>..<h4>
3070: 31 2e 32 2e 38 20 46 72 65 65 20 70 61 67 65 20  1.2.8 Free page 
3080: 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e  list</h4>..<p>Un
3090: 75 73 65 64 20 70 61 67 65 73 20 69 6e 20 74 68  used pages in th
30a0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
30b0: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20  are stored on a 
30c0: 66 72 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a  freelist.  ^The.
30d0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
30e0: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
30f0: 73 65 74 20 33 32 20 73 74 6f 72 65 73 20 74 68  set 32 stores th
3100: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
3110: 0a 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20  .the first page 
3120: 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c  of the freelist,
3130: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20   or zero if the 
3140: 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74  freelist is empt
3150: 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62  y..^The 4-byte b
3160: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
3170: 72 20 61 74 20 6f 66 66 73 65 74 20 33 36 20 73  r at offset 36 s
3180: 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68 65  tores stores the
3190: 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f   total .number o
31a0: 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66  f pages on the f
31b0: 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68  reelist.</p>..<h
31c0: 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63  4>1.2.9 Schema c
31d0: 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  ookie</h4>..<p>^
31e0: 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  The schema cooki
31f0: 65 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69  e is a 4-byte bi
3200: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3210: 20 61 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68   at offset 40.th
3220: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
3230: 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  d whenever the d
3240: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
3250: 68 61 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70  hanges.  A .prep
3260: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
3270: 73 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e  s compiled again
3280: 73 74 20 61 20 73 70 65 63 69 66 69 63 20 76 65  st a specific ve
3290: 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74  rsion of the.dat
32a0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e  abase schema.  ^
32b0: 57 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  Whenever the dat
32c0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32d0: 6e 67 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d  nges, the statem
32e0: 65 6e 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72  ent.must be repr
32f0: 65 70 61 72 65 64 2e 20 20 5e 57 68 65 6e 65 76  epared.  ^Whenev
3300: 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74  er a prepared st
3310: 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74  atement runs, it
3320: 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68   first checks.th
3330: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3340: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
3350: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61   value is the sa
3360: 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 73  me as when the s
3370: 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65  tatement.was pre
3380: 70 61 72 65 64 20 61 6e 64 20 69 66 20 74 68 65  pared and if the
3390: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68   schema cookie h
33a0: 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20  as changed, the 
33b0: 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
33c0: 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72  .in order to for
33d0: 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ce the statement
33e0: 20 74 6f 20 62 65 20 72 65 70 72 65 70 61 72 65   to be reprepare
33f0: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
3400: 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  10 Schema format
3410: 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70   number</h4>..<p
3420: 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d  >The schema form
3430: 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34  at number is a 4
3440: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
3450: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3460: 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d  et 44..The schem
3470: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3480: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
3490: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  e file format re
34a0: 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72  ad and write.ver
34b0: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20  sion numbers at 
34c0: 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31  offsets 18 and 1
34d0: 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  9 except that th
34e0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
34f0: 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f  number.refers to
3500: 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20   the high-level 
3510: 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72  SQL formatting r
3520: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
3530: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a  ow-level b-tree.
3540: 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75  formatting.  Fou
3550: 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  r schema format 
3560: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72  numbers are curr
3570: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f  ently defined:</
3580: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c  p>..<ol>.<li val
3590: 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73  ue=1>Format 1 is
35a0: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61   understood by a
35b0: 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ll versions of S
35c0: 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65  QLite back to.ve
35d0: 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69  rsion 3.0.0.</li
35e0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f  >.<li value=2>Fo
35f0: 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20  rmat 2 adds the 
3600: 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20  ability of rows 
3610: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
3620: 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20  table.to have a 
3630: 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f  varying number o
3640: 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  f columns, in or
3650: 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74  der to support t
3660: 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  he.[ALTER TABLE 
3670: 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  | ALTER TABLE ..
3680: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75  . ADD COLUMN] fu
3690: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75  nctionality.  Su
36a0: 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e  pport for.readin
36b0: 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f  g and writing fo
36c0: 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64  rmat 2 was added
36d0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
36e0: 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30  on 3.1.3 .on 200
36f0: 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c  5-02-19.</li>.<l
3700: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
3710: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
3720: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
3730: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3740: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3750: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3760: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3770: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3780: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3790: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
37a0: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  dded in SQLite v
37b0: 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e  ersion 3.1.4 .on
37c0: 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69   2005-03-11.</li
37d0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46  >.<li value=4>^F
37e0: 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53  ormat 4 causes S
37f0: 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74  QLite to respect
3800: 20 74 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72   the DESC keywor
3810: 64 20 6f 6e 0a 69 6e 64 65 78 20 64 65 63 6c 61  d on.index decla
3820: 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54 68 65 20  rations.  (^The 
3830: 44 45 53 43 20 6b 65 79 77 6f 72 64 20 69 73 20  DESC keyword is 
3840: 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e 64 69 63  ignored in indic
3850: 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61 74 73 20  es for .formats 
3860: 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29 0a 5e 46  1, 2, and 3.).^F
3870: 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20 61 64 64  ormat 4 also add
3880: 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f 6c 65 61  s two new boolea
3890: 6e 20 72 65 63 6f 72 64 20 74 79 70 65 20 76 61  n record type va
38a0: 6c 75 65 73 20 28 5b 73 65 72 69 61 6c 20 74 79  lues ([serial ty
38b0: 70 65 73 5d 0a 38 20 61 6e 64 20 39 2e 29 20 20  pes].8 and 9.)  
38c0: 53 75 70 70 6f 72 74 20 66 6f 72 20 66 6f 72 6d  Support for form
38d0: 61 74 20 34 20 77 61 73 20 61 64 64 65 64 20 69  at 4 was added i
38e0: 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e 30 20 6f  n SQLite 3.3.0 o
38f0: 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c  n.2006-01-10.</l
3900: 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65  i>.</ol>..<p>^Ne
3910: 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  w database files
3920: 20 63 72 65 61 74 65 64 20 62 79 20 53 51 4c 69   created by SQLi
3930: 74 65 20 75 73 65 20 66 6f 72 6d 61 74 20 31 20  te use format 1 
3940: 62 79 20 64 65 66 61 75 6c 74 2c 20 73 6f 0a 74  by default, so.t
3950: 68 61 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  hat database fil
3960: 65 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65  es created by ne
3970: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
3980: 53 51 4c 69 74 65 20 63 61 6e 20 73 74 69 6c 6c  SQLite can still
3990: 0a 62 65 20 72 65 61 64 20 62 79 20 6f 6c 64 65  .be read by olde
39a0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
39b0: 4c 69 74 65 2e 0a 5e 54 68 65 20 5b 6c 65 67 61  Lite..^The [lega
39c0: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70  cy_file_format p
39d0: 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73  ragma] can be us
39e0: 65 64 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69  ed to cause SQLi
39f0: 74 65 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77  te.to create new
3a00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
3a10: 75 73 69 6e 67 20 66 6f 72 6d 61 74 20 34 2e 20  using format 4. 
3a20: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
3a30: 20 6f 66 20 0a 53 51 4c 69 74 65 20 6d 61 79 20   of .SQLite may 
3a40: 62 65 67 69 6e 20 74 6f 20 63 72 65 61 74 65 20  begin to create 
3a50: 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f 72 6d  files using form
3a60: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a70: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 31  </p>..<h4>1.2.11
3a80: 20 53 75 67 67 65 73 74 65 64 20 63 61 63 68 65   Suggested cache
3a90: 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54   size</h4>..<p>T
3aa0: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
3ab0: 64 69 61 6e 20 73 69 67 6e 65 64 20 69 6e 74 65  dian signed inte
3ac0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 38  ger at offset 48
3ad0: 20 69 73 20 74 68 65 20 73 75 67 67 65 73 74 0a   is the suggest.
3ae0: 63 61 63 68 65 20 73 69 7a 65 20 69 6e 20 70 61  cache size in pa
3af0: 67 65 73 20 66 6f 72 20 74 68 65 20 64 61 74 61  ges for the data
3b00: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
3b10: 76 61 6c 75 65 20 69 73 20 61 20 73 75 67 67 65  value is a sugge
3b20: 73 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53  stion.only and S
3b30: 51 4c 69 74 65 20 69 73 20 75 6e 64 65 72 20 6e  QLite is under n
3b40: 6f 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20  o obligation to 
3b50: 68 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65 20 61  honor it.  The a
3b60: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66  bsolute value.of
3b70: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
3b80: 75 73 65 64 20 61 73 20 74 68 65 20 73 75 67 67  used as the sugg
3b90: 65 73 74 65 64 20 73 69 7a 65 2e 20 20 54 68 65  ested size.  The
3ba0: 20 73 75 67 67 65 73 74 65 64 20 63 61 63 68 65   suggested cache
3bb0: 20 73 69 7a 65 0a 63 61 6e 20 62 65 20 73 65 74   size.can be set
3bc0: 20 75 73 69 6e 67 20 74 68 65 20 5b 64 65 66 61   using the [defa
3bd0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 70  ult_cache_size p
3be0: 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34  ragma].</p>..<h4
3bf0: 3e 31 2e 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e  >1.2.12 Incremen
3c00: 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74 69  tal vacuum setti
3c10: 6e 67 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ngs</h4>..<p>The
3c20: 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67 2d   two 4-byte big-
3c30: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20  endian integers 
3c40: 61 74 20 6f 66 66 73 65 74 73 20 35 32 20 61 6e  at offsets 52 an
3c50: 64 20 36 34 20 61 72 65 20 75 73 65 64 0a 74 6f  d 64 are used.to
3c60: 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75 74   manage the [aut
3c70: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
3c80: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3c90: 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74  m] modes.  ^If.t
3ca0: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3cb0: 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20  fset 52 is zero 
3cc0: 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70  then pointer-map
3cd0: 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73 20   (ptrmap) pages 
3ce0: 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are.omitted from
3cf0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3d00: 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20 61  le and neither a
3d10: 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69  uto_vacuum nor.i
3d20: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3d30: 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  m are supported.
3d40: 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65    ^If the intege
3d50: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3d60: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3d70: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3d80: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3d90: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3da0: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3db0: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3dc0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 20 70  e file contain p
3dd0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3de0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3df0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3e00: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3e10: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3e20: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3e30: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3e40: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3e50: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3e60: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3e70: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3e80: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3e90: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3ea0: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3eb0: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3ec0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3ed0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3ee0: 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54 65 78  ..<h4>1.2.13 Tex
3ef0: 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e 0a  t encoding</h4>.
3f00: 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20  .<p>^The 4-byte 
3f10: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
3f20: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 36 20  er at offset 56 
3f30: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65  determines the e
3f40: 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72  ncoding.used for
3f50: 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67   all text string
3f60: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
3f70: 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20 76 61  database.  ^A va
3f80: 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 0a 55  lue of 1 means.U
3f90: 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75 65 20  TF-8.  ^A value 
3fa0: 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46 2d 31  of 2 means UTF-1
3fb0: 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f  6le.  ^A value o
3fc0: 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36  f 3 means UTF-16
3fd0: 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c  be..No other val
3fe0: 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e  ues are allowed.
3ff0: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 34  </p>..<h4>1.2.14
4000: 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20 6e 75   User version nu
4010: 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  mber</h4>..<p>^T
4020: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
4030: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
4040: 6f 66 66 73 65 74 20 36 30 20 69 73 20 74 68 65  offset 60 is the
4050: 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20 77 68   user version wh
4060: 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64 20 71  ich.is set and q
4070: 75 65 72 69 65 64 20 62 79 20 74 68 65 20 5b 75  ueried by the [u
4080: 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67  ser_version prag
4090: 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72 20 76  ma].  The user v
40a0: 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73  ersion is.not us
40b0: 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70  ed by SQLite.</p
40c0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
40d0: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
40e0: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
40f0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
4100: 34 3e 31 2e 32 2e 31 35 20 57 72 69 74 65 20 6c  4>1.2.15 Write l
4110: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
4120: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
4130: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
4140: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4150: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4160: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4170: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4180: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4190: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
41a0: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
41b0: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
41c0: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
41d0: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
41e0: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
41f0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20  byte big-ending 
4200: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
4210: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
4220: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
4230: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
4240: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4250: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4260: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4270: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4280: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4290: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
42a0: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
42b0: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
42c0: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
42d0: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
42e0: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
42f0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
4300: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
4310: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
4320: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
4330: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
4340: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4350: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4360: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4370: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4380: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4390: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
43a0: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
43b0: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
43c0: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
43d0: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
43e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
43f0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
4400: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
4410: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
4420: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
4430: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
4440: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4450: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4460: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4470: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4480: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4490: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
44a0: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
44b0: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
44c0: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
44d0: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
44e0: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
44f0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
4500: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
4510: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
4520: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
4530: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
4540: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4550: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4560: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4570: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4580: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4590: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
45a0: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
45b0: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
45c0: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
45d0: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
45e0: 72 69 74 65 2c 20 74 68 6f 75 67 68 20 6f 70 65  rite, though ope
45f0: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
4600: 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a 69 6d  ecific [VFS] .im
4610: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 61  plementations ma
4620: 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65 61 64  y choose to read
4630: 20 6f 72 20 77 72 69 74 65 20 62 79 74 65 73 20   or write bytes 
4640: 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  on the lock-byte
4650: 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69 6e 67   .page according
4660: 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20 61   to the .needs a
4670: 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65 73 20  nd proclivities 
4680: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
4690: 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20 75  g system.  The u
46a0: 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 5b 56  nix and win32.[V
46b0: 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  FS] implementati
46c0: 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62 75  ons that come bu
46d0: 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65 20  ilt into SQLite 
46e0: 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f 20  do not write to 
46f0: 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61  the.lock-byte pa
4700: 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d 70 61  ge, but third-pa
4710: 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e  rty VFS implemen
4720: 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65  tations for.othe
4730: 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  r operating syst
4740: 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a 0a  ems might.</p>..
4750: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
4760: 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65   {freelist} {fre
4770: 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61 67  elist} {free-pag
4780: 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  e list}</tcl>.<h
4790: 33 3e 31 2e 34 20 54 68 65 20 46 72 65 65 6c 69  3>1.4 The Freeli
47a0: 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64 61  st</h3>..<p>A da
47b0: 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68  tabase file migh
47c0: 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72  t contain one or
47d0: 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68 61 74   more pages that
47e0: 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69   are not in.acti
47f0: 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65 64 20  ve use.  Unused 
4800: 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65 20 61  pages can come a
4810: 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c  bout, for exampl
4820: 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74  e, when informat
4830: 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64 20 66  ion.is deleted f
4840: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
4850: 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73 20  .  Unused pages 
4860: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  are stored on th
4870: 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64 20 61  e freelist.and a
4880: 72 65 20 72 65 75 73 65 64 20 77 68 65 6e 20 61  re reused when a
4890: 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65 73 20  dditional pages 
48a0: 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c 2f 70  are required.</p
48b0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65 6c 69  >..<p>The freeli
48c0: 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64 20  st is organized 
48d0: 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  as a linked list
48e0: 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74 72 75   of freelist tru
48f0: 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20 65 61  nk pages.with ea
4900: 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73 20 63  ch trunk pages c
4910: 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65 20 6e  ontaining page n
4920: 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72 6f 20  umbers for zero 
4930: 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69 73 74  or more freelist
4940: 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e  .leaf pages.</p>
4950: 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73 74 20  ..<p>A freelist 
4960: 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69  trunk page consi
4970: 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20  sts of an array 
4980: 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  of 4-byte big-en
4990: 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54  dian integers..T
49a0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 61  he size of the a
49b0: 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e 79 20  rray is as many 
49c0: 69 6e 74 65 67 65 72 73 20 61 73 20 77 69 6c 6c  integers as will
49d0: 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61 62   fit in the usab
49e0: 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20 70 61  le space.of a pa
49f0: 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d  ge.  The minimum
4a00: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 69 73   usable space is
4a10: 20 34 38 30 20 62 79 74 65 73 20 73 6f 20 74 68   480 bytes so th
4a20: 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61 6c 77  e array will alw
4a30: 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73 74 20  ays.be at least 
4a40: 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e 20 6c  120 entries in l
4a50: 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66 69 72  ength.  ^The fir
4a60: 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
4a70: 65 20 61 72 72 61 79 20 0a 69 73 20 74 68 65 20  e array .is the 
4a80: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
4a90: 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74  he next freelist
4aa0: 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74   trunk page in t
4ab0: 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20  he list or zero 
4ac0: 0a 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20  .if this is the 
4ad0: 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20 74 72  last freelist tr
4ae0: 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20  unk page.  ^The 
4af0: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69  second integer i
4b00: 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73 20 74  n the array.is t
4b10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 61  he number of lea
4b20: 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72 73 20  f page pointers 
4b30: 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61 6c 6c  to follow.  Call
4b40: 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65   the second inte
4b50: 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20 69 73 20  ger L..^If L is 
4b60: 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
4b70: 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20  o then integers 
4b80: 77 69 74 68 20 61 72 72 61 79 20 69 6e 64 65 78  with array index
4b90: 65 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64  es between 2 and
4ba0: 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63  .L+1 inclusive c
4bb0: 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62  ontain page numb
4bc0: 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74  ers for freelist
4bd0: 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e   leaf pages.</p>
4be0: 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c 65  ..<p>Freelist le
4bf0: 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e  af pages contain
4c00: 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   no information.
4c10: 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64 73    ^SQLite avoids
4c20: 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74   reading or.writ
4c30: 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61  ing freelist lea
4c40: 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72  f pages in order
4c50: 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20   to reduce disk 
4c60: 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  I/O.</p>..<p>A b
4c70: 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ug in SQLite ver
4c80: 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33  sions prior to 3
4c90: 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65 20  .6.0 caused the 
4ca0: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 72  database to be.r
4cb0: 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72 75  eported as corru
4cc0: 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  pt if any of the
4cd0: 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73 20   last 6 entries 
4ce0: 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20  in the freelist 
4cf0: 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72 61  trunk page .arra
4d00: 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d  y contained non-
4d10: 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e 65  zero values.  Ne
4d20: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
4d30: 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68 61  SQLite do not ha
4d40: 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e  ve.this problem.
4d50: 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77 65    ^However, newe
4d60: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
4d70: 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69 64  Lite still avoid
4d80: 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73 74   using the .last
4d90: 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e 20   six entries in 
4da0: 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75  the freelist tru
4db0: 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69 6e  nk page array in
4dc0: 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74 61   order that data
4dd0: 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61 74  base.files creat
4de0: 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73  ed by newer vers
4df0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63  ions of SQLite c
4e00: 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f 6c  an be read by ol
4e10: 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66 20  der versions.of 
4e20: 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite.</p>..<p>
4e30: 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66  ^The number of f
4e40: 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69 73  reelist pages is
4e50: 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d 62   stored as a 4-b
4e60: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4e70: 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64 61  nteger.in the da
4e80: 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61 74  tabase header at
4e90: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 36   an offset of 36
4ea0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
4eb0: 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e  ing of the file.
4ec0: 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20 68  .^The database h
4ed0: 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72 65  eader also store
4ee0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
4ef0: 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66  r of the first f
4f00: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61  reelist trunk.pa
4f10: 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62  ge as a 4-byte b
4f20: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
4f30: 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  r at an offset o
4f40: 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62 65  f 32 from the be
4f50: 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 66  ginning.of the f
4f60: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ile.</p>..<h3>1.
4f70: 35 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f  5 B-tree Pages</
4f80: 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65  h3>..<p>A b-tree
4f90: 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20   page is either 
4fa0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  an interior page
4fb0: 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65 2e   or a leaf page.
4fc0: 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f 6e  .A leaf page con
4fd0: 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20 69  tains keys and i
4fe0: 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
4ff0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61 63  table b-tree eac
5000: 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63 69  h.key has associ
5010: 61 74 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20 41  ated content.  A
5020: 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20  n interior page 
5030: 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73 20  contains.K keys 
5040: 77 69 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74 20  without content 
5050: 62 75 74 20 77 69 74 68 20 4b 2b 31 20 70 6f 69  but with K+1 poi
5060: 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62  nters to child b
5070: 2d 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22  -tree pages..A "
5080: 70 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69  pointer" in an i
5090: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
50a0: 61 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20  age is just the 
50b0: 33 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70  31-bit integer.p
50c0: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
50d0: 65 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70  e child page.</p
50e0: 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68  >...<p>Define th
50f0: 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61  e depth.of a lea
5100: 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31  f b-tree to be 1
5110: 20 61 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f   and the depth o
5120: 66 20 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62  f any interior b
5130: 2d 74 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a  -tree to be one.
5140: 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61  more than the ma
5150: 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61  ximum depth of a
5160: 6e 79 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72  ny of its childr
5170: 65 6e 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  en.  ^In a well-
5180: 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c  formed.database,
5190: 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66   all children of
51a0: 20 61 6e 79 20 6f 6e 65 20 69 6e 74 65 72 69 6f   any one interio
51b0: 72 20 62 2d 74 72 65 65 20 68 61 76 65 20 74 68  r b-tree have th
51c0: 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f 70  e same depth.</p
51d0: 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74 65  >..<p>In an inte
51e0: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
51f0: 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20 61  , the pointers a
5200: 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c 6c  nd keys logicall
5210: 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77 69 74  y alternate .wit
5220: 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20 62  h a pointer on b
5230: 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65 20 70  oth ends. (The p
5240: 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65  revious sentence
5250: 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65 72 73   is to be unders
5260: 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c 6c  tood.conceptuall
5270: 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c 20 6c  y - the actual l
5280: 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b 65 79  ayout of the key
5290: 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20 77  s and.pointers w
52a0: 69 74 68 69 6e 20 74 68 65 20 70 61 67 65 20 69  ithin the page i
52b0: 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74  s more complicat
52c0: 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 64  ed and will be d
52d0: 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20  escribed in.the 
52e0: 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b 65  sequel.)  All ke
52f0: 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ys within the sa
5300: 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e 69 71  me page are uniq
5310: 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67 69 63  ue and are logic
5320: 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64 20 69  ally.organized i
5330: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
5340: 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
5350: 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c 20 74  ight.  (Again, t
5360: 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69 73 20  his ordering.is 
5370: 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70 68 79  logical, not phy
5380: 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63 74 75  sical.  The actu
5390: 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 6b  al location of k
53a0: 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 70  eys within the p
53b0: 61 67 65 0a 69 73 20 61 72 62 69 74 72 61 72 79  age.is arbitrary
53c0: 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65 79 20  .) ^For any key 
53d0: 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  X, pointers to t
53e0: 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58 20 72  he left.of a X r
53f0: 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65 20 70  efer to b-tree p
5400: 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20 61 6c  ages on which al
5410: 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73 73 20  l keys are less 
5420: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
5430: 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20 74 6f   X..^Pointers to
5440: 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 58 20   the right of X 
5450: 72 65 66 65 72 20 74 6f 20 70 61 67 65 73 20 77  refer to pages w
5460: 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20 61 72  here all keys ar
5470: 65 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20  e .greater than 
5480: 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 69  X.</p>..<p>Withi
5490: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
54a0: 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68 20  tree page, each 
54b0: 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69 6e  key and the poin
54c0: 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65 64  ter to its.immed
54d0: 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63 6f  iate left are co
54e0: 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 74  mbined into a st
54f0: 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 61  ructure called a
5500: 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72 69   "cell".  The.ri
5510: 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72  ght-most pointer
5520: 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61 74   is held separat
5530: 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d 74  ely.  A leaf b-t
5540: 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f 0a  ree page has no.
5550: 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69 74  pointers, but it
5560: 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65 20   still uses the 
5570: 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20 74  cell structure t
5580: 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72 0a  o hold keys for.
5590: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f 72  index b-trees or
55a0: 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65 6e   keys and conten
55b0: 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  t for table b-tr
55c0: 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c  ees.</p>.</p>..<
55d0: 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65 20 70  p>Every b-tree p
55e0: 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73 74 20  age has at most 
55f0: 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65  one parent b-tre
5600: 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72 65 65  e page..A b-tree
5610: 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 61 20   page without a 
5620: 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c 65 64  parent is called
5630: 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 41   a root page.  A
5640: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
5650: 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  e.together with 
5660: 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66 20 69  the closure of i
5670: 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 6d  ts children form
5680: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5690: 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73 69 62  ee..It is possib
56a0: 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63 74 20  le (and in fact 
56b0: 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20 74  rather common) t
56c0: 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c 65 74  o have a complet
56d0: 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20 63 6f  e b-tree.that co
56e0: 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67  nsists of a sing
56f0: 6c 65 20 70 61 67 65 20 74 68 61 74 20 69 73 20  le page that is 
5700: 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e 64 20  both a leaf and 
5710: 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75 73  the root..Becaus
5720: 65 20 74 68 65 72 65 20 61 72 65 20 70 6f 69 6e  e there are poin
5730: 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65 6e 74  ters from parent
5740: 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20 65  s to children, e
5750: 76 65 72 79 20 70 61 67 65 20 6f 66 20 61 0a 63  very page of a.c
5760: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 63  omplete b-tree c
5770: 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20 69 66  an be located if
5780: 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 70   only the root p
5790: 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20 48  age is known.  H
57a0: 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20 61 72  ence,.b-trees ar
57b0: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
57c0: 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67 65 20  their root page 
57d0: 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  number.</p>..<p>
57e0: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  A b-tree page is
57f0: 20 65 69 74 68 65 72 20 61 20 74 61 62 6c 65 20   either a table 
5800: 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72 20 61  b-tree page or a
5810: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  n index b-tree p
5820: 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20 77  age..All pages w
5830: 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d 70 6c  ithin each compl
5840: 65 74 65 20 62 2d 74 72 65 65 20 61 72 65 20 6f  ete b-tree are o
5850: 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65 3a  f the same type:
5860: 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a 6f 72   either table.or
5870: 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65 20 69   index.  There i
5880: 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d  s a one-to-one m
5890: 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 61 62 6c  apping from tabl
58a0: 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68 65  e b-trees in the
58b0: 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
58c0: 74 6f 20 28 6e 6f 6e 2d 76 69 72 74 75 61 6c 29  to (non-virtual)
58d0: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
58e0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
58f0: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
5900: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
5910: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
5920: 54 68 65 72 65 20 69 73 20 6f 6e 65 2d 74 6f 2d  There is one-to-
5930: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
5940: 65 65 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65  een index b-tree
5950: 73 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s.in the databas
5960: 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 69 63  e file and indic
5970: 65 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61  es in the schema
5980: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c  , including impl
5990: 69 65 64 20 69 6e 64 69 63 65 73 0a 63 72 65 61  ied indices.crea
59a0: 74 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73  ted by uniquenes
59b0: 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  s constraints.  
59c0: 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  The b-tree corre
59d0: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 0a  sponding to the.
59e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
59f0: 62 6c 65 20 61 6c 77 61 79 73 20 68 61 73 20 69  ble always has i
5a00: 74 73 20 72 6f 6f 74 20 70 61 67 65 20 6f 6e 20  ts root page on 
5a10: 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  a page number of
5a20: 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 6d   1..The sqlite_m
5a30: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
5a40: 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70 61  ains the root pa
5a50: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 76  ge number for ev
5a60: 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c 65  ery other .table
5a70: 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74 68   and index in th
5a80: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
5a90: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
5aa0: 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20 62  try in a table b
5ab0: 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f  -tree consists o
5ac0: 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  f a 64-bit signe
5ad0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61 6e  d integer key.an
5ae0: 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33 36  d up to 21474836
5af0: 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62 69  47 bytes of arbi
5b00: 74 72 61 72 79 20 64 61 74 61 2e 20 20 49 6e 74  trary data.  Int
5b10: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
5b20: 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65  ees.hold only ke
5b30: 79 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  ys and pointers 
5b40: 74 6f 20 63 68 69 6c 64 72 65 6e 2e 20 20 41 6c  to children.  Al
5b50: 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74 61 69  l data is contai
5b60: 6e 65 64 20 69 6e 20 74 68 65 0a 74 61 62 6c 65  ned in the.table
5b70: 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73 2e 3c   b-tree leaves.<
5b80: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74  /p>..<p>Each ent
5b90: 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  ry in an index b
5ba0: 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f  -tree consists o
5bb0: 66 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  f an arbitrary k
5bc0: 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31 34 37  ey of up.to 2147
5bd0: 34 38 33 36 34 37 20 62 79 74 65 73 20 69 6e 20  483647 bytes in 
5be0: 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64 61  length and no da
5bf0: 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ta.</p>..<tcl>hd
5c00: 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70  _fragment cell_p
5c10: 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79  ayload {cell pay
5c20: 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44  load}</tcl>.<p>D
5c30: 65 66 69 6e 65 20 74 68 65 20 22 70 61 79 6c 6f  efine the "paylo
5c40: 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f  ad" of a cell to
5c50: 20 62 65 20 74 68 65 20 61 72 62 69 74 72 61 72   be the arbitrar
5c60: 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69 6f 6e  y length section
5c70: 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20 20 46  .of the cell.  F
5c80: 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  or an index b-tr
5c90: 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73 20 61  ee, the key is a
5ca0: 6c 77 61 79 73 20 61 72 62 69 74 72 61 72 79 20  lways arbitrary 
5cb0: 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65  in length.and he
5cc0: 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  nce the payload 
5cd0: 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  is the key.  The
5ce0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
5cf0: 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65  ary length eleme
5d00: 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73  nts.in the cells
5d10: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74 61 62   of interior tab
5d20: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  le b-tree pages 
5d30: 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63 65 6c  and so those cel
5d40: 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f  ls have no.paylo
5d50: 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74 72 65  ad.  Table b-tre
5d60: 65 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e  e leaf pages con
5d70: 74 61 69 6e 20 61 72 62 69 74 72 61 72 79 20 6c  tain arbitrary l
5d80: 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e  ength content an
5d90: 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f  d.so for cells o
5da0: 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20 74 68  n those pages th
5db0: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
5dc0: 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65   content..<p>Whe
5dd0: 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 70 61  n the size of pa
5de0: 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65 6c 6c  yload for a cell
5df0: 20 65 78 63 65 65 64 73 20 61 20 63 65 72 74 61   exceeds a certa
5e00: 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28 74 6f  in threshold (to
5e10: 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61 74 65  .be defined late
5e20: 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  r) then only the
5e30: 20 66 69 72 73 74 20 66 65 77 20 62 79 74 65 73   first few bytes
5e40: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a   of the payload.
5e50: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  are stored on th
5e60: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61 6e  e b-tree page an
5e70: 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20 69 73  d the balance is
5e80: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
5e90: 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74  ked list.of cont
5ea0: 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  ent overflow pag
5eb0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d  es.</p>..<p>A b-
5ec0: 74 72 65 65 20 70 61 67 65 20 69 73 20 64 69 76  tree page is div
5ed0: 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e  ided into region
5ee0: 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  s in the followi
5ef0: 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a  ng order:..<ol>.
5f00: 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79 74 65  <li>The 100-byte
5f10: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
5f20: 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20  eader (found on 
5f30: 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69  page 1 only).<li
5f40: 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62 79 74  >The 8 or 12 byt
5f50: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
5f60: 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c  ader.<li>The cel
5f70: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 0a  l pointer array.
5f80: 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20  <li>Unallocated 
5f90: 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65  space.<li>The ce
5fa0: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a  ll content area.
5fb0: 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76 65 64  <li>The reserved
5fc0: 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c   region..</ol>.<
5fd0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d  /p>..<p>The 100-
5fe0: 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66 69  byte database fi
5ff0: 6c 65 20 68 65 61 64 65 72 20 69 73 20 66 6f 75  le header is fou
6000: 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20  nd only on page 
6010: 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c 77 61  1, which is.alwa
6020: 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  ys a table b-tre
6030: 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68  e page.  All oth
6040: 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  er b-tree pages 
6050: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6060: 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20 31  file.omit this 1
6070: 30 30 2d 62 79 74 65 20 68 65 61 64 65 72 2e 3c  00-byte header.<
6080: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65  /p>..<p>The rese
6090: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 61  rved region is a
60a0: 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73 65 64  n area of unused
60b0: 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e   space at the en
60c0: 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67 65 20  d of every.page 
60d0: 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f 63 6b  (except the lock
60e0: 69 6e 67 20 70 61 67 65 29 20 74 68 61 74 20 65  ing page) that e
60f0: 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73  xtensions can us
6100: 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61  e to hold per-pa
6110: 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  ge.information. 
6120: 20 5e 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68   ^The size of th
6130: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6140: 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  n is determined 
6150: 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a  by the one-byte.
6160: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
6170: 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66 66   found at an off
6180: 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f 20 74  set of 20 into t
6190: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
61a0: 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73 69 7a   header..The siz
61b0: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
61c0: 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73 75 61  d region is usua
61d0: 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c  lly zero.</p>..<
61e0: 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  p>The b-tree pag
61f0: 65 20 68 65 61 64 65 72 20 69 73 20 38 20 62 79  e header is 8 by
6200: 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f 72 20  tes in size for 
6210: 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64 20 31  leaf pages and 1
6220: 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e 74 65  2.bytes for inte
6230: 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41 6c 6c  rior pages.  All
6240: 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c 75 65   multibyte value
6250: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 68 65  s in the page he
6260: 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65 6e 64  ader.are big-end
6270: 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65 20  ian..The b-tree 
6280: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 63  page header is c
6290: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 66  omposed of the f
62a0: 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a  ollowing fields:
62b0: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
62c0: 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20 48 65  i>B-tree Page He
62d0: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
62e0: 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  br>.<table borde
62f0: 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e  r=1 width="80%">
6300: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
6310: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
6320: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61  iption.<tr><td a
6330: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6340: 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67  gn=top>0<td alig
6350: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6360: 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>1<td align=l
6370: 65 66 74 3e 0a 41 20 66 6c 61 67 20 69 6e 64 69  eft>.A flag indi
6380: 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65  cating the b-tre
6390: 65 20 70 61 67 65 20 74 79 70 65 0a 5e 41 20 76  e page type.^A v
63a0: 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20  alue of 2 means 
63b0: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
63c0: 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d  nterior index b-
63d0: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
63e0: 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73 20 74  lue of 5 means t
63f0: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
6400: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
6410: 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c  ree page..^A val
6420: 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73 20 74  ue of 10 means t
6430: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
6440: 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  f index b-tree p
6450: 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  age..^A value of
6460: 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70 61   13 means the pa
6470: 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61 62  ge is a leaf tab
6480: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
6490: 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65  ^Any other value
64a0: 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20   for the b-tree 
64b0: 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e 20  page type is an 
64c0: 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20 61  error..<tr><td a
64d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
64e0: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
64f0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6500: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
6510: 65 66 74 3e 0a 42 79 74 65 20 6f 66 66 73 65 74  eft>.Byte offset
6520: 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 6f   into the page o
6530: 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  f the first free
6540: 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74 64 20 61 6c  block.<tr><td al
6550: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6560: 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e  n=top>3<td align
6570: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6580: 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>2<td align=le
6590: 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 63 65  ft>.Number of ce
65a0: 6c 6c 73 20 6f 6e 20 74 68 69 73 20 70 61 67 65  lls on this page
65b0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
65c0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
65d0: 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >5<td align=cent
65e0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
65f0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4f  td align=left>.O
6600: 66 66 73 65 74 20 74 6f 20 74 68 65 20 66 69 72  ffset to the fir
6610: 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 63  st byte of the c
6620: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
6630: 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 20  .  A zero value 
6640: 69 73 20 75 73 65 64 20 74 6f 20 72 65 70 72 65  is used to repre
6650: 73 65 6e 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  sent an offset o
6660: 66 20 36 35 35 33 36 2c 20 77 68 69 63 68 20 6f  f 65536, which o
6670: 63 63 75 72 73 20 6f 6e 20 61 6e 20 65 6d 70 74  ccurs on an empt
6680: 79 20 72 6f 6f 74 20 70 61 67 65 20 77 68 65 6e  y root page when
6690: 20 75 73 69 6e 67 20 61 20 36 35 35 33 36 2d 62   using a 65536-b
66a0: 79 74 65 20 70 61 67 65 20 73 69 7a 65 2e 0a 3c  yte page size..<
66b0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
66c0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37  ter valign=top>7
66d0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
66e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
66f0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d   align=left>.Num
6700: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
6710: 64 20 66 72 65 65 20 62 79 74 65 73 20 77 69 74  d free bytes wit
6720: 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hin the cell con
6730: 74 65 6e 74 20 61 72 65 61 0a 3c 74 72 3e 3c 74  tent area.<tr><t
6740: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6750: 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20 61  align=top>8<td a
6760: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6770: 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69 67  gn=top>4<td alig
6780: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 72 69 67 68  n=left>.The righ
6790: 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20 28  t-most pointer (
67a0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
67b0: 70 61 67 65 73 20 6f 6e 6c 79 29 0a 3c 2f 74 61  pages only).</ta
67c0: 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
67d0: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e  ></center>..<p>^
67e0: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
67f0: 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74 72   array of a b-tr
6800: 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61 74  ee page immediat
6810: 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ely follows the 
6820: 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61 64  b-tree.page head
6830: 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74 68  er.  Let K be th
6840: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c  e number of cell
6850: 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e 20  s on the btree. 
6860: 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74   ^The cell point
6870: 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73 74  er.array consist
6880: 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69 6e  s of K 2-byte in
6890: 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74 6f  teger offsets to
68a0: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
68b0: 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70  ts.  ^The.cell p
68c0: 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72 61  ointers are arra
68d0: 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64 65  nged in key orde
68e0: 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74  r with left-most
68f0: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
6900: 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73  with the.smalles
6910: 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e 64  t key) first and
6920: 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
6930: 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77  cell (the cell w
6940: 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74 0a  ith the largest.
6950: 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a  key) last.</p>..
6960: 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20  <p>Cell content 
6970: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
6980: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65   cell content re
6990: 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74 72  gion of the b-tr
69a0: 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65 20  ee page..SQLite 
69b0: 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63 65  strives to place
69c0: 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74 6f   cells as far to
69d0: 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66 20  ward the end of 
69e0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
69f0: 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72  as.it can, in or
6a00: 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70 61  der to leave spa
6a10: 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67 72  ce for future gr
6a20: 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c 6c  owth of the cell
6a30: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e 0a   pointer array..
6a40: 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74 77  The area in betw
6a50: 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65 6c  een the last cel
6a60: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20  l pointer array 
6a70: 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62 65  entry and the be
6a80: 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66  ginning of.the f
6a90: 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68 65  irst cell is the
6aa0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67   unallocated reg
6ab0: 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ion..</p>..<p>^I
6ac0: 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  f a page contain
6ad0: 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69 63  s no cells (whic
6ae0: 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62  h is only possib
6af0: 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70 61  le for a root pa
6b00: 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74 68  ge.of a table th
6b10: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72  at contains no r
6b20: 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f 66  ows) then the of
6b30: 66 73 65 74 20 74 6f 20 74 68 65 20 63 65 6c 6c  fset to the cell
6b40: 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 20 77 69   content.area wi
6b50: 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61 67  ll equal the pag
6b60: 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68 65  e size minus the
6b70: 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72 76   bytes of reserv
6b80: 65 64 20 73 70 61 63 65 2e 20 20 5e 28 49 66 0a  ed space.  ^(If.
6b90: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
6ba0: 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  s a 65536-byte p
6bb0: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65  age size and the
6bc0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
6bd0: 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75  is zero.(the usu
6be0: 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73  al value for res
6bf0: 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68 65  erved space) the
6c00: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
6c10: 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a  nt offset of an.
6c20: 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74 73  empty page wants
6c30: 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a   to be 65536.  .
6c40: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e  However, that in
6c50: 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72  teger is too lar
6c60: 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20  ge to be stored 
6c70: 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69  in a.2-byte unsi
6c80: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f  gned integer, so
6c90: 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73   a value of 0 is
6ca0: 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61   used in its pla
6cb0: 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65  ce.)^..<p>A free
6cc0: 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63  block is a struc
6cd0: 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64 65  ture used to ide
6ce0: 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65  ntify unallocate
6cf0: 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61  d space within.a
6d00: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46   b-tree page.  F
6d10: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72  reeblocks are or
6d20: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61  ganized as a cha
6d30: 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  in.  ^The first 
6d40: 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65  2 bytes of.a fre
6d50: 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67  eblock are a big
6d60: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
6d70: 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
6d80: 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65  set in the b-tre
6d90: 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65  e page.of the ne
6da0: 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  xt freeblock in 
6db0: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
6dc0: 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62 6c  ro if the freebl
6dd0: 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20  ock is the last 
6de0: 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  on.the chain.  ^
6df0: 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f  The third and fo
6e00: 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65 61  urth bytes of ea
6e10: 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72  ch freeblock for
6e20: 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  m.a big-endian i
6e30: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
6e40: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
6e50: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74  freeblock in byt
6e60: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68  es, including.th
6e70: 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e  e 4-byte header.
6e80: 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72    ^Freeblocks ar
6e90: 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74  e always connect
6ea0: 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20  ed in order .of 
6eb0: 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65  increasing offse
6ec0: 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  t.  ^The second 
6ed0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
6ee0: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6ef0: 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66  is the.offset of
6f00: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62   the first freeb
6f10: 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66  lock, or zero if
6f20: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
6f30: 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a  eeblocks on the.
6f40: 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c  page.  ^In a wel
6f50: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
6f60: 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c  page, there will
6f70: 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65   always be at le
6f80: 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66  ast one cell.bef
6f90: 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66 72  ore the first fr
6fa0: 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  eeblock.</p>..<p
6fb0: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71  >A freeblock req
6fc0: 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20 34  uires at least 4
6fd0: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
6fe0: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e    If there is an
6ff0: 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20   isolated.group 
7000: 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e  of 1, 2, or 3 un
7010: 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68 69  used bytes withi
7020: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7030: 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62  nt area, those b
7040: 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20  ytes.comprise a 
7050: 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20  fragment.  ^The 
7060: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
7070: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
7080: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
7090: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
70a0: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
70b0: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
70c0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
70d0: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  d b-tree page,.t
70e0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
70f0: 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67  of bytes in frag
7100: 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78  ments may not ex
7110: 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70  ceed 60.</p>..<p
7120: 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e  >The total amoun
7130: 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20  t of free space 
7140: 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  on a b-tree page
7150: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
7160: 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61   size.of the una
7170: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20  llocated region 
7180: 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73  plus the total s
7190: 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62  ize of all freeb
71a0: 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e  locks plus the.n
71b0: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
71c0: 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20  ted free bytes. 
71d0: 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f   ^SQLite may fro
71e0: 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72  m time to time r
71f0: 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72  eorganize.a b-tr
7200: 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74 20  ee page so that 
7210: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
7220: 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d  eblocks or fragm
7230: 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75  ent bytes, all.u
7240: 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65 20  nused bytes are 
7250: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
7260: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7270: 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61  ce region, and a
7280: 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63  ll.cells are pac
7290: 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20 74  ked tightly at t
72a0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
72b0: 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  ge.  This is cal
72c0: 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74  led ."defragment
72d0: 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65 20  ing" the b-tree 
72e0: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  page.</p>..<tcl>
72f0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69  hd_fragment vari
7300: 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nt {variable-len
7310: 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61  gth integer} {va
7320: 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  rint}</tcl>..<p>
7330: 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  A variable-lengt
7340: 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61  h integer or "va
7350: 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74 69  rint" is a stati
7360: 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  c Huffman encodi
7370: 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f  ng.of 64-bit two
7380: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
7390: 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73 20  egers that uses 
73a0: 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20 73  less space for s
73b0: 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76  mall positive .v
73c0: 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74  alues. .A varint
73d0: 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e   is between 1 an
73e0: 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  d 9 bytes in len
73f0: 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74  gth.  The varint
7400: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74   consists of eit
7410: 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  her.zero or more
7420: 20 62 79 74 65 20 77 68 69 63 68 20 68 61 76 65   byte which have
7430: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7440: 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65 64  bit set followed
7450: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79 74   by a single byt
7460: 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68 2d  e.with the high-
7470: 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72 2c  order bit clear,
7480: 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c 20   or nine bytes, 
7490: 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68 6f  whichever is sho
74a0: 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72 20  rter..The lower 
74b0: 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65 61  seven bits of ea
74c0: 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ch of the first 
74d0: 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64 20  eight bytes and 
74e0: 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74 68  all 8 bits of.th
74f0: 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72 65  e ninth byte are
7500: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74   used to reconst
7510: 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74 20  ruct the 64-bit 
7520: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
7530: 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74 73  integer..Varints
7540: 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 3a   are big-endian:
7550: 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d   bits taken from
7560: 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79 74   the earlier byt
7570: 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74 0a  e of the varint.
7580: 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69 67  are the more sig
7590: 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 62 69 74  nificant and bit
75a0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
75b0: 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c 2f   later bytes. </
75c0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  p>..<p>The forma
75d0: 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70 65  t of a cell depe
75e0: 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e  nds on which kin
75f0: 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67 65  d of b-tree page
7600: 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61 72   the cell.appear
7610: 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  s on.  The follo
7620: 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73  wing table shows
7630: 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66   the elements of
7640: 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65   a cell, in.orde
7650: 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65 2c  r of appearance,
7660: 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75 73   for the various
7670: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
7680: 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  es.</p>..<blockq
7690: 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70  uote><dl>.<dt><p
76a0: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65  >Table B-Tree Le
76b0: 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74  af Cell:</p></dt
76c0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
76d0: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
76e0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
76f0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
7700: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
7710: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
7720: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
7730: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
7740: 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22  er key, a.k.a. "
7750: 72 6f 77 69 64 22 0a 3c 6c 69 3e 54 68 65 20 69  rowid".<li>The i
7760: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
7770: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
7780: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
7790: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
77a0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
77b0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
77c0: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
77d0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
77e0: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
77f0: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
7800: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
7810: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
7820: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
7830: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
7840: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
7850: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
7860: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
7870: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
7880: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20  byte big-ending 
7890: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
78a0: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
78b0: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
78c0: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
78d0: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
78e0: 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  ey.</ul></p></dd
78f0: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
7900: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
7910: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
7920: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
7930: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
7940: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7950: 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61   bytes of key pa
7960: 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67  yload, including
7970: 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c   any.overflow.<l
7980: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
7990: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
79a0: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
79b0: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
79c0: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
79d0: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
79e0: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
79f0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
7a00: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
7a10: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
7a20: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
7a30: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
7a40: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
7a50: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
7a60: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e  </dd>..<dt><p>In
7a70: 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72  dex B-Tree Inter
7a80: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  ior Cell:</p></d
7a90: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
7aa0: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
7ab0: 65 6e 64 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  ending page numb
7ac0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
7ad0: 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  left child point
7ae0: 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  er..<li>A varint
7af0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f   which is the to
7b00: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7b10: 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f  tes of key paylo
7b20: 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  ad, including an
7b30: 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54  y.overflow.<li>T
7b40: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
7b50: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
7b60: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
7b70: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
7b80: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
7b90: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7ba0: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
7bb0: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
7bc0: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
7bd0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
7be0: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
7bf0: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
7c00: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
7c10: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
7c20: 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71  d>.</dl></blockq
7c30: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  uote>..<p>The in
7c40: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20  formation above 
7c50: 63 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e  can be recast in
7c60: 74 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61  to a table forma
7c70: 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  t as follows:</p
7c80: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
7c90: 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b  ent cellformat {
7ca0: 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d  cell format summ
7cb0: 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74  ary}</tcl>.<cent
7cc0: 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65  er>.<i>B-tree Ce
7cd0: 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74  ll Format</i>.<t
7ce0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
7cf0: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
7d00: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74  th rowspan=2>Dat
7d10: 61 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f  atype.    <th co
7d20: 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20  lspan=4>Appears 
7d30: 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f  in....    <th ro
7d40: 77 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74  wspan=2>Descript
7d50: 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c  ion.<tr><th>Tabl
7d60: 65 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 54  e Leaf.    <th>T
7d70: 61 62 6c 65 20 49 6e 74 65 72 69 6f 72 0a 20 20  able Interior.  
7d80: 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66    <th>Index Leaf
7d90: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49  .    <th>Index I
7da0: 6e 74 65 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20  nterior.<tr><td 
7db0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7dc0: 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69  ign=top>4-byte i
7dd0: 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61  nteger.    <td a
7de0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7df0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7e00: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7e10: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7e20: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7e30: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7e40: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7e50: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7e60: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7e70: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7e80: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
7e90: 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68  umber of left ch
7ea0: 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ild.<tr><td alig
7eb0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7ec0: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
7ed0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7ee0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
7ef0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
7f00: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7f10: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
7f20: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7f30: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
7f40: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
7f50: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7f60: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
7f70: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
7f80: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
7f90: 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c  of payload.<tr><
7fa0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7fb0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
7fc0: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
7fd0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7fe0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
7ff0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8000: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8010: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8020: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8030: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8040: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8050: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8060: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8070: 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c  left>Rowid.<tr><
8080: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8090: 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20  valign=top>byte 
80a0: 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c  array.    <td al
80b0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
80c0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
80d0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
80e0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
80f0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8100: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8110: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8120: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8130: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8140: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8150: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f  align=left>Paylo
8160: 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ad.<tr><td align
8170: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8180: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8190: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
81a0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
81b0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
81c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
81d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
81e0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
81f0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8200: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8210: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8220: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8230: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8240: 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62  n=left>Page numb
8250: 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72  er of first over
8260: 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c  flow page.</tabl
8270: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c  e></center>....<
8280: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8290: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a  ter valign=top>.
82a0: 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f  .<p>The amount o
82b0: 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 73  f payload that s
82c0: 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66  pills onto overf
82d0: 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20 64  low pages also d
82e0: 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61  epends on.the pa
82f0: 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74 68  ge type.  For th
8300: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
8310: 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20  utations, let U 
8320: 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73 69  be the usable si
8330: 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze.of a database
8340: 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61 6c   page, the total
8350: 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73 20   page size less 
8360: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
8370: 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66  ce at the.end of
8380: 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e 64   each page.  And
8390: 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70 61   let P be the pa
83a0: 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a  yload size.</p>.
83b0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c  .<blockquote><dl
83c0: 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72  >.<dt>Table B-Tr
83d0: 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64  ee Leaf Cell:</d
83e0: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20 74  t>.<dd><p>.^If t
83f0: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20  he payload size 
8400: 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  P is less than o
8410: 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35 20  r equal to U-35 
8420: 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65 20  then.the entire 
8430: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
8440: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
8450: 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28 4c  leaf page.  .^(L
8460: 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a  et M be ((U-12)*
8470: 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20  32/255)-23.  If 
8480: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
8490: 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65 20  n U-35.then the 
84a0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73  number of byte s
84b0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
84c0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 69 73  ree leaf page is
84d0: 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a   the smaller of.
84e0: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20  M+((P-M)%(U-4)) 
84f0: 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f  and U-35.)^.^(No
8500: 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f  te that number o
8510: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
8520: 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20  n the leaf page 
8530: 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68  is never less th
8540: 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64  an M.)^.</p></dd
8550: 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  >..<dt>Table B-T
8560: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
8570: 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a  l:</dt>.<dd><p>.
8580: 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f  Interior pages o
8590: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  f table b-trees 
85a0: 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20  have no payload 
85b0: 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20  and so there is 
85c0: 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61  never.any payloa
85d0: 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e  d to spill..</p>
85e0: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78  </dd>..<dt>Index
85f0: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20   B-Tree Leaf Or 
8600: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
8610: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
8620: 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36  t X be ((U-12)*6
8630: 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20  4/255)-23).  If 
8640: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8650: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a   P is less than.
8660: 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68  or equal to X th
8670: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
8680: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20  yload is stored 
8690: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
86a0: 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.)^.^(Let M be
86b0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
86c0: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
86d0: 65 61 74 65 72 20 74 68 61 6e 20 58 20 74 68 65  eater than X the
86e0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
86f0: 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  byte stored on t
8700: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  he b-tree page i
8710: 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66  s the smaller of
8720: 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29  .M+((P-M)%(U-4))
8730: 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65   and X.)^.^(Note
8740: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20   that number of 
8750: 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20  bytes stored on 
8760: 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 20 69  the index page i
8770: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
8780: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
8790: 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  .</dl></blockquo
87a0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72  te>..<p>The over
87b0: 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20  flow thresholds 
87c0: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
87d0: 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66  give a minimum f
87e0: 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69  anout of.4 for i
87f0: 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64  ndex b-trees and
8800: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e   to make sure en
8810: 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c  ough of the payl
8820: 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d  oad.is on the b-
8830: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74  tree page that t
8840: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
8850: 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20   can usually be 
8860: 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74  accessed.without
8870: 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f   consulting an o
8880: 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49  verflow page.  I
8890: 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65  n hindsight, the
88a0: 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68   designers of.th
88b0: 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20  e SQLite b-tree 
88c0: 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68  logic realize th
88d0: 61 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f  at these thresho
88e0: 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62  lds could have b
88f0: 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69  een.made much si
8900: 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c  mpler.  However,
8910: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
8920: 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  s cannot be chan
8930: 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75  ged.without resu
8940: 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f  lting in an inco
8950: 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f  mpatible file fo
8960: 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63  rmat.  And the c
8970: 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69  urrent computati
8980: 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65  ons.work well, e
8990: 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20  ven if they are 
89a0: 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78  a little complex
89b0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 36 20 43  .</p>..<h3>1.6 C
89c0: 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72  ell Payload Over
89d0: 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a  flow Pages</h3>.
89e0: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61  .<p>^When the pa
89f0: 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65  yload of a b-tre
8a00: 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61  e cell is too la
8a10: 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  rge for the b-tr
8a20: 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72  ee page,.the sur
8a30: 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20  plus is spilled 
8a40: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
8a50: 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20  ges.  ^Overflow 
8a60: 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e  pages form a lin
8a70: 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20  ked.list.  ^The 
8a80: 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65 73  first four bytes
8a90: 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f   of each overflo
8aa0: 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69 67  w page are a big
8ab0: 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20  -endian.integer 
8ac0: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61 67  which is the pag
8ad0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
8ae0: 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68 65  next page in the
8af0: 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a   chain, or zero.
8b00: 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61  for the final pa
8b10: 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ge in the chain.
8b20: 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79 74    ^The fifth byt
8b30: 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61  e through the la
8b40: 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61  st usable.byte a
8b50: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
8b60: 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74  overflow content
8b70: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50  .</p>..<h3>1.7 P
8b80: 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74  ointer Map or Pt
8b90: 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a  rmap Pages</h3>.
8ba0: 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20  .<p>Pointer map 
8bb0: 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73 20  or ptrmap pages 
8bc0: 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73 20  are extra pages 
8bd0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
8be0: 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61  e database.to ma
8bf0: 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ke the operation
8c00: 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d   of [auto_vacuum
8c10: 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74  ] and [increment
8c20: 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73  al_vacuum] modes
8c30: 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e  .more efficient.
8c40: 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79 70    Other page typ
8c50: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
8c60: 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76  se typically hav
8c70: 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20  e pointers.from 
8c80: 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e  parent to child.
8c90: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61    For example, a
8ca0: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
8cb0: 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  e page contains 
8cc0: 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20  pointers.to its 
8cd0: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
8ce0: 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c  es and an overfl
8cf0: 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70  ow chain has a p
8d00: 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c  ointer.from earl
8d10: 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e  ier to later lin
8d20: 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ks in the chain.
8d30: 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20    A ptrmap page 
8d40: 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65  contains linkage
8d50: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69  .information goi
8d60: 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69  ng in the opposi
8d70: 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72  te direction, fr
8d80: 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  om child to pare
8d90: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72  nt.</p>..<p>^Ptr
8da0: 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65  map pages must e
8db0: 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61  xist in any data
8dc0: 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20  base file which 
8dd0: 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c  has a non-zero.l
8de0: 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72  argest root b-tr
8df0: 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74  ee page value at
8e00: 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68   offset 52 in th
8e10: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
8e20: 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65  r..^If the large
8e30: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
8e40: 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  age value is zer
8e50: 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  o, then the data
8e60: 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f  base must not.co
8e70: 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67  ntain ptrmap pag
8e80: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20  es.</p>..<p>^In 
8e90: 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  a database with 
8ea0: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68  ptrmap pages, th
8eb0: 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70  e first ptrmap p
8ec0: 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41  age is page 2..A
8ed0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e   ptrmap page con
8ee0: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61  sists of an arra
8ef0: 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  y of 5-byte entr
8f00: 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74  ies.  Let J be t
8f10: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62  he.number of 5-b
8f20: 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61 74  yte entries that
8f30: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
8f40: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66   usable space of
8f50: 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68   a page..(In oth
8f60: 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e  er words, J=U/5.
8f70: 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70 74  )  ^The first pt
8f80: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63  rmap page will c
8f90: 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e  ontain back poin
8fa0: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
8fb0: 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f  for pages 3 thro
8fc0: 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69  ugh J+2, inclusi
8fd0: 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  ve.  ^The second
8fe0: 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67   pointer map.pag
8ff0: 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67  e will be on pag
9000: 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70  e J+3 and that p
9010: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9020: 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69  provide back poi
9030: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9040: 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74   for pages J+4 t
9050: 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63  hrough 2*J+3 inc
9060: 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20  lusive.  And so 
9070: 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e  forth for.the en
9080: 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69  tire database fi
9090: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e  le.</p>..<p>^(In
90a0: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74   a database that
90b0: 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61 67   uses ptrmap pag
90c0: 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74  es, all pages at
90d0: 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74   locations ident
90e0: 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d  ified.by the com
90f0: 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  putation in the 
9100: 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
9110: 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61  ph must be ptrma
9120: 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74  p page and no.ot
9130: 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65 20  her page may be 
9140: 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20  a ptrmap page.  
9150: 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20 62  Except, if the b
9160: 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61  yte-lock page ha
9170: 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e  ppens to.fall on
9180: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e   the same page n
9190: 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d 61  umber as a ptrma
91a0: 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65  p page, then the
91b0: 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64   ptrmap is moved
91c0: 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .to the followin
91d0: 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74 20  g page for that 
91e0: 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a  one case.)^</p>.
91f0: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
9200: 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61  entry on a ptrma
9210: 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20  p page provides 
9220: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
9230: 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65  ation about .one
9240: 20 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69   of pages that i
9250: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
9260: 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  w the pointer ma
9270: 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20  p.  ^(If page B 
9280: 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65  is a.ptrmap page
9290: 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20   then back-link 
92a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
92b0: 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72  t page B+1 is pr
92c0: 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69  ovided by.the fi
92d0: 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  rst entry on the
92e0: 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49   pointer map.  I
92f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
9300: 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f   page B+2 is.pro
9310: 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63  vided by the sec
9320: 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20  ond entry.  And 
9330: 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a  so forth.)^</p>.
9340: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
9350: 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e  ptrmap entry con
9360: 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74  sists of one byt
9370: 65 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22  e of "page type"
9380: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c   information.fol
9390: 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74  lowed by a 4-byt
93a0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67  e big-endian pag
93b0: 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20  e number.  Five 
93c0: 70 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72  page types are r
93d0: 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a  ecognized:.</p>.
93e0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72  .<ol>.<li>A b-tr
93f0: 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54  ee root page.  T
9400: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he.page number s
9410: 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c  hould be zero..<
9420: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
9430: 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  ge.  The page nu
9440: 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a  mber should be.z
9450: 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72  ero..<li>The fir
9460: 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c  st page of a.cel
9470: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
9480: 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70  ow chain.  The p
9490: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
94a0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  e b-tree page th
94b0: 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at.contains the 
94c0: 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65  cell whose conte
94d0: 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65  nt has overflowe
94e0: 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e  d..<li>A page in
94f0: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61   an overflow cha
9500: 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68  in.other than th
9510: 65 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54  e first page.  T
9520: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
9530: 73 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65  s the prior page
9540: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
9550: 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f   chain..<li>A no
9560: 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  n-root b-tree pa
9570: 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75  ge.  The.page nu
9580: 6d 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65  mber is the pare
9590: 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  nt b-tree page..
95a0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e  </ol>..<p>^In an
95b0: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
95c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74  that contains pt
95d0: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
95e0: 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65  b-tree root page
95f0: 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66  s .must come bef
9600: 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74  ore any non-root
9610: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65   b-tree page, ce
9620: 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  ll payload overf
9630: 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65  low page, or.fre
9640: 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69  elist page.  Thi
9650: 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e  s restriction en
9660: 73 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f  sures that a roo
9670: 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65  t page will neve
9680: 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e  r.be moved durin
9690: 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  g an auto-vacuum
96a0: 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d   or incremental-
96b0: 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74  vacuum.  The aut
96c0: 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64  o-vacuum.logic d
96d0: 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77  oes not know how
96e0: 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 72   to update the r
96f0: 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20 6f  oot_page field o
9700: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
9710: 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f  ter.table and so
9720: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
9730: 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f 74   to prevent root
9740: 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69 6e   pages from bein
9750: 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20 61  g moved.during a
9760: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e  n auto-vacuum in
9770: 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65 72   order to preser
9780: 76 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  ve the integrity
9790: 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d   of the.sqlite_m
97a0: 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e 52  aster table.  ^R
97b0: 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d 6f  oot pages are mo
97c0: 76 65 64 20 74 6f 20 74 68 65 20 62 65 67 69 6e  ved to the begin
97d0: 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74 61  ning of the.data
97e0: 62 61 73 65 20 66 69 6c 65 20 62 79 20 74 68 65  base file by the
97f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43   CREATE TABLE, C
9800: 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52 4f  REATE INDEX, DRO
9810: 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f  P TABLE, and.DRO
9820: 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69 6f  P INDEX operatio
9830: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30  ns.</p>..<h2>2.0
9840: 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68   Schema Layer</h
9850: 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67  2>..<p>The foreg
9860: 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72 69  oing text descri
9870: 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73  bes low-level as
9880: 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c  pects of the SQL
9890: 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e  ite file.format.
98a0: 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63    The b-tree mec
98b0: 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20  hanism provides 
98c0: 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65  a powerful and e
98d0: 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f  fficient means o
98e0: 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61  f.accessing a la
98f0: 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20 54  rge data set.  T
9900: 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c  his section will
9910: 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74 68   describe how th
9920: 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72  e.low-level b-tr
9930: 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65 64  ee layer is used
9940: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69   to implement hi
9950: 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63  gher-level SQL.c
9960: 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e  apabilities.</p>
9970: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9980: 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74  nt record_format
9990: 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d   {record format}
99a0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52  </tcl>.<h3>2.1 R
99b0: 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33  ecord Format</h3
99c0: 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e  >..<p>The conten
99d0: 74 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  t of a table b-t
99e0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
99f0: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 79  d the key.of any
9a00: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61   index b-tree pa
9a10: 67 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72  ge was character
9a20: 69 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e  ized above.as an
9a30: 20 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65   arbitrary seque
9a40: 6e 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68  nce of bytes..Th
9a50: 65 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69  e prior discussi
9a60: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65  on mentioned one
9a70: 20 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20   key being less 
9a80: 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75  than another, bu
9a90: 74 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65  t.did not define
9aa0: 20 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e   what "less than
9ab0: 22 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75  " meant.  The cu
9ac0: 72 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69  rrent section wi
9ad0: 6c 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65  ll address.these
9ae0: 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a   omissions.</p>.
9af0: 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74  .<p>Payload, eit
9b00: 68 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  her table conten
9b10: 74 20 6f 72 20 69 6e 64 65 78 20 6b 65 79 73 2c  t or index keys,
9b20: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68   is always in th
9b30: 65 20 22 72 65 63 6f 72 64 0a 66 6f 72 6d 61 74  e "record.format
9b40: 22 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  ".  The record f
9b50: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
9b60: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
9b70: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
9b80: 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61  .to columns in a
9b90: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
9ba0: 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72    The record for
9bb0: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
9bc0: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
9bd0: 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70  mns, the datatyp
9be0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
9bf0: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
9c00: 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  t of each column
9c10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
9c20: 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65  cord format make
9c30: 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20  s extensive use 
9c40: 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c  of the .[variabl
9c50: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
9c60: 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65  ] or [varint].re
9c70: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
9c80: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
9c90: 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61  tegers defined a
9ca0: 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  bove.</p>..<tcl>
9cb0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69  hd_fragment seri
9cc0: 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74  altype {serial t
9cd0: 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70  ype} {serial typ
9ce0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72  es}</tcl>.<p>A r
9cf0: 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61  ecord contains a
9d00: 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f   header and a bo
9d10: 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65  dy, in that orde
9d20: 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65  r.  .^(The heade
9d30: 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
9d40: 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68  single varint wh
9d50: 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
9d60: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a  he total number.
9d70: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
9d80: 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72  header.  The var
9d90: 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65  int value is the
9da0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
9db0: 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63  der in.bytes inc
9dc0: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
9dd0: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e  varint itself.)^
9de0: 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65    ^Following the
9df0: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
9e00: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64  .one or more add
9e10: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
9e20: 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
9e30: 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e    These addition
9e40: 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63  al varints.are c
9e50: 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79  alled "serial ty
9e60: 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a  pe" numbers and.
9e70: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61  determine the da
9e80: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
9e90: 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67  olumn, according
9ea0: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
9eb0: 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63  g chart:</p>..<c
9ec0: 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65 72 69  enter>.^(<i>Seri
9ed0: 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66  al Type Codes Of
9ee0: 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d   The Record Form
9ef0: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
9f00: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
9f10: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
9f20: 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43  Serial Type<th>C
9f30: 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d  ontent Size<th>M
9f40: 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76  eaning.<tr><td v
9f50: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9f60: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
9f70: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
9f80: 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>0<td align=l
9f90: 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c 74  eft>.NULL.<tr><t
9fa0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9fb0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
9fc0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9fd0: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
9fe0: 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74 77  n=left>.8-bit tw
9ff0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a000: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a010: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a020: 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67  enter>2<td valig
a030: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a040: 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>2<td align=le
a050: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 31  ft>.Big-endian 1
a060: 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  6-bit twos-compl
a070: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a080: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a090: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
a0a0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a0b0: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
a0c0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a0d0: 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77  endian 24-bit tw
a0e0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a0f0: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a100: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a110: 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
a120: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a130: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
a140: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 33  ft>.Big-endian 3
a150: 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  2-bit twos-compl
a160: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a170: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a180: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c   align=center>5<
a190: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a1a0: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20  ign=center>6<td 
a1b0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a1c0: 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77  endian 48-bit tw
a1d0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a1e0: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a1f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a200: 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67  enter>6<td valig
a210: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a220: 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>8<td align=le
a230: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 36  ft>.Big-endian 6
a240: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
a250: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a270: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c   align=center>7<
a280: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a290: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
a2a0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a2b0: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
a2c0: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
a2d0: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
a2e0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a2f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a300: 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
a310: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
a320: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a330: 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74  Integer constant
a340: 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61   0.  Only availa
a350: 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66  ble for schema f
a360: 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68  ormat 4 and high
a370: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
a380: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a390: 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>9<td valign=
a3a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a3b0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
a3c0: 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  >.Integer consta
a3d0: 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61 69  nt 1.  Only avai
a3e0: 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61  lable for schema
a3f0: 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69   format 4 and hi
a400: 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  gher..<tr><td va
a410: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a420: 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20  enter>10,11.    
a430: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a440: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73  lign=center>&nbs
a450: 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  p;<td align=left
a460: 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20  >.<i>Not used.  
a470: 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70  Reserved for exp
a480: 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e  ansion.</i>.<tr>
a490: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a4a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
a4b0: 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e  2265;12 and even
a4c0: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
a4d0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a4e0: 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69  >(N-12)/2<td ali
a4f0: 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20  gn=left>.A BLOB 
a500: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
a510: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
a520: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a530: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a540: 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64  >N&#x2265;13 and
a550: 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c   odd.    <td val
a560: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a570: 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64  nter>(N-13)/2<td
a580: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73   align=left>.A s
a590: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  tring in the dat
a5a0: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61  abase encoding a
a5b0: 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65  nd (N-13)/2 byte
a5c0: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65  s in length..The
a5d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
a5e0: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f 74 61  is omitted..</ta
a5f0: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  ble></center>)^.
a600: 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62 65  .<p>Note that be
a610: 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79  cause of the way
a620: 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65 66   varints are def
a630: 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65 72  ined, the header
a640: 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64   size varint.and
a650: 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72   serial type var
a660: 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c  ints will usuall
a670: 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73  y consist of a s
a680: 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
a690: 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72  .serial type var
a6a0: 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73  ints for large s
a6b0: 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73  trings and BLOBs
a6c0: 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f   might extend to
a6d0: 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79   two or three.by
a6e0: 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20  te varints, but 
a6f0: 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65  that is the exce
a700: 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61  ption rather tha
a710: 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65  n the rule. .The
a720: 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69   varint format i
a730: 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
a740: 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72   at coding the r
a750: 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70  ecord header.</p
a760: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 73  >..<p>The values
a770: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
a780: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
a790: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
a7a0: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
a7b0: 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20 73 65  Note that for se
a7c0: 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38 2c  rial types 0, 8,
a7d0: 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c 20   9, 12, and 13, 
a7e0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  the value is zer
a7f0: 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74  o bytes in.lengt
a800: 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d  h.  If all colum
a810: 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73 65 20  ns are of these 
a820: 74 79 70 65 73 20 74 68 65 6e 20 74 68 65 20 62  types then the b
a830: 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  ody section of t
a840: 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d 70  he.record is emp
a850: 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32  ty.)^</p>..<h3>2
a860: 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74 20 4f  .2 Record Sort O
a870: 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  rder</h3>..<p>Th
a880: 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20  e order of keys 
a890: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
a8a0: 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ee is determined
a8b0: 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64   by the sort ord
a8c0: 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64  er of.the record
a8d0: 73 20 74 68 61 74 20 74 68 65 20 6b 65 79 73 20  s that the keys 
a8e0: 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f  represent.  Reco
a8f0: 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72  rd comparison pr
a900: 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a  ogresses column.
a910: 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75  by column.  Colu
a920: 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20  mns of a record 
a930: 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f  are examined fro
a940: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
a950: 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69 72    The.first pair
a960: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
a970: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64   are not equal d
a980: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65  etermines the re
a990: 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20  lative order.of 
a9a0: 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e  the two records.
a9b0: 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72    The sort order
a9c0: 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63   of individual c
a9d0: 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c  olumns is as.fol
a9e0: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
a9f0: 3c 6c 69 3e 5e 4e 55 4c 4c 20 76 61 6c 75 65 73  <li>^NULL values
aa00: 20 28 73 65 72 69 61 6c 20 74 79 70 65 20 30 29   (serial type 0)
aa10: 20 73 6f 72 74 20 66 69 72 73 74 0a 3c 6c 69 3e   sort first.<li>
aa20: 5e 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20  ^Numeric values 
aa30: 28 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 20  (serial types 1 
aa40: 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20  through 9) sort 
aa50: 6e 65 78 74 20 61 6e 64 20 69 6e 20 6e 75 6d 65  next and in nume
aa60: 72 69 63 20 6f 72 64 65 72 0a 3c 6c 69 3e 5e 54  ric order.<li>^T
aa70: 65 78 74 20 76 61 6c 75 65 73 20 28 65 76 65 6e  ext values (even
aa80: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 32   serial types 12
aa90: 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72   and larger) sor
aaa0: 74 20 6e 65 78 74 20 69 6e 20 74 68 65 20 6f 72  t next in the or
aab0: 64 65 72 0a 20 20 20 20 64 65 74 65 72 6d 69 6e  der.    determin
aac0: 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e  ed by the column
aad0: 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  s [collating fun
aae0: 63 74 69 6f 6e 5d 0a 3c 6c 69 3e 5e 42 4c 4f 42  ction].<li>^BLOB
aaf0: 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72   values (odd ser
ab00: 69 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64  ial types 13 and
ab10: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61   larger) sort la
ab20: 73 74 20 69 6e 20 6f 72 64 65 72 20 0a 20 20 20  st in order .   
ab30: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d   determined by m
ab40: 65 6d 63 6d 70 28 29 2e 0a 3c 2f 6f 6c 3e 0a 0a  emcmp()..</ol>..
ab50: 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  <p>A [collating 
ab60: 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61  function] for ea
ab70: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63  ch column is nec
ab80: 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20  essary in order 
ab90: 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f  to compute.the o
aba0: 72 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65  rder of text fie
abb0: 6c 64 73 2e 20 20 5e 53 51 4c 69 74 65 20 64 65  lds.  ^SQLite de
abc0: 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c  fines three buil
abd0: 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66  t-in collating f
abe0: 75 6e 63 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a  unctions:.</p>..
abf0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
ac00: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
ac10: 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  spacing=10>.<tr>
ac20: 5e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ^<td valign=top>
ac30: 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 53  BINARY.    <td>S
ac40: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6d 70 61  trings are compa
ac50: 72 65 64 20 62 79 74 65 20 62 79 20 62 79 74 65  red byte by byte
ac60: 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d   using the memcm
ac70: 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  p() function.   
ac80: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74       from the st
ac90: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
aca0: 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67  ..<tr>^<td valig
acb0: 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20  n=top>NOCASE.   
acc0: 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59   <td>Like BINARY
acd0: 20 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70   except that upp
ace0: 65 72 63 61 73 65 20 41 53 43 49 49 20 63 68 61  ercase ASCII cha
acf0: 72 61 63 74 65 72 73 20 28 27 41 27 20 74 68 72  racters ('A' thr
ad00: 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20  ough 'Z').      
ad10: 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74    are folded int
ad20: 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73  o their lowercas
ad30: 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72  e equivalents pr
ad40: 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74  ior to running t
ad50: 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  he.        compa
ad60: 72 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68 61  rison.  Note tha
ad70: 74 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68 61  t only ASCII cha
ad80: 72 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65  racters are case
ad90: 2d 66 6f 6c 64 65 64 2e 20 20 5e 4e 4f 43 41 53  -folded.  ^NOCAS
ada0: 45 0a 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e  E.        does n
adb0: 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67  ot implement a g
adc0: 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75  eneral purpose u
add0: 6e 69 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20  nicode caseless 
ade0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 74 72 3e  comparison..<tr>
adf0: 5e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ^<td valign=top>
ae00: 52 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 4c 69  RTRIM.    <td>Li
ae10: 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74  ke BINARY except
ae20: 20 74 68 61 74 20 73 70 61 63 65 73 20 61 74 20   that spaces at 
ae30: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73  the end of the s
ae40: 74 72 69 6e 67 20 61 72 65 20 65 6c 69 64 65 64  tring are elided
ae50: 0a 20 20 20 20 20 20 20 20 70 72 69 6f 72 20 74  .        prior t
ae60: 6f 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 2f  o comparison..</
ae70: 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  table></blockquo
ae80: 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f  te>..<p>^Additio
ae90: 6e 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d  nal application-
aea0: 73 70 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69  specific collati
aeb0: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  ng functions can
aec0: 20 62 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c   be added to.SQL
aed0: 69 74 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ite using the [s
aee0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
aef0: 6c 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  llation()] inter
af00: 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  face.</p>..<p>^T
af10: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
af20: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ting function fo
af30: 72 20 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73  r all strings is
af40: 20 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e   BINARY..^Altern
af50: 61 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20  ative collating 
af60: 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61  functions for ta
af70: 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20  ble columns can 
af80: 62 65 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  be specified in 
af90: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
afa0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69  E] statement usi
afb0: 6e 67 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63  ng the COLLATE c
afc0: 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f  lause on the [co
afd0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d  lumn definition]
afe0: 2e 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e  ..^When a column
aff0: 20 69 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65   is indexed, the
b000: 20 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20   same collating 
b010: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
b020: 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54  ed in the.[CREAT
b030: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
b040: 6e 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  nt is used for t
b050: 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  he column in the
b060: 20 69 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75   index, by defau
b070: 6c 74 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20  lt,.though this 
b080: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65  can be overridde
b090: 6e 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54  n using a COLLAT
b0a0: 45 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20  E clause in the 
b0b0: 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20  .[CREATE INDEX] 
b0c0: 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e  statement...<h3>
b0d0: 32 2e 33 20 52 65 70 72 65 73 65 6e 74 61 74 69  2.3 Representati
b0e0: 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73  on Of SQL Tables
b0f0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63 68 20 6f  </h3>..<p>Each o
b100: 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62 6c  rdinary SQL tabl
b110: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
b120: 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 70 72  e schema is repr
b130: 65 73 65 6e 74 65 64 20 6f 6e 20 64 69 73 6b 0a  esented on disk.
b140: 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  by a table b-tre
b150: 65 2e 20 20 45 61 63 68 20 65 6e 74 72 79 20 69  e.  Each entry i
b160: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
b170: 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ee corresponds t
b180: 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65 20 53  o a row.of the S
b190: 51 4c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 5b  QL table.  The [
b1a0: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51  rowid] of the SQ
b1b0: 4c 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 36  L table is the 6
b1c0: 34 2d 62 69 74 20 73 69 67 6e 65 64 0a 69 6e 74  4-bit signed.int
b1d0: 65 67 65 72 20 6b 65 79 20 66 6f 72 20 65 61 63  eger key for eac
b1e0: 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74  h entry in the t
b1f0: 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f 70 3e  able b-tree.</p>
b200: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e 74  ..<p>The content
b210: 20 6f 66 20 65 61 63 68 20 53 51 4c 20 74 61 62   of each SQL tab
b220: 6c 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  le row is stored
b230: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
b240: 20 66 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63   file by.first c
b250: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c  ombining the val
b260: 75 65 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f  ues in the vario
b270: 75 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20  us columns into 
b280: 61 20 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20  a byte array.in 
b290: 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
b2a0: 74 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20  t, then storing 
b2b0: 74 68 61 74 20 62 79 74 65 20 61 72 72 61 79 20  that byte array 
b2c0: 61 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  as the payload i
b2d0: 6e 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68  n.an entry in th
b2e0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20  e table b-tree. 
b2f0: 20 5e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76   ^The order of v
b300: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
b310: 6f 72 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20  ord is.the same 
b320: 61 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  as the order of 
b330: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53  columns in the S
b340: 51 4c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  QL table definit
b350: 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51  ion..^When an SQ
b360: 4c 20 74 61 62 6c 65 20 74 68 61 74 20 69 6e 63  L table that inc
b370: 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45  ludes an.[INTEGE
b380: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63  R PRIMARY KEY] c
b390: 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69  olumn (which ali
b3a0: 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d  ases the [rowid]
b3b0: 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75  ) then that.colu
b3c0: 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74 68  mn appears in th
b3d0: 65 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55  e record as a NU
b3e0: 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69  LL value.  ^SQLi
b3f0: 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75  te will always u
b400: 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74  se.the table b-t
b410: 72 65 65 20 6b 65 79 20 72 61 74 68 65 72 20 74  ree key rather t
b420: 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  han the NULL val
b430: 75 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63  ue when referenc
b440: 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52  ing the.[INTEGER
b450: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f   PRIMARY KEY] co
b460: 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  lumn.</p>..<p>^I
b470: 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d  f the [affinity]
b480: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
b490: 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63 6f  REAL and that co
b4a0: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 0a  lumn contains a.
b4b0: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
b4c0: 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  e converted to a
b4d0: 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
b4e0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
b4f0: 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76 61  ation.(if the va
b500: 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  lue contains no 
b510: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 20  fractional part 
b520: 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20 6c  and is not too l
b530: 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72 65  arge to be.repre
b540: 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e 74  sented as an int
b550: 65 67 65 72 29 20 74 68 65 6e 20 74 68 65 20 63  eger) then the c
b560: 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74 6f  olumn may be sto
b570: 72 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f 72  red in the recor
b580: 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  d.as an integer.
b590: 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 63    ^SQLite will c
b5a0: 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65  onvert the value
b5b0: 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69 6e   back to floatin
b5c0: 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78 74  g.point when ext
b5d0: 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  racting it from 
b5e0: 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a  the record.</p>.
b5f0: 0a 0a 3c 68 33 3e 32 2e 34 20 52 65 70 72 65 73  ..<h3>2.4 Repres
b600: 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20  entation Of SQL 
b610: 49 6e 64 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70  Indices</h3>..<p
b620: 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  >^Each SQL index
b630: 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c 69 63  , whether explic
b640: 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 76 69  itly declared vi
b650: 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e 44 45  a a [CREATE INDE
b660: 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20  X] statement.or 
b670: 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55 4e 49  implied by a UNI
b680: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  QUE constraint, 
b690: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
b6a0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
b6b0: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
b6c0: 69 6c 65 2e 0a 5e 54 68 65 72 65 20 69 73 20 6f  ile..^There is o
b6d0: 6e 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ne entry in inde
b6e0: 78 20 62 2d 74 72 65 65 20 66 6f 72 20 65 61 63  x b-tree for eac
b6f0: 68 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 72  h row in the cor
b700: 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
b710: 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e  ..^The key to an
b720: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73   index b-tree is
b730: 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73  .a record compos
b740: 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ed of the column
b750: 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e 67  s that are being
b760: 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65   indexed followe
b770: 64 20 62 79 20 74 68 65 0a 5b 72 6f 77 69 64 5d  d by the.[rowid]
b780: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 72 6f   of the table ro
b790: 77 2e 20 20 42 65 63 61 75 73 65 20 65 76 65 72  w.  Because ever
b7a0: 79 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65  y row in a table
b7b0: 20 68 61 73 20 61 20 75 6e 69 71 75 65 0a 72 6f   has a unique.ro
b7c0: 77 69 64 20 61 6e 64 20 61 6c 6c 20 6b 65 79 73  wid and all keys
b7d0: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 63 6f 6e   in an index con
b7e0: 74 61 69 6e 20 74 68 65 20 72 6f 77 69 64 2c 20  tain the rowid, 
b7f0: 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69  all keys in an i
b800: 6e 64 65 78 0a 61 72 65 20 75 6e 69 71 75 65 2e  ndex.are unique.
b810: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  </p>..<p>^There 
b820: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
b830: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
b840: 72 6f 77 73 20 69 6e 20 61 20 74 61 62 6c 65 20  rows in a table 
b850: 61 6e 64 0a 65 6e 74 72 69 65 73 20 69 6e 20 65  and.entries in e
b860: 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ach index associ
b870: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74  ated with that t
b880: 61 62 6c 65 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e  able..^Correspon
b890: 64 69 6e 67 20 72 6f 77 73 20 69 6e 74 20 74 68  ding rows int th
b8a0: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
b8b0: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
b8c0: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 76  the same rowid.v
b8d0: 61 6c 75 65 2c 20 61 6e 64 20 63 6f 6e 74 61 69  alue, and contai
b8e0: 6e 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  n the same value
b8f0: 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64   for all indexed
b900: 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c   columns.</p>..<
b910: 68 33 3e 32 2e 35 20 53 74 6f 72 61 67 65 20 4f  h3>2.5 Storage O
b920: 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61  f The SQL Databa
b930: 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a  se Schema</h3>..
b940: 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20  <p>^Page 1 of a 
b950: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
b960: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f   the root page o
b970: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
b980: 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70   that.holds a sp
b990: 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65  ecial table name
b9a0: 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  d "sqlite_master
b9b0: 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65  " (or "sqlite_te
b9c0: 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68  mp_master" in.th
b9d0: 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50  e case of a TEMP
b9e0: 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68   database) which
b9f0: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70   stores the comp
ba00: 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63  lete.database sc
ba10: 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72  hema.  ^(The str
ba20: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
ba30: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
ba40: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
ba50: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
ba60: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
ba70: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
ba80: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
ba90: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
baa0: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
bab0: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
bac0: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
bad0: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
bae0: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
baf0: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
bb00: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
bb10: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  p>^The sqlite_ma
bb20: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
bb30: 69 6e 73 20 61 20 72 6f 77 20 66 6f 72 20 65 61  ins a row for ea
bb40: 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  ch table, index,
bb50: 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67   view,.and trigg
bb60: 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  er in the databa
bb70: 73 65 20 73 63 68 65 6d 61 2c 20 65 78 63 65 70  se schema, excep
bb80: 74 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 6e  t there is no en
bb90: 74 72 79 20 66 6f 72 20 74 68 65 0a 73 71 6c 69  try for the.sqli
bba0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
bbb0: 69 74 73 65 6c 66 2e 3c 2f 70 3e 0a 0a 3c 70 3e  itself.</p>..<p>
bbc0: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
bbd0: 74 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20  ter.type column 
bbe0: 77 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74  will be one.of t
bbf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78  he following tex
bc00: 74 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62  t strings:  'tab
bc10: 6c 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76  le', 'index', 'v
bc20: 69 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65  iew', or 'trigge
bc30: 72 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  r'.according to 
bc40: 74 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  the type of obje
bc50: 63 74 20 64 65 66 69 6e 65 64 2e 20 20 5e 54 68  ct defined.  ^Th
bc60: 65 20 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67  e 'table' string
bc70: 20 69 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74   is used.for bot
bc80: 68 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b  h ordinary and [
bc90: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
bca0: 29 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68  )^</p>..</p>^(Th
bcb0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
bcc0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  name column will
bcd0: 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f   hold the name o
bce0: 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 5e 46  f the object..^F
bcf0: 6f 72 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  or indices that 
bd00: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
bd10: 79 20 63 72 65 61 74 65 64 20 62 79 20 55 4e 49  y created by UNI
bd20: 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20 4b  QUE or PRIMARY K
bd30: 45 59 0a 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY.constraints, 
bd40: 74 68 65 20 6e 61 6d 65 20 69 73 20 22 73 71 6c  the name is "sql
bd50: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
bd60: 42 4c 45 5f 4e 22 20 77 68 65 72 65 20 54 41 42  BLE_N" where TAB
bd70: 4c 45 20 69 73 20 0a 72 65 70 6c 61 63 65 64 20  LE is .replaced 
bd80: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
bd90: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
bda0: 6e 74 61 69 6e 73 20 74 68 65 20 63 6f 6e 73 74  ntains the const
bdb0: 72 61 69 6e 74 20 61 6e 64 20 4e 20 0a 69 73 20  raint and N .is 
bdc0: 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e  an integer begin
bdd0: 6e 69 6e 67 0a 77 69 74 68 20 31 20 61 6e 64 20  ning.with 1 and 
bde0: 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e  increasing by on
bdf0: 65 20 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73  e with each cons
be00: 74 72 61 69 6e 74 20 73 65 65 6e 2e 29 5e 3c 2f  traint seen.)^</
be10: 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  p>..<p>The sqlit
be20: 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d  e_master.tbl_nam
be30: 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  e column holds t
be40: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62  he name of a tab
be50: 6c 65 20 6f 72 20 76 69 65 77 0a 74 68 61 74 20  le or view.that 
be60: 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61 73  the object is as
be70: 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 20  sociated with.  
be80: 5e 46 6f 72 20 61 20 74 61 62 6c 65 20 6f 72 20  ^For a table or 
be90: 76 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61  view, the.tbl_na
bea0: 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63  me column is a c
beb0: 6f 70 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 20  opy of the name 
bec0: 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20 61 6e  column.  ^For an
bed0: 20 69 6e 64 65 78 2c 20 74 68 65 20 74 62 6c 5f   index, the tbl_
bee0: 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e 61 6d 65  name.is the name
bef0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
bf00: 61 74 20 69 73 20 69 6e 64 65 78 65 64 2e 20 20  at is indexed.  
bf10: 5e 46 6f 72 20 61 20 74 72 69 67 67 65 72 2c 20  ^For a trigger, 
bf20: 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c  the tbl_name.col
bf30: 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20 6e  umn stores the n
bf40: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
bf50: 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 63 61   or view that ca
bf60: 75 73 65 73 20 74 68 65 20 74 72 69 67 67 65 72  uses the trigger
bf70: 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a   .to fire.</p>..
bf80: 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  <p>^(The sqlite_
bf90: 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61 67 65 20  master.rootpage 
bfa0: 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68  column stores th
bfb0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
bfc0: 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65   the root.b-tree
bfd0: 20 70 61 67 65 20 66 6f 72 20 74 61 62 6c 65 73   page for tables
bfe0: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 29 5e 20   and indices.)^ 
bff0: 20 5e 46 6f 72 20 72 6f 77 73 20 74 68 61 74 20   ^For rows that 
c000: 64 65 66 69 6e 65 20 76 69 65 77 73 2c 20 74 72  define views, tr
c010: 69 67 67 65 72 73 2c 0a 61 6e 64 20 76 69 72 74  iggers,.and virt
c020: 75 61 6c 20 74 61 62 6c 65 73 2c 20 74 68 65 20  ual tables, the 
c030: 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20  rootpage column 
c040: 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70  is 0 or NULL.</p
c050: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69  >..<p>^(The sqli
c060: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f  te_master.sql co
c070: 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53 51 4c 20  lumn stores SQL 
c080: 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72 69  text that descri
c090: 62 65 73 20 74 68 65 0a 6f 62 6a 65 63 74 2e 20  bes the.object. 
c0a0: 20 54 68 69 73 20 53 51 4c 20 74 65 78 74 20 69   This SQL text i
c0b0: 73 20 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c  s a [CREATE TABL
c0c0: 45 5d 2c 20 5b 43 52 45 41 54 45 20 56 49 52 54  E], [CREATE VIRT
c0d0: 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43 52 45  UAL TABLE],.[CRE
c0e0: 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43 52 45  ATE INDEX],.[CRE
c0f0: 41 54 45 20 56 49 45 57 5d 2c 20 6f 72 20 5b 43  ATE VIEW], or [C
c100: 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
c110: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 66  tatement that if
c120: 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e   evaluated again
c130: 73 74 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  st.the database 
c140: 66 69 6c 65 20 77 68 65 6e 20 69 74 20 69 73 20  file when it is 
c150: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
c160: 65 20 6f 66 20 61 20 5b 64 61 74 61 62 61 73 65  e of a [database
c170: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f 75   connection].wou
c180: 6c 64 20 72 65 63 72 65 61 74 65 64 20 74 68 65  ld recreated the
c190: 20 6f 62 6a 65 63 74 2e 29 20 20 54 68 65 20 74   object.)  The t
c1a0: 65 78 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61  ext is usually a
c1b0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69   copy of the ori
c1c0: 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20  ginal.statement 
c1d0: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
c1e0: 68 65 20 6f 62 6a 65 63 74 20 62 75 74 20 77 69  he object but wi
c1f0: 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e  th normalization
c200: 73 20 61 70 70 6c 69 65 64 20 73 6f 0a 74 68 61  s applied so.tha
c210: 74 20 74 68 65 20 74 65 78 74 20 63 6f 6e 66 6f  t the text confo
c220: 72 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  rms to the follo
c230: 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c  wing rules:..<ul
c240: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52 45 41 54  >.<li>^The CREAT
c250: 45 2c 20 54 41 42 4c 45 2c 20 56 49 45 57 2c 20  E, TABLE, VIEW, 
c260: 54 52 49 47 47 45 52 2c 20 61 6e 64 20 49 4e 44  TRIGGER, and IND
c270: 45 58 20 6b 65 79 77 6f 72 64 73 20 61 74 20 74  EX keywords at t
c280: 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20  he beginning.of 
c290: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 72  the statement ar
c2a0: 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  e converted to a
c2b0: 6c 6c 20 75 70 70 65 72 20 63 61 73 65 20 6c 65  ll upper case le
c2c0: 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20  tters..<li>^The 
c2d0: 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52  TEMP or TEMPORAR
c2e0: 59 20 6b 65 79 77 6f 72 64 20 69 73 20 72 65 6d  Y keyword is rem
c2f0: 6f 76 65 64 20 69 66 20 69 74 20 6f 63 63 75 72  oved if it occur
c300: 73 20 61 66 74 65 72 20 74 68 65 20 0a 69 6e 69  s after the .ini
c310: 74 69 61 6c 20 43 52 45 41 54 45 20 6b 65 79 77  tial CREATE keyw
c320: 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61  ord..<li>^Any da
c330: 74 61 62 61 73 65 20 6e 61 6d 65 20 71 75 61 6c  tabase name qual
c340: 69 66 69 65 72 20 74 68 61 74 20 6f 63 63 75 72  ifier that occur
c350: 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 6e  s prior to the n
c360: 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63  ame of the.objec
c370: 74 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 20  t being created 
c380: 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e  is removed..<li>
c390: 5e 4c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20  ^Leading spaces 
c3a0: 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69  are removed..<li
c3b0: 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c  >^All spaces fol
c3c0: 6c 6f 77 69 6e 67 20 74 68 65 20 66 69 72 73 74  lowing the first
c3d0: 20 74 77 6f 20 6b 65 79 77 6f 72 64 73 20 61 72   two keywords ar
c3e0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
c3f0: 20 61 20 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e   a single.space.
c400: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65  .</ul>..<p>^(The
c410: 20 74 65 78 74 20 69 6e 20 74 68 65 20 73 71 6c   text in the sql
c420: 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63  ite_master.sql c
c430: 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20  olumn is a copy 
c440: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
c450: 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74  CREATE statement
c460: 20 74 65 78 74 20 74 68 61 74 20 63 72 65 61 74   text that creat
c470: 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 65  ed the object, e
c480: 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64  xcept normalized
c490: 20 61 73 0a 64 65 73 63 72 69 62 65 64 20 61 62   as.described ab
c4a0: 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f 64 69 66  ove and as modif
c4b0: 69 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ied by subsequen
c4c0: 74 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20  t [ALTER TABLE] 
c4d0: 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e 3c 2f 70  statements.)^</p
c4e0: 3e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 69 6e 64 69  >..<p>^(For indi
c4f0: 63 65 73 20 74 68 61 74 20 61 72 65 20 61 75 74  ces that are aut
c500: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
c510: 65 64 20 62 79 20 55 4e 49 51 55 45 20 6f 72 0a  ed by UNIQUE or.
c520: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
c530: 74 72 61 69 6e 74 73 2c 20 74 68 65 20 73 71 6c  traints, the sql
c540: 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 66  ite_master.sql f
c550: 69 65 6c 64 20 69 73 20 4e 55 4c 4c 2e 29 5e 3c  ield is NULL.)^<
c560: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /p>...<tcl>hd_fr
c570: 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a  agment rollbackj
c580: 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b  ournal {rollback
c590: 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d   journal format}
c5a0: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54  </tcl>.<h2>3.0 T
c5b0: 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  he Rollback Jour
c5c0: 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  nal</h2>..<p>The
c5d0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
c5e0: 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f  l is a file asso
c5f0: 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68  ciated with each
c600: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
c610: 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20  .file that hold 
c620: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
c630: 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20   to restore the 
c640: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
c650: 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61   its initial.sta
c660: 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  te during the co
c670: 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61  urse of a transa
c680: 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c  ction..^The roll
c690: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
c6a0: 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61  e is always loca
c6b0: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c6c0: 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68  .directory as th
c6d0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
c6e0: 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
c6f0: 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74   name as the dat
c700: 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77  abase file but w
c710: 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22  ith the string."
c720: 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74  <tt>-journal</tt
c730: 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68  >" appended.  Th
c740: 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
c750: 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63  a single rollbac
c760: 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69  k journal.associ
c770: 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76 65  ated with a give
c780: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 65   database and he
c790: 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  nce there can on
c7a0: 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a  ly be one write.
c7b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e  transaction open
c7c0: 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c   against a singl
c7d0: 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e  e database at on
c7e0: 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e time.</p>..<p>
c7f0: 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  If a transaction
c800: 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65 20   is aborted due 
c810: 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  to an applicatio
c820: 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72  n crash, an oper
c830: 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61  ating.system cra
c840: 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72  sh, or a hardwar
c850: 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20  e power failure 
c860: 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74  or crash, then t
c870: 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a  he database may.
c880: 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e  be left in an in
c890: 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65  consistent state
c8a0: 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d  .  ^The next tim
c8b0: 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74  e SQLite attempt
c8c0: 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61  s to open.the da
c8d0: 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65  tabase file, the
c8e0: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65   presence of the
c8f0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
c900: 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a  l file will be .
c910: 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68 65  detected and the
c920: 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65   journal will be
c930: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
c940: 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65  layed back to re
c950: 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61  store the.databa
c960: 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65 20  se to its state 
c970: 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  at the start of 
c980: 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74  the incomplete t
c990: 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
c9a0: 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20  .<p>^A rollback 
c9b0: 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20  journal is only 
c9c0: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
c9d0: 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69   valid if it exi
c9e0: 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73  sts and.contains
c9f0: 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e   a valid header.
ca00: 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61    Hence a transa
ca10: 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d  ction can be com
ca20: 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66  mitted in one.of
ca30: 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c   three ways:.<ol
ca40: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 72 6f 6c 6c 62  >.<li>^The rollb
ca50: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
ca60: 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 2c   can be deleted,
ca70: 0a 3c 6c 69 3e 5e 54 68 65 20 72 6f 6c 6c 62 61  .<li>^The rollba
ca80: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
ca90: 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64  can be truncated
caa0: 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 2c   to zero length,
cab0: 20 6f 72 0a 3c 6c 69 3e 5e 54 68 65 20 68 65 61   or.<li>^The hea
cac0: 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62  der of the rollb
cad0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20  ack journal can 
cae0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
caf0: 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61 64  ith.invalid head
cb00: 65 72 20 74 65 78 74 20 28 66 6f 72 20 65 78 61  er text (for exa
cb10: 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29  mple, all zeros)
cb20: 2e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65 73 65 20 74  ..</ol>.^These t
cb30: 68 72 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d  hree ways of com
cb40: 6d 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61  mitting a transa
cb50: 63 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64  ction correspond
cb60: 20 74 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a   to the DELETE,.
cb70: 54 52 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45  TRUNCATE, and PE
cb80: 52 53 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20  RSIST settings, 
cb90: 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66  respectively, of
cba0: 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f   the [journal_mo
cbb0: 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e  de pragma]..</p>
cbc0: 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f  ...<p>A valid ro
cbd0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62  llback journal b
cbe0: 65 67 69 6e 73 20 77 69 74 68 20 61 20 68 65 61  egins with a hea
cbf0: 64 65 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  der in the follo
cc00: 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e  wing format:</p>
cc10: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f  ..<center>.<i>Ro
cc20: 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48  llback Journal H
cc30: 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
cc40: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
cc50: 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
cc60: 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
cc70: 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
cc80: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74  ription.<tr>^(<t
cc90: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
cca0: 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20  gn=center>0.    
ccb0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ccc0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20  lign=center>8.  
ccd0: 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74 72    <td>Header str
cce0: 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64 35  ing:  0xd9, 0xd5
ccf0: 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30 78  , 0x05, 0xf9, 0x
cd00: 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c 20  20, 0xa1, 0x63, 
cd10: 30 78 64 37 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64  0xd7)^.<tr>^(<td
cd20: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
cd30: 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c  n=center>8.    <
cd40: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
cd50: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
cd60: 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65 20 43   <td>The "Page C
cd70: 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62  ount" - The numb
cd80: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
cd90: 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20  he next segment 
cda0: 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20  of the .        
cdb0: 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74  journal, or -1 t
cdc0: 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61  o.        mean a
cdd0: 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68  ll content to th
cde0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c  e end of the fil
cdf0: 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61  e)^.<tr>^(<td va
ce00: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ce10: 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64  enter>12.    <td
ce20: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ce30: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
ce40: 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63  td>A random nonc
ce50: 65 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73  e for the checks
ce60: 75 6d 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76  um)^.<tr>^(<td v
ce70: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ce80: 63 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74  center>16.    <t
ce90: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
cea0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
ceb0: 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65  <td>Initial size
cec0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
ced0: 20 69 6e 20 70 61 67 65 73 29 5e 0a 3c 74 72 3e   in pages)^.<tr>
cee0: 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
cef0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30   align=center>20
cf00: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
cf10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
cf20: 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20  >4.    <td>Size 
cf30: 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f 72  of a disk sector
cf40: 20 61 73 73 75 6d 65 64 20 62 79 20 74 68 65 20   assumed by the 
cf50: 70 72 6f 63 65 73 73 20 74 68 61 74 20 77 72 6f  process that wro
cf60: 74 65 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  te this.        
cf70: 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 74 72 3e 5e  journal.)^.<tr>^
cf80: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
cf90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a  align=center>24.
cfa0: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
cfb0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
cfc0: 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f  4.    <td>Size o
cfd0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 69 73 20  f pages in this 
cfe0: 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 2f 74 61 62  journal.)^.</tab
cff0: 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  le>.</center>..<
d000: 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
d010: 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20  urnal header is 
d020: 70 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f  padded with zero
d030: 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a  s out to the siz
d040: 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73  e of a .single s
d050: 65 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65  ector (as define
d060: 64 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20  d by the sector 
d070: 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20  size integer at 
d080: 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20  offset 20)..The 
d090: 68 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73  header is in a s
d0a0: 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20  ector by itself 
d0b0: 73 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77  so that if a pow
d0c0: 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77  er loss occurs w
d0d0: 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65  hile.writing the
d0e0: 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61   sector, informa
d0f0: 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77  tion that follow
d100: 73 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c  s the header wil
d110: 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29  l be.(hopefully)
d120: 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a   undamaged.</p>.
d130: 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68  .<p>^After the h
d140: 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70  eader and zero p
d150: 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20  adding are zero 
d160: 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63  or more page rec
d170: 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67  ords.  ^Each.pag
d180: 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20  e record stores 
d190: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f  a copy of the co
d1a0: 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20  ntent of a page 
d1b0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
d1c0: 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74  e file.before it
d1d0: 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e   was changed.  ^
d1e0: 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
d1f0: 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
d200: 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
d210: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
d220: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
d230: 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
d240: 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
d250: 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
d260: 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
d270: 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
d280: 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
d290: 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
d2a0: 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
d2b0: 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
d2c0: 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
d2d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
d2e0: 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
d2f0: 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
d300: 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
d310: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
d320: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
d330: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
d340: 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
d350: 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
d360: 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
d370: 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
d380: 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
d390: 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
d3a0: 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
d3b0: 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
d3c0: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
d3d0: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
d3e0: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
d3f0: 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
d400: 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
d410: 6f 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  on.<tr>^(<td val
d420: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
d430: 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76  nter>0.    <td v
d440: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
d450: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
d460: 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72  >The page number
d470: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
d480: 20 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74   file)^.<tr>^(<t
d490: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
d4a0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
d4b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
d4c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20  lign=center>N.  
d4d0: 20 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63    <td>Original c
d4e0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61  ontent of the pa
d4f0: 67 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ge prior to the 
d500: 73 74 61 72 74 20 6f 66 20 74 68 65 20 74 72 61  start of the tra
d510: 6e 73 61 63 74 69 6f 6e 29 5e 0a 3c 74 72 3e 5e  nsaction)^.<tr>^
d520: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
d530: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34  align=center>N+4
d540: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
d550: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
d560: 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
d570: 73 75 6d 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  sum)^.</table>.<
d580: 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28  /center>...<p>^(
d590: 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
d5a0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62  an unsigned 32-b
d5b0: 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75  it integer compu
d5c0: 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  ted as follows:<
d5d0: 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e  /p>..<ol>.<li>In
d5e0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65  itialize the che
d5f0: 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65  cksum to the che
d600: 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75  cksum nonce valu
d610: 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a  e found in the.j
d620: 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74  ournal header at
d630: 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e   offset 12..<li>
d640: 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78  Initialize index
d650: 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28   X to be N-200 (
d660: 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73  where N is the s
d670: 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73  ize of a databas
d680: 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e  e page.in bytes.
d690: 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74  .<li>Interpret t
d6a0: 68 65 20 66 6f 75 72 20 62 79 74 65 73 20 61 74  he four bytes at
d6b0: 20 6f 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74   offset X into t
d6c0: 68 65 20 70 61 67 65 20 61 73 20 61 20 34 2d 62  he page as a 4-b
d6d0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75  yte big-endian.u
d6e0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e  nsigned integer.
d6f0: 20 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20    Add the value 
d700: 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  of that integer 
d710: 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  to the checksum.
d720: 0a 3c 6c 69 3e 53 75 62 74 72 61 63 65 20 32 30  .<li>Subtrace 20
d730: 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66  0 from X..<li>If
d740: 20 58 20 69 73 20 67 72 65 61 74 65 72 20 74 68   X is greater th
d750: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a  an or equal to z
d760: 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20  ero, go back to 
d770: 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a  step 3..</ol>)^.
d780: 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
d790: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74   value is used t
d7a0: 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20  o guard against 
d7b0: 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65  incomplete write
d7c0: 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70  s of.a journal p
d7d0: 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f  age record follo
d7e0: 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69  wing a power fai
d7f0: 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72 65  lure.  A differe
d800: 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a  nt random nonce.
d810: 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69 6d  is used each tim
d820: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e a transaction 
d830: 69 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72  is started in or
d840: 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  der to minimize 
d850: 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e  the risk.that un
d860: 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20  written sectors 
d870: 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63 65 20  might by chance 
d880: 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f  contain data fro
d890: 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a  m the same page.
d8a0: 74 68 61 74 20 77 61 73 20 61 20 70 61 72 74 20  that was a part 
d8b0: 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c  of prior journal
d8c0: 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20  s.  By changing 
d8d0: 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61  the nonce for ea
d8e0: 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ch.transaction, 
d8f0: 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69  stale data on di
d900: 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65  sk will still ge
d910: 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72  nerate an incorr
d920: 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64  ect checksum.and
d930: 20 62 65 20 64 65 74 65 63 74 65 64 20 77 69 74   be detected wit
d940: 68 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69  h high probabili
d950: 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75  ty.  The checksu
d960: 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70  m only uses a sp
d970: 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33  arse sample.of 3
d980: 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d  2-bit words from
d990: 20 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64   the data record
d9a0: 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65   for performance
d9b0: 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67   reasons - desig
d9c0: 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e  n studies .durin
d9d0: 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70  g the planning p
d9e0: 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20  hases of SQLite 
d9f0: 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73  3.0.0 showed.a s
da00: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
da10: 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68  rmance hit in ch
da20: 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65  ecksumming the e
da30: 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a  ntire page.</p>.
da40: 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65  .<p>Let the page
da50: 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20   count value at 
da60: 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68 65 20  offset 8 in the 
da70: 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62  journal header b
da80: 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72  e M..^If M is gr
da90: 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
daa0: 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67  then after M pag
dab0: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f  e records the jo
dac0: 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62  urnal file.may b
dad0: 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75  e zero padded ou
dae0: 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75  t to the next mu
daf0: 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65  ltiple of the se
db00: 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e  ctor size and an
db10: 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65  other.journal he
db20: 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65  ader may be inse
db30: 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72  rted.  ^All jour
db40: 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74 68  nal headers with
db50: 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72  in the same.jour
db60: 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  nal must contain
db70: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
db80: 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64  se page size and
db90: 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70   sector size.</p
dba0: 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d  >..<p>^If M is -
dbb0: 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c  1 in the initial
dbc0: 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c   journal header,
dbd0: 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
dbe0: 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64 73   of page records
dbf0: 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20  .that follow is 
dc00: 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d 70  computed by comp
dc10: 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70  uting how many p
dc20: 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c 6c  age records will
dc30: 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61 69   fit in.the avai
dc40: 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 74  lable space of t
dc50: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20  he remainder of 
dc60: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
dc70: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
dc80: 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61  ragment walforma
dc90: 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f  t {WAL format}</
dca0: 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68 65  tcl>.<h2>4.0 The
dcb0: 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67   Write-Ahead Log
dcc0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e  </h2>..<p>Beginn
dcd0: 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f  ing with [versio
dce0: 6e 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74 65  n 3.7.0], SQLite
dcf0: 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20   supports a new 
dd00: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74  transaction.cont
dd10: 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61  rol mechanism ca
dd20: 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69  lled "[WAL | wri
dd30: 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f  te-ahead log]" o
dd40: 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e  r "[WAL]"..^When
dd50: 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69   a database is i
dd60: 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20  n WAL mode, all 
dd70: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
dd80: 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73  hat database mus
dd90: 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20  t.use the WAL.  
dda0: 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61  ^A particular da
ddb0: 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20  tabase will use 
ddc0: 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63  either a rollbac
ddd0: 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57  k journal.or a W
dde0: 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  AL, but not both
ddf0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
de00: 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61  e..^The WAL is a
de10: 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
de20: 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74   the same direct
de30: 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
de40: 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
de50: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
de60: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
de70: 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
de80: 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61   string."<tt>-wa
de90: 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
dea0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20 57  .</p>..<h3>4.1 W
deb0: 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f  AL File Format</
dec0: 68 34 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69  h4>..<p>A WAL fi
ded0: 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  le consists of a
dee0: 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64   header followed
def0: 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
df00: 20 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20   "frames"..Each 
df10: 66 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68  frame records th
df20: 65 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e  e revised conten
df30: 74 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61  t of a single pa
df40: 67 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61  ge from the.data
df50: 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20  base file.  All 
df60: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
df70: 61 74 61 62 61 73 65 20 61 72 65 20 72 65 63 6f  atabase are reco
df80: 72 64 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a  rded by writing.
df90: 66 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20  frames into the 
dfa0: 57 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f  WAL.  Transactio
dfb0: 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61  ns commit when a
dfc0: 20 66 72 61 6d 65 20 69 73 20 77 72 69 74 74 65   frame is writte
dfd0: 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20  n that.contains 
dfe0: 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e  a commit marker.
dff0: 20 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20    ^A single WAL 
e000: 63 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20  can and usually 
e010: 64 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c  does record .mul
e020: 74 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f  tiple transactio
e030: 6e 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c  ns.  Periodicall
e040: 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  y, the content o
e050: 66 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61  f the WAL is.tra
e060: 6e 73 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e  nsferred back in
e070: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
e080: 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61  file in an opera
e090: 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63  tion called a."c
e0a0: 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a  heckpoint".</p>.
e0b0: 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41  .<p>^A single WA
e0c0: 4c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65  L file can be re
e0d0: 75 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69  used multiple ti
e0e0: 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20  mes.  ^In other 
e0f0: 77 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63  words, the.WAL c
e100: 61 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20  an fill up with 
e110: 66 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20  frames and then 
e120: 62 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  be checkpointed 
e130: 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61  and then new.fra
e140: 6d 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74  mes can overwrit
e150: 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20  e the old ones. 
e160: 20 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67   ^A WAL always g
e170: 72 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e  rows from beginn
e180: 69 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65  ing.toward the e
e190: 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61  nd.  Checksums a
e1a0: 6e 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61  nd counters atta
e1b0: 63 68 65 64 20 74 6f 20 65 61 63 68 20 66 72 61  ched to each fra
e1c0: 6d 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64  me are.used to d
e1d0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66  etermine which f
e1e0: 72 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65  rames within the
e1f0: 20 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61   WAL are valid a
e200: 6e 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66  nd which.are lef
e210: 74 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f  tovers from prio
e220: 72 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f  r checkpoints.</
e230: 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c  p>..<p>^(The WAL
e240: 20 68 65 61 64 65 72 20 69 73 20 33 32 20 62 79   header is 32 by
e250: 74 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20  tes in size and 
e260: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
e270: 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a  following eight.
e280: 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69  big-endian 32-bi
e290: 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  t unsigned integ
e2a0: 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a  er values:</p>..
e2b0: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20  <center>.<i>WAL 
e2c0: 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69  Header Format</i
e2d0: 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64  ><br>.<table wid
e2e0: 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d  th="80%" border=
e2f0: 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65  1>.<tr><th>Offse
e300: 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73  t<th>Size<th>Des
e310: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  cription.<tr><td
e320: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e330: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61  n=center>0<td va
e340: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e350: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
e360: 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30  Magic number.  0
e370: 78 33 37 37 66 30 36 38 32 20 6f 72 20 30 78 33  x377f0682 or 0x3
e380: 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20  77f0683.<tr><td 
e390: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e3a0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
e3b0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e3c0: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46  nter>4.    <td>F
e3d0: 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ile format versi
e3e0: 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33  on.  Currently 3
e3f0: 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20  007000..<tr><td 
e400: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e410: 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
e420: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e430: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44  nter>4.    <td>D
e440: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
e450: 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32  e.  Example: 102
e460: 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  4.<tr><td valign
e470: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e480: 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>12<td valign=t
e490: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e4a0: 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70  4.    <td>Checkp
e4b0: 6f 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75  oint sequence nu
e4c0: 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  mber.<tr><td val
e4d0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e4e0: 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67  nter>16<td valig
e4f0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e500: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
e510: 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65  t-1: random inte
e520: 67 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  ger incremented 
e530: 77 69 74 68 20 65 61 63 68 20 63 68 65 63 6b 70  with each checkp
e540: 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  oint.<tr><td val
e550: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e560: 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67  nter>20<td valig
e570: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e580: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
e590: 74 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74  t-2: a different
e5a0: 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66   random number f
e5b0: 6f 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  or each checkpoi
e5c0: 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  nt.<tr><td valig
e5d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e5e0: 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d  er>24<td valign=
e5f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
e600: 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
e610: 73 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72  sum-1: First par
e620: 74 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20  t of a checksum 
e630: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20  on the first 24 
e640: 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a  bytes of header.
e650: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e660: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e670: 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  28<td valign=top
e680: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
e690: 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
e6a0: 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20  -2: Second part 
e6b0: 6f 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  of the checksum 
e6c0: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20  on the first 24 
e6d0: 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a  bytes of header.
e6e0: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
e6f0: 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69  r>)^..<p>^Immedi
e700: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  ately following 
e710: 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61  the wal-header a
e720: 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  re zero or more 
e730: 66 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72  frames. ^Each.fr
e740: 61 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ame consists of 
e750: 61 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d  a 24-byte frame-
e760: 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20  header followed 
e770: 62 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a  by a <i>page-siz
e780: 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70  e</i> bytes.of p
e790: 61 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20  age data. ^(The 
e7a0: 66 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20  frame-header is 
e7b0: 73 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33  six big-endian 3
e7c0: 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a  2-bit unsigned .
e7d0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20  integer values, 
e7e0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65  as follows:..<ce
e7f0: 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61  nter>.<i>WAL Fra
e800: 6d 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  me Header Format
e810: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
e820: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
e830: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
e840: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
e850: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
e860: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e870: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
e880: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e890: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
e8a0: 74 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c  td>Page number.<
e8b0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e8c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
e8d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e8e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
e8f0: 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74    <td>For commit
e900: 20 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69   records, the si
e910: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
e920: 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73  se file in pages
e930: 0a 20 20 20 20 20 20 20 20 61 66 74 65 72 20 74  .        after t
e940: 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20  he commit.  For 
e950: 61 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64  all other record
e960: 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64  s, zero..<tr><td
e970: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e980: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
e990: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e9a0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
e9b0: 53 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72  Salt-1 copied fr
e9c0: 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  om the WAL heade
e9d0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
e9e0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e9f0: 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>12<td valign=t
ea00: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ea10: 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32  4.    <td>Salt-2
ea20: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
ea30: 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e   WAL header.<tr>
ea40: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ea50: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
ea60: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ea70: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
ea80: 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20  <td>Checksum-1: 
ea90: 20 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63   Cumulative chec
eaa0: 6b 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20  ksum up through 
eab0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
eac0: 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20  is page.<tr><td 
ead0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
eae0: 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61  =center>20<td va
eaf0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
eb00: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
eb10: 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63  Checksum-2:  Sec
eb20: 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20  ond half of the 
eb30: 63 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b  cumulative check
eb40: 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  sum..</table>.</
eb50: 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e  center>)^..^(<p>
eb60: 41 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69  A frame is consi
eb70: 64 65 72 65 64 20 76 61 6c 69 64 20 69 66 20 61  dered valid if a
eb80: 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66  nd only if the f
eb90: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69  ollowing conditi
eba0: 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70  ons are.true:</p
ebb0: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54  >..<ol>.<li><p>T
ebc0: 68 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61  he salt-1 and sa
ebd0: 6c 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74  lt-2 values in t
ebe0: 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20  he frame-header 
ebf0: 6d 61 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c  match.       sal
ec00: 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  t values in the 
ec10: 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f  wal-header</p></
ec20: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  li>..<li><p>The 
ec30: 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20  checksum values 
ec40: 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62  in the final 8 b
ec50: 79 74 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d  ytes of the fram
ec60: 65 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20  e-header.       
ec70: 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
ec80: 65 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75  e checksum compu
ec90: 74 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ted consecutivel
eca0: 79 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  y on the.       
ecb0: 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74  WAL header and t
ecc0: 68 65 20 66 69 72 73 74 20 38 20 62 79 74 65 73  he first 8 bytes
ecd0: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
ece0: 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20   of all frames. 
ecf0: 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20        up to and 
ed00: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75  including the cu
ed10: 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e  rrent frame.</p>
ed20: 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  </li></li>.</ol>
ed30: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
ed40: 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41  ment walcksm {WA
ed50: 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  L checksum algor
ed60: 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ithm}</tcl>.<h3>
ed70: 34 2e 32 20 43 68 65 63 6b 73 75 6d 20 41 6c 67  4.2 Checksum Alg
ed80: 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e  orithm</h3>..<p>
ed90: 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
eda0: 63 6f 6d 70 75 74 65 64 20 62 79 20 69 6e 74 65  computed by inte
edb0: 72 70 72 65 74 69 6e 67 20 74 68 65 20 69 6e 70  rpreting the inp
edc0: 75 74 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75  ut as.an even nu
edd0: 6d 62 65 72 20 6f 66 20 75 6e 73 69 67 6e 65 64  mber of unsigned
ede0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
edf0: 3a 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  : x(0) through x
ee00: 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74  (N)..^The 32-bit
ee10: 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 62 69   integers are bi
ee20: 67 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 0a  g-endian if the.
ee30: 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 6e 20  magic number in 
ee40: 74 68 65 20 66 69 72 73 74 20 34 20 62 79 74 65  the first 4 byte
ee50: 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61  s of the WAL hea
ee60: 64 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38  der is 0x377f068
ee70: 33 20 61 6e 64 0a 74 68 65 20 69 6e 74 65 67 65  3 and.the intege
ee80: 72 73 20 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e  rs are little-en
ee90: 64 69 61 6e 20 74 68 65 20 6d 61 67 69 63 20 6e  dian the magic n
eea0: 75 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30  umber is 0x377f0
eeb0: 36 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73  682..^The checks
eec0: 75 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c  um values are al
eed0: 77 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74  ways stored in t
eee0: 68 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20  he frame header 
eef0: 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20  in a.big-endian 
ef00: 66 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73  format regardles
ef10: 73 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20  s of which byte 
ef20: 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
ef30: 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65   compute.the che
ef40: 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  cksum.</p>..<p>T
ef50: 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  he checksum algo
ef60: 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73  rithm only works
ef70: 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69   for content whi
ef80: 63 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65  ch is a multiple
ef90: 20 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c   of.8 bytes in l
efa0: 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72  ength.  In other
efb0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69   words, if the i
efc0: 6e 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74  nputs are x(0) t
efd0: 68 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e  hrough x(N).then
efe0: 20 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a   N must be odd..
eff0: 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61  ^(The checksum a
f000: 6c 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66  lgorithm is as f
f010: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
f020: 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d  uote><pre> .s0 =
f030: 20 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72   s1 = 0.for i fr
f040: 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70  om 0 to n-1 step
f050: 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69   2:.   s0 += x(i
f060: 29 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d  ) + s1;.   s1 +=
f070: 20 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e   x(i+1) + s0;.en
f080: 64 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e  dfor.# result in
f090: 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65   s0 and s1.</pre
f0a0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
f0b0: 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74  ..<p>^The output
f0c0: 73 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20  s s0 and s1 are 
f0d0: 62 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68  both weighted ch
f0e0: 65 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69  ecksums using Fi
f0f0: 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a  bonacci weights.
f100: 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
f110: 2e 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74  .  (^The largest
f120: 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68   Fibonacci weigh
f130: 74 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20  t occurs on the 
f140: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66  first element.of
f150: 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65   the sequence be
f160: 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54  ing summed.)  ^T
f170: 68 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e  he s1 value span
f180: 73 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74  s all 32-bit int
f190: 65 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68  eger.terms of th
f1a0: 65 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65  e sequence where
f1b0: 61 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20  as s0 omits the 
f1c0: 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a  final term.</p>.
f1d0: 0a 3c 68 33 3e 34 2e 33 20 43 68 65 63 6b 70 6f  .<h3>4.3 Checkpo
f1e0: 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  int Algorithm</h
f1f0: 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68  3>..<p>^On a [ch
f200: 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57  eckpoint], the W
f210: 41 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75 73  AL is first flus
f220: 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e  hed to persisten
f230: 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a  t storage using.
f240: 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64  the xSync method
f250: 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33   of the [sqlite3
f260: 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46  _io_methods | VF
f270: 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64  S]. .^Then valid
f280: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
f290: 57 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72  WAL is transferr
f2a0: 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ed into the data
f2b0: 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61  base file..^Fina
f2c0: 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73  lly, the databas
f2d0: 65 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20  e is flushed to 
f2e0: 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61  persistent stora
f2f0: 67 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72  ge using another
f300: 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61  .xSync method ca
f310: 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70  ll..The xSync op
f320: 65 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61  erations serve a
f330: 73 20 77 72 69 74 65 20 62 61 72 72 69 65 72 73  s write barriers
f340: 20 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61   - all writes la
f350: 75 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68  unched.before th
f360: 65 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d  e xSync must com
f370: 70 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79  plete before any
f380: 20 77 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e   write that laun
f390: 63 68 65 73 20 61 66 74 65 72 20 74 68 65 0a 78  ches after the.x
f3a0: 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e  Sync begins.</p>
f3b0: 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 65 61 63 68  ..<p>^After each
f3c0: 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 74 68 65   checkpoint, the
f3d0: 20 57 41 4c 20 68 65 61 64 65 72 20 73 61 6c 74   WAL header salt
f3e0: 2d 31 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  -1 value is incr
f3f0: 65 6d 65 6e 74 65 64 20 61 6e 64 20 74 68 65 20  emented and the 
f400: 0a 73 61 6c 74 2d 32 20 76 61 6c 75 65 20 69 73  .salt-2 value is
f410: 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54 68   randomized.  Th
f420: 69 73 20 70 72 65 76 65 6e 74 73 20 6f 6c 64 20  is prevents old 
f430: 61 6e 64 20 6e 65 77 20 66 72 61 6d 65 73 20 69  and new frames i
f440: 6e 20 74 68 65 20 57 41 4c 20 66 72 6f 6d 0a 62  n the WAL from.b
f450: 65 69 6e 67 20 63 6f 6e 73 69 64 65 72 65 64 20  eing considered 
f460: 76 61 6c 69 64 20 61 74 20 74 68 65 20 73 61 6d  valid at the sam
f470: 65 20 74 69 6d 65 20 61 6e 64 20 62 65 69 6e 67  e time and being
f480: 20 63 68 65 63 6b 70 6f 69 6e 74 69 6e 67 20 74   checkpointing t
f490: 6f 67 65 74 68 65 72 0a 66 6f 6c 6c 6f 77 69 6e  ogether.followin
f4a0: 67 20 61 20 63 72 61 73 68 2e 3c 2f 70 3e 0a 0a  g a crash.</p>..
f4b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
f4c0: 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65   walread {WAL re
f4d0: 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74  ad algorithm}</t
f4e0: 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20 52 65 61 64  cl>.<h3>4.4 Read
f4f0: 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33  er Algorithm</h3
f500: 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20  >..<p>^(To read 
f510: 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
f520: 64 61 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69  database (call i
f530: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29  t page number P)
f540: 2c 20 61 20 72 65 61 64 65 72 0a 66 69 72 73 74  , a reader.first
f550: 20 63 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20   checks the WAL 
f560: 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e  to see if it con
f570: 74 61 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49  tains page P.  I
f580: 66 20 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c  f so, then the.l
f590: 61 73 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e  ast valid instan
f5a0: 63 65 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  ce of page P tha
f5b0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
f5c0: 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a   a commit frame.
f5d0: 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66  or is a commit f
f5e0: 72 61 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f  rame itself beco
f5f0: 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65  mes the value re
f600: 61 64 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57  ad.)^  ^If the W
f610: 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  AL.contains no c
f620: 6f 70 69 65 73 20 6f 66 20 70 61 67 65 20 50 20  opies of page P 
f630: 74 68 61 74 20 61 72 65 20 76 61 6c 69 64 20 61  that are valid a
f640: 6e 64 20 77 68 69 63 68 20 61 72 65 20 61 20 63  nd which are a c
f650: 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61  ommit.frame or a
f660: 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  re followed by a
f670: 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74   commit frame, t
f680: 68 65 6e 20 70 61 67 65 20 50 20 69 73 20 72 65  hen page P is re
f690: 61 64 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61  ad from.the data
f6a0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
f6b0: 3c 70 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65  <p>To start a re
f6c0: 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ad transaction, 
f6d0: 74 68 65 20 72 65 61 64 65 72 20 72 65 63 6f 72  the reader recor
f6e0: 64 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  ds the index of 
f6f0: 74 68 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66  the last.valid f
f700: 72 61 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e  rame in the WAL.
f710: 20 20 54 68 65 20 72 65 61 64 65 72 20 75 73 65    The reader use
f720: 73 20 74 68 69 73 20 72 65 63 6f 72 64 65 64 20  s this recorded 
f730: 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a  "mxFrame" value.
f740: 66 6f 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65  for all subseque
f750: 6e 74 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f  nt read operatio
f760: 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63  ns.  New transac
f770: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70  tions can be app
f780: 65 6e 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c  ended.to the WAL
f790: 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73  , but as long as
f7a0: 20 74 68 65 20 72 65 61 64 65 72 20 75 73 65 73   the reader uses
f7b0: 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78   its original mx
f7c0: 46 72 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20  Frame value.and 
f7d0: 69 67 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65  ignores subseque
f7e0: 6e 74 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f  ntly appended co
f7f0: 6e 74 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65  ntent, the reade
f800: 72 20 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f  r will see a .co
f810: 6e 73 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f  nsistent snapsho
f820: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
f830: 65 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20  e from a single 
f840: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20  point in time.  
f850: 0a 5e 54 68 69 73 20 74 65 63 68 6e 69 71 75 65  .^This technique
f860: 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65   allows multiple
f870: 20 63 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64   concurrent read
f880: 65 72 73 20 74 6f 20 76 69 65 77 20 64 69 66 66  ers to view diff
f890: 65 72 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20  erent .versions 
f8a0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
f8b0: 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e  content simultan
f8c0: 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  eously.</p>..<p>
f8d0: 54 68 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72  The reader algor
f8e0: 69 74 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76  ithm in the prev
f8f0: 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 73 20  ious paragraphs 
f900: 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c  works correctly,
f910: 20 62 75 74 20 0a 62 65 63 61 75 73 65 20 66 72   but .because fr
f920: 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20  ames for page P 
f930: 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68  can appear anywh
f940: 65 72 65 20 77 69 74 68 69 6e 20 74 68 65 20 57  ere within the W
f950: 41 4c 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68  AL, the.reader h
f960: 61 73 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65  as to scan the e
f970: 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e  ntire WAL lookin
f980: 67 20 66 6f 72 20 70 61 67 65 20 50 20 66 72 61  g for page P fra
f990: 6d 65 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c  mes.  If the.WAL
f9a0: 20 69 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69   is large (multi
f9b0: 70 6c 65 20 6d 65 67 61 62 79 74 65 73 20 69 73  ple megabytes is
f9c0: 20 74 79 70 69 63 61 6c 29 20 74 68 61 74 20 73   typical) that s
f9d0: 63 61 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c  can can be slow,
f9e0: 0a 61 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72  .and read perfor
f9f0: 6d 61 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20  mance suffers.  
fa00: 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69  ^To overcome thi
fa10: 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70  s problem, a sep
fa20: 61 72 61 74 65 0a 64 61 74 61 20 73 74 72 75 63  arate.data struc
fa30: 74 75 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20  ture called the 
fa40: 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69  wal-index is mai
fa50: 6e 74 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64  ntained to exped
fa60: 69 74 65 20 74 68 65 0a 73 65 61 72 63 68 20 66  ite the.search f
fa70: 6f 72 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70  or frames of a p
fa80: 61 72 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c  articular page.<
fa90: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
faa0: 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f  gment walindexfo
fab0: 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d  rmat {wal-index}
fac0: 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d   {WAL-index form
fad0: 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e  at}</tcl>.<h3>4.
fae0: 35 20 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d  5 WAL-Index Form
faf0: 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63  at</h3>..<p>Conc
fb00: 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61  eptually, the wa
fb10: 6c 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65  l-index is share
fb20: 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68  d memory, though
fb30: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53   the current.VFS
fb40: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
fb50: 20 75 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66   use a mmapped f
fb60: 69 6c 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d  ile for the wal-
fb70: 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61  index.  ^The mma
fb80: 70 70 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20  pped.file is in 
fb90: 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
fba0: 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
fbb0: 73 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  se and has the s
fbc0: 61 6d 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20  ame name.as the 
fbd0: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 61 20  database with a 
fbe0: 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20  "<tt>-shm</tt>" 
fbf0: 73 75 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e  suffix appended.
fc00: 20 20 42 65 63 61 75 73 65 0a 74 68 65 20 77 61    Because.the wa
fc10: 6c 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65  l-index is share
fc20: 64 20 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65  d memory, SQLite
fc30: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
fc40: 74 20 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e  t .[PRAGMA journ
fc50: 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61  al_mode | journa
fc60: 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20  l_mode=WAL] .on 
fc70: 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79  a network filesy
fc80: 73 74 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74  stem when client
fc90: 73 20 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65  s are on differe
fca0: 6e 74 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c  nt machines..All
fcb0: 20 75 73 65 72 73 20 6f 66 20 74 68 65 20 64 61   users of the da
fcc0: 74 61 62 61 73 65 20 6d 75 73 74 20 62 65 20 61  tabase must be a
fcd0: 62 6c 65 20 74 6f 20 73 68 61 72 65 20 74 68 65  ble to share the
fce0: 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70   same memory.</p
fcf0: 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73  >..<p>The purpos
fd00: 65 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64  e of the wal-ind
fd10: 65 78 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20  ex is to answer 
fd20: 74 68 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75  this question qu
fd30: 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ickly:</p>..<blo
fd40: 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65  ckquote><i>.Give
fd50: 6e 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20  n a page number 
fd60: 50 20 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20  P and a maximum 
fd70: 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20  WAL frame index 
fd80: 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61  M,.return the la
fd90: 72 67 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20  rgest WAL frame 
fda0: 69 6e 64 65 78 20 66 6f 72 20 70 61 67 65 20 50  index for page P
fdb0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65   that does not e
fdc0: 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74  xceed M, .or ret
fdd0: 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72  urn NULL if ther
fde0: 65 20 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20  e are no frames 
fdf0: 66 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20  for page P that 
fe00: 64 6f 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e  do not exceed M.
fe10: 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</i></blockquot
fe20: 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c  e>..<p>The <i>M<
fe30: 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65  /i> value in the
fe40: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
fe50: 61 70 68 20 69 73 20 74 68 65 20 22 6d 78 46 72  aph is the "mxFr
fe60: 61 6d 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e  ame" value.defin
fe70: 65 64 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20  ed in [WAL read 
fe80: 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74  algorithm | sect
fe90: 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73  ion 4.4] that is
fea0: 20 72 65 61 64 20 61 74 20 74 68 65 20 73 74 61   read at the sta
feb0: 72 74 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63  rt .of a transac
fec0: 74 69 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64  tion and which d
fed0: 65 66 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d  efines the maxim
fee0: 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68  um frame from th
fef0: 65 20 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20  e WAL that .the 
ff00: 72 65 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e  reader will use.
ff10: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c  </p>..<p>The wal
ff20: 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69  -index is transi
ff30: 65 6e 74 2e 20 20 41 66 74 65 72 20 61 20 63 72  ent.  After a cr
ff40: 61 73 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  ash, the wal-ind
ff50: 65 78 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63  ex is.reconstruc
ff60: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69  ted from the ori
ff70: 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20  ginal WAL file. 
ff80: 20 5e 54 68 65 20 56 46 53 20 69 73 20 72 65 71   ^The VFS is req
ff90: 75 69 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20  uired.to either 
ffa0: 74 72 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f  truncate or zero
ffb0: 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74   the header of t
ffc0: 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65  he wal-index whe
ffd0: 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65  n the last.conne
ffe0: 63 74 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73  ction to it clos
fff0: 65 73 2e 20 20 42 65 63 61 75 73 65 20 74 68 65  es.  Because the
10000 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72   wal-index is tr
10010 61 6e 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a  ansient, it can.
10020 75 73 65 20 61 6e 20 61 72 63 68 69 74 65 63 74  use an architect
10030 75 72 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72  ure-specific for
10040 6d 61 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74  mat; it does not
10050 20 68 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73   have to be cros
10060 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63  s-platform..Henc
10070 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61  e, unlike the da
10080 74 61 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66  tabase and WAL f
10090 69 6c 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63  ile formats whic
100a0 68 20 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75  h store all valu
100b0 65 73 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e  es.as big endian
100c0 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
100d0 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74  stores multi-byt
100e0 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
100f0 6e 61 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65  native.byte orde
10100 72 20 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f  r of the host co
10110 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mputer.</p>..<p>
10120 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73  This document is
10130 20 63 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20   concerned with 
10140 74 68 65 20 70 65 72 73 69 73 74 20 73 74 61 74  the persist stat
10150 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
10160 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63  e.file, and sinc
10170 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e the wal-index 
10180 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20 73  is a transient s
10190 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75 72  tructure, no fur
101a0 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f  ther .informatio
101b0 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
101c0 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e  at of the wal-in
101d0 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f 76  dex will be prov
101e0 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c  ided here..Compl
101f0 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74  ete details on t
10200 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
10210 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63   wal-index are c
10220 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 0a  ontained within.
10230 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69  comments in SQLi
10240 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c  te source code.<
10250 2f 70 3e 0a                                      /p>.