Documentation Source Text

Hex Artifact Content
Login

Artifact 871f6bc2a7eb240d9307577038b4fedcf4050b21:


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 56 46 53 20 69 6d 70 6c 65 6d 65  ific.VFS impleme
4550: 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65  ntation in imple
4560: 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61  menting the data
4570: 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  base file lockin
4580: 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53  g primitives..^S
4590: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 75  QLite does not u
45a0: 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  se the lock-byte
45b0: 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51 4c   page.  ^The SQL
45c0: 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20 6e  ite core .will n
45d0: 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72 69  ever read or wri
45e0: 74 65 2c 20 74 68 6f 75 67 68 20 6f 70 65 72 61  te, though opera
45f0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
4600: 69 66 69 63 20 56 46 53 20 0a 69 6d 70 6c 65 6d  ific VFS .implem
4610: 65 6e 74 61 74 69 6f 6e 73 20 6d 61 79 20 63 68  entations may ch
4620: 6f 6f 73 65 20 74 6f 20 72 65 61 64 20 6f 72 20  oose to read or 
4630: 77 72 69 74 65 20 62 79 74 65 73 20 6f 6e 20 74  write bytes on t
4640: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 0a 70 61  he lock-byte .pa
4650: 67 65 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ge according to 
4660: 74 68 65 20 0a 6e 65 65 64 73 20 61 6e 64 20 70  the .needs and p
4670: 72 6f 63 6c 69 76 69 74 69 65 73 20 6f 66 20 74  roclivities of t
4680: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73 79  he underlying sy
4690: 73 74 65 6d 2e 20 20 54 68 65 20 75 6e 69 78 20  stem.  The unix 
46a0: 61 6e 64 20 77 69 6e 33 32 0a 56 46 53 20 69 6d  and win32.VFS im
46b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 74 68  plementations th
46c0: 61 74 20 63 6f 6d 65 20 62 75 69 6c 74 20 69 6e  at come built in
46d0: 74 6f 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74  to SQLite do not
46e0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 0a 6c 6f   write to the.lo
46f0: 63 6b 2d 62 79 74 65 20 70 61 67 65 2c 20 62 75  ck-byte page, bu
4700: 74 20 74 68 69 72 64 2d 70 61 72 74 79 20 56 46  t third-party VF
4710: 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  S implementation
4720: 73 20 66 6f 72 0a 6f 74 68 65 72 20 6f 70 65 72  s for.other oper
4730: 61 74 69 6e 67 20 73 79 73 74 65 6d 73 20 6d 69  ating systems mi
4740: 67 68 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ght.</p>..<tcl>h
4750: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 66 72 65 65  d_fragment {free
4760: 6c 69 73 74 7d 20 7b 66 72 65 65 6c 69 73 74 7d  list} {freelist}
4770: 20 7b 66 72 65 65 2d 70 61 67 65 20 6c 69 73 74   {free-page list
4780: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 34 20  }</tcl>.<h3>1.4 
4790: 54 68 65 20 46 72 65 65 6c 69 73 74 3c 2f 68 33  The Freelist</h3
47a0: 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62 61 73 65  >..<p>A database
47b0: 20 66 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74   file might cont
47c0: 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ain one or more 
47d0: 70 61 67 65 73 20 74 68 61 74 20 61 72 65 20 6e  pages that are n
47e0: 6f 74 20 69 6e 0a 61 63 74 69 76 65 20 75 73 65  ot in.active use
47f0: 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73 20  .  Unused pages 
4800: 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c 20  can come about, 
4810: 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 68 65  for example, whe
4820: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 73  n information.is
4830: 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68   deleted from th
4840: 65 20 64 61 74 61 62 61 73 65 2e 20 20 55 6e 75  e database.  Unu
4850: 73 65 64 20 70 61 67 65 73 20 61 72 65 20 73 74  sed pages are st
4860: 6f 72 65 64 20 6f 6e 20 74 68 65 20 66 72 65 65  ored on the free
4870: 6c 69 73 74 0a 61 6e 64 20 61 72 65 20 72 65 75  list.and are reu
4880: 73 65 64 20 77 68 65 6e 20 61 64 64 69 74 69 6f  sed when additio
4890: 6e 61 6c 20 70 61 67 65 73 20 61 72 65 20 72 65  nal pages are re
48a0: 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  quired.</p>..<p>
48b0: 54 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20  The freelist is 
48c0: 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 6c  organized as a l
48d0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 66 72  inked list of fr
48e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
48f0: 65 73 0a 77 69 74 68 20 65 61 63 68 20 74 72 75  es.with each tru
4900: 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e  nk pages contain
4910: 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72 73  ing page numbers
4920: 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f 72   for zero or mor
4930: 65 20 66 72 65 65 6c 69 73 74 0a 6c 65 61 66 20  e freelist.leaf 
4940: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  pages.</p>..<p>A
4950: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
4960: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
4970: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 34 2d 62   an array of 4-b
4980: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4990: 6e 74 65 67 65 72 73 2e 0a 54 68 65 20 73 69 7a  ntegers..The siz
49a0: 65 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69  e of the array i
49b0: 73 20 61 73 20 6d 61 6e 79 20 69 6e 74 65 67 65  s as many intege
49c0: 72 73 20 61 73 20 77 69 6c 6c 20 66 69 74 20 69  rs as will fit i
49d0: 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70 61  n the usable spa
49e0: 63 65 0a 6f 66 20 61 20 70 61 67 65 2e 20 20 54  ce.of a page.  T
49f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62 6c  he minimum usabl
4a00: 65 20 73 70 61 63 65 20 69 73 20 34 38 30 20 62  e space is 480 b
4a10: 79 74 65 73 20 73 6f 20 74 68 65 20 61 72 72 61  ytes so the arra
4a20: 79 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62 65  y will always.be
4a30: 20 61 74 20 6c 65 61 73 74 20 31 32 30 20 65 6e   at least 120 en
4a40: 74 72 69 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  tries in length.
4a50: 20 20 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74    ^The first int
4a60: 65 67 65 72 20 69 6e 20 74 68 65 20 61 72 72 61  eger in the arra
4a70: 79 20 0a 69 73 20 74 68 65 20 70 61 67 65 20 6e  y .is the page n
4a80: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78  umber of the nex
4a90: 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b  t freelist trunk
4aa0: 20 70 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73   page in the lis
4ab0: 74 20 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68  t or zero .if th
4ac0: 69 73 20 69 73 20 74 68 65 20 6c 61 73 74 20 66  is is the last f
4ad0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4ae0: 67 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  ge.  ^The second
4af0: 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
4b00: 61 72 72 61 79 0a 69 73 20 74 68 65 20 6e 75 6d  array.is the num
4b10: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
4b20: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
4b30: 6c 6f 77 2e 20 20 43 61 6c 6c 20 74 68 65 20 73  low.  Call the s
4b40: 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 4c 2e  econd integer L.
4b50: 0a 5e 49 66 20 4c 20 69 73 20 67 72 65 61 74 65  .^If L is greate
4b60: 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e  r than zero then
4b70: 20 69 6e 74 65 67 65 72 73 20 77 69 74 68 20 61   integers with a
4b80: 72 72 61 79 20 69 6e 64 65 78 65 73 20 62 65 74  rray indexes bet
4b90: 77 65 65 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69  ween 2 and.L+1 i
4ba0: 6e 63 6c 75 73 69 76 65 20 63 6f 6e 74 61 69 6e  nclusive contain
4bb0: 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f   page numbers fo
4bc0: 72 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66 20  r freelist leaf 
4bd0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46  pages.</p>..<p>F
4be0: 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67  reelist leaf pag
4bf0: 65 73 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e  es contain no in
4c00: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c  formation.  ^SQL
4c10: 69 74 65 20 61 76 6f 69 64 73 20 72 65 61 64 69  ite avoids readi
4c20: 6e 67 20 6f 72 0a 77 72 69 74 69 6e 67 20 66 72  ng or.writing fr
4c30: 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65  eelist leaf page
4c40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65  s in order to re
4c50: 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f  duce disk I/O.</
4c60: 70 3e 0a 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20  p>..<p>A bug in 
4c70: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  SQLite versions 
4c80: 70 72 69 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63  prior to 3.6.0 c
4c90: 61 75 73 65 64 20 74 68 65 20 64 61 74 61 62 61  aused the databa
4ca0: 73 65 20 74 6f 20 62 65 0a 72 65 70 6f 72 74 65  se to be.reporte
4cb0: 64 20 61 73 20 63 6f 72 72 75 70 74 20 69 66 20  d as corrupt if 
4cc0: 61 6e 79 20 6f 66 20 74 68 65 20 6c 61 73 74 20  any of the last 
4cd0: 36 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  6 entries in the
4ce0: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
4cf0: 70 61 67 65 20 0a 61 72 72 61 79 20 63 6f 6e 74  page .array cont
4d00: 61 69 6e 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76  ained non-zero v
4d10: 61 6c 75 65 73 2e 20 20 4e 65 77 65 72 20 76 65  alues.  Newer ve
4d20: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
4d30: 20 64 6f 20 6e 6f 74 20 68 61 76 65 0a 74 68 69   do not have.thi
4d40: 73 20 70 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77  s problem.  ^How
4d50: 65 76 65 72 2c 20 6e 65 77 65 72 20 76 65 72 73  ever, newer vers
4d60: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 73  ions of SQLite s
4d70: 74 69 6c 6c 20 61 76 6f 69 64 20 75 73 69 6e 67  till avoid using
4d80: 20 74 68 65 20 0a 6c 61 73 74 20 73 69 78 20 65   the .last six e
4d90: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
4da0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
4db0: 65 20 61 72 72 61 79 20 69 6e 20 6f 72 64 65 72  e array in order
4dc0: 20 74 68 61 74 20 64 61 74 61 62 61 73 65 0a 66   that database.f
4dd0: 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79 20  iles created by 
4de0: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  newer versions o
4df0: 66 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65 20  f SQLite can be 
4e00: 72 65 61 64 20 62 79 20 6f 6c 64 65 72 20 76 65  read by older ve
4e10: 72 73 69 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65  rsions.of SQLite
4e20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
4e30: 75 6d 62 65 72 20 6f 66 20 66 72 65 65 6c 69 73  umber of freelis
4e40: 74 20 70 61 67 65 73 20 69 73 20 73 74 6f 72 65  t pages is store
4e50: 64 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  d as a 4-byte bi
4e60: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4e70: 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .in the database
4e80: 20 68 65 61 64 65 72 20 61 74 20 61 6e 20 6f 66   header at an of
4e90: 66 73 65 74 20 6f 66 20 33 36 20 66 72 6f 6d 20  fset of 36 from 
4ea0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
4eb0: 20 74 68 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20   the file..^The 
4ec0: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
4ed0: 61 6c 73 6f 20 73 74 6f 72 65 73 20 74 68 65 20  also stores the 
4ee0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
4ef0: 68 65 20 66 69 72 73 74 20 66 72 65 65 6c 69 73  he first freelis
4f00: 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 61 73 20  t trunk.page as 
4f10: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
4f20: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 61  ian integer at a
4f30: 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 32 20 66  n offset of 32 f
4f40: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
4f50: 67 0a 6f 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f  g.of the file.</
4f60: 70 3e 0a 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72  p>..<h3>1.5 B-tr
4f70: 65 65 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  ee Pages</h3>..<
4f80: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
4f90: 69 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  is either an int
4fa0: 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20  erior page or a 
4fb0: 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61  leaf page..A lea
4fc0: 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  f page contains 
4fd0: 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20  keys and in the 
4fe0: 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20  case of a table 
4ff0: 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20  b-tree each.key 
5000: 68 61 73 20 61 73 73 6f 63 69 61 74 65 64 20 63  has associated c
5010: 6f 6e 74 65 6e 74 2e 20 20 41 6e 20 69 6e 74 65  ontent.  An inte
5020: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5030: 6e 73 0a 4b 20 6b 65 79 73 20 77 69 74 68 6f 75  ns.K keys withou
5040: 74 20 63 6f 6e 74 65 6e 74 20 62 75 74 20 77 69  t content but wi
5050: 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20  th K+1 pointers 
5060: 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  to child b-tree 
5070: 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65  pages..A "pointe
5080: 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f  r" in an interio
5090: 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  r b-tree page is
50a0: 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69 74   just the 31-bit
50b0: 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75   integer.page nu
50c0: 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c  mber of the chil
50d0: 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70  d page.</p>...<p
50e0: 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65 70 74  >Define the dept
50f0: 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72  h.of a leaf b-tr
5100: 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74  ee to be 1 and t
5110: 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  he depth of any 
5120: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5130: 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74  to be one.more t
5140: 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
5150: 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20  depth of any of 
5160: 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e  its children.  ^
5170: 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  In a well-formed
5180: 0a 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63  .database, all c
5190: 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e 79 20 6f  hildren of any o
51a0: 6e 65 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  ne interior b-tr
51b0: 65 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ee have the same
51c0: 20 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   depth.</p>..<p>
51d0: 49 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  In an interior b
51e0: 2d 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20  -tree page, the 
51f0: 70 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79  pointers and key
5200: 73 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65  s logically alte
5210: 72 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f  rnate .with a po
5220: 69 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e  inter on both en
5230: 64 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75  ds. (The previou
5240: 73 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f  s sentence is to
5250: 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63   be understood.c
5260: 6f 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68  onceptually - th
5270: 65 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20  e actual layout 
5280: 6f 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a  of the keys and.
5290: 70 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20  pointers within 
52a0: 74 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65  the page is more
52b0: 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64   complicated and
52c0: 20 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62   will be describ
52d0: 65 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c  ed in.the sequel
52e0: 2e 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74  .)  All keys wit
52f0: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67  hin the same pag
5300: 65 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64  e are unique and
5310: 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f   are logically.o
5320: 72 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65  rganized in asce
5330: 6e 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d  nding order from
5340: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
5350: 20 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72   (Again, this or
5360: 64 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61  dering.is logica
5370: 6c 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e  l, not physical.
5380: 20 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63    The actual loc
5390: 61 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ation of keys wi
53a0: 74 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73  thin the page.is
53b0: 20 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f   arbitrary.) ^Fo
53c0: 72 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69  r any key X, poi
53d0: 6e 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66  nters to the lef
53e0: 74 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74  t.of a X refer t
53f0: 6f 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f  o b-tree pages o
5400: 6e 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73  n which all keys
5410: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f   are less than o
5420: 72 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50  r equal to X..^P
5430: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72  ointers to the r
5440: 69 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20  ight of X refer 
5450: 74 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61  to pages where a
5460: 6c 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65  ll keys are .gre
5470: 61 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e  ater than X.</p>
5480: 0a 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69  ..<p>Within an i
5490: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
54a0: 61 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e  age, each key an
54b0: 64 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  d the pointer to
54c0: 20 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c   its.immediate l
54d0: 65 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64  eft are combined
54e0: 20 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72   into a structur
54f0: 65 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c  e called a "cell
5500: 22 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f  ".  The.right-mo
5510: 73 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65  st pointer is he
5520: 6c 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20  ld separately.  
5530: 41 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61  A leaf b-tree pa
5540: 67 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65  ge has no.pointe
5550: 72 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c  rs, but it still
5560: 20 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73   uses the cell s
5570: 74 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64  tructure to hold
5580: 20 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20   keys for.index 
5590: 62 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20  b-trees or keys 
55a0: 61 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  and content for 
55b0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 3c 2f  table b-trees.</
55c0: 70 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  p>.</p>..<p>Ever
55d0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
55e0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
55f0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5600: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5610: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5620: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5630: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5640: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5650: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5660: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5670: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5680: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5690: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
56a0: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
56b0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
56c0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
56d0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
56e0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
56f0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5700: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5710: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5720: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5730: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5740: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5750: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5760: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5770: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5780: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5790: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
57a0: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
57b0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
57c0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
57d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
57e0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
57f0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5800: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
5810: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
5820: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
5830: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
5840: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
5850: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
5860: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
5870: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e  .  There is a on
5880: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
5890: 20 66 72 6f 6d 20 74 61 62 6c 65 20 62 2d 74 72   from table b-tr
58a0: 65 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ees in the datab
58b0: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 28 6e 6f  ase .file to (no
58c0: 6e 2d 76 69 72 74 75 61 6c 29 20 74 61 62 6c 65  n-virtual) table
58d0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
58e0: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
58f0: 69 6e 67 20 73 79 73 74 65 6d 20 74 61 62 6c 65  ing system table
5900: 73 0a 73 75 63 68 20 61 73 20 73 71 6c 69 74 65  s.such as sqlite
5910: 5f 6d 61 73 74 65 72 2e 20 20 54 68 65 72 65 20  _master.  There 
5920: 69 73 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61  is one-to-one ma
5930: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 69 6e  pping between in
5940: 64 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20 74  dex b-trees.in t
5950: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5960: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
5970: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
5980: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
5990: 64 69 63 65 73 0a 63 72 65 61 74 65 64 20 62 79  dices.created by
59a0: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
59b0: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 20 62 2d  traints.  The b-
59c0: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  tree correspondi
59d0: 6e 67 20 74 6f 20 74 68 65 0a 73 71 6c 69 74 65  ng to the.sqlite
59e0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 61 6c  _master table al
59f0: 77 61 79 73 20 68 61 73 20 69 74 73 20 72 6f 6f  ways has its roo
5a00: 74 20 70 61 67 65 20 6f 6e 20 61 20 70 61 67 65  t page on a page
5a10: 20 6e 75 6d 62 65 72 20 6f 66 20 31 2e 0a 54 68   number of 1..Th
5a20: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
5a30: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74  table contains t
5a40: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
5a50: 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74  ber for every ot
5a60: 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69  her .table and i
5a70: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
5a80: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
5a90: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
5aa0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
5ab0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34  consists of a 64
5ac0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
5ad0: 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74  ger key.and up t
5ae0: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
5af0: 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20  es of arbitrary 
5b00: 64 61 74 61 2e 20 20 49 6e 74 65 72 69 6f 72 20  data.  Interior 
5b10: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 0a 68 6f  table b-trees.ho
5b20: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
5b30: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
5b40: 6c 64 72 65 6e 2e 20 20 41 6c 6c 20 64 61 74 61  ldren.  All data
5b50: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
5b60: 20 74 68 65 0a 74 61 62 6c 65 20 62 2d 74 72 65   the.table b-tre
5b70: 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c  e leaves.</p>..<
5b80: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
5b90: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
5ba0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
5bb0: 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20  rbitrary key of 
5bc0: 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37  up.to 2147483647
5bd0: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
5be0: 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70   and no data.</p
5bf0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
5c00: 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64  ent cell_payload
5c10: 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c   {cell payload}<
5c20: 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20  /tcl>.<p>Define 
5c30: 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66  the "payload" of
5c40: 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68   a cell to be th
5c50: 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  e arbitrary leng
5c60: 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68  th section.of th
5c70: 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20  e cell.  For an 
5c80: 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68  index b-tree, th
5c90: 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20  e key is always 
5ca0: 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e  arbitrary in len
5cb0: 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68  gth.and hence th
5cc0: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
5cd0: 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65   key.  There are
5ce0: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65   no arbitrary le
5cf0: 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e  ngth elements.in
5d00: 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e   the cells of in
5d10: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
5d20: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f  ree pages and so
5d30: 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76   those cells hav
5d40: 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54  e no.payload.  T
5d50: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
5d60: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61   pages contain a
5d70: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
5d80: 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66  content and.so f
5d90: 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73  or cells on thos
5da0: 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c  e pages the payl
5db0: 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65  oad is the conte
5dc0: 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  nt..<p>When the 
5dd0: 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20  size of payload 
5de0: 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65  for a cell excee
5df0: 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72  ds a certain thr
5e00: 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65  eshold (to.be de
5e10: 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65  fined later) the
5e20: 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  n only the first
5e30: 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68   few bytes of th
5e40: 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74  e payload.are st
5e50: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
5e60: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
5e70: 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65  balance is store
5e80: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
5e90: 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76  st.of content ov
5ea0: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70  erflow pages.</p
5eb0: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
5ec0: 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69  age is divided i
5ed0: 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74  nto regions in t
5ee0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64  he following ord
5ef0: 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68  er:..<ol>.<li>Th
5f00: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
5f10: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
5f20: 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31  (found on page 1
5f30: 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38   only).<li>The 8
5f40: 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72   or 12 byte b-tr
5f50: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c  ee page header.<
5f60: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  li>The cell poin
5f70: 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e  ter array.<li>Un
5f80: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a  allocated space.
5f90: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e  <li>The cell con
5fa0: 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68  tent area.<li>Th
5fb0: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
5fc0: 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c  n..</ol>.</p>..<
5fd0: 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  p>The 100-byte d
5fe0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
5ff0: 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c  der is found onl
6000: 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69  y on page 1, whi
6010: 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74  ch is.always a t
6020: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6030: 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74  .  All other b-t
6040: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
6050: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f   database file.o
6060: 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74  mit this 100-byt
6070: 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  e header.</p>..<
6080: 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  p>The reserved r
6090: 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61  egion is an area
60a0: 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65   of unused space
60b0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
60c0: 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70  very.page (excep
60d0: 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61  t the locking pa
60e0: 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69  ge) that extensi
60f0: 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68  ons can use to h
6100: 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66  old per-page.inf
6110: 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20  ormation.  ^The 
6120: 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65  size of the rese
6130: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64  rved region is d
6140: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
6150: 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e   one-byte.unsign
6160: 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64  ed integer found
6170: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
6180: 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74   20 into the dat
6190: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
61a0: 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  r..The size of t
61b0: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
61c0: 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65  on is usually ze
61d0: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ro.</p>..<p>The 
61e0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
61f0: 65 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e  er is 8 bytes in
6200: 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70   size for leaf p
6210: 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65  ages and 12.byte
6220: 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70  s for interior p
6230: 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69  ages.  All multi
6240: 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
6250: 68 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61  he page header.a
6260: 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54  re big-endian..T
6270: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6280: 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65  eader is compose
6290: 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d of the followi
62a0: 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a  ng fields:</p>..
62b0: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
62c0: 65 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46  ee Page Header F
62d0: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
62e0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
62f0: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
6300: 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
6310: 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
6320: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6330: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6340: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >0<td align=cent
6350: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6360: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41  td align=left>.A
6370: 20 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e 67   flag indicating
6380: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6390: 20 74 79 70 65 0a 5e 41 20 76 61 6c 75 65 20 6f   type.^A value o
63a0: 66 20 32 20 6d 65 61 6e 73 20 74 68 65 20 70 61  f 2 means the pa
63b0: 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f  ge is an interio
63c0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  r index b-tree p
63d0: 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  age..^A value of
63e0: 20 35 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67   5 means the pag
63f0: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72  e is an interior
6400: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6410: 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  ge..^A value of 
6420: 31 30 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67  10 means the pag
6430: 65 20 69 73 20 61 20 6c 65 61 66 20 69 6e 64 65  e is a leaf inde
6440: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e  x b-tree page..^
6450: 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20 6d 65  A value of 13 me
6460: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6470: 61 20 6c 65 61 66 20 74 61 62 6c 65 20 62 2d 74  a leaf table b-t
6480: 72 65 65 20 70 61 67 65 2e 0a 5e 41 6e 79 20 6f  ree page..^Any o
6490: 74 68 65 72 20 76 61 6c 75 65 20 66 6f 72 20 74  ther value for t
64a0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  he b-tree page t
64b0: 79 70 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e  ype is an error.
64c0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
64d0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
64e0: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >1<td align=cent
64f0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
6500: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42  td align=left>.B
6510: 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20  yte offset into 
6520: 74 68 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  the page of the 
6530: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 0a  first freeblock.
6540: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6550: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6560: 33 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  3<td align=cente
6570: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74  r valign=top>2<t
6580: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75  d align=left>.Nu
6590: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
65a0: 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c   this page.<tr><
65b0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
65c0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20  valign=top>5<td 
65d0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
65e0: 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69  ign=top>2<td ali
65f0: 67 6e 3d 6c 65 66 74 3e 0a 4f 66 66 73 65 74 20  gn=left>.Offset 
6600: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6610: 65 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f  e of the cell co
6620: 6e 74 65 6e 74 20 61 72 65 61 2e 20 20 41 20 7a  ntent area.  A z
6630: 65 72 6f 20 76 61 6c 75 65 20 69 73 20 75 73 65  ero value is use
6640: 64 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 61  d to represent a
6650: 6e 20 6f 66 66 73 65 74 20 6f 66 20 36 35 35 33  n offset of 6553
6660: 36 2c 20 77 68 69 63 68 20 6f 63 63 75 72 73 20  6, which occurs 
6670: 6f 6e 20 61 6e 20 65 6d 70 74 79 20 72 6f 6f 74  on an empty root
6680: 20 70 61 67 65 20 77 68 65 6e 20 75 73 69 6e 67   page when using
6690: 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61   a 65536-byte pa
66a0: 67 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64  ge size..<tr><td
66b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
66c0: 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c  lign=top>7<td al
66d0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
66e0: 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e  n=top>1<td align
66f0: 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66  =left>.Number of
6700: 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65   fragmented free
6710: 20 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68   bytes within th
6720: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
6730: 72 65 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  rea.<tr><td alig
6740: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6750: 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63  top>8<td align=c
6760: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6770: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
6780: 3e 0a 54 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  >.The right-most
6790: 20 70 6f 69 6e 74 65 72 20 28 69 6e 74 65 72 69   pointer (interi
67a0: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  or b-tree pages 
67b0: 6f 6e 6c 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  only).</table></
67c0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e  blockquote></cen
67d0: 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65  ter>..<p>^The ce
67e0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
67f0: 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67   of a b-tree pag
6800: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
6810: 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65  llows the b-tree
6820: 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c  .page header.  L
6830: 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62  et K be the numb
6840: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
6850: 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20  he btree.  ^The 
6860: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72  cell pointer.arr
6870: 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b  ay consists of K
6880: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
6890: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63  offsets to the c
68a0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e  ell contents.  ^
68b0: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
68c0: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
68d0: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
68e0: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
68f0: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
6900: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
6910: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
6920: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
6930: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
6940: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
6950: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
6960: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
6970: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
6980: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
6990: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
69a0: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
69b0: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
69c0: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
69d0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
69e0: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
69f0: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
6a00: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
6a10: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
6a20: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
6a30: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
6a40: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
6a50: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
6a60: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
6a70: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
6a80: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
6a90: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
6aa0: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
6ab0: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61  /p>..<p>^If a pa
6ac0: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  ge contains no c
6ad0: 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f  ells (which is o
6ae0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  nly possible for
6af0: 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20   a root page.of 
6b00: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
6b10: 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74  tains no rows) t
6b20: 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74  hen the offset t
6b30: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
6b40: 6e 74 0a 61 72 65 61 20 77 69 6c 6c 20 65 71 75  nt.area will equ
6b50: 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  al the page size
6b60: 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73   minus the bytes
6b70: 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61   of reserved spa
6b80: 63 65 2e 20 20 5e 28 49 66 0a 74 68 65 20 64 61  ce.  ^(If.the da
6b90: 74 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35  tabase uses a 65
6ba0: 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69  536-byte page si
6bb0: 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72  ze and the reser
6bc0: 76 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72  ved space is zer
6bd0: 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c  o.(the usual val
6be0: 75 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20  ue for reserved 
6bf0: 73 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20  space) then the 
6c00: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66  cell content off
6c10: 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20  set of an.empty 
6c20: 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65  page wants to be
6c30: 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65   65536.  .Howeve
6c40: 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  r, that integer 
6c50: 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  is too large to 
6c60: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32  be stored in a.2
6c70: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
6c80: 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c  nteger, so a val
6c90: 75 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20  ue of 0 is used 
6ca0: 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a  in its place.)^.
6cb0: 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20  .<p>A freeblock 
6cc0: 69 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75  is a structure u
6cd0: 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20  sed to identify 
6ce0: 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  unallocated spac
6cf0: 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65  e within.a b-tre
6d00: 65 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f  e page.  Freeblo
6d10: 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65  cks are organize
6d20: 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e  d as a chain.  ^
6d30: 54 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65  The first 2 byte
6d40: 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b  s of.a freeblock
6d50: 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61   are a big-endia
6d60: 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
6d70: 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e  is the offset in
6d80: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6d90: 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65  .of the next fre
6da0: 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68  eblock in the ch
6db0: 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20  ain, or zero if 
6dc0: 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73  the freeblock is
6dd0: 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65   the last on.the
6de0: 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68   chain.  ^The th
6df0: 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62  ird and fourth b
6e00: 79 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65  ytes of each fre
6e10: 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69  eblock form.a bi
6e20: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
6e30: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69   which is the si
6e40: 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c  ze of the freebl
6e50: 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e  ock in bytes, in
6e60: 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79  cluding.the 4-by
6e70: 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65  te header.  ^Fre
6e80: 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61  eblocks are alwa
6e90: 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20  ys connected in 
6ea0: 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61  order .of increa
6eb0: 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54  sing offset.  ^T
6ec0: 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20  he second field 
6ed0: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
6ee0: 67 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65  ge header is the
6ef0: 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66  .offset of the f
6f00: 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20  irst freeblock, 
6f10: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65  or zero if there
6f20: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
6f30: 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20  ks on the.page. 
6f40: 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d   ^In a well-form
6f50: 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  ed b-tree page, 
6f60: 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79  there will alway
6f70: 73 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  s be at least on
6f80: 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68  e cell.before th
6f90: 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63  e first freebloc
6fa0: 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65  k.</p>..<p>A fre
6fb0: 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20  eblock requires 
6fc0: 61 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73  at least 4 bytes
6fd0: 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74   of space.  If t
6fe0: 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61  here is an isola
6ff0: 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20  ted.group of 1, 
7000: 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62  2, or 3 unused b
7010: 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ytes within the 
7020: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
7030: 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63  a, those bytes.c
7040: 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65  omprise a fragme
7050: 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20  nt.  ^The total 
7060: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
7070: 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73  in all fragments
7080: 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68   is stored.in th
7090: 65 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66  e fifth field of
70a0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
70b0: 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20   header.  ^In a 
70c0: 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72  well-formed b-tr
70d0: 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74  ee page,.the tot
70e0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
70f0: 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20  es in fragments 
7100: 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36  may not exceed 6
7110: 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74  0.</p>..<p>The t
7120: 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66  otal amount of f
7130: 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62  ree space on a b
7140: 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69  -tree page consi
7150: 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a  sts of the size.
7160: 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74  of the unallocat
7170: 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74  ed region plus t
7180: 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66  he total size of
7190: 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20   all freeblocks 
71a0: 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20  plus the.number 
71b0: 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72  of fragmented fr
71c0: 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69  ee bytes.  ^SQLi
71d0: 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65  te may from time
71e0: 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e   to time reorgan
71f0: 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67  ize.a b-tree pag
7200: 65 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20  e so that there 
7210: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
7220: 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79  s or fragment by
7230: 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20  tes, all.unused 
7240: 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69  bytes are contai
7250: 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c  ned in the unall
7260: 6f 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67  ocated space reg
7270: 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c  ion, and all.cel
7280: 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69  ls are packed ti
7290: 67 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64  ghtly at the end
72a0: 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54   of the page.  T
72b0: 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22  his is called ."
72c0: 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74  defragmenting" t
72d0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c  he b-tree page.<
72e0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
72f0: 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61  gment varint {va
7300: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
7310: 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c  teger} {varint}<
7320: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69  /tcl>..<p>A vari
7330: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
7340: 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20  ger or "varint" 
7350: 69 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66  is a static Huff
7360: 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20  man encoding.of 
7370: 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  64-bit twos-comp
7380: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20  lement integers 
7390: 74 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73  that uses less s
73a0: 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70  pace for small p
73b0: 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e  ositive .values.
73c0: 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65   .A varint is be
73d0: 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79  tween 1 and 9 by
73e0: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
73f0: 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69  The varint consi
7400: 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65  sts of either.ze
7410: 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 20  ro or more byte 
7420: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68  which have the h
7430: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
7440: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
7450: 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68  single byte.with
7460: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7470: 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69  bit clear, or ni
7480: 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65  ne bytes, whiche
7490: 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a  ver is shorter..
74a0: 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20  The lower seven 
74b0: 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20  bits of each of 
74c0: 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20  the first eight 
74d0: 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20  bytes and all 8 
74e0: 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74  bits of.the nint
74f0: 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20  h byte are used 
7500: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74  to reconstruct t
7510: 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  he 64-bit twos-c
7520: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
7530: 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62  r..Varints are b
7540: 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20  ig-endian: bits 
7550: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65  taken from the e
7560: 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74  arlier byte of t
7570: 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68  he varint.are th
7580: 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61  e more significa
7590: 6e 74 20 61 6e 64 20 62 69 74 73 20 74 61 6b 65  nt and bits take
75a0: 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65 72  n from the later
75b0: 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70   bytes. </p>..<p
75c0: 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61  >The format of a
75d0: 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e   cell depends on
75e0: 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20 62   which kind of b
75f0: 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20 63  -tree page the c
7600: 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20  ell.appears on. 
7610: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
7620: 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 65  able shows the e
7630: 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65 6c  lements of a cel
7640: 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61  l, in.order of a
7650: 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20 74  ppearance, for t
7660: 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72 65  he various b-tre
7670: 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f 70  e page types.</p
7680: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
7690: 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65  dl>.<dt><p>Table
76a0: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c   B-Tree Leaf Cel
76b0: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
76c0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61  <p><ul>.<li>A va
76d0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
76e0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
76f0: 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f  f bytes of paylo
7700: 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  ad, including an
7710: 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41  y.overflow.<li>A
7720: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
7730: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
7740: 2c 20 61 2e 6b 2e 61 2e 20 22 72 6f 77 69 64 22  , a.k.a. "rowid"
7750: 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c  .<li>The initial
7760: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the 
7770: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65  payload that doe
7780: 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f  s not spill to o
7790: 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c  verflow.pages..<
77a0: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
77b0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70  endian integer p
77c0: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
77d0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
77e0: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61   the.overflow pa
77f0: 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65  ge list - omitte
7800: 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64  d if all payload
7810: 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74   fits on the b-t
7820: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c  ree page..</ul><
7830: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
7840: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e  >Table B-Tree In
7850: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e  terior Cell:</p>
7860: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
7870: 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  >.<li>A 4-byte b
7880: 69 67 2d 65 6e 64 69 6e 67 20 70 61 67 65 20 6e  ig-ending page n
7890: 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74  umber which is t
78a0: 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f  he left child po
78b0: 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72  inter..<li>A var
78c0: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
78d0: 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75   integer key.</u
78e0: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
78f0: 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65  ><p>Index B-Tree
7900: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c   Leaf Cell:</p><
7910: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
7920: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
7930: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
7940: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
7950: 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c   of key payload,
7960: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
7970: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20  verflow.<li>The 
7980: 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20  initial portion 
7990: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74  of the payload t
79a0: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69  hat does not spi
79b0: 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70  ll to overflow.p
79c0: 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ages..<li>A 4-by
79d0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
79e0: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
79f0: 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  r for the first 
7a00: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
7a10: 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d  flow page list -
7a20: 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20   omitted if all 
7a30: 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20  payload fits on 
7a40: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7a50: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
7a60: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
7a70: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
7a80: 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  ll:</p></dt>.<dd
7a90: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
7aa0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 6e 67  -byte big-ending
7ab0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69   page number whi
7ac0: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
7ad0: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
7ae0: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
7af0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
7b00: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
7b10: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
7b20: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
7b30: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
7b40: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
7b50: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
7b60: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
7b70: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
7b80: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
7b90: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
7ba0: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
7bb0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
7bc0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
7bd0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
7be0: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
7bf0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
7c00: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
7c10: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  ul></p></dd>.</d
7c20: 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  l></blockquote>.
7c30: 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74  .<p>The informat
7c40: 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65  ion above can be
7c50: 20 72 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74   recast into a t
7c60: 61 62 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66  able format as f
7c70: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
7c80: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
7c90: 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66  llformat {cell f
7ca0: 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f  ormat summary}</
7cb0: 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  tcl>.<center>.<i
7cc0: 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72  >B-tree Cell For
7cd0: 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62  mat</i>.<table b
7ce0: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
7cf0: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77  0%">.<tr><th row
7d00: 73 70 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a  span=2>Datatype.
7d10: 20 20 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d      <th colspan=
7d20: 34 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a  4>Appears in....
7d30: 20 20 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d      <th rowspan=
7d40: 32 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  2>Description.<t
7d50: 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66  r><th>Table Leaf
7d60: 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65 20 49  .    <th>Table I
7d70: 6e 74 65 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e  nterior.    <th>
7d80: 49 6e 64 65 78 20 4c 65 61 66 0a 20 20 20 20 3c  Index Leaf.    <
7d90: 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f  th>Index Interio
7da0: 72 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  r.<tr><td align=
7db0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7dc0: 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  p>4-byte integer
7dd0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
7de0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7df0: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
7e00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7e10: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
7e20: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
7e30: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7e40: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
7e50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7e60: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
7e70: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
7e80: 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20  eft>Page number 
7e90: 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74  of left child.<t
7ea0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7eb0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61  er valign=top>va
7ec0: 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69  rint.    <td ali
7ed0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7ee0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7ef0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7f00: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
7f10: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
7f20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7f30: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7f40: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7f50: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7f60: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7f70: 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72  lign=left>Number
7f80: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79   of bytes of pay
7f90: 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  load.<tr><td ali
7fa0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7fb0: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
7fc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7fd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
7fe0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
7ff0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8000: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8010: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8020: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8030: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8040: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8050: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8060: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52  <td align=left>R
8070: 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  owid.<tr><td ali
8080: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8090: 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a  =top>byte array.
80a0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
80b0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
80c0: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
80d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
80e0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
80f0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8100: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8110: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8120: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8130: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8140: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8150: 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72  left>Payload.<tr
8160: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8170: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62  r valign=top>4-b
8180: 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  yte integer.    
8190: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
81a0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
81b0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
81c0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
81d0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
81e0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
81f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8200: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8210: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8220: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8230: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8240: 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  >Page number of 
8250: 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70  first overflow p
8260: 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  age.</table></ce
8270: 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64  nter>....<tr><td
8280: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8290: 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68  lign=top>..<p>Th
82a0: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c  e amount of payl
82b0: 6f 61 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20  oad that spills 
82c0: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
82d0: 67 65 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73  ges also depends
82e0: 20 6f 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70   on.the page typ
82f0: 65 2e 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c  e.  For the foll
8300: 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f  owing computatio
8310: 6e 73 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65  ns, let U be the
8320: 20 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20   usable size.of 
8330: 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2c  a database page,
8340: 20 74 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20   the total page 
8350: 73 69 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65  size less the re
8360: 73 65 72 76 65 64 20 73 70 61 63 65 20 61 74 20  served space at 
8370: 74 68 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20  the.end of each 
8380: 70 61 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50  page.  And let P
8390: 20 62 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20   be the payload 
83a0: 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  size.</p>..<bloc
83b0: 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e  kquote><dl>.<dt>
83c0: 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61  Table B-Tree Lea
83d0: 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64  f Cell:</dt>.<dd
83e0: 3e 3c 70 3e 0a 5e 49 66 20 74 68 65 20 70 61 79  ><p>.^If the pay
83f0: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
8400: 65 73 73 20 74 68 61 6e 20 55 2d 33 36 20 74 68  ess than U-36 th
8410: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
8420: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 0a  yload is stored.
8430: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
8440: 67 65 2e 20 20 5e 28 4c 65 74 20 4d 20 62 65 20  ge.  ^(Let M be 
8450: 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d  ((U-12)*32/255)-
8460: 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72 65  23.  If P is gre
8470: 61 74 65 72 20 74 68 61 6e 20 55 2d 33 35 0a 74  ater than U-35.t
8480: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
8490: 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e  f byte stored on
84a0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
84b0: 20 69 73 20 74 68 65 20 6c 65 73 73 6f 72 20 6f   is the lessor o
84c0: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
84d0: 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 3c 2f  ) and U-35.)^.</
84e0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 54 61 62  p></dd>..<dt>Tab
84f0: 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69  le B-Tree Interi
8500: 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64  or Cell:</dt>.<d
8510: 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72 20 70  d><p>.Interior p
8520: 61 67 65 73 20 6f 66 20 74 61 62 6c 65 20 62 2d  ages of table b-
8530: 74 72 65 65 73 20 68 61 76 65 20 6e 6f 20 70 61  trees have no pa
8540: 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74 68 65  yload and so the
8550: 72 65 20 69 73 20 6e 65 76 65 72 0a 61 6e 79 20  re is never.any 
8560: 70 61 79 6c 6f 61 64 20 74 6f 20 73 70 69 6c 6c  payload to spill
8570: 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ..</p></dd>..<dt
8580: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65  >Index B-Tree Le
8590: 61 66 20 4f 72 20 49 6e 74 65 72 69 6f 72 20 43  af Or Interior C
85a0: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
85b0: 3e 0a 5e 49 66 20 74 68 65 20 70 61 79 6c 6f 61  >.^If the payloa
85c0: 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73  d size P is less
85d0: 20 74 68 61 6e 20 28 28 55 2d 31 32 29 2a 36 34   than ((U-12)*64
85e0: 2f 32 35 35 29 2d 32 32 20 74 68 65 6e 20 74 68  /255)-22 then th
85f0: 65 20 65 6e 74 69 72 65 0a 70 61 79 6c 6f 61 64  e entire.payload
8600: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68   is stored on th
8610: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
8620: 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d  .^(Let M be ((U-
8630: 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20  12)*32/255)-23. 
8640: 20 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72   If P is greater
8650: 20 74 68 61 6e 20 28 28 55 2d 31 32 29 2a 36 34   than ((U-12)*64
8660: 2f 32 35 35 29 2d 32 33 0a 74 68 65 6e 20 74 68  /255)-23.then th
8670: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
8680: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8690: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74 68  -tree page is th
86a0: 65 20 6c 65 73 73 6f 72 20 6f 66 0a 4d 2b 28 28  e lessor of.M+((
86b0: 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20  P-M)%(U-4)) and 
86c0: 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d  ((U-12)*64/255)-
86d0: 32 33 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a  23.)^.</p></dd>.
86e0: 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  </dl></blockquot
86f0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66  e>..<p>The overf
8700: 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61  low thresholds a
8710: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67  re designed to g
8720: 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61  ive a minimum fa
8730: 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e  nout of.4 for in
8740: 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20  dex b-trees and 
8750: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f  to make sure eno
8760: 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ugh of the paylo
8770: 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74  ad.is on the b-t
8780: 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68  ree page that th
8790: 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
87a0: 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61  can usually be a
87b0: 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20  ccessed.without 
87c0: 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76  consulting an ov
87d0: 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e  erflow page.  In
87e0: 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20   hindsight, the 
87f0: 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65  designers of.the
8800: 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c   SQLite b-tree l
8810: 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61  ogic realize tha
8820: 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c  t these threshol
8830: 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  ds could have be
8840: 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d  en.made much sim
8850: 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20  pler.  However, 
8860: 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  the computations
8870: 20 63 61 6e 6e 6f 74 20 62 65 20 6e 6f 77 20 62   cannot be now b
8880: 65 20 63 68 61 6e 67 65 64 0a 77 69 74 68 6f 75  e changed.withou
8890: 74 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  t resulting in a
88a0: 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66  n incompatible f
88b0: 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64  ile format.  And
88c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6d   the current com
88d0: 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77  putations.work w
88e0: 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ell, even if the
88f0: 79 20 61 72 65 20 61 20 6c 69 74 74 6c 65 20 63  y are a little c
8900: 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 68 33  omplex.</p>..<h3
8910: 3e 31 2e 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61  >1.6 Cell Payloa
8920: 64 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65 73  d Overflow Pages
8930: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  </h3>..<p>^When 
8940: 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20 61  the payload of a
8950: 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73 20   b-tree cell is 
8960: 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74 68  too large for th
8970: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  e b-tree page,.t
8980: 68 65 20 73 75 72 70 6c 75 73 20 69 73 20 73 70  he surplus is sp
8990: 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66  illed onto overf
89a0: 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76 65  low pages.  ^Ove
89b0: 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72 6d  rflow pages form
89c0: 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20   a linked.list. 
89d0: 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75 72   ^The first four
89e0: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 6f   bytes of each o
89f0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72 65  verflow page are
8a00: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e   a big-endian.in
8a10: 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
8a20: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
8a30: 66 20 74 68 65 20 6e 65 78 74 20 70 61 67 65 20  f the next page 
8a40: 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72  in the chain, or
8a50: 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66 69   zero.for the fi
8a60: 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65 20  nal page in the 
8a70: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 66  chain.  ^The fif
8a80: 74 68 20 62 79 74 65 20 74 68 72 6f 75 67 68 20  th byte through 
8a90: 74 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65 0a  the last usable.
8aa0: 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f  byte are used to
8ab0: 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63   hold overflow c
8ac0: 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33  ontent.</p>..<h3
8ad0: 3e 31 2e 37 20 50 6f 69 6e 74 65 72 20 4d 61 70  >1.7 Pointer Map
8ae0: 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67 65 73   or Ptrmap Pages
8af0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65  </h3>..<p>Pointe
8b00: 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61 70 20  r map or ptrmap 
8b10: 70 61 67 65 73 20 61 72 65 20 65 78 74 72 61 20  pages are extra 
8b20: 70 61 67 65 73 20 69 6e 73 65 72 74 65 64 20 69  pages inserted i
8b30: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
8b40: 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f 70 65  .to make the ope
8b50: 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f  ration of [auto_
8b60: 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63  vacuum] and [inc
8b70: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d  remental_vacuum]
8b80: 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66 66 69   modes.more effi
8b90: 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20 70 61  cient.  Other pa
8ba0: 67 65 20 74 79 70 65 73 20 69 6e 20 74 68 65 20  ge types in the 
8bb0: 64 61 74 61 62 61 73 65 20 74 79 70 69 63 61 6c  database typical
8bc0: 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65 72 73  ly have pointers
8bd0: 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20  .from parent to 
8be0: 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d  child.  For exam
8bf0: 70 6c 65 2c 20 61 20 69 6e 74 65 72 69 6f 72 20  ple, a interior 
8c00: 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74  b-tree page cont
8c10: 61 69 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f  ains pointers.to
8c20: 20 69 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65   its child b-tre
8c30: 65 20 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f  e pages and an o
8c40: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61  verflow chain ha
8c50: 73 20 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d  s a pointer.from
8c60: 20 65 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65   earlier to late
8c70: 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63  r links in the c
8c80: 68 61 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20  hain.  A ptrmap 
8c90: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69  page contains li
8ca0: 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f  nkage.informatio
8cb0: 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f  n going in the o
8cc0: 70 70 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f  pposite directio
8cd0: 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f  n, from child to
8ce0: 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70   parent.</p>..<p
8cf0: 3e 5e 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d  >^Ptrmap pages m
8d00: 75 73 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79  ust exist in any
8d10: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
8d20: 68 69 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a  hich has a non-z
8d30: 65 72 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74  ero.largest root
8d40: 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c   b-tree page val
8d50: 75 65 20 61 74 20 6f 66 66 73 65 74 20 35 32 20  ue at offset 52 
8d60: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
8d70: 68 65 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20  header..^If the 
8d80: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
8d90: 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 69  ree page value i
8da0: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
8db0: 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e   database must n
8dc0: 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61  ot.contain ptrma
8dd0: 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  p pages.</p>..<p
8de0: 3e 5e 49 6e 20 61 20 64 61 74 61 62 61 73 65 20  >^In a database 
8df0: 77 69 74 68 20 70 74 72 6d 61 70 20 70 61 67 65  with ptrmap page
8e00: 73 2c 20 74 68 65 20 66 69 72 73 74 20 70 74 72  s, the first ptr
8e10: 6d 61 70 20 70 61 67 65 20 69 73 20 70 61 67 65  map page is page
8e20: 20 32 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67   2..A ptrmap pag
8e30: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e  e consists of an
8e40: 20 61 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65   array of 5-byte
8e50: 20 65 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a   entries.  Let J
8e60: 20 62 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f   be the.number o
8e70: 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73  f 5-byte entries
8e80: 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69   that will fit i
8e90: 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70 61  n the usable spa
8ea0: 63 65 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49  ce of a page..(I
8eb0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a  n other words, J
8ec0: 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72  =U/5.)  ^The fir
8ed0: 73 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77  st ptrmap page w
8ee0: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b  ill contain back
8ef0: 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61   pointer.informa
8f00: 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33  tion for pages 3
8f10: 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e   through J+2, in
8f20: 63 6c 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73  clusive.  ^The s
8f30: 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61  econd pointer ma
8f40: 70 0a 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f  p.page will be o
8f50: 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74  n page J+3 and t
8f60: 68 61 74 20 70 74 72 6d 61 70 20 70 61 67 65 20  hat ptrmap page 
8f70: 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63  will provide bac
8f80: 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d  k pointer.inform
8f90: 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20  ation for pages 
8fa0: 4a 2b 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b  J+4 through 2*J+
8fb0: 33 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e  3 inclusive.  An
8fc0: 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68   so forth for.th
8fd0: 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
8fe0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
8ff0: 5e 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20  ^(In a database 
9000: 74 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70  that uses ptrmap
9010: 20 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65   pages, all page
9020: 73 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69  s at locations i
9030: 64 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65  dentified.by the
9040: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20   computation in 
9050: 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
9060: 61 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70  agraph must be p
9070: 74 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e  trmap page and n
9080: 6f 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79  o.other page may
9090: 20 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67   be a ptrmap pag
90a0: 65 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74  e.  Except, if t
90b0: 68 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67  he byte-lock pag
90c0: 65 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c  e happens to.fal
90d0: 6c 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61  l on the same pa
90e0: 67 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70  ge number as a p
90f0: 74 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e  trmap page, then
9100: 20 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d   the ptrmap is m
9110: 6f 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c  oved.to the foll
9120: 6f 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74  owing page for t
9130: 68 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c  hat one case.)^<
9140: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62  /p>..<p>Each 5-b
9150: 79 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70  yte entry on a p
9160: 74 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69  trmap page provi
9170: 64 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e  des back-link in
9180: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
9190: 0a 6f 6e 65 20 6f 66 20 70 61 67 65 73 20 74 68  .one of pages th
91a0: 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  at immediately f
91b0: 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65  ollow the pointe
91c0: 72 20 6d 61 70 2e 20 20 5e 28 49 66 20 70 61 67  r map.  ^(If pag
91d0: 65 20 42 20 69 73 20 61 0a 70 74 72 6d 61 70 20  e B is a.ptrmap 
91e0: 70 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c  page then back-l
91f0: 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ink information 
9200: 61 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69  about page B+1 i
9210: 73 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68  s provided by.th
9220: 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e  e first entry on
9230: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70   the pointer map
9240: 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  .  Information a
9250: 62 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69 73  bout page B+2 is
9260: 0a 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65  .provided by the
9270: 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20   second entry.  
9280: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c  And so forth.)^<
9290: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62  /p>..<p>Each 5-b
92a0: 79 74 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79  yte ptrmap entry
92b0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65   consists of one
92c0: 20 62 79 74 65 20 6f 66 20 22 70 61 67 65 20 74   byte of "page t
92d0: 79 70 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ype" information
92e0: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34  .followed by a 4
92f0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
9300: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46   page number.  F
9310: 69 76 65 20 70 61 67 65 20 74 79 70 65 73 20 61  ive page types a
9320: 72 65 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c  re recognized:.<
9330: 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20  /p>..<ol>.<li>A 
9340: 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65  b-tree root page
9350: 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62  .  The.page numb
9360: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72  er should be zer
9370: 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73  o..<li>A freelis
9380: 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67  t page.  The pag
9390: 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20  e number should 
93a0: 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65  be.zero..<li>The
93b0: 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 61   first page of a
93c0: 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76  .cell payload ov
93d0: 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54  erflow chain.  T
93e0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
93f0: 73 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  s the b-tree pag
9400: 65 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20  e that.contains 
9410: 74 68 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63  the cell whose c
9420: 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66  ontent has overf
9430: 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67  lowed..<li>A pag
9440: 65 20 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  e in an overflow
9450: 20 63 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61   chain.other tha
9460: 6e 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  n the first page
9470: 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62  .  The page numb
9480: 65 72 20 69 73 20 74 68 65 20 70 72 69 6f 72 20  er is the prior 
9490: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
94a0: 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e  flow chain..<li>
94b0: 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65  A non-root b-tre
94c0: 65 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67  e page.  The.pag
94d0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  e number is the 
94e0: 70 61 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61  parent b-tree pa
94f0: 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49  ge..</ol>..<p>^I
9500: 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20 66  n any database f
9510: 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ile that contain
9520: 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20  s ptrmap pages, 
9530: 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74 20  all b-tree root 
9540: 70 61 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65  pages .must come
9550: 20 62 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d   before any non-
9560: 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65  root b-tree page
9570: 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f  , cell payload o
9580: 76 65 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72  verflow page, or
9590: 0a 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20  .freelist page. 
95a0: 20 54 68 69 73 20 72 65 73 74 72 69 63 74 69 6f   This restrictio
95b0: 6e 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 61  n ensures that a
95c0: 20 72 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c 20   root page will 
95d0: 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65 64 20 64  never.be moved d
95e0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
95f0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
9600: 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68 65  tal-vacuum.  The
9610: 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67   auto-vacuum.log
9620: 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77  ic does not know
9630: 20 68 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74   how to update t
9640: 68 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65  he root_page fie
9650: 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ld of the sqlite
9660: 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e  _master.table an
9670: 64 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73  d so it is neces
9680: 73 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20  sary to prevent 
9690: 72 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20  root pages from 
96a0: 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69  being moved.duri
96b0: 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  ng an auto-vacuu
96c0: 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72  m in order to pr
96d0: 65 73 65 72 76 65 20 74 68 65 20 69 6e 74 65 67  eserve the integ
96e0: 72 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69  rity of the.sqli
96f0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
9700: 20 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72    ^Root pages ar
9710: 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62  e moved to the b
9720: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a  eginning of the.
9730: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79  database file by
9740: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
9750: 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c  E, CREATE INDEX,
9760: 20 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64   DROP TABLE, and
9770: 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72  .DROP INDEX oper
9780: 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32  ations.</p>..<h2
9790: 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c 61 79 65  >2.0 Schema Laye
97a0: 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66  r</h2>..<p>The f
97b0: 6f 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65  oregoing text de
97c0: 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65  scribes low-leve
97d0: 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
97e0: 20 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72   SQLite file.for
97f0: 6d 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65  mat.  The b-tree
9800: 20 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69   mechanism provi
9810: 64 65 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61  des a powerful a
9820: 6e 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61  nd efficient mea
9830: 6e 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20  ns of.accessing 
9840: 61 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74  a large data set
9850: 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20  .  This section 
9860: 77 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f  will describe ho
9870: 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20  w the.low-level 
9880: 62 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20  b-tree layer is 
9890: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
98a0: 74 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53  t higher-level S
98b0: 51 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e  QL.capabilities.
98c0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
98d0: 61 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f  agment record_fo
98e0: 72 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72  rmat {record for
98f0: 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32  mat}</tcl>.<h3>2
9900: 2e 31 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  .1 Record Format
9910: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  </h3>..<p>The co
9920: 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
9930: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
9940: 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f 66  e and the key.of
9950: 20 61 6e 79 20 69 6e 64 65 78 20 62 2d 74 72 65   any index b-tre
9960: 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61  e page was chara
9970: 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61  cterized above.a
9980: 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  s an arbitrary s
9990: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
99a0: 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63  ..The prior disc
99b0: 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  ussion mentioned
99c0: 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c   one key being l
99d0: 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ess than another
99e0: 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65  , but.did not de
99f0: 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20  fine what "less 
9a00: 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68  than" meant.  Th
9a10: 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f  e current sectio
9a20: 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74  n will address.t
9a30: 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c  hese omissions.<
9a40: 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c  /p>..<p>Payload,
9a50: 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 63 6f   either table co
9a60: 6e 74 65 6e 74 20 6f 72 20 69 6e 64 65 78 20 6b  ntent or index k
9a70: 65 79 73 2c 20 69 73 20 61 6c 77 61 79 73 20 69  eys, is always i
9a80: 6e 20 74 68 65 20 22 72 65 63 6f 72 64 0a 66 6f  n the "record.fo
9a90: 72 6d 61 74 22 2e 20 20 54 68 65 20 72 65 63 6f  rmat".  The reco
9aa0: 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65  rd format define
9ab0: 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20  s a sequence of 
9ac0: 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e  values correspon
9ad0: 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20  ding.to columns 
9ae0: 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e  in a table or in
9af0: 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64  dex.  The record
9b00: 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65   format specifie
9b10: 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
9b20: 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74  columns, the dat
9b30: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
9b40: 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f  lumn, and the co
9b50: 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f  ntent of each co
9b60: 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  lumn.</p>..<p>Th
9b70: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
9b80: 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20  makes extensive 
9b90: 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72  use of the .[var
9ba0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
9bb0: 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74  eger] or [varint
9bc0: 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  ].representation
9bd0: 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65   of 64-bit signe
9be0: 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e  d integers defin
9bf0: 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c  ed above.</p>..<
9c00: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
9c10: 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69  serialtype {seri
9c20: 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c  al type} {serial
9c30: 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70   types}</tcl>.<p
9c40: 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  >A record contai
9c50: 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64 20  ns a header and 
9c60: 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20  a body, in that 
9c70: 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20 68  order.  .^(The h
9c80: 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
9c90: 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
9ca0: 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e  t which determin
9cb0: 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  es the total num
9cc0: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e 20  ber.of bytes in 
9cd0: 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65  the header.  The
9ce0: 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69 73   varint value is
9cf0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
9d00: 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65 73   header in.bytes
9d10: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73   including the s
9d20: 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65 6c  ize varint itsel
9d30: 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67  f.)^  ^Following
9d40: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
9d50: 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65   are.one or more
9d60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
9d70: 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c  nts, one per col
9d80: 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69  umn.  These addi
9d90: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61  tional varints.a
9da0: 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61  re called "seria
9db0: 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20  l type" numbers 
9dc0: 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68  and.determine th
9dd0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65 61  e datatype of ea
9de0: 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72  ch column, accor
9df0: 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ding to the foll
9e00: 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e  owing chart:</p>
9e10: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e  ..<center>.^(<i>
9e20: 53 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65  Serial Type Code
9e30: 73 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20  s Of The Record 
9e40: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
9e50: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
9e60: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
9e70: 3c 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c  <th>Serial Type<
9e80: 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c  th>Content Size<
9e90: 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c  th>Meaning.<tr><
9ea0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
9eb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
9ec0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
9ed0: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
9ee0: 67 6e 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74  gn=left>.NULL.<t
9ef0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
9f00: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
9f10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
9f20: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
9f30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69  align=left>.8-bi
9f40: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
9f50: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
9f60: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9f70: 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76  gn=center>2<td v
9f80: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9f90: 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67  center>2<td alig
9fa0: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
9fb0: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
9fc0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
9fd0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
9fe0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
9ff0: 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>3<td valign=to
a000: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33  p align=center>3
a010: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a020: 42 69 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69  Big-endian 24-bi
a030: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a040: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a050: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a060: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76  gn=center>4<td v
a070: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a080: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
a090: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a0a0: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
a0b0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a0c0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a0d0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a0e0: 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>5<td valign=to
a0f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
a100: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a110: 42 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69  Big-endian 48-bi
a120: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a130: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a140: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a150: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76  gn=center>6<td v
a160: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a170: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
a180: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a190: 61 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 64-bit twos-c
a1a0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a1b0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a1c0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a1d0: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
a1e0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
a1f0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a200: 42 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20  Big-endian IEEE 
a210: 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20  754-2008 64-bit 
a220: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
a230: 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
a240: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a250: 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
a260: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a270: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
a280: 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73  ft>.Integer cons
a290: 74 61 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76  tant 0.  Only av
a2a0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65  ailable for sche
a2b0: 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20  ma format 4 and 
a2c0: 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  higher..<tr><td 
a2d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a2e0: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
a2f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a300: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
a310: 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f  left>.Integer co
a320: 6e 73 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20  nstant 1.  Only 
a330: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63  available for sc
a340: 68 65 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e  hema format 4 an
a350: 64 20 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74  d higher..<tr><t
a360: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a370: 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a  gn=center>10,11.
a380: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
a390: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a3a0: 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d  &nbsp;<td align=
a3b0: 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65  left>.<i>Not use
a3c0: 64 2e 20 20 52 65 73 65 72 76 65 64 20 66 6f 72  d.  Reserved for
a3d0: 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a   expansion.</i>.
a3e0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
a3f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a400: 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20  N&#x2265;12 and 
a410: 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c  even.    <td val
a420: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a430: 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64  nter>(N-12)/2<td
a440: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73   align=left>.A s
a450: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  tring in the dat
a460: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61  abase encoding a
a470: 6e 64 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65  nd (N-12)/2 byte
a480: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65  s in length..The
a490: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
a4a0: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 74 72 3e  is omitted..<tr>
a4b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a4c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
a4d0: 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64 0a  2265;13 and odd.
a4e0: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
a4f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a500: 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69 67  (N-13)/2<td alig
a510: 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20 74  n=left>.A BLOB t
a520: 68 61 74 20 69 73 20 28 4e 2d 31 33 29 2f 32 20  hat is (N-13)/2 
a530: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 0a  bytes in length.
a540: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
a550: 3e 29 5e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  >)^..<p>Note tha
a560: 74 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  t because of the
a570: 20 77 61 79 20 76 61 72 69 6e 74 73 20 61 72 65   way varints are
a580: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 68 65   defined, the he
a590: 61 64 65 72 20 73 69 7a 65 20 76 61 72 69 6e 74  ader size varint
a5a0: 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79 70 65  .and serial type
a5b0: 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20 75 73   varints will us
a5c0: 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66  ually consist of
a5d0: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
a5e0: 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79 70 65   The.serial type
a5f0: 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c 61 72   varints for lar
a600: 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20 42  ge strings and B
a610: 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74 65 6e  LOBs might exten
a620: 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68 72 65  d to two or thre
a630: 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73 2c 20  e.byte varints, 
a640: 62 75 74 20 74 68 61 74 20 69 73 20 74 68 65 20  but that is the 
a650: 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68 65 72  exception rather
a660: 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65 2e 20   than the rule. 
a670: 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f 72 6d  .The varint form
a680: 61 74 20 69 73 20 76 65 72 79 20 65 66 66 69 63  at is very effic
a690: 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67 20 74  ient at coding t
a6a0: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
a6b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61  .</p>..<p>The va
a6c0: 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  lues for each co
a6d0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f  lumn in the reco
a6e0: 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  rd immediately f
a6f0: 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
a700: 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f  ..^(Note that fo
a710: 72 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30  r serial types 0
a720: 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20  , 8, 9, 12, and 
a730: 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  13, the value is
a740: 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c   zero bytes in.l
a750: 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63  ength.  If all c
a760: 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68  olumns are of th
a770: 65 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74  ese types then t
a780: 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20  he body section 
a790: 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73  of the.record is
a7a0: 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c   empty.)^</p>..<
a7b0: 68 33 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f  h3>2.2 Record So
a7c0: 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c  rt Order</h3>..<
a7d0: 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b  p>The order of k
a7e0: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
a7f0: 62 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d  b-tree is determ
a800: 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74  ined by the sort
a810: 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65   order of.the re
a820: 63 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b  cords that the k
a830: 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20  eys represent.  
a840: 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f  Record compariso
a850: 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c  n progresses col
a860: 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20  umn.by column.  
a870: 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63  Columns of a rec
a880: 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64  ord are examined
a890: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
a8a0: 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20  ght.  The.first 
a8b0: 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
a8c0: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75  that are not equ
a8d0: 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  al determines th
a8e0: 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72  e relative order
a8f0: 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f  .of the two reco
a900: 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f  rds.  The sort o
a910: 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75  rder of individu
a920: 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73  al columns is as
a930: 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c  .follows:</p>..<
a940: 6f 6c 3e 0a 3c 6c 69 3e 5e 4e 55 4c 4c 20 76 61  ol>.<li>^NULL va
a950: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
a960: 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74 0a  e 0) sort first.
a970: 3c 6c 69 3e 5e 4e 75 6d 65 72 69 63 20 76 61 6c  <li>^Numeric val
a980: 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65  ues (serial type
a990: 73 20 31 20 74 68 72 6f 75 67 68 20 39 29 20 73  s 1 through 9) s
a9a0: 6f 72 74 20 6e 65 78 74 20 61 6e 64 20 69 6e 20  ort next and in 
a9b0: 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 0a 3c 6c  numeric order.<l
a9c0: 69 3e 5e 54 65 78 74 20 76 61 6c 75 65 73 20 28  i>^Text values (
a9d0: 65 76 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65  even serial type
a9e0: 73 20 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29  s 12 and larger)
a9f0: 20 73 6f 72 74 20 6e 65 78 74 20 69 6e 20 74 68   sort next in th
aa00: 65 20 6f 72 64 65 72 0a 20 20 20 20 64 65 74 65  e order.    dete
aa10: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63 6f  rmined by the co
aa20: 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67  lumns [collating
aa30: 20 66 75 6e 63 74 69 6f 6e 5d 0a 3c 6c 69 3e 5e   function].<li>^
aa40: 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 6f 64 64  BLOB values (odd
aa50: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 33   serial types 13
aa60: 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72   and larger) sor
aa70: 74 20 6c 61 73 74 20 69 6e 20 6f 72 64 65 72 20  t last in order 
aa80: 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20  .    determined 
aa90: 62 79 20 6d 65 6d 63 6d 70 28 29 2e 0a 3c 2f 6f  by memcmp()..</o
aaa0: 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74  l>..<p>A [collat
aab0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f  ing function] fo
aac0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  r each column is
aad0: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72   necessary in or
aae0: 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  der to compute.t
aaf0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74  he order of text
ab00: 20 66 69 65 6c 64 73 2e 20 20 5e 53 51 4c 69 74   fields.  ^SQLit
ab10: 65 20 64 65 66 69 6e 65 73 20 74 68 72 65 65 20  e defines three 
ab20: 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69  built-in collati
ab30: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 0a 3c 2f  ng functions:.</
ab40: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
ab50: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
ab60: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a  cellspacing=10>.
ab70: 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>^<td valign=
ab80: 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c  top>BINARY.    <
ab90: 74 64 3e 53 74 72 69 6e 67 73 20 61 72 65 20 63  td>Strings are c
aba0: 6f 6d 70 61 72 65 64 20 62 79 74 65 20 62 79 20  ompared byte by 
abb0: 62 79 74 65 20 75 73 69 6e 67 20 74 68 65 20 6d  byte using the m
abc0: 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e  emcmp() function
abd0: 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  .        from th
abe0: 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
abf0: 72 61 72 79 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76  rary..<tr>^<td v
ac00: 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45  align=top>NOCASE
ac10: 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49  .    <td>Like BI
ac20: 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74  NARY except that
ac30: 20 75 70 70 65 72 63 61 73 65 20 41 53 43 49 49   uppercase ASCII
ac40: 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41 27   characters ('A'
ac50: 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20   through 'Z').  
ac60: 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64        are folded
ac70: 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65   into their lowe
ac80: 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  rcase equivalent
ac90: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
aca0: 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  ng the.        c
acb0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f 74 65  omparison.  Note
acc0: 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43 49 49   that only ASCII
acd0: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
ace0: 63 61 73 65 2d 66 6f 6c 64 65 64 2e 20 20 5e 4e  case-folded.  ^N
acf0: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
ad00: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
ad10: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
ad20: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
ad30: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  ess comparison..
ad40: 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>^<td valign=
ad50: 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c 74  top>RTRIM.    <t
ad60: 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  d>Like BINARY ex
ad70: 63 65 70 74 20 74 68 61 74 20 73 70 61 63 65 73  cept that spaces
ad80: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
ad90: 68 65 20 73 74 72 69 6e 67 20 61 72 65 20 65 6c  he string are el
ada0: 69 64 65 64 0a 20 20 20 20 20 20 20 20 70 72 69  ided.        pri
adb0: 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69 73 6f 6e  or to comparison
adc0: 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ..</table></bloc
add0: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
ade0: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
adf0: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
ae00: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
ae10: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
ae20: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
ae30: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
ae40: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
ae50: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
ae60: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
ae70: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
ae80: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
ae90: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
aea0: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
aeb0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
aec0: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
aed0: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
aee0: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
aef0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
af00: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
af10: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
af20: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
af30: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
af40: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
af50: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
af60: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
af70: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
af80: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
af90: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
afa0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
afb0: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
afc0: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
afd0: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
afe0: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
aff0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
b000: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
b010: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
b020: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
b030: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
b040: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 61  bles</h3>..<p>Ea
b050: 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20  ch ordinary SQL 
b060: 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74  table in the dat
b070: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
b080: 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 20 64  represented on d
b090: 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62  isk.by a table b
b0a0: 2d 74 72 65 65 2e 20 20 45 61 63 68 20 65 6e 74  -tree.  Each ent
b0b0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
b0c0: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
b0d0: 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74  ds to a row.of t
b0e0: 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 54  he SQL table.  T
b0f0: 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68  he [rowid] of th
b100: 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74  e SQL table is t
b110: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
b120: 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72  .integer key for
b130: 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74   each entry in t
b140: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e  he table b-tree.
b150: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e  </p>..<p>The con
b160: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51 4c  tent of each SQL
b170: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73 74   table row is st
b180: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
b190: 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69 72  base file by.fir
b1a0: 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  st combining the
b1b0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 76   values in the v
b1c0: 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20 69  arious columns i
b1d0: 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61 79  nto a byte array
b1e0: 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 66  .in the record f
b1f0: 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f 72  ormat, then stor
b200: 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61 72  ing that byte ar
b210: 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c 6f  ray as the paylo
b220: 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20 69  ad in.an entry i
b230: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
b240: 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20  ee.  ^The order 
b250: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
b260: 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20 73   record is.the s
b270: 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65 72  ame as the order
b280: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
b290: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65 66  he SQL table def
b2a0: 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61  inition..^When a
b2b0: 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74  n SQL table that
b2c0: 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e   includes an.[IN
b2d0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
b2e0: 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68  Y] column (which
b2f0: 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f   aliases the [ro
b300: 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a  wid]) then that.
b310: 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69  column appears i
b320: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20  n the record as 
b330: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e  a NULL value.  ^
b340: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
b350: 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65  ys use.the table
b360: 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68   b-tree key rath
b370: 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c  er than the NULL
b380: 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65   value when refe
b390: 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54  rencing the.[INT
b3a0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b3b0: 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  ] column.</p>..<
b3c0: 70 3e 5e 49 66 20 74 68 65 20 5b 61 66 66 69 6e  p>^If the [affin
b3d0: 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ity] of a column
b3e0: 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68 61   is REAL and tha
b3f0: 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  t column contain
b400: 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20 63  s a.value that c
b410: 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  an be converted 
b420: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
b430: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e  thout loss of in
b440: 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68  formation.(if th
b450: 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73  e value contains
b460: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 70   no fractional p
b470: 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20 74  art and is not t
b480: 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a 72  oo large to be.r
b490: 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e  epresented as an
b4a0: 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20 74   integer) then t
b4b0: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65  he column may be
b4c0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 72   stored in the r
b4d0: 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74 65  ecord.as an inte
b4e0: 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77 69  ger.  ^SQLite wi
b4f0: 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  ll convert the v
b500: 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f  alue back to flo
b510: 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e  ating.point when
b520: 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20 66   extracting it f
b530: 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c  rom the record.<
b540: 2f 70 3e 0a 0a 0a 3c 68 33 3e 32 2e 34 20 52 65  /p>...<h3>2.4 Re
b550: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
b560: 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 33 3e  SQL Indices</h3>
b570: 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69  ..<p>^Each SQL i
b580: 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20 65 78  ndex, whether ex
b590: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
b5a0: 64 20 76 69 61 20 61 20 5b 43 52 45 41 54 45 20  d via a [CREATE 
b5b0: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
b5c0: 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61  .or implied by a
b5d0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
b5e0: 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  nt, corresponds 
b5f0: 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  to an index b-tr
b600: 65 65 20 69 6e 20 74 68 65 0a 64 61 74 61 62 61  ee in the.databa
b610: 73 65 20 66 69 6c 65 2e 0a 5e 54 68 65 72 65 20  se file..^There 
b620: 69 73 20 6f 6e 65 20 65 6e 74 72 79 20 69 6e 20  is one entry in 
b630: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 66 6f 72  index b-tree for
b640: 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
b650: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
b660: 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74  able..^The key t
b670: 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  o an index b-tre
b680: 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63 6f  e is.a record co
b690: 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63 6f  mposed of the co
b6a0: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 62  lumns that are b
b6b0: 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f 6c  eing indexed fol
b6c0: 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 5b 72 6f  lowed by the.[ro
b6d0: 77 69 64 5d 20 6f 66 20 74 68 65 20 74 61 62 6c  wid] of the tabl
b6e0: 65 20 72 6f 77 2e 20 20 42 65 63 61 75 73 65 20  e row.  Because 
b6f0: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 61 20 74  every row in a t
b700: 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69 71 75  able has a uniqu
b710: 65 0a 72 6f 77 69 64 20 61 6e 64 20 61 6c 6c 20  e.rowid and all 
b720: 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
b730: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 6f 77   contain the row
b740: 69 64 2c 20 61 6c 6c 20 6b 65 79 73 20 69 6e 20  id, all keys in 
b750: 61 6e 20 69 6e 64 65 78 0a 61 72 65 20 75 6e 69  an index.are uni
b760: 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  que.</p>..<p>^Th
b770: 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d  ere is a one-to-
b780: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
b790: 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20 74 61  een rows in a ta
b7a0: 62 6c 65 20 61 6e 64 0a 65 6e 74 72 69 65 73 20  ble and.entries 
b7b0: 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20 61 73  in each index as
b7c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
b7d0: 61 74 20 74 61 62 6c 65 2e 0a 5e 43 6f 72 72 65  at table..^Corre
b7e0: 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e  sponding rows in
b7f0: 74 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20  t the index and 
b800: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68  table b-trees sh
b810: 61 72 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77  are the same row
b820: 69 64 0a 76 61 6c 75 65 2c 20 61 6e 64 20 63 6f  id.value, and co
b830: 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76  ntain the same v
b840: 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64  alue for all ind
b850: 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70  exed columns.</p
b860: 3e 0a 0a 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61  >..<h3>2.5 Stora
b870: 67 65 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61  ge Of The SQL Da
b880: 74 61 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68  tabase Schema</h
b890: 33 3e 0a 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f  3>..<p>^Page 1 o
b8a0: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
b8b0: 65 20 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61  e is the root pa
b8c0: 67 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d  ge of a table b-
b8d0: 74 72 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20  tree that.holds 
b8e0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
b8f0: 6e 61 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61  named "sqlite_ma
b900: 73 74 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74  ster" (or "sqlit
b910: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69  e_temp_master" i
b920: 6e 0a 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n.the case of a 
b930: 54 45 4d 50 20 64 61 74 61 62 61 73 65 29 20 77  TEMP database) w
b940: 68 69 63 68 20 73 74 6f 72 65 73 20 74 68 65 20  hich stores the 
b950: 63 6f 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73  complete.databas
b960: 65 20 73 63 68 65 6d 61 2e 20 20 5e 28 54 68 65  e schema.  ^(The
b970: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
b980: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
b990: 74 61 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69  table is as.if i
b9a0: 74 20 68 61 64 20 62 65 65 6e 20 63 72 65 61 74  t had been creat
b9b0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c  ed using the fol
b9c0: 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a  lowing SQL:</p>.
b9d0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
b9e0: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
b9f0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20  sqlite_master(. 
ba00: 20 74 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61   type text,.  na
ba10: 6d 65 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e  me text,.  tbl_n
ba20: 61 6d 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74  ame text,.  root
ba30: 70 61 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20  page integer,.  
ba40: 73 71 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72  sql text.);.</pr
ba50: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
ba60: 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  ^..<p>^The sqlit
ba70: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63  e_master table c
ba80: 6f 6e 74 61 69 6e 73 20 61 20 72 6f 77 20 66 6f  ontains a row fo
ba90: 72 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e  r each table, in
baa0: 64 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74  dex, view,.and t
bab0: 72 69 67 67 65 72 20 69 6e 20 74 68 65 20 64 61  rigger in the da
bac0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 65  tabase schema, e
bad0: 78 63 65 70 74 20 74 68 65 72 65 20 69 73 20 6e  xcept there is n
bae0: 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a  o entry for the.
baf0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
bb00: 62 6c 65 20 69 74 73 65 6c 66 2e 3c 2f 70 3e 0a  ble itself.</p>.
bb10: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
bb20: 5f 6d 61 73 74 65 72 2e 74 79 70 65 20 63 6f 6c  _master.type col
bb30: 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f 6e 65 0a  umn will be one.
bb40: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
bb50: 20 74 65 78 74 20 73 74 72 69 6e 67 73 3a 20 20   text strings:  
bb60: 27 74 61 62 6c 65 27 2c 20 27 69 6e 64 65 78 27  'table', 'index'
bb70: 2c 20 27 76 69 65 77 27 2c 20 6f 72 20 27 74 72  , 'view', or 'tr
bb80: 69 67 67 65 72 27 0a 61 63 63 6f 72 64 69 6e 67  igger'.according
bb90: 20 74 6f 20 74 68 65 20 74 79 70 65 20 6f 66 20   to the type of 
bba0: 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64 2e 20  object defined. 
bbb0: 20 5e 54 68 65 20 27 74 61 62 6c 65 27 20 73 74   ^The 'table' st
bbc0: 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66 6f 72  ring is used.for
bbd0: 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79 20 61   both ordinary a
bbe0: 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  nd [virtual tabl
bbf0: 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e  es].)^</p>..</p>
bc00: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
bc10: 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  ter.name column 
bc20: 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e 61  will hold the na
bc30: 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  me of the object
bc40: 2e 0a 5e 46 6f 72 20 69 6e 64 69 63 65 73 20 74  ..^For indices t
bc50: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
bc60: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79  cally created by
bc70: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
bc80: 52 59 20 4b 45 59 0a 63 6f 6e 73 74 72 61 69 6e  RY KEY.constrain
bc90: 74 73 2c 20 74 68 65 20 6e 61 6d 65 20 69 73 20  ts, the name is 
bca0: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
bcb0: 78 5f 54 41 42 4c 45 5f 4e 22 20 77 68 65 72 65  x_TABLE_N" where
bcc0: 20 54 41 42 4c 45 20 69 73 20 0a 72 65 70 6c 61   TABLE is .repla
bcd0: 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20  ced by the name 
bce0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
bcf0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  t contains the c
bd00: 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20  onstraint and N 
bd10: 0a 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62  .is an integer b
bd20: 65 67 69 6e 6e 69 6e 67 0a 77 69 74 68 20 31 20  eginning.with 1 
bd30: 61 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62  and increasing b
bd40: 79 20 6f 6e 65 20 77 69 74 68 20 65 61 63 68 20  y one with each 
bd50: 63 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 2e  constraint seen.
bd60: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  )^</p>..<p>The s
bd70: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c  qlite_master.tbl
bd80: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c  _name column hol
bd90: 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ds the name of a
bda0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74   table or view.t
bdb0: 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69  hat the object i
bdc0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
bdd0: 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65  h.  ^For a table
bde0: 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62   or view, the.tb
bdf0: 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73  l_name column is
be00: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e   a copy of the n
be10: 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f  ame column.  ^Fo
be20: 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20  r an index, the 
be30: 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20  tbl_name.is the 
be40: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
be50: 65 20 74 68 61 74 20 69 73 20 69 6e 64 65 78 65  e that is indexe
be60: 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67  d.  ^For a trigg
be70: 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65  er, the tbl_name
be80: 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74  .column stores t
be90: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
bea0: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61  able or view tha
beb0: 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69  t causes the tri
bec0: 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f  gger .to fire.</
bed0: 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  p>..<p>^(The sql
bee0: 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70  ite_master.rootp
bef0: 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  age column store
bf00: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
bf10: 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d  r of the root.b-
bf20: 74 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 61  tree page for ta
bf30: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
bf40: 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74  .)^  ^For rows t
bf50: 68 61 74 20 64 65 66 69 6e 65 20 76 69 65 77 73  hat define views
bf60: 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20  , triggers,.and 
bf70: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20  virtual tables, 
bf80: 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c  the rootpage col
bf90: 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c  umn is 0 or NULL
bfa0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
bfb0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
bfc0: 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  l column stores 
bfd0: 53 51 4c 20 74 65 78 74 20 74 68 61 74 20 64 65  SQL text that de
bfe0: 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65  scribes the.obje
bff0: 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65  ct.  This SQL te
c000: 78 74 20 69 73 20 61 20 5b 43 52 45 41 54 45 20  xt is a [CREATE 
c010: 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20  TABLE], [CREATE 
c020: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a  VIRTUAL TABLE],.
c030: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a  [CREATE INDEX],.
c040: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f  [CREATE VIEW], o
c050: 72 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  r [CREATE TRIGGE
c060: 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  R] statement tha
c070: 74 20 69 66 20 65 76 61 6c 75 61 74 65 64 20 61  t if evaluated a
c080: 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62  gainst.the datab
c090: 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74  ase file when it
c0a0: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
c0b0: 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61  abase of a [data
c0c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
c0d0: 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65 64  .would recreated
c0e0: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 20 20 54   the object.)  T
c0f0: 68 65 20 74 65 78 74 20 69 73 20 75 73 75 61 6c  he text is usual
c100: 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  ly a copy of the
c110: 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d   original.statem
c120: 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65 61  ent used to crea
c130: 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62 75  te the object bu
c140: 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61  t with normaliza
c150: 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73 6f  tions applied so
c160: 0a 74 68 61 74 20 74 68 65 20 74 65 78 74 20 63  .that the text c
c170: 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20 66  onforms to the f
c180: 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a  ollowing rules:.
c190: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43  .<ul>.<li>^The C
c1a0: 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49  REATE, TABLE, VI
c1b0: 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64  EW, TRIGGER, and
c1c0: 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20   INDEX keywords 
c1d0: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
c1e0: 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e  .of the statemen
c1f0: 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  t are converted 
c200: 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73  to all upper cas
c210: 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e  e letters..<li>^
c220: 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50  The TEMP or TEMP
c230: 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73  ORARY keyword is
c240: 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f   removed if it o
c250: 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20  ccurs after the 
c260: 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20  .initial CREATE 
c270: 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e  keyword..<li>^An
c280: 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  y database name 
c290: 71 75 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f  qualifier that o
c2a0: 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74  ccurs prior to t
c2b0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f  he name of the.o
c2c0: 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65 61  bject being crea
c2d0: 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a  ted is removed..
c2e0: 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61  <li>^Leading spa
c2f0: 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ces are removed.
c300: 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73  .<li>^All spaces
c310: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66   following the f
c320: 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64  irst two keyword
c330: 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
c340: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70  into a single.sp
c350: 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  ace..</ul>..<p>^
c360: 28 54 68 65 20 74 65 78 74 20 69 6e 20 74 68 65  (The text in the
c370: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73   sqlite_master.s
c380: 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63  ql column is a c
c390: 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69  opy of the origi
c3a0: 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65  nal.CREATE state
c3b0: 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74 20 63  ment text that c
c3c0: 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63  reated the objec
c3d0: 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c  t, except normal
c3e0: 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62 65  ized as.describe
c3f0: 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d  d above and as m
c400: 6f 64 69 66 69 65 64 20 62 79 20 73 75 62 73 65  odified by subse
c410: 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42  quent [ALTER TAB
c420: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 29  LE] statements.)
c430: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 46 6f 72 20  ^</p>..<p>^(For 
c440: 69 6e 64 69 63 65 73 20 74 68 61 74 20 61 72 65  indices that are
c450: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
c460: 72 65 61 74 65 64 20 62 79 20 55 4e 49 51 55 45  reated by UNIQUE
c470: 20 6f 72 0a 50 52 49 4d 41 52 59 20 4b 45 59 20   or.PRIMARY KEY 
c480: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65  constraints, the
c490: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73   sqlite_master.s
c4a0: 71 6c 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c  ql field is NULL
c4b0: 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68  .)^</p>...<tcl>h
c4c0: 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62  d_fragment rollb
c4d0: 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c  ackjournal {roll
c4e0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72  back journal for
c4f0: 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33  mat}</tcl>.<h2>3
c500: 2e 30 20 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20  .0 The Rollback 
c510: 4a 6f 75 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70  Journal</h2>..<p
c520: 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  >The rollback jo
c530: 75 72 6e 61 6c 20 69 73 20 61 20 66 69 6c 65 20  urnal is a file 
c540: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c550: 65 61 63 68 20 53 51 4c 69 74 65 20 64 61 74 61  each SQLite data
c560: 62 61 73 65 0a 66 69 6c 65 20 74 68 61 74 20 68  base.file that h
c570: 6f 6c 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  old information 
c580: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
c590: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
c5a0: 65 20 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c  e to its initial
c5b0: 0a 73 74 61 74 65 20 64 75 72 69 6e 67 20 74 68  .state during th
c5c0: 65 20 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72  e course of a tr
c5d0: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20  ansaction..^The 
c5e0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
c5f0: 20 66 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20   file is always 
c600: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73  located in the s
c610: 61 6d 65 20 0a 64 69 72 65 63 74 6f 72 79 20 61  ame .directory a
c620: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66  s the database.f
c630: 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20  ile and has the 
c640: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65  same name as the
c650: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
c660: 75 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69  ut with the stri
c670: 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c  ng."<tt>-journal
c680: 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e  </tt>" appended.
c690: 20 20 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79    There can only
c6a0: 20 62 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c   be a single rol
c6b0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73  lback journal.as
c6c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
c6d0: 67 69 76 65 20 64 61 74 61 62 61 73 65 20 61 6e  give database an
c6e0: 64 20 68 65 6e 63 65 20 74 68 65 72 65 20 63 61  d hence there ca
c6f0: 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72  n only be one wr
c700: 69 74 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite.transaction 
c710: 6f 70 65 6e 20 61 67 61 69 6e 73 74 20 61 20 73  open against a s
c720: 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20 61  ingle database a
c730: 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a  t one time.</p>.
c740: 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e 73 61 63  .<p>If a transac
c750: 74 69 6f 6e 20 69 73 20 61 62 6f 72 74 65 64 20  tion is aborted 
c760: 64 75 65 20 74 6f 20 61 6e 20 61 70 70 6c 69 63  due to an applic
c770: 61 74 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20  ation crash, an 
c780: 6f 70 65 72 61 74 69 6e 67 0a 73 79 73 74 65 6d  operating.system
c790: 20 63 72 61 73 68 2c 20 6f 72 20 61 20 68 61 72   crash, or a har
c7a0: 64 77 61 72 65 20 70 6f 77 65 72 20 66 61 69 6c  dware power fail
c7b0: 75 72 65 20 6f 72 20 63 72 61 73 68 2c 20 74 68  ure or crash, th
c7c0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
c7d0: 6d 61 79 0a 62 65 20 6c 65 66 74 20 69 6e 20 61  may.be left in a
c7e0: 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73  n inconsistent s
c7f0: 74 61 74 65 2e 20 20 5e 54 68 65 20 6e 65 78 74  tate.  ^The next
c800: 20 74 69 6d 65 20 53 51 4c 69 74 65 20 61 74 74   time SQLite att
c810: 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68  empts to open.th
c820: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  e database file,
c830: 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66   the presence of
c840: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
c850: 75 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20  urnal file will 
c860: 62 65 20 0a 64 65 74 65 63 74 65 64 20 61 6e 64  be .detected and
c870: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c   the journal wil
c880: 6c 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  l be automatical
c890: 6c 79 20 70 6c 61 79 65 64 20 62 61 63 6b 20 74  ly played back t
c8a0: 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61  o restore the.da
c8b0: 74 61 62 61 73 65 20 74 6f 20 69 74 73 20 73 74  tabase to its st
c8c0: 61 74 65 20 61 74 20 74 68 65 20 73 74 61 72 74  ate at the start
c8d0: 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65   of the incomple
c8e0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c  te transaction.<
c8f0: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62  /p>..<p>^A rollb
c900: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f  ack journal is o
c910: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
c920: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 20 69 74  o be valid if it
c930: 20 65 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74   exists and.cont
c940: 61 69 6e 73 20 61 20 76 61 6c 69 64 20 68 65 61  ains a valid hea
c950: 64 65 72 2e 20 20 48 65 6e 63 65 20 61 20 74 72  der.  Hence a tr
c960: 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20 62 65  ansaction can be
c970: 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e   committed in on
c980: 65 0a 6f 66 20 74 68 72 65 65 20 77 61 79 73 3a  e.of three ways:
c990: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 72  .<ol>.<li>^The r
c9a0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
c9b0: 66 69 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65  file can be dele
c9c0: 74 65 64 2c 0a 3c 6c 69 3e 5e 54 68 65 20 72 6f  ted,.<li>^The ro
c9d0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
c9e0: 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63  ile can be trunc
c9f0: 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e  ated to zero len
ca00: 67 74 68 2c 20 6f 72 0a 3c 6c 69 3e 5e 54 68 65  gth, or.<li>^The
ca10: 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
ca20: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
ca30: 63 61 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74  can be overwritt
ca40: 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20  en with.invalid 
ca50: 68 65 61 64 65 72 20 74 65 78 74 20 28 66 6f 72  header text (for
ca60: 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65   example, all ze
ca70: 72 6f 73 29 2e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65  ros)..</ol>.^The
ca80: 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66  se three ways of
ca90: 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72   committing a tr
caa0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73  ansaction corres
cab0: 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45  pond to the DELE
cac0: 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e  TE,.TRUNCATE, an
cad0: 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e  d PERSIST settin
cae0: 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  gs, respectively
caf0: 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61  , of the [journa
cb00: 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a  l_mode pragma]..
cb10: 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69  </p>...<p>A vali
cb20: 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  d rollback journ
cb30: 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  al begins with a
cb40: 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66   header in the f
cb50: 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a  ollowing format:
cb60: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
cb70: 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  i>Rollback Journ
cb80: 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  al Header Format
cb90: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
cba0: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
cbb0: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
cbc0: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
cbd0: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
cbe0: 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
cbf0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a   align=center>0.
cc00: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
cc10: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
cc20: 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72  8.    <td>Header
cc30: 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20   string:  0xd9, 
cc40: 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39  0xd5, 0x05, 0xf9
cc50: 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78  , 0x20, 0xa1, 0x
cc60: 36 33 2c 20 30 78 64 37 29 5e 0a 3c 74 72 3e 5e  63, 0xd7)^.<tr>^
cc70: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
cc80: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
cc90: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
cca0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
ccb0: 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61  .    <td>The "Pa
ccc0: 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20  ge Count" - The 
ccd0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
cce0: 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d  in the next segm
ccf0: 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ent of the .    
cd00: 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20      journal, or 
cd10: 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65  -1 to.        me
cd20: 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74  an all content t
cd30: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
cd40: 20 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74   file)^.<tr>^(<t
cd50: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
cd60: 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20  gn=center>12.   
cd70: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
cd80: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
cd90: 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20     <td>A random 
cda0: 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68  nonce for the ch
cdb0: 65 63 6b 73 75 6d 29 5e 0a 3c 74 72 3e 5e 28 3c  ecksum)^.<tr>^(<
cdc0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
cdd0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20  ign=center>16.  
cde0: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
cdf0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
ce00: 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20      <td>Initial 
ce10: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
ce20: 62 61 73 65 20 69 6e 20 70 61 67 65 73 29 5e 0a  base in pages)^.
ce30: 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
ce40: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ce50: 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  r>20.    <td val
ce60: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ce70: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
ce80: 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65  ize of a disk se
ce90: 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20  ctor assumed by 
cea0: 74 68 65 20 70 72 6f 63 65 73 73 20 74 68 61 74  the process that
ceb0: 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20   wrote this.    
cec0: 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c      journal.)^.<
ced0: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
cee0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
cef0: 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >24.    <td vali
cf00: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
cf10: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
cf20: 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  ze of pages in t
cf30: 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c  his journal.)^.<
cf40: 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
cf50: 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63  >..<p>^A rollbac
cf60: 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  k journal header
cf70: 20 69 73 20 70 61 64 64 65 64 20 77 69 74 68 20   is padded with 
cf80: 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65  zeros out to the
cf90: 20 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67   size of a .sing
cfa0: 6c 65 20 73 65 63 74 6f 72 20 28 61 73 20 64 65  le sector (as de
cfb0: 66 69 6e 65 64 20 62 79 20 74 68 65 20 73 65 63  fined by the sec
cfc0: 74 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72  tor size integer
cfd0: 20 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a   at offset 20)..
cfe0: 54 68 65 20 68 65 61 64 65 72 20 69 73 20 69 6e  The header is in
cff0: 20 61 20 73 65 63 74 6f 72 20 62 79 20 69 74 73   a sector by its
d000: 65 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20 61  elf so that if a
d010: 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75   power loss occu
d020: 72 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67  rs while.writing
d030: 20 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66   the sector, inf
d040: 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f  ormation that fo
d050: 6c 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65 72  llows the header
d060: 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75   will be.(hopefu
d070: 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c  lly) undamaged.<
d080: 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74  /p>..<p>^After t
d090: 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65  he header and ze
d0a0: 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a  ro padding are z
d0b0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65  ero or more page
d0c0: 20 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68   records.  ^Each
d0d0: 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f  .page record sto
d0e0: 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68  res a copy of th
d0f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70  e content of a p
d100: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
d110: 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72  abase file.befor
d120: 65 20 69 74 20 77 61 73 20 63 68 61 6e 67 65 64  e it was changed
d130: 2e 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67  .  ^The same pag
d140: 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72  e may not appear
d150: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a   more than once.
d160: 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20  within a single 
d170: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
d180: 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  ..To rollback an
d190: 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e   incomplete tran
d1a0: 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65  saction, a proce
d1b0: 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f  ss.has merely to
d1c0: 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61   read the rollba
d1d0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20  ck journal from 
d1e0: 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64  beginning to end
d1f0: 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73   and.write pages
d200: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f   found in the jo
d210: 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20  urnal back into 
d220: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
d230: 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72  e at the.appropr
d240: 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f  iate location.</
d250: 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64  p>..<p>Let the d
d260: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
d270: 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20  e (the value of 
d280: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
d290: 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65  ffset 24 .in the
d2a0: 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29   journal header)
d2b0: 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20   be N..Then the 
d2c0: 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65  format of a page
d2d0: 20 72 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f   record is as fo
d2e0: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  llows:</p>..<cen
d2f0: 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
d300: 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65   Journal Page Re
d310: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  cord Format</i><
d320: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
d330: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
d340: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
d350: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
d360: 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74 64  iption.<tr>^(<td
d370: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
d380: 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c  n=center>0.    <
d390: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
d3a0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
d3b0: 20 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75   <td>The page nu
d3c0: 6d 62 65 72 20 69 6e 20 74 68 65 20 64 61 74 61  mber in the data
d3d0: 62 61 73 65 20 66 69 6c 65 29 5e 0a 3c 74 72 3e  base file)^.<tr>
d3e0: 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
d3f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
d400: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
d410: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
d420: 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69 6e  N.    <td>Origin
d430: 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  al content of th
d440: 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f 20  e page prior to 
d450: 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
d460: 20 74 72 61 6e 73 61 63 74 69 6f 6e 29 5e 0a 3c   transaction)^.<
d470: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
d480: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
d490: 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c  >N+4.    <td val
d4a0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
d4b0: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
d4c0: 68 65 63 6b 73 75 6d 29 5e 0a 3c 2f 74 61 62 6c  hecksum)^.</tabl
d4d0: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
d4e0: 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d  p>^(The checksum
d4f0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
d500: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63  32-bit integer c
d510: 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f  omputed as follo
d520: 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
d530: 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  i>Initialize the
d540: 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65   checksum to the
d550: 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20   checksum nonce 
d560: 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74  value found in t
d570: 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he.journal heade
d580: 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a  r at offset 12..
d590: 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69  <li>Initialize i
d5a0: 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32  ndex X to be N-2
d5b0: 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74  00 (where N is t
d5c0: 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74  he size of a dat
d5d0: 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79  abase page.in by
d5e0: 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72  tes..<li>Interpr
d5f0: 65 74 20 74 68 65 20 66 6f 75 72 20 62 79 74 65  et the four byte
d600: 73 20 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e  s at offset X in
d610: 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20 61  to the page as a
d620: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
d630: 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an.unsigned inte
d640: 67 65 72 2e 20 20 41 64 64 20 74 68 65 20 76 61  ger.  Add the va
d650: 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65  lue of that inte
d660: 67 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b  ger to the check
d670: 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63  sum..<li>Subtrac
d680: 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c  e 200 from X..<l
d690: 69 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65  i>If X is greate
d6a0: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
d6b0: 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b  to zero, go back
d6c0: 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c   to step 3..</ol
d6d0: 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  >)^..<p>The chec
d6e0: 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73  ksum value is us
d6f0: 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ed to guard agai
d700: 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77  nst incomplete w
d710: 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e  rites of.a journ
d720: 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66  al page record f
d730: 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
d740: 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66   failure.  A dif
d750: 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f  ferent random no
d760: 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68  nce.is used each
d770: 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74   time a transact
d780: 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69  ion is started i
d790: 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d  n order to minim
d7a0: 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61  ize the risk.tha
d7b0: 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74  t unwritten sect
d7c0: 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61  ors might by cha
d7d0: 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61  nce contain data
d7e0: 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70   from the same p
d7f0: 61 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70  age.that was a p
d800: 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75  art of prior jou
d810: 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67  rnals.  By chang
d820: 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f  ing the nonce fo
d830: 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69  r each.transacti
d840: 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f  on, stale data o
d850: 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c  n disk will stil
d860: 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e  l generate an in
d870: 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d  correct checksum
d880: 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64  .and be detected
d890: 20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61   with high proba
d8a0: 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65  bility.  The che
d8b0: 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20  cksum only uses 
d8c0: 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a  a sparse sample.
d8d0: 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20  of 32-bit words 
d8e0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65  from the data re
d8f0: 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d  cord for perform
d900: 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64  ance reasons - d
d910: 65 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64  esign studies .d
d920: 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69  uring the planni
d930: 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c  ng phases of SQL
d940: 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64  ite 3.0.0 showed
d950: 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70  .a significant p
d960: 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69  erformance hit i
d970: 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74  n checksumming t
d980: 68 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c  he entire page.<
d990: 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
d9a0: 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
d9b0: 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20   at offset 8 in 
d9c0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
d9d0: 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69  er be M..^If M i
d9e0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
d9f0: 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d  ero then after M
da00: 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68   page records th
da10: 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d  e journal file.m
da20: 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65  ay be zero padde
da30: 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78  d out to the nex
da40: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
da50: 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e  e sector size an
da60: 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61  d another.journa
da70: 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20  l header may be 
da80: 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20  inserted.  ^All 
da90: 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20  journal headers 
daa0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a  within the same.
dab0: 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e  journal must con
dac0: 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  tain the same da
dad0: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
dae0: 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65   and sector size
daf0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20  .</p>..<p>^If M 
db00: 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69  is -1 in the ini
db10: 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61  tial journal hea
db20: 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  der, then the nu
db30: 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63  mber of page rec
db40: 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77  ords.that follow
db50: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
db60: 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61  computing how ma
db70: 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20  ny page records 
db80: 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20  will fit in.the 
db90: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
dba0: 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  of the remainder
dbb0: 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   of the journal 
dbc0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
dbd0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66  hd_fragment walf
dbe0: 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61  ormat {WAL forma
dbf0: 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30  t}</tcl>.<h2>4.0
dc00: 20 54 68 65 20 57 72 69 74 65 2d 41 68 65 61 64   The Write-Ahead
dc10: 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65   Log</h2>..<p>Be
dc20: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65  ginning with [ve
dc30: 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53 51  rsion 3.7.0], SQ
dc40: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 61 20  Lite supports a 
dc50: 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  new transaction.
dc60: 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73  control mechanis
dc70: 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c  m called "[WAL |
dc80: 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67   write-ahead log
dc90: 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e  ]" or "[WAL]"..^
dca0: 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65 20  When a database 
dcb0: 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  is in WAL mode, 
dcc0: 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  all connections 
dcd0: 74 6f 20 74 68 61 74 20 64 61 74 61 62 61 73 65  to that database
dce0: 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57 41   must.use the WA
dcf0: 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c 61  L.  ^A particula
dd00: 72 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  r database will 
dd10: 75 73 65 20 65 69 74 68 65 72 20 61 20 72 6f 6c  use either a rol
dd20: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72  lback journal.or
dd30: 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20   a WAL, but not 
dd40: 62 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d 65  both at the same
dd50: 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20   time..^The WAL 
dd60: 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65  is always locate
dd70: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69  d in the same di
dd80: 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64  rectory as the d
dd90: 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64  atabase.file and
dda0: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
ddb0: 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  me as the databa
ddc0: 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68  se file but with
ddd0: 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74   the string."<tt
dde0: 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65  >-wal</tt>" appe
ddf0: 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34  nded.</p>..<h3>4
de00: 2e 31 20 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d  .1 WAL File Form
de10: 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 57 41  at</h4>..<p>A WA
de20: 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20  L file consists 
de30: 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c 6c  of a header foll
de40: 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
de50: 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a 45  more "frames"..E
de60: 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72 64  ach frame record
de70: 73 20 74 68 65 20 72 65 76 69 73 65 64 20 63 6f  s the revised co
de80: 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c  ntent of a singl
de90: 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 0a  e page from the.
dea0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
deb0: 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74  All changes to t
dec0: 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
ded0: 72 65 63 6f 72 64 65 64 20 62 79 20 77 72 69 74  recorded by writ
dee0: 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20  ing.frames into 
def0: 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73 61  the WAL.  Transa
df00: 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68  ctions commit wh
df10: 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77 72  en a frame is wr
df20: 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61  itten that.conta
df30: 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72  ins a commit mar
df40: 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  ker.  ^A single 
df50: 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75 61  WAL can and usua
df60: 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64 20  lly does record 
df70: 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73 61  .multiple transa
df80: 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69  ctions.  Periodi
df90: 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65  cally, the conte
dfa0: 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
dfb0: 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62 61 63  .transferred bac
dfc0: 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
dfd0: 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f  ase file in an o
dfe0: 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20  peration called 
dff0: 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c  a."checkpoint".<
e000: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c  /p>..<p>^A singl
e010: 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20 62  e WAL file can b
e020: 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70 6c  e reused multipl
e030: 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74  e times.  ^In ot
e040: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 57  her words, the.W
e050: 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20 77  AL can fill up w
e060: 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20 74  ith frames and t
e070: 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69 6e  hen be checkpoin
e080: 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65 77  ted and then new
e090: 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65 72  .frames can over
e0a0: 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e  write the old on
e0b0: 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77 61  es.  ^A WAL alwa
e0c0: 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62 65  ys grows from be
e0d0: 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74  ginning.toward t
e0e0: 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73 75  he end.  Checksu
e0f0: 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73 20  ms and counters 
e100: 61 74 74 61 63 68 65 64 20 74 6f 20 65 61 63 68  attached to each
e110: 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64 20   frame are.used 
e120: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
e130: 63 68 20 66 72 61 6d 65 73 20 77 69 74 68 69 6e  ch frames within
e140: 20 74 68 65 20 57 41 4c 20 61 72 65 20 76 61 6c   the WAL are val
e150: 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72 65  id and which.are
e160: 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d 20   leftovers from 
e170: 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  prior checkpoint
e180: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  s.</p>..<p>^(The
e190: 20 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 33   WAL header is 3
e1a0: 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20  2 bytes in size 
e1b0: 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
e1c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69  the following ei
e1d0: 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33  ght.big-endian 3
e1e0: 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69  2-bit unsigned i
e1f0: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f  nteger values:</
e200: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
e210: 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  WAL Header Forma
e220: 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
e230: 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
e240: 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
e250: 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
e260: 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
e270: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
e280: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
e290: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e2a0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e2b0: 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72  <td>Magic number
e2c0: 2e 20 20 30 78 33 37 37 66 30 36 38 32 20 6f 72  .  0x377f0682 or
e2d0: 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72 3e   0x377f0683.<tr>
e2e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e2f0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
e300: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e310: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
e320: 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  td>File format v
e330: 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74  ersion.  Current
e340: 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e  ly 3007000..<tr>
e350: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e360: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
e370: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e380: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
e390: 74 64 3e 44 61 74 61 62 61 73 65 20 70 61 67 65  td>Database page
e3a0: 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a   size.  Example:
e3b0: 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61   1024.<tr><td va
e3c0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e3d0: 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
e3e0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e3f0: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
e400: 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e 63  eckpoint sequenc
e410: 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
e420: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e430: 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76  n=center>16<td v
e440: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e450: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
e460: 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20  >Salt-1: random 
e470: 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65 6e  integer incremen
e480: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
e490: 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64  eckpoint.<tr><td
e4a0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e4b0: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
e4c0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e4d0: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
e4e0: 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66 65  >Salt-2: a diffe
e4f0: 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62  rent random numb
e500: 65 72 20 66 6f 72 20 65 61 63 68 20 63 68 65 63  er for each chec
e510: 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76  kpoint.<tr><td v
e520: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e530: 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c  center>24<td val
e540: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e550: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
e560: 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74  hecksum-1: First
e570: 20 70 61 72 74 20 6f 66 20 61 20 63 68 65 63 6b   part of a check
e580: 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
e590: 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
e5a0: 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  der.<tr><td vali
e5b0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e5c0: 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e  ter>28<td valign
e5d0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e5e0: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
e5f0: 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70  ksum-2: Second p
e600: 61 72 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b  art of the check
e610: 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
e620: 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
e630: 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  der.</table>.</c
e640: 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d  enter>)^..<p>^Im
e650: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
e660: 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61 64  ing the wal-head
e670: 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  er are zero or m
e680: 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61 63  ore frames. ^Eac
e690: 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74 73  h.frame consists
e6a0: 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66 72   of a 24-byte fr
e6b0: 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f  ame-header follo
e6c0: 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67 65  wed by a <i>page
e6d0: 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a  -size</i> bytes.
e6e0: 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e 28  of page data. ^(
e6f0: 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  The frame-header
e700: 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64 69   is six big-endi
e710: 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e  an 32-bit unsign
e720: 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c 75  ed .integer valu
e730: 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  es, as follows:.
e740: 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c  .<center>.<i>WAL
e750: 20 46 72 61 6d 65 20 48 65 61 64 65 72 20 46 6f   Frame Header Fo
e760: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
e770: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
e780: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
e790: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
e7a0: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
e7b0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e7c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e7d0: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
e7e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
e7f0: 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62     <td>Page numb
e800: 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
e810: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e820: 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
e830: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e840: 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f  4.    <td>For co
e850: 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74 68  mmit records, th
e860: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
e870: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
e880: 61 67 65 73 0a 20 20 20 20 20 20 20 20 61 66 74  ages.        aft
e890: 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20  er the commit.  
e8a0: 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72 65  For all other re
e8b0: 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72  cords, zero..<tr
e8c0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
e8d0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
e8e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e8f0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e900: 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65  <td>Salt-1 copie
e910: 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
e920: 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
e930: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e940: 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
e950: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e960: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
e970: 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f 6d  lt-2 copied from
e980: 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a   the WAL header.
e990: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e9a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e9b0: 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  16<td valign=top
e9c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
e9d0: 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
e9e0: 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65 20  -1:  Cumulative 
e9f0: 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72 6f  checksum up thro
ea00: 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e  ugh and includin
ea10: 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e  g this page.<tr>
ea20: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ea30: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
ea40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ea50: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
ea60: 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
ea70: 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20   Second half of 
ea80: 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20 63  the cumulative c
ea90: 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65  hecksum..</table
eaa0: 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e  >.</center>)^..^
eab0: 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20 63  (<p>A frame is c
eac0: 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20  onsidered valid 
ead0: 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
eae0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
eaf0: 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75 65  ditions are.true
eb00: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
eb10: 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61 6e  <p>The salt-1 an
eb20: 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73 20  d salt-2 values 
eb30: 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61  in the frame-hea
eb40: 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20 20  der match.      
eb50: 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e 20   salt values in 
eb60: 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f  the wal-header</
eb70: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
eb80: 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
eb90: 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61 6c  ues in the final
eba0: 20 38 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   8 bytes of the 
ebb0: 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20 20  frame-header.   
ebc0: 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74 63      exactly matc
ebd0: 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 63  h the checksum c
ebe0: 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75 74  omputed consecut
ebf0: 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20  ively on the.   
ec00: 20 20 20 20 57 41 4c 20 68 65 61 64 65 72 20 61      WAL header a
ec10: 6e 64 20 74 68 65 20 66 69 72 73 74 20 38 20 62  nd the first 8 b
ec20: 79 74 65 73 20 61 6e 64 20 74 68 65 20 63 6f 6e  ytes and the con
ec30: 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d  tent of all fram
ec40: 65 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f 20  es.       up to 
ec50: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
ec60: 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 2e  e current frame.
ec70: 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c  </p></li></li>.<
ec80: 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  /ol>)^..<tcl>hd_
ec90: 66 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d  fragment walcksm
eca0: 20 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20 61   {WAL checksum a
ecb0: 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a  lgorithm}</tcl>.
ecc0: 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b 73 75 6d  <h3>4.2 Checksum
ecd0: 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a   Algorithm</h3>.
ece0: 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
ecf0: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
ed00: 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65  interpreting the
ed10: 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65   input as.an eve
ed20: 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69  n number of unsi
ed30: 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65  gned 32-bit inte
ed40: 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75  gers: x(0) throu
ed50: 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32  gh x(N)..^The 32
ed60: 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61 72  -bit integers ar
ed70: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20  e big-endian if 
ed80: 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72  the.magic number
ed90: 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34 20   in the first 4 
eda0: 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c  bytes of the WAL
edb0: 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37 37   header is 0x377
edc0: 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e  f0683 and.the in
edd0: 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c  tegers are littl
ede0: 65 2d 65 6e 64 69 61 6e 20 74 68 65 20 6d 61 67  e-endian the mag
edf0: 69 63 20 6e 75 6d 62 65 72 20 69 73 20 30 78 33  ic number is 0x3
ee00: 37 37 66 30 36 38 32 2e 0a 5e 54 68 65 20 63 68  77f0682..^The ch
ee10: 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 61 72  ecksum values ar
ee20: 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64 20  e always stored 
ee30: 69 6e 20 74 68 65 20 66 72 61 6d 65 20 68 65 61  in the frame hea
ee40: 64 65 72 20 69 6e 20 61 0a 62 69 67 2d 65 6e 64  der in a.big-end
ee50: 69 61 6e 20 66 6f 72 6d 61 74 20 72 65 67 61 72  ian format regar
ee60: 64 6c 65 73 73 20 6f 66 20 77 68 69 63 68 20 62  dless of which b
ee70: 79 74 65 20 6f 72 64 65 72 20 69 73 20 75 73 65  yte order is use
ee80: 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65  d to compute.the
ee90: 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a   checksum.</p>..
eea0: 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
eeb0: 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79 20 77  algorithm only w
eec0: 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65 6e 74  orks for content
eed0: 20 77 68 69 63 68 20 69 73 20 61 20 6d 75 6c 74   which is a mult
eee0: 69 70 6c 65 20 6f 66 0a 38 20 62 79 74 65 73 20  iple of.8 bytes 
eef0: 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e 20 6f  in length.  In o
ef00: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
ef10: 68 65 20 69 6e 70 75 74 73 20 61 72 65 20 78 28  he inputs are x(
ef20: 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 0a  0) through x(N).
ef30: 74 68 65 6e 20 4e 20 6d 75 73 74 20 62 65 20 6f  then N must be o
ef40: 64 64 2e 0a 5e 28 54 68 65 20 63 68 65 63 6b 73  dd..^(The checks
ef50: 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  um algorithm is 
ef60: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
ef70: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 20 0a  ockquote><pre> .
ef80: 73 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f 72 20  s0 = s1 = 0.for 
ef90: 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d 31 20  i from 0 to n-1 
efa0: 73 74 65 70 20 32 3a 0a 20 20 20 73 30 20 2b 3d  step 2:.   s0 +=
efb0: 20 78 28 69 29 20 2b 20 73 31 3b 0a 20 20 20 73   x(i) + s1;.   s
efc0: 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20 73 30  1 += x(i+1) + s0
efd0: 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73 75 6c  ;.endfor.# resul
efe0: 74 20 69 6e 20 73 30 20 61 6e 64 20 73 31 0a 3c  t in s0 and s1.<
eff0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
f000: 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75  e>)^..<p>^The ou
f010: 74 70 75 74 73 20 73 30 20 61 6e 64 20 73 31 20  tputs s0 and s1 
f020: 61 72 65 20 62 6f 74 68 20 77 65 69 67 68 74 65  are both weighte
f030: 64 20 63 68 65 63 6b 73 75 6d 73 20 75 73 69 6e  d checksums usin
f040: 67 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67  g Fibonacci weig
f050: 68 74 73 0a 69 6e 20 72 65 76 65 72 73 65 20 6f  hts.in reverse o
f060: 72 64 65 72 2e 20 20 28 5e 54 68 65 20 6c 61 72  rder.  (^The lar
f070: 67 65 73 74 20 46 69 62 6f 6e 61 63 63 69 20 77  gest Fibonacci w
f080: 65 69 67 68 74 20 6f 63 63 75 72 73 20 6f 6e 20  eight occurs on 
f090: 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
f0a0: 74 0a 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  t.of the sequenc
f0b0: 65 20 62 65 69 6e 67 20 73 75 6d 6d 65 64 2e 29  e being summed.)
f0c0: 20 20 5e 54 68 65 20 73 31 20 76 61 6c 75 65 20    ^The s1 value 
f0d0: 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62 69 74  spans all 32-bit
f0e0: 20 69 6e 74 65 67 65 72 0a 74 65 72 6d 73 20 6f   integer.terms o
f0f0: 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 77  f the sequence w
f100: 68 65 72 65 61 73 20 73 30 20 6f 6d 69 74 73 20  hereas s0 omits 
f110: 74 68 65 20 66 69 6e 61 6c 20 74 65 72 6d 2e 3c  the final term.<
f120: 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43 68 65  /p>..<h3>4.3 Che
f130: 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68  ckpoint Algorith
f140: 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61  m</h3>..<p>^On a
f150: 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74   [checkpoint], t
f160: 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20  he WAL is first 
f170: 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
f180: 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
f190: 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65  ing.the xSync me
f1a0: 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c  thod of the [sql
f1b0: 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20  ite3_io_methods 
f1c0: 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76  | VFS]. .^Then v
f1d0: 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  alid content of 
f1e0: 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73  the WAL is trans
f1f0: 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20  ferred into the 
f200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e  database file..^
f210: 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  Finally, the dat
f220: 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64  abase is flushed
f230: 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73   to persistent s
f240: 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f  torage using ano
f250: 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f  ther.xSync metho
f260: 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e  d call..The xSyn
f270: 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72  c operations ser
f280: 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72  ve as write barr
f290: 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65  iers - all write
f2a0: 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72  s launched.befor
f2b0: 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74  e the xSync must
f2c0: 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65   complete before
f2d0: 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20   any write that 
f2e0: 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74  launches after t
f2f0: 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e  he.xSync begins.
f300: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
f310: 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 2c  each checkpoint,
f320: 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
f330: 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20  salt-1 value is 
f340: 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 20  incremented and 
f350: 74 68 65 20 0a 73 61 6c 74 2d 32 20 76 61 6c 75  the .salt-2 valu
f360: 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e  e is randomized.
f370: 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20    This prevents 
f380: 6f 6c 64 20 61 6e 64 20 6e 65 77 20 66 72 61 6d  old and new fram
f390: 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 66 72  es in the WAL fr
f3a0: 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e 73 69 64 65  om.being conside
f3b0: 72 65 64 20 76 61 6c 69 64 20 61 74 20 74 68 65  red valid at the
f3c0: 20 73 61 6d 65 20 74 69 6d 65 20 61 6e 64 20 62   same time and b
f3d0: 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 69  eing checkpointi
f3e0: 6e 67 20 74 6f 67 65 74 68 65 72 0a 66 6f 6c 6c  ng together.foll
f3f0: 6f 77 69 6e 67 20 61 20 63 72 61 73 68 2e 3c 2f  owing a crash.</
f400: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
f410: 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41  ment walread {WA
f420: 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
f430: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20  }</tcl>.<h3>4.4 
f440: 52 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d  Reader Algorithm
f450: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72  </h3>..<p>^(To r
f460: 65 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20  ead a page from 
f470: 74 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61  the database (ca
f480: 6c 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65  ll it page numbe
f490: 72 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66  r P), a reader.f
f4a0: 69 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20  irst checks the 
f4b0: 57 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74  WAL to see if it
f4c0: 20 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50   contains page P
f4d0: 2e 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74  .  If so, then t
f4e0: 68 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e  he.last valid in
f4f0: 73 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50  stance of page P
f500: 20 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65   that is followe
f510: 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72  d by a commit fr
f520: 61 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d  ame.or is a comm
f530: 69 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20  it frame itself 
f540: 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75  becomes the valu
f550: 65 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74  e read.)^  ^If t
f560: 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20  he WAL.contains 
f570: 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67  no copies of pag
f580: 65 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c  e P that are val
f590: 69 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65  id and which are
f5a0: 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20   a commit.frame 
f5b0: 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20  or are followed 
f5c0: 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  by a commit fram
f5d0: 65 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69  e, then page P i
f5e0: 73 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20  s read from.the 
f5f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
f600: 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20  p>..<p>To start 
f610: 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69  a read transacti
f620: 6f 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72  on, the reader r
f630: 65 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78  ecords the index
f640: 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c   of the last.val
f650: 69 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20  id frame in the 
f660: 57 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72  WAL.  The reader
f670: 20 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72   uses this recor
f680: 64 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61  ded "mxFrame" va
f690: 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73  lue.for all subs
f6a0: 65 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72  equent read oper
f6b0: 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61  ations.  New tra
f6c0: 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  nsactions can be
f6d0: 20 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65   appended.to the
f6e0: 20 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e   WAL, but as lon
f6f0: 67 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20  g as the reader 
f700: 75 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61  uses its origina
f710: 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a  l mxFrame value.
f720: 61 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73  and ignores subs
f730: 65 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65  equently appende
f740: 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72  d content, the r
f750: 65 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61  eader will see a
f760: 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61   .consistent sna
f770: 70 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74  pshot of the dat
f780: 61 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e  abase from a sin
f790: 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  gle point in tim
f7a0: 65 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e  e.  .^This techn
f7b0: 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74  ique allows mult
f7c0: 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20  iple concurrent 
f7d0: 72 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20  readers to view 
f7e0: 64 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69  different .versi
f7f0: 6f 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ons of the datab
f800: 61 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75  ase content simu
f810: 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a  ltaneously.</p>.
f820: 0a 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61  .<p>The reader a
f830: 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20  lgorithm in the 
f840: 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
f850: 70 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63  phs works correc
f860: 74 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73  tly, but .becaus
f870: 65 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  e frames for pag
f880: 65 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61  e P can appear a
f890: 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74  nywhere within t
f8a0: 68 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64  he WAL, the.read
f8b0: 65 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74  er has to scan t
f8c0: 68 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f  he entire WAL lo
f8d0: 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50  oking for page P
f8e0: 20 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65   frames.  If the
f8f0: 0a 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d  .WAL is large (m
f900: 75 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65  ultiple megabyte
f910: 73 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68  s is typical) th
f920: 61 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73  at scan can be s
f930: 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65  low,.and read pe
f940: 72 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72  rformance suffer
f950: 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65  s.  ^To overcome
f960: 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61   this problem, a
f970: 20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73   separate.data s
f980: 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
f990: 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
f9a0: 20 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65   maintained to e
f9b0: 78 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72  xpedite the.sear
f9c0: 63 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66  ch for frames of
f9d0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61   a particular pa
f9e0: 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
f9f0: 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64  _fragment walind
fa00: 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e  exformat {wal-in
fa10: 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20  dex} {WAL-index 
fa20: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
fa30: 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78 20  3>4.5 WAL-Index 
fa40: 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e  Format</h3>..<p>
fa50: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68  Conceptually, th
fa60: 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
fa70: 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68  hared memory, th
fa80: 6f 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74  ough the current
fa90: 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74  .VFS implementat
faa0: 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70  ions use a mmapp
fab0: 65 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20  ed file for the 
fac0: 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65  wal-index.  ^The
fad0: 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73   mmapped.file is
fae0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
faf0: 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
fb00: 74 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74  tabase and has t
fb10: 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20  he same name.as 
fb20: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74  the database wit
fb30: 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74  h a "<tt>-shm</t
fb40: 74 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e  t>" suffix appen
fb50: 64 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68  ded.  Because.th
fb60: 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
fb70: 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51  hared memory, SQ
fb80: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
fb90: 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a  pport .[PRAGMA j
fba0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f  ournal_mode | jo
fbb0: 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20  urnal_mode=WAL] 
fbc0: 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69  .on a network fi
fbd0: 6c 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c  lesystem when cl
fbe0: 69 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66  ients are on dif
fbf0: 66 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e  ferent machines.
fc00: 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68  .All users of th
fc10: 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20  e database must 
fc20: 62 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65  be able to share
fc30: 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
fc40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75  .</p>..<p>The pu
fc50: 72 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c  rpose of the wal
fc60: 2d 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73  -index is to ans
fc70: 77 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f  wer this questio
fc80: 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a  n quickly:</p>..
fc90: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a  <blockquote><i>.
fca0: 47 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d  Given a page num
fcb0: 62 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69  ber P and a maxi
fcc0: 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  mum WAL frame in
fcd0: 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68  dex M,.return th
fce0: 65 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72  e largest WAL fr
fcf0: 61 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61  ame index for pa
fd00: 67 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e  ge P that does n
fd10: 6f 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72  ot exceed M, .or
fd20: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   return NULL if 
fd30: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61  there are no fra
fd40: 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74  mes for page P t
fd50: 68 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65  hat do not excee
fd60: 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b  d M..</i></block
fd70: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c  quote>..<p>The <
fd80: 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e  i>M</i> value in
fd90: 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61   the previous pa
fda0: 72 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22  ragraph is the "
fdb0: 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64  mxFrame" value.d
fdc0: 65 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72  efined in [WAL r
fdd0: 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20  ead algorithm | 
fde0: 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61  section 4.4] tha
fdf0: 74 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65  t is read at the
fe00: 20 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61   start .of a tra
fe10: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69  nsaction and whi
fe20: 63 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d  ch defines the m
fe30: 61 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f  aximum frame fro
fe40: 6d 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a  m the WAL that .
fe50: 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20  the reader will 
fe60: 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  use.</p>..<p>The
fe70: 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72   wal-index is tr
fe80: 61 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20  ansient.  After 
fe90: 61 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c  a crash, the wal
fea0: 2d 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73  -index is.recons
feb0: 74 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tructed from the
fec0: 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69   original WAL fi
fed0: 6c 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73  le.  ^The VFS is
fee0: 20 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74   required.to eit
fef0: 68 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20  her truncate or 
ff00: 7a 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20  zero the header 
ff10: 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
ff20: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63   when the last.c
ff30: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20  onnection to it 
ff40: 63 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65  closes.  Because
ff50: 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
ff60: 73 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20  s transient, it 
ff70: 63 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69  can.use an archi
ff80: 74 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63  tecture-specific
ff90: 20 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73   format; it does
ffa0: 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20   not have to be 
ffb0: 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a  cross-platform..
ffc0: 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68  Hence, unlike th
ffd0: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57  e database and W
ffe0: 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20  AL file formats 
fff0: 77 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20  which store all 
10000 76 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e  values.as big en
10010 64 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e  dian, the wal-in
10020 64 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69  dex stores multi
10030 2d 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20  -byte values in 
10040 74 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20  the native.byte 
10050 6f 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73  order of the hos
10060 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a  t computer.</p>.
10070 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
10080 74 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77  t is concerned w
10090 69 74 68 20 74 68 65 20 70 65 72 73 69 73 74 20  ith the persist 
100a0 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
100b0 61 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20  abase.file, and 
100c0 73 69 6e 63 65 20 74 68 65 20 77 61 6c 2d 69 6e  since the wal-in
100d0 64 65 78 20 69 73 20 61 20 74 72 61 6e 73 69 65  dex is a transie
100e0 6e 74 20 73 74 72 75 63 74 75 72 65 2c 20 6e 6f  nt structure, no
100f0 20 66 75 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d   further .inform
10100 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
10110 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61  format of the wa
10120 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62 65 20  l-index will be 
10130 70 72 6f 76 69 64 65 64 20 68 65 72 65 2e 0a 43  provided here..C
10140 6f 6d 70 6c 65 74 65 20 64 65 74 61 69 6c 73 20  omplete details 
10150 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  on the format of
10160 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 61   the wal-index a
10170 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
10180 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20  hin.comments in 
10190 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20 63 6f  SQLite source co
101a0 64 65 2e 3c 2f 70 3e 0a                          de.</p>.