Documentation Source Text

Hex Artifact Content
Login

Artifact 0eedb970ced4bc2441a493d91af847f439d2634c8a2ae1bcfe77f19ceb94f03b:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 62 61 73 65 20  <title>Database 
0010: 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 74 69 74  File Format</tit
0020: 6c 65 3e 0a 3c 61 6c 74 2d 74 69 74 6c 65 3e 4f  le>.<alt-title>O
0030: 6e 2d 44 69 73 6b 20 46 6f 72 6d 61 74 3c 2f 61  n-Disk Format</a
0040: 6c 74 2d 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  lt-title>.<tcl>h
0050: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 66 69 6c 65  d_keywords {file
0060: 20 66 6f 72 6d 61 74 7d 20 7b 73 65 63 6f 6e 64   format} {second
0070: 20 65 64 69 74 69 6f 6e 20 66 69 6c 65 20 66 6f   edition file fo
0080: 72 6d 61 74 20 64 6f 63 75 6d 65 6e 74 7d 3c 2f  rmat document}</
0090: 74 63 6c 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f  tcl>..<table_of_
00a0: 63 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 70 3e 54 68  contents>..<p>Th
00b0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00c0: 72 69 62 65 73 20 61 6e 64 20 64 65 66 69 6e 65  ribes and define
00d0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 64 61  s the on-disk da
00e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 6d  tabase file.form
00f0: 61 74 20 75 73 65 64 20 62 79 20 61 6c 6c 20 72  at used by all r
0100: 65 6c 65 61 73 65 73 20 6f 66 20 53 51 4c 69 74  eleases of SQLit
0110: 65 20 73 69 6e 63 65 20 0a 76 65 72 73 69 6f 6e  e since .version
0120: 20 33 2e 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a   3.0.0 ([dateof:
0130: 33 2e 30 2e 30 5d 29 2e 3c 2f 70 3e 0a 0a 3c 68  3.0.0]).</p>..<h
0140: 31 3e 54 68 65 20 44 61 74 61 62 61 73 65 20 46  1>The Database F
0150: 69 6c 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ile</h1>..<p>The
0160: 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65 20   complete state 
0170: 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  of an SQLite dat
0180: 61 62 61 73 65 20 69 73 20 75 73 75 61 6c 6c 79  abase is usually
0190: 0a 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 20  .contained in a 
01a0: 73 69 6e 67 6c 65 20 66 69 6c 65 20 6f 6e 20 64  single file on d
01b0: 69 73 6b 20 63 61 6c 6c 65 64 20 74 68 65 20 22  isk called the "
01c0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
01d0: 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 75 72  le".</p>..<p>Dur
01e0: 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
01f0: 6e 2c 20 53 51 4c 69 74 65 20 73 74 6f 72 65 73  n, SQLite stores
0200: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
0210: 72 6d 61 74 69 6f 6e 20 0a 69 6e 20 61 20 73 65  rmation .in a se
0220: 63 6f 6e 64 20 66 69 6c 65 20 63 61 6c 6c 65 64  cond file called
0230: 20 74 68 65 20 22 72 6f 6c 6c 62 61 63 6b 20 6a   the "rollback j
0240: 6f 75 72 6e 61 6c 22 2c 20 6f 72 20 69 66 20 53  ournal", or if S
0250: 51 4c 69 74 65 20 69 73 20 69 6e 0a 5b 57 41 4c  QLite is in.[WAL
0260: 20 6d 6f 64 65 5d 2c 20 61 20 77 72 69 74 65 2d   mode], a write-
0270: 61 68 65 61 64 20 6c 6f 67 20 66 69 6c 65 2e 0a  ahead log file..
0280: 49 66 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  If the applicati
0290: 6f 6e 20 6f 72 0a 68 6f 73 74 20 63 6f 6d 70 75  on or.host compu
02a0: 74 65 72 20 63 72 61 73 68 65 73 20 62 65 66 6f  ter crashes befo
02b0: 72 65 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  re the transacti
02c0: 6f 6e 20 63 6f 6d 70 6c 65 74 65 73 2c 20 74 68  on completes, th
02d0: 65 6e 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 0a  en the rollback.
02e0: 6a 6f 75 72 6e 61 6c 20 6f 72 20 77 72 69 74 65  journal or write
02f0: 2d 61 68 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61  -ahead log conta
0300: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
0310: 6e 65 65 64 65 64 20 0a 74 6f 20 72 65 73 74 6f  needed .to resto
0320: 72 65 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  re the main data
0330: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 61 20 63  base file to a c
0340: 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  onsistent state.
0350: 20 20 57 68 65 6e 20 61 20 72 6f 6c 6c 62 61 63    When a rollbac
0360: 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 77 72  k .journal or wr
0370: 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 63 6f  ite-ahead log co
0380: 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
0390: 6f 6e 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  on necessary for
03a0: 20 72 65 63 6f 76 65 72 69 6e 67 20 0a 74 68 65   recovering .the
03b0: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
03c0: 74 61 62 61 73 65 2c 20 74 68 65 79 20 61 72 65  tabase, they are
03d0: 20 63 61 6c 6c 65 64 20 61 20 22 68 6f 74 20 6a   called a "hot j
03e0: 6f 75 72 6e 61 6c 22 20 6f 72 20 22 68 6f 74 20  ournal" or "hot 
03f0: 57 41 4c 20 66 69 6c 65 22 2e 0a 48 6f 74 20 6a  WAL file"..Hot j
0400: 6f 75 72 6e 61 6c 73 20 61 6e 64 20 57 41 4c 20  ournals and WAL 
0410: 66 69 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 61  files are only a
0420: 20 66 61 63 74 6f 72 20 64 75 72 69 6e 67 20 65   factor during e
0430: 72 72 6f 72 20 72 65 63 6f 76 65 72 79 0a 73 63  rror recovery.sc
0440: 65 6e 61 72 69 6f 73 20 61 6e 64 20 73 6f 20 61  enarios and so a
0450: 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c 20 62 75 74  re uncommon, but
0460: 20 74 68 65 79 20 61 72 65 20 70 61 72 74 20 6f   they are part o
0470: 66 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 61  f the state of a
0480: 6e 20 53 51 4c 69 74 65 0a 64 61 74 61 62 61 73  n SQLite.databas
0490: 65 20 61 6e 64 20 73 6f 20 63 61 6e 6e 6f 74 20  e and so cannot 
04a0: 62 65 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 69  be ignored.  Thi
04b0: 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 66 69 6e  s document defin
04c0: 65 73 20 74 68 65 20 66 6f 72 6d 61 74 0a 6f 66  es the format.of
04d0: 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
04e0: 6e 61 6c 20 61 6e 64 20 74 68 65 20 77 72 69 74  nal and the writ
04f0: 65 2d 61 68 65 61 64 20 6c 6f 67 20 66 69 6c 65  e-ahead log file
0500: 2c 20 62 75 74 20 74 68 65 20 66 6f 63 75 73 20  , but the focus 
0510: 69 73 0a 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  is.on the main d
0520: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
0530: 3e 0a 0a 3c 68 32 3e 50 61 67 65 73 3c 2f 68 32  >..<h2>Pages</h2
0540: 3e 0a 0a 3c 70 3e 54 68 65 20 6d 61 69 6e 20 64  >..<p>The main d
0550: 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 6e  atabase file con
0560: 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 6f 72 20  sists of one or 
0570: 6d 6f 72 65 20 70 61 67 65 73 2e 20 20 5e 54 68  more pages.  ^Th
0580: 65 20 73 69 7a 65 20 6f 66 20 61 0a 70 61 67 65  e size of a.page
0590: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
05a0: 77 6f 20 62 65 74 77 65 65 6e 20 35 31 32 20 61  wo between 512 a
05b0: 6e 64 20 36 35 35 33 36 20 69 6e 63 6c 75 73 69  nd 65536 inclusi
05c0: 76 65 2e 20 20 41 6c 6c 20 70 61 67 65 73 20 77  ve.  All pages w
05d0: 69 74 68 69 6e 0a 74 68 65 20 73 61 6d 65 20 64  ithin.the same d
05e0: 61 74 61 62 61 73 65 20 61 72 65 20 74 68 65 20  atabase are the 
05f0: 73 61 6d 65 20 73 69 7a 65 2e 20 20 5e 54 68 65  same size.  ^The
0600: 20 70 61 67 65 20 73 69 7a 65 20 66 6f 72 20 61   page size for a
0610: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 69   database file.i
0620: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
0630: 74 68 65 20 32 2d 62 79 74 65 20 69 6e 74 65 67  the 2-byte integ
0640: 65 72 20 6c 6f 63 61 74 65 64 20 61 74 20 61 6e  er located at an
0650: 20 6f 66 66 73 65 74 20 6f 66 0a 31 36 20 62 79   offset of.16 by
0660: 74 65 73 20 66 72 6f 6d 20 74 68 65 20 62 65 67  tes from the beg
0670: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
0680: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
0690: 0a 0a 3c 70 3e 50 61 67 65 73 20 61 72 65 20 6e  ..<p>Pages are n
06a0: 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
06b0: 67 20 77 69 74 68 20 31 2e 20 20 54 68 65 20 6d  g with 1.  The m
06c0: 61 78 69 6d 75 6d 20 70 61 67 65 20 6e 75 6d 62  aximum page numb
06d0: 65 72 20 69 73 0a 32 31 34 37 34 38 33 36 34 36  er is.2147483646
06e0: 20 28 32 3c 73 75 70 3e 3c 73 6d 61 6c 6c 3e 33   (2<sup><small>3
06f0: 31 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20  1</small></sup> 
0700: 2d 20 32 29 2e 20 20 54 68 65 20 6d 69 6e 69 6d  - 2).  The minim
0710: 75 6d 20 73 69 7a 65 0a 53 51 4c 69 74 65 20 64  um size.SQLite d
0720: 61 74 61 62 61 73 65 20 69 73 20 61 20 73 69 6e  atabase is a sin
0730: 67 6c 65 20 35 31 32 2d 62 79 74 65 20 70 61 67  gle 512-byte pag
0740: 65 2e 0a 54 68 65 20 6d 61 78 69 6d 75 6d 20 73  e..The maximum s
0750: 69 7a 65 20 64 61 74 61 62 61 73 65 20 77 6f 75  ize database wou
0760: 6c 64 20 62 65 20 32 31 34 37 34 38 33 36 34 36  ld be 2147483646
0770: 20 70 61 67 65 73 20 61 74 20 36 35 35 33 36 20   pages at 65536 
0780: 62 79 74 65 73 20 70 65 72 0a 70 61 67 65 20 6f  bytes per.page o
0790: 72 20 31 34 30 2c 37 33 37 2c 34 38 38 2c 32 32  r 140,737,488,22
07a0: 34 2c 32 35 36 20 62 79 74 65 73 20 28 61 62 6f  4,256 bytes (abo
07b0: 75 74 20 31 34 30 20 74 65 72 61 62 79 74 65 73  ut 140 terabytes
07c0: 29 2e 20 20 55 73 75 61 6c 6c 79 20 53 51 4c 69  ).  Usually SQLi
07d0: 74 65 20 77 69 6c 6c 0a 68 69 74 20 74 68 65 20  te will.hit the 
07e0: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 73 69 7a  maximum file siz
07f0: 65 20 6c 69 6d 69 74 20 6f 66 20 74 68 65 20 75  e limit of the u
0800: 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79  nderlying filesy
0810: 73 74 65 6d 20 6f 72 20 64 69 73 6b 0a 68 61 72  stem or disk.har
0820: 64 77 61 72 65 20 6c 6f 6e 67 20 62 65 66 6f 72  dware long befor
0830: 65 20 69 74 20 68 69 74 73 20 69 74 73 20 6f 77  e it hits its ow
0840: 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69 7a 65 20  n internal size 
0850: 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  limit.</p>..<p>I
0860: 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c 20 53 51  n common use, SQ
0870: 4c 69 74 65 20 64 61 74 61 62 61 73 65 73 20 74  Lite databases t
0880: 65 6e 64 20 74 6f 20 72 61 6e 67 65 20 69 6e 20  end to range in 
0890: 73 69 7a 65 20 66 72 6f 6d 20 61 20 66 65 77 20  size from a few 
08a0: 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20 61 20 66  kilobytes.to a f
08b0: 65 77 20 67 69 67 61 62 79 74 65 73 2c 20 74 68  ew gigabytes, th
08c0: 6f 75 67 68 20 74 65 72 61 62 79 74 65 2d 73 69  ough terabyte-si
08d0: 7a 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ze SQLite databa
08e0: 73 65 73 20 61 72 65 20 6b 6e 6f 77 6e 20 74 6f  ses are known to
08f0: 20 65 78 69 73 74 0a 69 6e 20 70 72 6f 64 75 63   exist.in produc
0900: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 74  tion.</p>..<p>At
0910: 20 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20 74 69   any point in ti
0920: 6d 65 2c 20 65 76 65 72 79 20 70 61 67 65 20 69  me, every page i
0930: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
0940: 61 73 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65  ase has a single
0950: 0a 75 73 65 20 77 68 69 63 68 20 69 73 20 6f 6e  .use which is on
0960: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
0970: 6e 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65  ng:.<ul>.<li>The
0980: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 0a   lock-byte page.
0990: 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70  <li>A freelist p
09a0: 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 66  age.<ul>.<li>A f
09b0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
09c0: 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73  ge.<li>A freelis
09d0: 74 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c  t leaf page.</ul
09e0: 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 70  >.<li>A b-tree p
09f0: 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 74  age.<ul>.<li>A t
0a00: 61 62 6c 65 20 62 2d 74 72 65 65 20 69 6e 74 65  able b-tree inte
0a10: 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 20  rior page.<li>A 
0a20: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61  table b-tree lea
0a30: 66 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e  f page.<li>An in
0a40: 64 65 78 20 62 2d 74 72 65 65 20 69 6e 74 65 72  dex b-tree inter
0a50: 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20  ior page.<li>An 
0a60: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6c 65 61  index b-tree lea
0a70: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0a80: 3e 41 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  >A payload overf
0a90: 6c 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41 20 70  low page.<li>A p
0aa0: 6f 69 6e 74 65 72 20 6d 61 70 20 70 61 67 65 0a  ointer map page.
0ab0: 3c 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  </ul>.</p>..<p>^
0ac0: 41 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d 20 61  All reads from a
0ad0: 6e 64 20 77 72 69 74 65 73 20 74 6f 20 74 68 65  nd writes to the
0ae0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
0af0: 69 6c 65 20 62 65 67 69 6e 20 61 74 20 61 20 70  ile begin at a p
0b00: 61 67 65 0a 62 6f 75 6e 64 61 72 79 20 61 6e 64  age.boundary and
0b10: 20 61 6c 6c 20 77 72 69 74 65 73 20 61 72 65 20   all writes are 
0b20: 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
0b30: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69  r of pages in si
0b40: 7a 65 2e 20 20 5e 52 65 61 64 73 0a 61 72 65 20  ze.  ^Reads.are 
0b50: 61 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61 6e 20  also usually an 
0b60: 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f  integer number o
0b70: 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2c  f pages in size,
0b80: 20 77 69 74 68 20 74 68 65 20 6f 6e 65 20 65 78   with the one ex
0b90: 63 65 70 74 69 6f 6e 0a 74 68 61 74 20 77 68 65  ception.that whe
0ba0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n the database i
0bb0: 73 20 66 69 72 73 74 20 6f 70 65 6e 65 64 2c 20  s first opened, 
0bc0: 74 68 65 20 66 69 72 73 74 20 31 30 30 20 62 79  the first 100 by
0bd0: 74 65 73 20 6f 66 20 74 68 65 0a 64 61 74 61 62  tes of the.datab
0be0: 61 73 65 20 66 69 6c 65 20 28 74 68 65 20 64 61  ase file (the da
0bf0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
0c00: 65 72 29 20 61 72 65 20 72 65 61 64 20 61 73 20  er) are read as 
0c10: 61 20 73 75 62 2d 70 61 67 65 20 73 69 7a 65 20  a sub-page size 
0c20: 75 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42  unit.</p>..<p>^B
0c30: 65 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f 72 6d  efore any inform
0c40: 61 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20 70 61  ation-bearing pa
0c50: 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ge of the databa
0c60: 73 65 20 69 73 20 6d 6f 64 69 66 69 65 64 2c 20  se is modified, 
0c70: 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 75 6e  .the original un
0c80: 6d 6f 64 69 66 69 65 64 20 63 6f 6e 74 65 6e 74  modified content
0c90: 20 6f 66 20 74 68 61 74 20 70 61 67 65 20 69 73   of that page is
0ca0: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68   written into th
0cb0: 65 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  e .rollback jour
0cc0: 6e 61 6c 2e 20 20 49 66 20 61 20 74 72 61 6e 73  nal.  If a trans
0cd0: 61 63 74 69 6f 6e 20 69 73 20 69 6e 74 65 72 72  action is interr
0ce0: 75 70 74 65 64 20 61 6e 64 20 6e 65 65 64 73 20  upted and needs 
0cf0: 74 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20 62 61  to be .rolled ba
0d00: 63 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ck, the rollback
0d10: 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74 68 65   journal can the
0d20: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73  n be used to res
0d30: 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73  tore the.databas
0d40: 65 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61  e to its origina
0d50: 6c 20 73 74 61 74 65 2e 20 20 5e 46 72 65 65 6c  l state.  ^Freel
0d60: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 62  ist leaf pages b
0d70: 65 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61 74 69  ear no.informati
0d80: 6f 6e 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 65  on that would ne
0d90: 65 64 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65  ed to be restore
0da0: 64 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20  d on a rollback 
0db0: 61 6e 64 20 73 6f 20 74 68 65 79 0a 61 72 65 20  and so they.are 
0dc0: 6e 6f 74 20 77 72 69 74 74 65 6e 20 74 6f 20 74  not written to t
0dd0: 68 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69 6f 72  he journal prior
0de0: 20 74 6f 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e   to modification
0df0: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 72 65  , in order to.re
0e00: 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f  duce disk I/O.</
0e10: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
0e20: 6d 65 6e 74 20 64 61 74 61 62 61 73 65 5f 68 65  ment database_he
0e30: 61 64 65 72 20 7b 64 61 74 61 62 61 73 65 20 68  ader {database h
0e40: 65 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  eader}</tcl>.<h2
0e50: 3e 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65  >The Database He
0e60: 61 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  ader</h2>..<p>Th
0e70: 65 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65  e first 100 byte
0e80: 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
0e90: 65 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20  e file comprise 
0ea0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0eb0: 65 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20  e .header.  The 
0ec0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
0ed0: 61 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20  ader is divided 
0ee0: 69 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73  into fields as s
0ef0: 68 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c  hown by.the tabl
0f00: 65 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75  e below.  All mu
0f10: 6c 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69  ltibyte fields i
0f20: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
0f30: 69 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73  ile header are.s
0f40: 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d  tored with the m
0f50: 6f 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20  ost significant 
0f60: 62 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d  byte first (big-
0f70: 65 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63  endian).</p>..<c
0f80: 65 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61  enter>.<i>Databa
0f90: 73 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  se Header Format
0fa0: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
0fb0: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
0fc0: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
0fd0: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
0fe0: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
0ff0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1000: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
1010: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1020: 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61  n=center>16<td a
1030: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68  lign=left>.The h
1040: 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53  eader string: "S
1050: 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30  QLite format 3\0
1060: 30 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  00".<tr><td vali
1070: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1080: 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
1090: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10a0: 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>2<td align=lef
10b0: 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20  t>.The database 
10c0: 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74  page size in byt
10d0: 65 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70  es.  Must be a p
10e0: 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77  ower of two betw
10f0: 65 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36  een 512.and 3276
1100: 38 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20  8 inclusive, or 
1110: 74 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72  the value 1 repr
1120: 65 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20  esenting a page 
1130: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c  size of 65536..<
1140: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1150: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1160: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
1170: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
1180: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1190: 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20  le format write 
11a0: 76 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20  version.  1 for 
11b0: 6c 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57  legacy; 2 for [W
11c0: 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  AL]..<tr><td val
11d0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
11e0: 6e 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67  nter>19<td valig
11f0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1200: 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>1<td align=le
1210: 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20  ft>.File format 
1220: 72 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31  read version.  1
1230: 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66   for legacy; 2 f
1240: 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74  or [WAL]..<tr><t
1250: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1260: 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20  gn=center>20<td 
1270: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1280: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
1290: 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f  gn=left>.Bytes o
12a0: 66 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76  f unused "reserv
12b0: 65 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65  ed" space at the
12c0: 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67   end of each pag
12d0: 65 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c  e.  Usually 0..<
12e0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1300: 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  1<td valign=top 
1310: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
1320: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61  d align=left>.Ma
1330: 78 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  ximum embedded p
1340: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e  ayload fraction.
1350: 20 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74    Must be 64..<t
1360: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1370: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32   align=center>22
1380: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1390: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
13a0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e   align=left>.Min
13b0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
13c0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
13d0: 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72   Must be 32..<tr
13e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13f0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c  align=center>23<
1400: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1410: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1420: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66  align=left>.Leaf
1430: 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f   payload fractio
1440: 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a  n.  Must be 32..
1450: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1460: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1470: 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  24<td valign=top
1480: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1490: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46  td align=left>.F
14a0: 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ile change count
14b0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
14c0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14d0: 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e  ter>28<td valign
14e0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14f0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1500: 74 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64  t>.Size of the d
1510: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20  atabase file in 
1520: 70 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d  pages.  The "in-
1530: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
1540: 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76  size"..<tr><td v
1550: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1560: 63 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c  center>32<td val
1570: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1580: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1590: 6c 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65  left>.Page numbe
15a0: 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66  r of the first f
15b0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
15c0: 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ge..<tr><td vali
15d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
15e0: 74 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e  ter>36<td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1610: 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  t>.Total number 
1620: 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65  of freelist page
1630: 73 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  s..<tr><td valig
1640: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1650: 65 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>40<td valign=
1660: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1670: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1680: 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  >.The schema coo
1690: 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  kie..<tr><td val
16a0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
16b0: 6e 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67  nter>44<td valig
16c0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
16d0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
16e0: 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66  ft>.The schema f
16f0: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53  ormat number.  S
1700: 75 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20  upported schema 
1710: 66 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32  formats are 1, 2
1720: 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e  , 3, and 4..<tr>
1730: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1740: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74  lign=center>48<t
1750: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1760: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1770: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75  lign=left>.Defau
1780: 6c 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  lt page cache si
1790: 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ze..<tr><td vali
17a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
17b0: 74 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e  ter>52<td valign
17c0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
17d0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
17e0: 74 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62  t>.The page numb
17f0: 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  er of the larges
1800: 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  t root b-tree pa
1810: 67 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d  ge when in auto-
1820: 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d  vacuum or.increm
1830: 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64  ental-vacuum mod
1840: 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65  es, or zero othe
1850: 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  rwise..<tr><td v
1860: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1870: 63 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c  center>56<td val
1880: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1890: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
18a0: 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61  left>.The databa
18b0: 73 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  se text encoding
18c0: 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20  .  A value of 1 
18d0: 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20  means UTF-8.  A 
18e0: 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73  value of 2.means
18f0: 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61   UTF-16le.  A va
1900: 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55  lue of 3 means U
1910: 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64  TF-16be..<tr><td
1920: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1930: 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76  n=center>60<td v
1940: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1950: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1960: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65  n=left>.The "use
1970: 72 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65  r version" as re
1980: 61 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68  ad and set by th
1990: 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e [user_version 
19a0: 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64  pragma]..<tr><td
19b0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
19c0: 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76  n=center>64<td v
19d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
19e0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
19f0: 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f  n=left>.True (no
1a00: 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72  n-zero) for incr
1a10: 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d  emental-vacuum m
1a20: 6f 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72  ode.  False (zer
1a30: 6f 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74  o) otherwise..<t
1a40: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1a50: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38   align=center>68
1a60: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1a70: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1a80: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
1a90: 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44   "Application ID
1aa0: 22 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41  " set by [PRAGMA
1ab0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d   application_id]
1ac0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1ad0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1ae0: 72 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>72<td valign=t
1af0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1b00: 32 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  20<td align=left
1b10: 3e 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65  >.Reserved for e
1b20: 78 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20  xpansion.  Must 
1b30: 62 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64  be zero..<tr><td
1b40: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1b50: 6e 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76  n=center>92<td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1b80: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72  n=left>.The [ver
1b90: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
1ba0: 75 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20  umber]..<tr><td 
1bb0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1bc0: 3d 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61  =center>96<td va
1bd0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1be0: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1bf0: 3d 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56  =left>.[SQLITE_V
1c00: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c  ERSION_NUMBER].<
1c10: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
1c20: 0a 0a 3c 68 33 3e 4d 61 67 69 63 20 48 65 61 64  ..<h3>Magic Head
1c30: 65 72 20 53 74 72 69 6e 67 3c 2f 68 33 3e 0a 0a  er String</h3>..
1c40: 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69 64 20  <p>^Every valid 
1c50: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
1c60: 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74 68  file begins with
1c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 31   the following 1
1c80: 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68 65 78  6 bytes .(in hex
1c90: 29 3a 20 35 33 20 35 31 20 34 63 20 36 39 20 37  ): 53 51 4c 69 7
1ca0: 34 20 36 35 20 32 30 20 36 36 20 36 66 20 37 32  4 65 20 66 6f 72
1cb0: 20 36 64 20 36 31 20 37 34 20 32 30 20 33 33 20   6d 61 74 20 33 
1cc0: 30 30 2e 20 20 54 68 69 73 20 62 79 74 65 20 73  00.  This byte s
1cd0: 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73 70 6f  equence.correspo
1ce0: 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46 2d 38  nds to the UTF-8
1cf0: 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74 65 20   string "SQLite 
1d00: 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c 75 64  format 3" includ
1d10: 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65 72 6d  ing the nul.term
1d20: 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  inator character
1d30: 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70 3e   at the end.</p>
1d40: 0a 0a 3c 68 33 3e 50 61 67 65 20 53 69 7a 65 3c  ..<h3>Page Size<
1d50: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f  /h3>..<p>The two
1d60: 2d 62 79 74 65 20 76 61 6c 75 65 20 62 65 67 69  -byte value begi
1d70: 6e 6e 69 6e 67 20 61 74 20 6f 66 66 73 65 74 20  nning at offset 
1d80: 31 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  16 determines th
1d90: 65 20 70 61 67 65 20 73 69 7a 65 20 6f 66 20 0a  e page size of .
1da0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 46  the database.  F
1db0: 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
1dc0: 6e 73 20 33 2e 37 2e 30 2e 31 20 28 5b 64 61 74  ns 3.7.0.1 ([dat
1dd0: 65 6f 66 3a 33 2e 37 2e 30 2e 31 5d 29 0a 61 6e  eof:3.7.0.1]).an
1de0: 64 20 65 61 72 6c 69 65 72 2c 20 74 68 69 73 20  d earlier, this 
1df0: 76 61 6c 75 65 20 69 73 20 0a 69 6e 74 65 72 70  value is .interp
1e00: 72 65 74 65 64 20 61 73 20 61 20 62 69 67 2d 65  reted as a big-e
1e10: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ndian integer an
1e20: 64 20 6d 75 73 74 20 62 65 20 61 20 70 6f 77 65  d must be a powe
1e30: 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65 6e  r of two between
1e40: 0a 35 31 32 20 61 6e 64 20 33 32 37 36 38 2c 20  .512 and 32768, 
1e50: 69 6e 63 6c 75 73 69 76 65 2e 20 20 42 65 67 69  inclusive.  Begi
1e60: 6e 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74  nning with SQLit
1e70: 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  e [version 3.7.1
1e80: 5d 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 31  ].([dateof:3.7.1
1e90: 5d 29 2c 20 61 20 70 61 67 65 0a 73 69 7a 65 20  ]), a page.size 
1ea0: 6f 66 20 36 35 35 33 36 20 62 79 74 65 73 20 69  of 65536 bytes i
1eb0: 73 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68  s supported.  Th
1ec0: 65 20 76 61 6c 75 65 20 36 35 35 33 36 20 77 69  e value 65536 wi
1ed0: 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61 0a  ll not fit in a.
1ee0: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
1ef0: 2c 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79 20  , so to specify 
1f00: 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67  a 65536-byte pag
1f10: 65 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c 75  e size, the valu
1f20: 65 0a 61 74 20 6f 66 66 73 65 74 20 31 36 20 69  e.at offset 16 i
1f30: 73 20 30 78 30 30 20 30 78 30 31 2e 0a 54 68 69  s 0x00 0x01..Thi
1f40: 73 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 69  s value can be i
1f50: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
1f60: 62 69 67 2d 65 6e 64 69 61 6e 0a 31 20 61 6e 64  big-endian.1 and
1f70: 20 74 68 6f 75 67 68 74 20 6f 66 20 69 73 20 61   thought of is a
1f80: 73 20 61 20 6d 61 67 69 63 20 6e 75 6d 62 65 72  s a magic number
1f90: 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
1fa0: 65 20 36 35 35 33 36 20 70 61 67 65 20 73 69 7a  e 65536 page siz
1fb0: 65 2e 0a 4f 72 20 6f 6e 65 20 63 61 6e 20 76 69  e..Or one can vi
1fc0: 65 77 20 74 68 65 20 74 77 6f 2d 62 79 74 65 20  ew the two-byte 
1fd0: 66 69 65 6c 64 20 61 73 20 61 20 6c 69 74 74 6c  field as a littl
1fe0: 65 20 65 6e 64 69 61 6e 20 6e 75 6d 62 65 72 20  e endian number 
1ff0: 61 6e 64 20 73 61 79 0a 74 68 61 74 20 69 74 20  and say.that it 
2000: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 70  represents the p
2010: 61 67 65 20 73 69 7a 65 20 64 69 76 69 64 65 64  age size divided
2020: 20 62 79 20 32 35 36 2e 20 20 54 68 65 73 65 20   by 256.  These 
2030: 74 77 6f 20 0a 69 6e 74 65 72 70 72 65 74 61 74  two .interpretat
2040: 69 6f 6e 73 20 6f 66 20 74 68 65 20 70 61 67 65  ions of the page
2050: 2d 73 69 7a 65 20 66 69 65 6c 64 20 61 72 65 20  -size field are 
2060: 65 71 75 69 76 61 6c 65 6e 74 2e 3c 2f 70 3e 0a  equivalent.</p>.
2070: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2080: 74 20 76 6e 75 6d 73 20 7b 66 69 6c 65 20 66 6f  t vnums {file fo
2090: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rmat version num
20a0: 62 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  bers}</tcl>.<h3>
20b0: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
20c0: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 33 3e  ion numbers</h3>
20d0: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
20e0: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
20f0: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2100: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2110: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2120: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2130: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
2140: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
2150: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
2160: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
2170: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
2180: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
2190: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
21a0: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
21b0: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
21c0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
21d0: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
21e0: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
21f0: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2200: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2210: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2220: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2230: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
2240: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
2250: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
2260: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
2270: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
2280: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
2290: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
22a0: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
22b0: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
22c0: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
22d0: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
22e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
22f0: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2300: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2310: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2320: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2330: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
2340: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
2350: 70 3e 0a 0a 3c 68 33 3e 52 65 73 65 72 76 65 64  p>..<h3>Reserved
2360: 20 62 79 74 65 73 20 70 65 72 20 70 61 67 65 3c   bytes per page<
2370: 2f 68 33 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20  /h3>..<p>SQLite 
2380: 68 61 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  has the ability 
2390: 74 6f 20 73 65 74 20 61 73 69 64 65 20 61 20 73  to set aside a s
23a0: 6d 61 6c 6c 20 6e 75 6d 62 65 72 20 6f 66 20 65  mall number of e
23b0: 78 74 72 61 20 62 79 74 65 73 20 61 74 0a 74 68  xtra bytes at.th
23c0: 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 20 70  e end of every p
23d0: 61 67 65 20 66 6f 72 20 75 73 65 20 62 79 20 65  age for use by e
23e0: 78 74 65 6e 73 69 6f 6e 73 2e 20 20 54 68 65 73  xtensions.  Thes
23f0: 65 20 65 78 74 72 61 20 62 79 74 65 73 20 61 72  e extra bytes ar
2400: 65 0a 75 73 65 64 2c 20 66 6f 72 20 65 78 61 6d  e.used, for exam
2410: 70 6c 65 2c 20 62 79 20 74 68 65 20 53 51 4c 69  ple, by the SQLi
2420: 74 65 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78  te Encryption Ex
2430: 74 65 6e 73 69 6f 6e 20 74 6f 20 73 74 6f 72 65  tension to store
2440: 20 61 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f 72 20   a nonce.and/or 
2450: 63 72 79 70 74 6f 67 72 61 70 68 69 63 20 63 68  cryptographic ch
2460: 65 63 6b 73 75 6d 20 61 73 73 6f 63 69 61 74 65  ecksum associate
2470: 64 20 77 69 74 68 20 65 61 63 68 20 70 61 67 65  d with each page
2480: 2e 20 20 5e 54 68 65 20 0a 22 72 65 73 65 72 76  .  ^The ."reserv
2490: 65 64 20 73 70 61 63 65 22 20 73 69 7a 65 20 69  ed space" size i
24a0: 6e 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e 74  n the 1-byte int
24b0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
24c0: 30 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  0 is the number.
24d0: 6f 66 20 62 79 74 65 73 20 6f 66 20 73 70 61 63  of bytes of spac
24e0: 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  e at the end of 
24f0: 65 61 63 68 20 70 61 67 65 20 74 6f 20 72 65 73  each page to res
2500: 65 72 76 65 20 66 6f 72 20 65 78 74 65 6e 73 69  erve for extensi
2510: 6f 6e 73 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  ons..This value 
2520: 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 54  is usually 0.  T
2530: 68 65 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20  he value can be 
2540: 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  odd.</p>..<tcl>h
2550: 64 5f 66 72 61 67 6d 65 6e 74 20 75 73 61 62 6c  d_fragment usabl
2560: 65 5f 73 69 7a 65 20 7b 75 73 61 62 6c 65 20 73  e_size {usable s
2570: 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68  ize}</tcl>.<p>Th
2580: 65 20 22 75 73 61 62 6c 65 20 73 69 7a 65 22 20  e "usable size" 
2590: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61  of a database pa
25a0: 67 65 20 69 73 20 74 68 65 20 70 61 67 65 20 73  ge is the page s
25b0: 69 7a 65 20 73 70 65 63 69 66 79 20 62 79 20 74  ize specify by t
25c0: 68 65 0a 32 2d 62 79 74 65 20 69 6e 74 65 67 65  he.2-byte intege
25d0: 72 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 69  r at offset 16 i
25e0: 6e 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 73  n the header les
25f0: 73 20 74 68 65 20 22 72 65 73 65 72 76 65 64 22  s the "reserved"
2600: 20 73 70 61 63 65 20 73 69 7a 65 0a 72 65 63 6f   space size.reco
2610: 72 64 65 64 20 69 6e 20 74 68 65 20 31 2d 62 79  rded in the 1-by
2620: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2630: 66 73 65 74 20 32 30 20 69 6e 20 74 68 65 20 68  fset 20 in the h
2640: 65 61 64 65 72 2e 20 20 54 68 65 20 75 73 61 62  eader.  The usab
2650: 6c 65 0a 73 69 7a 65 20 6f 66 20 61 20 70 61 67  le.size of a pag
2660: 65 20 6d 69 67 68 74 20 62 65 20 61 6e 20 6f 64  e might be an od
2670: 64 20 6e 75 6d 62 65 72 2e 20 20 5e 28 48 6f 77  d number.  ^(How
2680: 65 76 65 72 2c 20 74 68 65 20 75 73 61 62 6c 65  ever, the usable
2690: 20 73 69 7a 65 20 69 73 20 6e 6f 74 0a 61 6c 6c   size is not.all
26a0: 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
26b0: 74 68 61 6e 20 34 38 30 2e 20 20 49 6e 20 6f 74  than 480.  In ot
26c0: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
26d0: 65 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 35  e page size is 5
26e0: 31 32 2c 0a 74 68 65 6e 20 74 68 65 20 72 65 73  12,.then the res
26f0: 65 72 76 65 64 20 73 70 61 63 65 20 73 69 7a 65  erved space size
2700: 20 63 61 6e 6e 6f 74 20 65 78 63 65 65 64 20 33   cannot exceed 3
2710: 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 50 61  2.)^</p>..<h3>Pa
2720: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 3c  yload fractions<
2730: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61  /h3>..<p>^The ma
2740: 78 69 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75  ximum and minimu
2750: 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f  m embedded paylo
2760: 61 64 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64  ad fractions and
2770: 20 74 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61   the leaf.payloa
2780: 64 20 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65  d fraction value
2790: 73 20 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32  s must be 64, 32
27a0: 2c 20 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65  , and 32.  These
27b0: 20 76 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 69   values were.ori
27c0: 67 69 6e 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64  ginally intended
27d0: 20 74 6f 20 62 65 20 74 75 6e 61 62 6c 65 20 70   to be tunable p
27e0: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63  arameters that c
27f0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a  ould be used to.
2800: 6d 6f 64 69 66 79 20 74 68 65 20 73 74 6f 72 61  modify the stora
2810: 67 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  ge format of the
2820: 20 62 2d 74 72 65 65 20 61 6c 67 6f 72 69 74 68   b-tree algorith
2830: 6d 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 61  m.  However, tha
2840: 74 0a 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  t.functionality 
2850: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
2860: 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 6e   and there are n
2870: 6f 20 63 75 72 72 65 6e 74 20 70 6c 61 6e 73 20  o current plans 
2880: 74 6f 20 61 64 64 0a 73 75 70 70 6f 72 74 20 69  to add.support i
2890: 6e 20 74 68 65 20 66 75 74 75 72 65 2e 20 20 48  n the future.  H
28a0: 65 6e 63 65 2c 20 74 68 65 73 65 20 74 68 72 65  ence, these thre
28b0: 65 20 62 79 74 65 73 20 61 72 65 20 66 69 78 65  e bytes are fixe
28c0: 64 20 61 74 20 74 68 65 0a 76 61 6c 75 65 73 20  d at the.values 
28d0: 73 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a  specified.</p>..
28e0: 3c 68 33 3e 46 69 6c 65 20 63 68 61 6e 67 65 20  <h3>File change 
28f0: 63 6f 75 6e 74 65 72 3c 2f 68 33 3e 0a 0a 3c 74  counter</h3>..<t
2900: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
2910: 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65 20 63  hngctr {change c
2920: 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70  ounter}</tcl>.<p
2930: 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67  >^The file chang
2940: 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34  e counter is a 4
2950: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
2960: 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73   integer at.offs
2970: 65 74 20 32 34 20 74 68 61 74 20 69 73 20 69 6e  et 24 that is in
2980: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
2990: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
29a0: 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b 65 64  file is unlocked
29b0: 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20 62 65  .after having be
29c0: 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57 68 65  en modified..Whe
29d0: 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 70 72  n two or more pr
29e0: 6f 63 65 73 73 65 73 20 61 72 65 20 72 65 61 64  ocesses are read
29f0: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64 61 74  ing the same dat
2a00: 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61 63 68  abase file, each
2a10: 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20 64 65   .process can de
2a20: 74 65 63 74 20 64 61 74 61 62 61 73 65 20 63 68  tect database ch
2a30: 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68 65 72  anges from other
2a40: 20 70 72 6f 63 65 73 73 65 73 20 62 79 20 6d 6f   processes by mo
2a50: 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20 63 68  nitoring .the ch
2a60: 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a 41 20  ange counter..A 
2a70: 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e 6f 72  process will nor
2a80: 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20 66 6c  mally want to fl
2a90: 75 73 68 20 69 74 73 20 64 61 74 61 62 61 73 65  ush its database
2aa0: 20 70 61 67 65 20 63 61 63 68 65 20 77 68 65 6e   page cache when
2ab0: 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73  .another process
2ac0: 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 64 61   modified the da
2ad0: 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20 74 68  tabase, since th
2ae0: 65 20 63 61 63 68 65 20 68 61 73 20 62 65 63 6f  e cache has beco
2af0: 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20 66 69  me stale..The fi
2b00: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
2b10: 72 20 66 61 63 69 6c 69 74 61 74 65 73 20 74 68  r facilitates th
2b20: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 57  is.</p>..<p>In W
2b30: 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67 65 73  AL mode, changes
2b40: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2b50: 20 61 72 65 20 64 65 74 65 63 74 65 64 20 75 73   are detected us
2b60: 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  ing the wal-inde
2b70: 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63 68 61  x.and so the cha
2b80: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 6e  nge counter is n
2b90: 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65 6e 63  ot needed.  Henc
2ba0: 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  e, the change co
2bb0: 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f 74 20  unter might.not 
2bc0: 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 6f  be incremented o
2bd0: 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63 74 69  n each transacti
2be0: 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e 3c  on in WAL mode.<
2bf0: 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 2d 68 65 61 64  /p>..<h3>In-head
2c00: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
2c10: 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </h3>..<tcl>hd_f
2c20: 72 61 67 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65  ragment filesize
2c30: 20 7b 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61   {in-header data
2c40: 62 61 73 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  base size}</tcl>
2c50: 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20  .<p>^The 4-byte 
2c60: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
2c70: 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 38 20  er at offset 28 
2c80: 69 6e 74 6f 20 74 68 65 20 68 65 61 64 65 72 20  into the header 
2c90: 0a 73 74 6f 72 65 73 20 74 68 65 20 73 69 7a 65  .stores the size
2ca0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2cb0: 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 2e 20   file in pages. 
2cc0: 20 5e 49 66 20 74 68 69 73 20 69 6e 2d 68 65 61   ^If this in-hea
2cd0: 64 65 72 0a 64 61 74 61 73 69 7a 65 20 73 69 7a  der.datasize siz
2ce0: 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 20 28  e is not valid (
2cf0: 73 65 65 20 74 68 65 20 6e 65 78 74 20 70 61 72  see the next par
2d00: 61 67 72 61 70 68 29 2c 20 74 68 65 6e 20 74 68  agraph), then th
2d10: 65 20 64 61 74 61 62 61 73 65 20 0a 73 69 7a 65  e database .size
2d20: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
2d30: 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20 61  looking.at the a
2d40: 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  ctual size of th
2d50: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2d60: 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   Older versions 
2d70: 6f 66 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65  of SQLite.ignore
2d80: 64 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  d the in-header 
2d90: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e  database size an
2da0: 64 20 75 73 65 64 20 74 68 65 20 61 63 74 75 61  d used the actua
2db0: 6c 20 66 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c  l file size.excl
2dc0: 75 73 69 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72  usively.  ^Newer
2dd0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2de0: 69 74 65 20 75 73 65 20 74 68 65 20 69 6e 2d 68  ite use the in-h
2df0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 0a 73  eader database.s
2e00: 69 7a 65 20 69 66 20 69 74 20 69 73 20 61 76 61  ize if it is ava
2e10: 69 6c 61 62 6c 65 20 62 75 74 20 66 61 6c 6c 20  ilable but fall 
2e20: 62 61 63 6b 20 74 6f 20 74 68 65 20 61 63 74 75  back to the actu
2e30: 61 6c 20 66 69 6c 65 20 73 69 7a 65 20 69 66 0a  al file size if.
2e40: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2e50: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6e  tabase size is n
2e60: 6f 74 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c  ot valid.</p>..<
2e70: 70 3e 5e 54 68 65 20 69 6e 2d 68 65 61 64 65 72  p>^The in-header
2e80: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69   database size i
2e90: 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65  s only considere
2ea0: 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66  d to be valid if
2eb0: 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20  .it is non-zero 
2ec0: 61 6e 64 20 69 66 20 74 68 65 20 34 2d 62 79 74  and if the 4-byt
2ed0: 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  e [change counte
2ee0: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 32 34 0a  r] at offset 24.
2ef0: 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73 20  exactly matches 
2f00: 74 68 65 20 34 2d 62 79 74 65 20 5b 76 65 72 73  the 4-byte [vers
2f10: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
2f20: 6d 62 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20  mber] at offset 
2f30: 39 32 2e 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61  92..^(The in-hea
2f40: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2f50: 65 20 69 73 20 61 6c 77 61 79 73 20 76 61 6c 69  e is always vali
2f60: 64 20 0a 77 68 65 6e 20 74 68 65 20 64 61 74 61  d .when the data
2f70: 62 61 73 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64  base is only mod
2f80: 69 66 69 65 64 20 75 73 69 6e 67 20 72 65 63 65  ified using rece
2f90: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  nt versions of S
2fa0: 51 4c 69 74 65 2c 0a 76 65 72 73 69 6f 6e 73 20  QLite,.versions 
2fb0: 33 2e 37 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.7.0 ([dateof:3
2fc0: 2e 37 2e 30 5d 29 20 61 6e 64 20 6c 61 74 65 72  .7.0]) and later
2fd0: 2e 29 5e 0a 49 66 20 61 20 6c 65 67 61 63 79 20  .)^.If a legacy 
2fe0: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
2ff0: 65 20 77 72 69 74 65 73 20 74 6f 20 74 68 65 20  e writes to the 
3000: 64 61 74 61 62 61 73 65 2c 20 69 74 20 77 69 6c  database, it wil
3010: 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70  l not.know to up
3020: 64 61 74 65 20 74 68 65 20 69 6e 2d 68 65 61 64  date the in-head
3030: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
3040: 20 61 6e 64 20 73 6f 20 74 68 65 20 69 6e 2d 68   and so the in-h
3050: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3060: 69 7a 65 20 63 6f 75 6c 64 20 62 65 20 69 6e 63  ize could be inc
3070: 6f 72 72 65 63 74 2e 20 20 42 75 74 20 6c 65 67  orrect.  But leg
3080: 61 63 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  acy versions of 
3090: 53 51 4c 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f  SQLite.will also
30a0: 20 6c 65 61 76 65 20 74 68 65 20 76 65 72 73 69   leave the versi
30b0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
30c0: 62 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 32  ber at offset 92
30d0: 20 75 6e 63 68 61 6e 67 65 64 0a 73 6f 20 69 74   unchanged.so it
30e0: 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20   will not match 
30f0: 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74  the change-count
3100: 65 72 2e 20 20 48 65 6e 63 65 2c 20 69 6e 76 61  er.  Hence, inva
3110: 6c 69 64 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  lid in-header.da
3120: 74 61 62 61 73 65 20 73 69 7a 65 73 20 63 61 6e  tabase sizes can
3130: 20 62 65 20 64 65 74 65 63 74 65 64 20 28 61 6e   be detected (an
3140: 64 20 69 67 6e 6f 72 65 64 29 20 62 79 20 6f 62  d ignored) by ob
3150: 73 65 72 76 69 6e 67 20 77 68 65 6e 0a 74 68 65  serving when.the
3160: 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20   change-counter 
3170: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74  does not match t
3180: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3190: 2d 66 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e  -for number.</p>
31a0: 0a 0a 3c 68 33 3e 46 72 65 65 20 70 61 67 65 20  ..<h3>Free page 
31b0: 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e  list</h3>..<p>Un
31c0: 75 73 65 64 20 70 61 67 65 73 20 69 6e 20 74 68  used pages in th
31d0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
31e0: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20  are stored on a 
31f0: 66 72 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a  freelist.  ^The.
3200: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3210: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
3220: 73 65 74 20 33 32 20 73 74 6f 72 65 73 20 74 68  set 32 stores th
3230: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
3240: 0a 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20  .the first page 
3250: 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c  of the freelist,
3260: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20   or zero if the 
3270: 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74  freelist is empt
3280: 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62  y..^The 4-byte b
3290: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
32a0: 72 20 61 74 20 6f 66 66 73 65 74 20 33 36 20 73  r at offset 36 s
32b0: 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68 65  tores stores the
32c0: 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f   total .number o
32d0: 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66  f pages on the f
32e0: 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68  reelist.</p>..<h
32f0: 33 3e 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65 3c  3>Schema cookie<
3300: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 63  /h3>..<p>^The sc
3310: 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 61  hema cookie is a
3320: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
3330: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
3340: 66 73 65 74 20 34 30 0a 74 68 61 74 20 69 73 20  fset 40.that is 
3350: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3360: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
3370: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
3380: 2e 20 20 41 20 0a 70 72 65 70 61 72 65 64 20 73  .  A .prepared s
3390: 74 61 74 65 6d 65 6e 74 20 69 73 20 63 6f 6d 70  tatement is comp
33a0: 69 6c 65 64 20 61 67 61 69 6e 73 74 20 61 20 73  iled against a s
33b0: 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20  pecific version 
33c0: 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  of the.database 
33d0: 73 63 68 65 6d 61 2e 20 20 57 68 65 6e 20 74 68  schema.  When th
33e0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
33f0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73  a changes, the s
3400: 74 61 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65  tatement.must be
3410: 20 72 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57   reprepared.  ^W
3420: 68 65 6e 20 61 20 70 72 65 70 61 72 65 64 20 73  hen a prepared s
3430: 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69  tatement runs, i
3440: 74 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74  t first checks.t
3450: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3460: 20 74 6f 20 65 6e 73 75 72 65 20 74 68 65 20 76   to ensure the v
3470: 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65  alue is the same
3480: 20 61 73 20 77 68 65 6e 20 74 68 65 20 73 74 61   as when the sta
3490: 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65 70 61  tement.was prepa
34a0: 72 65 64 20 61 6e 64 20 69 66 20 74 68 65 20 73  red and if the s
34b0: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61 73  chema cookie has
34c0: 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20 73 74   changed, the st
34d0: 61 74 65 6d 65 6e 74 20 65 69 74 68 65 72 0a 61  atement either.a
34e0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 70  utomatically rep
34f0: 72 65 70 61 72 65 73 20 61 6e 64 20 72 65 72 75  repares and reru
3500: 6e 73 20 6f 72 20 69 74 20 61 62 6f 72 74 73 20  ns or it aborts 
3510: 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f  with an [SQLITE_
3520: 53 43 48 45 4d 41 5d 20 0a 65 72 72 6f 72 2e 3c  SCHEMA] .error.<
3530: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
3540: 67 6d 65 6e 74 20 7b 73 63 68 65 6d 61 66 6f 72  gment {schemafor
3550: 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f 72  mat} {schema for
3560: 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f 72  mat} {schema for
3570: 6d 61 74 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c  mat number}</tcl
3580: 3e 0a 3c 68 33 3e 53 63 68 65 6d 61 20 66 6f 72  >.<h3>Schema for
3590: 6d 61 74 20 6e 75 6d 62 65 72 3c 2f 68 33 3e 0a  mat number</h3>.
35a0: 0a 3c 70 3e 54 68 65 20 73 63 68 65 6d 61 20 66  .<p>The schema f
35b0: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20  ormat number is 
35c0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
35d0: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
35e0: 66 66 73 65 74 20 34 34 2e 0a 54 68 65 20 73 63  ffset 44..The sc
35f0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
3600: 65 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  er is similar to
3610: 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
3620: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 0a   read and write.
3630: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20  version numbers 
3640: 61 74 20 6f 66 66 73 65 74 73 20 31 38 20 61 6e  at offsets 18 an
3650: 64 20 31 39 20 65 78 63 65 70 74 20 74 68 61 74  d 19 except that
3660: 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
3670: 61 74 20 6e 75 6d 62 65 72 0a 72 65 66 65 72 73  at number.refers
3680: 20 74 6f 20 74 68 65 20 68 69 67 68 2d 6c 65 76   to the high-lev
3690: 65 6c 20 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e  el SQL formattin
36a0: 67 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  g rather than th
36b0: 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72  e low-level b-tr
36c0: 65 65 0a 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20  ee.formatting.  
36d0: 46 6f 75 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  Four schema form
36e0: 61 74 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  at numbers are c
36f0: 75 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64  urrently defined
3700: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20  :</p>..<ol>.<li 
3710: 76 61 6c 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31  value=1>Format 1
3720: 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 62   is understood b
3730: 79 20 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f  y all versions o
3740: 66 20 53 51 4c 69 74 65 20 62 61 63 6b 20 74 6f  f SQLite back to
3750: 0a 5b 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30 5d  .[version 3.0.0]
3760: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 30 2e 30 5d   ([dateof:3.0.0]
3770: 29 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75  ).</li>.<li valu
3780: 65 3d 32 3e 46 6f 72 6d 61 74 20 32 20 61 64 64  e=2>Format 2 add
3790: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66  s the ability of
37a0: 20 72 6f 77 73 20 77 69 74 68 69 6e 20 74 68 65   rows within the
37b0: 20 73 61 6d 65 20 74 61 62 6c 65 0a 74 6f 20 68   same table.to h
37c0: 61 76 65 20 61 20 76 61 72 79 69 6e 67 20 6e 75  ave a varying nu
37d0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c  mber of columns,
37e0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75 70   in order to sup
37f0: 70 6f 72 74 20 74 68 65 0a 5b 41 4c 54 45 52 20  port the.[ALTER 
3800: 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54 41  TABLE | ALTER TA
3810: 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c 55  BLE ... ADD COLU
3820: 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  MN] functionalit
3830: 79 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72 0a  y.  Support for.
3840: 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74  reading and writ
3850: 69 6e 67 20 66 6f 72 6d 61 74 20 32 20 77 61 73  ing format 2 was
3860: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
3870: 20 0a 5b 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33   .[version 3.1.3
3880: 5d 20 6f 6e 20 5b 64 61 74 65 6f 66 3a 33 2e 31  ] on [dateof:3.1
3890: 2e 33 5d 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61  .3].</li>.<li va
38a0: 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20 61  lue=3>Format 3 a
38b0: 64 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  dds the ability 
38c0: 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73  of extra columns
38d0: 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54 45 52   added by.[ALTER
38e0: 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54   TABLE | ALTER T
38f0: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
3900: 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f 6e  UMN] to have non
3910: 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76 61  -NULL default.va
3920: 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61 70 61  lues.  This capa
3930: 62 69 6c 69 74 79 20 77 61 73 20 61 64 64 65 64  bility was added
3940: 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   in SQLite [vers
3950: 69 6f 6e 20 33 2e 31 2e 34 5d 0a 6f 6e 20 5b 64  ion 3.1.4].on [d
3960: 61 74 65 6f 66 3a 33 2e 31 2e 34 5d 2e 3c 2f 6c  ateof:3.1.4].</l
3970: 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e  i>.<li value=4>^
3980: 46 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20  Format 4 causes 
3990: 53 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63  SQLite to respec
39a0: 74 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e  t the.[descendin
39b0: 67 20 69 6e 64 65 78 65 73 20 7c 20 44 45 53 43  g indexes | DESC
39c0: 20 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64   keyword] on.ind
39d0: 65 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e  ex declarations.
39e0: 20 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79    (^The DESC key
39f0: 77 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20  word is ignored 
3a00: 69 6e 20 69 6e 64 65 78 65 73 20 66 6f 72 20 0a  in indexes for .
3a10: 66 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e  formats 1, 2, an
3a20: 64 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20  d 3.).^Format 4 
3a30: 61 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65  also adds two ne
3a40: 77 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64  w boolean record
3a50: 20 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73   type values ([s
3a60: 65 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61  erial types].8 a
3a70: 6e 64 20 39 29 2e 20 20 53 75 70 70 6f 72 74 20  nd 9).  Support 
3a80: 66 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73  for format 4 was
3a90: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
3aa0: 20 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30   3.3.0 on.2006-0
3ab0: 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  1-10.</li>.</ol>
3ac0: 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61  ..<p>^New databa
3ad0: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
3ae0: 20 62 79 20 53 51 4c 69 74 65 20 75 73 65 20 66   by SQLite use f
3af0: 6f 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75  ormat 4 by defau
3b00: 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  lt..^The [legacy
3b10: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
3b20: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
3b30: 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65   to cause SQLite
3b40: 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64  .to create new d
3b50: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73  atabase files us
3b60: 69 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68  ing format 1..Th
3b70: 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  e format version
3b80: 20 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d   number can be m
3b90: 61 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74  ade to default t
3ba0: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34  o 1 instead of 4
3bb0: 20 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c   by.setting [SQL
3bc0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
3bd0: 5f 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f  _FORMAT]=1 at co
3be0: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e  mpile-time..</p>
3bf0: 0a 0a 3c 68 33 3e 53 75 67 67 65 73 74 65 64 20  ..<h3>Suggested 
3c00: 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 33 3e 0a  cache size</h3>.
3c10: 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62  .<p>The 4-byte b
3c20: 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65 64  ig-endian signed
3c30: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3c40: 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75 67  et 48 is the sug
3c50: 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69 7a  gested.cache siz
3c60: 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20 74  e in pages for t
3c70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3c80: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
3c90: 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e 6c  a suggestion.onl
3ca0: 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73 20  y and SQLite is 
3cb0: 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61 74  under no obligat
3cc0: 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74 2e  ion to honor it.
3cd0: 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76    The absolute v
3ce0: 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74 65  alue.of the inte
3cf0: 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20 74  ger is used as t
3d00: 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69 7a  he suggested siz
3d10: 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74 65  e.  The suggeste
3d20: 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61 6e  d cache size.can
3d30: 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74 68   be set using th
3d40: 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68 65  e [default_cache
3d50: 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _size pragma].</
3d60: 70 3e 0a 0a 3c 68 33 3e 49 6e 63 72 65 6d 65 6e  p>..<h3>Incremen
3d70: 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74 69  tal vacuum setti
3d80: 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ngs</h3>..<p>The
3d90: 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67 2d   two 4-byte big-
3da0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20  endian integers 
3db0: 61 74 20 6f 66 66 73 65 74 73 20 35 32 20 61 6e  at offsets 52 an
3dc0: 64 20 36 34 20 61 72 65 20 75 73 65 64 0a 74 6f  d 64 are used.to
3dd0: 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75 74   manage the [aut
3de0: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
3df0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3e00: 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74  m] modes.  ^If.t
3e10: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3e20: 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20  fset 52 is zero 
3e30: 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70  then pointer-map
3e40: 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73 20   (ptrmap) pages 
3e50: 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are.omitted from
3e60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3e70: 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20 61  le and neither a
3e80: 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69  uto_vacuum nor.i
3e90: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3ea0: 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  m are supported.
3eb0: 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65    ^If the intege
3ec0: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3ed0: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3ee0: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3ef0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3f00: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3f10: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3f20: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3f30: 65 20 66 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74  e file will cont
3f40: 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73  ain ptrmap pages
3f50: 2c 20 61 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d  , and the.mode m
3f60: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 61 75  ust be either au
3f70: 74 6f 5f 76 61 63 75 75 6d 20 6f 72 20 69 6e 63  to_vacuum or inc
3f80: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e  remental_vacuum.
3f90: 20 20 5e 49 6e 20 74 68 69 73 20 6c 61 74 74 65    ^In this latte
3fa0: 72 0a 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  r.case, the inte
3fb0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 34  ger at offset 64
3fc0: 20 69 73 20 74 72 75 65 20 66 6f 72 20 69 6e 63   is true for inc
3fd0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20  remental_vacuum 
3fe0: 61 6e 64 0a 66 61 6c 73 65 20 66 6f 72 20 61 75  and.false for au
3ff0: 74 6f 5f 76 61 63 75 75 6d 2e 20 20 5e 49 66 20  to_vacuum.  ^If 
4000: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
4010: 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f  ffset 52 is zero
4020: 20 74 68 65 6e 0a 74 68 65 20 69 6e 74 65 67 65   then.the intege
4030: 72 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 6d  r at offset 64 m
4040: 75 73 74 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f  ust also be zero
4050: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4060: 72 61 67 6d 65 6e 74 20 65 6e 63 20 7b 74 65 78  ragment enc {tex
4070: 74 20 65 6e 63 6f 64 69 6e 67 7d 3c 2f 74 63 6c  t encoding}</tcl
4080: 3e 0a 3c 68 33 3e 54 65 78 74 20 65 6e 63 6f 64  >.<h3>Text encod
4090: 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ing</h3>..<p>^Th
40a0: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
40b0: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
40c0: 66 66 73 65 74 20 35 36 20 64 65 74 65 72 6d 69  ffset 56 determi
40d0: 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  nes the encoding
40e0: 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 74 65  .used for all te
40f0: 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f 72 65  xt strings store
4100: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
4110: 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20 6f 66  e.  .^A value of
4120: 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 0a   1 means UTF-8..
4130: 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65  ^A value of 2 me
4140: 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a 5e 41  ans UTF-16le..^A
4150: 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e   value of 3 mean
4160: 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f  s UTF-16be..No o
4170: 74 68 65 72 20 76 61 6c 75 65 73 20 61 72 65 20  ther values are 
4180: 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65 20 73  allowed..^(The s
4190: 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65 72 20  qlite3.h header 
41a0: 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43 2d 70  file defines C-p
41b0: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
41c0: 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38 20 61  os SQLITE_UTF8 a
41d0: 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54 46 31  s 1,.SQLITE_UTF1
41e0: 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20 53 51  6LE as 2, and SQ
41f0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61 73 20  LITE_UTF16BE as 
4200: 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70 6c 61  3, to use in pla
4210: 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65 72 69  ce of.the numeri
4220: 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68 65 20  c codes for the 
4230: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 29 5e  text encoding.)^
4240: 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73 65 72 20 76  </p>..<h3>User v
4250: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f 68  ersion number</h
4260: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79  3>..<p>^The 4-by
4270: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4280: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
4290: 36 30 20 69 73 20 74 68 65 20 75 73 65 72 20 76  60 is the user v
42a0: 65 72 73 69 6f 6e 20 77 68 69 63 68 0a 69 73 20  ersion which.is 
42b0: 73 65 74 20 61 6e 64 20 71 75 65 72 69 65 64 20  set and queried 
42c0: 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72  by the [user_ver
42d0: 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 20 20 54  sion pragma].  T
42e0: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
42f0: 69 73 0a 6e 6f 74 20 75 73 65 64 20 62 79 20 53  is.not used by S
4300: 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  QLite.</p>..<tcl
4310: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 70 70  >hd_fragment app
4320: 69 64 20 7b 41 70 70 6c 69 63 61 74 69 6f 6e 20  id {Application 
4330: 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41 70  ID}</tcl>.<h3>Ap
4340: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 33  plication ID</h3
4350: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
4360: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4370: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4380: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4390: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
43a0: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
43b0: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
43c0: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
43d0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
43e0: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
43f0: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4400: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4410: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
4420: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
4430: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
4440: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
4450: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
4460: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
4470: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4480: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4490: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
44a0: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
44b0: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
44c0: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
44d0: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
44e0: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
44f0: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4500: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4510: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
4520: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
4530: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
4540: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
4550: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
4560: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
4570: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4580: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4590: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
45a0: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
45b0: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
45c0: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
45d0: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
45e0: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
45f0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4600: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4610: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4620: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
4630: 33 3e 57 72 69 74 65 20 6c 69 62 72 61 72 79 20  3>Write library 
4640: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 61  version number a
4650: 6e 64 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  nd version-valid
4660: 2d 66 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 33 3e  -for number</h3>
4670: 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  ..<p>^The 4-byte
4680: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
4690: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 36  ger at offset 96
46a0: 20 73 74 6f 72 65 73 20 74 68 65 20 0a 5b 53 51   stores the .[SQ
46b0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
46c0: 42 45 52 5d 20 76 61 6c 75 65 20 66 6f 72 20 74  BER] value for t
46d0: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
46e0: 79 20 74 68 61 74 20 6d 6f 73 74 0a 72 65 63 65  y that most.rece
46f0: 6e 74 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 68  ntly modified th
4700: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
4710: 20 20 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69    ^The 4-byte bi
4720: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4730: 20 61 74 0a 6f 66 66 73 65 74 20 39 32 20 69 73   at.offset 92 is
4740: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
4750: 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  e [change counte
4760: 72 5d 20 77 68 65 6e 20 74 68 65 20 76 65 72 73  r] when the vers
4770: 69 6f 6e 20 6e 75 6d 62 65 72 0a 77 61 73 20 73  ion number.was s
4780: 74 6f 72 65 64 2e 20 20 54 68 65 20 69 6e 74 65  tored.  The inte
4790: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 32  ger at offset 92
47a0: 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68   indicates which
47b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 74 68 65   transaction.the
47c0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
47d0: 69 73 20 76 61 6c 69 64 20 66 6f 72 20 61 6e 64  is valid for and
47e0: 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 63 61   is sometimes ca
47f0: 6c 6c 65 64 20 74 68 65 0a 22 76 65 72 73 69 6f  lled the."versio
4800: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
4810: 65 72 22 2e 0a 0a 3c 68 33 3e 48 65 61 64 65 72  er"...<h3>Header
4820: 20 73 70 61 63 65 20 72 65 73 65 72 76 65 64 20   space reserved 
4830: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68  for expansion</h
4840: 33 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72  3>..<p>All other
4850: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61   bytes of the da
4860: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
4870: 65 72 20 61 72 65 20 72 65 73 65 72 76 65 64 20  er are reserved 
4880: 66 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e  for.future expan
4890: 73 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65  sion and must be
48a0: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70   set to zero.</p
48b0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
48c0: 65 6e 74 20 6c 6f 63 6b 62 79 74 65 20 7b 6c 6f  ent lockbyte {lo
48d0: 63 6b 2d 62 79 74 65 20 70 61 67 65 7d 3c 2f 74  ck-byte page}</t
48e0: 63 6c 3e 0a 3c 68 32 3e 54 68 65 20 4c 6f 63 6b  cl>.<h2>The Lock
48f0: 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 32 3e 0a  -Byte Page</h2>.
4900: 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74  .<p>The lock-byt
4910: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69  e page is the si
4920: 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65  ngle page of the
4930: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74   database file.t
4940: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
4950: 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74   bytes at offset
4960: 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34  s between 107374
4970: 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32  1824 and 1073742
4980: 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20  335,.inclusive. 
4990: 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   A database file
49a0: 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68   that is less th
49b0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31  an or equal to 1
49c0: 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20  073741824 bytes 
49d0: 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e  .in size contain
49e0: 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70  s no lock-byte p
49f0: 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65  age.  A database
4a00: 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61   file larger tha
4a10: 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e  n.1073741824 con
4a20: 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e  tains exactly on
4a30: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4a40: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c  ..</p>..<p>The l
4a50: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
4a60: 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75   set aside for u
4a70: 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74  se by the operat
4a80: 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69  ing-system speci
4a90: 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d  fic.[VFS] implem
4aa0: 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c  entation in impl
4ab0: 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74  ementing the dat
4ac0: 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69  abase file locki
4ad0: 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e  ng primitives..^
4ae0: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
4af0: 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  use the lock-byt
4b00: 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51  e page.  ^The SQ
4b10: 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20  Lite core .will 
4b20: 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72  never read or wr
4b30: 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  ite the lock-byt
4b40: 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f  e page,.though o
4b50: 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20  perating-system 
4b60: 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a  specific [VFS] .
4b70: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
4b80: 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65  may choose to re
4b90: 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65  ad or write byte
4ba0: 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79  s on the lock-by
4bb0: 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69  te .page accordi
4bc0: 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73  ng to the .needs
4bd0: 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65   and proclivitie
4be0: 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  s of the underly
4bf0: 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65  ing system.  The
4c00: 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a   unix and win32.
4c10: 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61  [VFS] implementa
4c20: 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20  tions that come 
4c30: 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74  built into SQLit
4c40: 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74  e do not write t
4c50: 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20  o the.lock-byte 
4c60: 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d  page, but third-
4c70: 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d  party VFS implem
4c80: 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74  entations for.ot
4c90: 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79  her operating sy
4ca0: 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e  stems might.</p>
4cb0: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4cc0: 74 65 20 70 61 67 65 20 61 72 6f 73 65 20 66 72  te page arose fr
4cd0: 6f 6d 20 74 68 65 20 6e 65 65 64 20 74 6f 20 73  om the need to s
4ce0: 75 70 70 6f 72 74 20 57 69 6e 39 35 20 77 68 69  upport Win95 whi
4cf0: 63 68 20 77 61 73 20 74 68 65 0a 70 72 65 64 6f  ch was the.predo
4d00: 6d 69 6e 61 6e 74 20 6f 70 65 72 61 74 69 6e 67  minant operating
4d10: 20 73 79 73 74 65 6d 20 77 68 65 6e 20 74 68 69   system when thi
4d20: 73 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 77 61  s file format wa
4d30: 73 20 64 65 73 69 67 6e 65 64 20 61 6e 64 20 77  s designed and w
4d40: 68 69 63 68 20 0a 6f 6e 6c 79 20 73 75 70 70 6f  hich .only suppo
4d50: 72 74 65 64 20 6d 61 6e 64 61 74 6f 72 79 20 66  rted mandatory f
4d60: 69 6c 65 20 6c 6f 63 6b 69 6e 67 2e 20 20 41 6c  ile locking.  Al
4d70: 6c 20 6d 6f 64 65 72 6e 20 6f 70 65 72 61 74 69  l modern operati
4d80: 6e 67 20 73 79 73 74 65 6d 73 20 74 68 61 74 0a  ng systems that.
4d90: 77 65 20 6b 6e 6f 77 20 6f 66 20 73 75 70 70 6f  we know of suppo
4da0: 72 74 20 61 64 76 69 73 6f 72 79 20 66 69 6c 65  rt advisory file
4db0: 20 6c 6f 63 6b 69 6e 67 2c 20 61 6e 64 20 73 6f   locking, and so
4dc0: 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70   the lock-byte p
4dd0: 61 67 65 20 69 73 0a 6e 6f 74 20 72 65 61 6c 6c  age is.not reall
4de0: 79 20 6e 65 65 64 65 64 20 61 6e 79 20 6d 6f 72  y needed any mor
4df0: 65 2c 20 62 75 74 20 69 73 20 72 65 74 61 69 6e  e, but is retain
4e00: 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
4e10: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
4e20: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4e30: 67 6d 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d  gment {freelist}
4e40: 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65   {freelist} {fre
4e50: 65 2d 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63  e-page list}</tc
4e60: 6c 3e 0a 3c 68 32 3e 54 68 65 20 46 72 65 65 6c  l>.<h2>The Freel
4e70: 69 73 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 41 20 64  ist</h2>..<p>A d
4e80: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
4e90: 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f  ht contain one o
4ea0: 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68 61  r more pages tha
4eb0: 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63 74  t are not in.act
4ec0: 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65 64  ive use.  Unused
4ed0: 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65 20   pages can come 
4ee0: 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d 70  about, for examp
4ef0: 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d 61  le, when informa
4f00: 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64 20  tion.is deleted 
4f10: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
4f20: 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73  e.  Unused pages
4f30: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
4f40: 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64 20  he freelist.and 
4f50: 61 72 65 20 72 65 75 73 65 64 20 77 68 65 6e 20  are reused when 
4f60: 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65 73  additional pages
4f70: 20 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c 2f   are required.</
4f80: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65 6c  p>..<p>The freel
4f90: 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64  ist is organized
4fa0: 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   as a linked lis
4fb0: 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74 72  t of freelist tr
4fc0: 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20 65  unk pages.with e
4fd0: 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73 20  ach trunk pages 
4fe0: 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65 20  containing page 
4ff0: 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72 6f  numbers for zero
5000: 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69 73   or more freelis
5010: 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t.leaf pages.</p
5020: 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73 74  >..<p>A freelist
5030: 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e 73   trunk page cons
5040: 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79  ists of an array
5050: 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d 65   of 4-byte big-e
5060: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e 0a  ndian integers..
5070: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
5080: 61 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e 79  array is as many
5090: 20 69 6e 74 65 67 65 72 73 20 61 73 20 77 69 6c   integers as wil
50a0: 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61  l fit in the usa
50b0: 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20 70  ble space.of a p
50c0: 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75  age.  The minimu
50d0: 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 69  m usable space i
50e0: 73 20 34 38 30 20 62 79 74 65 73 20 73 6f 20 74  s 480 bytes so t
50f0: 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61 6c  he array will al
5100: 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73 74  ways.be at least
5110: 20 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e 20   120 entries in 
5120: 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66 69  length.  ^The fi
5130: 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e 20 61  rst integer on a
5140: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a   freelist trunk.
5150: 70 61 67 65 20 69 73 20 74 68 65 20 70 61 67 65  page is the page
5160: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
5170: 65 78 74 20 66 72 65 65 6c 69 73 74 20 74 72 75  ext freelist tru
5180: 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65 20 6c  nk page in the l
5190: 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69 66 20  ist or zero .if 
51a0: 74 68 69 73 20 69 73 20 74 68 65 20 6c 61 73 74  this is the last
51b0: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
51c0: 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65 63 6f  page.  ^The seco
51d0: 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20  nd integer on a 
51e0: 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b 20 70  freelist.trunk p
51f0: 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d 62 65  age is the numbe
5200: 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65 20 70  r of leaf page p
5210: 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c 6c 6f  ointers to follo
5220: 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68 65 20  w.  .^(Call the 
5230: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f  second integer o
5240: 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75  n a freelist tru
5250: 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20 4c 20  nk page L..If L 
5260: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
5270: 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65  zero then intege
5280: 72 73 20 77 69 74 68 20 61 72 72 61 79 20 69 6e  rs with array in
5290: 64 65 78 65 73 20 62 65 74 77 65 65 6e 20 32 20  dexes between 2 
52a0: 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76  and.L+1 inclusiv
52b0: 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e  e contain page n
52c0: 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c  umbers for freel
52d0: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 2e 29  ist leaf pages.)
52e0: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69  ^</p>..<p>Freeli
52f0: 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f  st leaf pages co
5300: 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61  ntain no informa
5310: 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65 20 61  tion.  ^SQLite a
5320: 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20 6f 72  voids reading or
5330: 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c 69 73  .writing freelis
5340: 74 20 6c 65 61 66 20 70 61 67 65 73 20 69 6e 20  t leaf pages in 
5350: 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63 65 20  order to reduce 
5360: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
5370: 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c 69 74  p>A bug in SQLit
5380: 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69 6f 72  e versions prior
5390: 20 74 6f 20 33 2e 36 2e 30 20 28 5b 64 61 74 65   to 3.6.0 ([date
53a0: 6f 66 3a 33 2e 36 2e 30 5d 29 0a 63 61 75 73 65  of:3.6.0]).cause
53b0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  d the database t
53c0: 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61 73  o be.reported as
53d0: 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20   corrupt if any 
53e0: 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65 6e  of the last 6 en
53f0: 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72 65  tries in the fre
5400: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
5410: 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 65   .array containe
5420: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65  d non-zero value
5430: 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69 6f  s.  Newer versio
5440: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f 20  ns of SQLite do 
5450: 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70 72  not have.this pr
5460: 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65 72  oblem.  ^However
5470: 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73  , newer versions
5480: 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c 6c   of SQLite still
5490: 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65   avoid using the
54a0: 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72 69   .last six entri
54b0: 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69  es in the freeli
54c0: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61 72  st trunk page ar
54d0: 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68 61  ray in order tha
54e0: 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 73  t database.files
54f0: 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77 65   created by newe
5500: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
5510: 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61 64  Lite can be read
5520: 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69 6f   by older versio
5530: 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70  ns.of SQLite.</p
5540: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65  >..<p>^The numbe
5550: 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61  r of freelist pa
5560: 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73  ges is stored as
5570: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
5580: 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e 20  dian integer.in 
5590: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
55a0: 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74  der at an offset
55b0: 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65 20   of 36 from the 
55c0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
55d0: 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74 61   file..^The data
55e0: 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73 6f  base header also
55f0: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
5600: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66   number of the f
5610: 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74 72  irst freelist tr
5620: 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34 2d  unk.page as a 4-
5630: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
5640: 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f 66  integer at an of
5650: 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d 20  fset of 32 from 
5660: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66  the beginning.of
5670: 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a   the file.</p>..
5680: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
5690: 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65 73   btree {B*-Trees
56a0: 7d 20 7b 42 2d 74 72 65 65 7d 3c 2f 74 63 6c 3e  } {B-tree}</tcl>
56b0: 0a 3c 68 32 3e 42 2d 74 72 65 65 20 50 61 67 65  .<h2>B-tree Page
56c0: 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 62  s</h2>..<p>The b
56d0: 2d 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 20  -tree algorithm 
56e0: 70 72 6f 76 69 64 65 73 20 6b 65 79 2f 64 61 74  provides key/dat
56f0: 61 20 73 74 6f 72 61 67 65 20 77 69 74 68 20 75  a storage with u
5700: 6e 69 71 75 65 20 61 6e 64 0a 6f 72 64 65 72 65  nique and.ordere
5710: 64 20 6b 65 79 73 20 6f 6e 20 70 61 67 65 2d 6f  d keys on page-o
5720: 72 69 65 6e 74 65 64 20 73 74 6f 72 61 67 65 20  riented storage 
5730: 64 65 76 69 63 65 73 2e 0a 46 6f 72 20 62 61 63  devices..For bac
5740: 6b 67 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74  kground informat
5750: 69 6f 6e 20 6f 6e 20 62 2d 74 72 65 65 73 2c 20  ion on b-trees, 
5760: 73 65 65 0a 4b 6e 75 74 68 2c 20 3c 75 3e 54 68  see.Knuth, <u>Th
5770: 65 20 41 72 74 20 4f 66 20 43 6f 6d 70 75 74 65  e Art Of Compute
5780: 72 20 50 72 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75  r Programming</u
5790: 3e 2c 20 56 6f 6c 75 6d 65 20 33 20 22 53 6f 72  >, Volume 3 "Sor
57a0: 74 69 6e 67 0a 61 6e 64 20 53 65 61 72 63 68 69  ting.and Searchi
57b0: 6e 67 22 2c 20 70 61 67 65 73 20 34 37 31 2d 34  ng", pages 471-4
57c0: 37 39 2e 20 20 54 77 6f 20 6b 69 6e 64 73 20 6f  79.  Two kinds o
57d0: 66 20 62 2d 74 72 65 65 73 20 61 72 65 20 75 73  f b-trees are us
57e0: 65 64 20 62 79 0a 53 51 4c 69 74 65 2e 20 20 54  ed by.SQLite.  T
57f0: 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61  he algorithm tha
5800: 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20 22 42  t Knuth calls "B
5810: 2a 2d 54 72 65 65 22 20 73 74 6f 72 65 73 20 61  *-Tree" stores a
5820: 6c 6c 20 64 61 74 61 0a 69 6e 20 74 68 65 20 6c  ll data.in the l
5830: 65 61 76 65 73 20 6f 66 20 74 68 65 20 74 72 65  eaves of the tre
5840: 65 2e 20 20 53 51 4c 69 74 65 20 63 61 6c 6c 73  e.  SQLite calls
5850: 20 74 68 69 73 20 76 61 72 69 65 74 79 20 6f 66   this variety of
5860: 20 62 2d 74 72 65 65 0a 61 20 22 74 61 62 6c 65   b-tree.a "table
5870: 20 62 2d 74 72 65 65 22 2e 20 54 68 65 20 61 6c   b-tree". The al
5880: 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75  gorithm that Knu
5890: 74 68 20 63 61 6c 6c 73 20 73 69 6d 70 6c 79 20  th calls simply 
58a0: 22 42 2d 54 72 65 65 22 0a 73 74 6f 72 65 73 20  "B-Tree".stores 
58b0: 62 6f 74 68 20 74 68 65 20 6b 65 79 20 61 6e 64  both the key and
58c0: 20 74 68 65 20 64 61 74 61 20 74 6f 67 65 74 68   the data togeth
58d0: 65 72 20 69 6e 20 62 6f 74 68 20 6c 65 61 76 65  er in both leave
58e0: 73 0a 61 6e 64 20 69 6e 20 69 6e 74 65 72 69 6f  s.and in interio
58f0: 72 20 70 61 67 65 73 2e 20 20 49 6e 20 74 68 65  r pages.  In the
5900: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
5910: 74 61 74 69 6f 6e 2c 20 74 68 65 20 6f 72 69 67  tation, the orig
5920: 69 6e 61 6c 0a 42 2d 54 72 65 65 20 61 6c 67 6f  inal.B-Tree algo
5930: 72 69 74 68 6d 20 73 74 6f 72 65 73 20 6b 65 79  rithm stores key
5940: 73 20 6f 6e 6c 79 2c 20 6f 6d 69 74 74 69 6e 67  s only, omitting
5950: 20 74 68 65 20 64 61 74 61 20 65 6e 74 69 72 65   the data entire
5960: 6c 79 2c 20 61 6e 64 0a 69 73 20 63 61 6c 6c 65  ly, and.is calle
5970: 64 20 61 6e 20 22 69 6e 64 65 78 20 62 2d 74 72  d an "index b-tr
5980: 65 65 22 2e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  ee"...<p>A b-tre
5990: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
59a0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   an interior pag
59b0: 65 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65  e or a leaf page
59c0: 2e 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f  ..A leaf page co
59d0: 6e 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20  ntains keys and 
59e0: 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
59f0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61   table b-tree ea
5a00: 63 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63  ch.key has assoc
5a10: 69 61 74 65 64 20 64 61 74 61 2e 20 20 41 6e 20  iated data.  An 
5a20: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 63 6f  interior page co
5a30: 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73 20 74 6f  ntains.K keys to
5a40: 67 65 74 68 65 72 20 77 69 74 68 20 4b 2b 31 20  gether with K+1 
5a50: 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c  pointers to chil
5a60: 64 20 62 2d 74 72 65 65 20 70 61 67 65 73 2e 0a  d b-tree pages..
5a70: 41 20 22 70 6f 69 6e 74 65 72 22 20 69 6e 20 61  A "pointer" in a
5a80: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5a90: 65 20 70 61 67 65 20 69 73 20 6a 75 73 74 20 74  e page is just t
5aa0: 68 65 20 33 31 2d 62 69 74 20 69 6e 74 65 67 65  he 31-bit intege
5ab0: 72 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  r.page number of
5ac0: 20 74 68 65 20 63 68 69 6c 64 20 70 61 67 65 2e   the child page.
5ad0: 3c 2f 70 3e 0a 0a 3c 70 3e 44 65 66 69 6e 65 20  </p>..<p>Define 
5ae0: 74 68 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c  the depth.of a l
5af0: 65 61 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65  eaf b-tree to be
5b00: 20 31 20 61 6e 64 20 74 68 65 20 64 65 70 74 68   1 and the depth
5b10: 20 6f 66 20 61 6e 79 20 69 6e 74 65 72 69 6f 72   of any interior
5b20: 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20 6f 6e   b-tree to be on
5b30: 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20  e.more than the 
5b40: 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
5b50: 20 61 6e 79 20 6f 66 20 69 74 73 20 63 68 69 6c   any of its chil
5b60: 64 72 65 6e 2e 20 20 5e 49 6e 20 61 20 77 65 6c  dren.  ^In a wel
5b70: 6c 2d 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73  l-formed.databas
5b80: 65 2c 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  e, all children 
5b90: 6f 66 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  of an interior b
5ba0: 2d 74 72 65 65 20 68 61 76 65 20 74 68 65 20 73  -tree have the s
5bb0: 61 6d 65 20 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a  ame depth.</p>..
5bc0: 3c 70 3e 49 6e 20 61 6e 20 69 6e 74 65 72 69 6f  <p>In an interio
5bd0: 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  r b-tree page, t
5be0: 68 65 20 70 6f 69 6e 74 65 72 73 20 61 6e 64 20  he pointers and 
5bf0: 6b 65 79 73 20 6c 6f 67 69 63 61 6c 6c 79 20 61  keys logically a
5c00: 6c 74 65 72 6e 61 74 65 20 0a 77 69 74 68 20 61  lternate .with a
5c10: 20 70 6f 69 6e 74 65 72 20 6f 6e 20 62 6f 74 68   pointer on both
5c20: 20 65 6e 64 73 2e 20 28 54 68 65 20 70 72 65 76   ends. (The prev
5c30: 69 6f 75 73 20 73 65 6e 74 65 6e 63 65 20 69 73  ious sentence is
5c40: 20 74 6f 20 62 65 20 75 6e 64 65 72 73 74 6f 6f   to be understoo
5c50: 64 0a 63 6f 6e 63 65 70 74 75 61 6c 6c 79 20 2d  d.conceptually -
5c60: 20 74 68 65 20 61 63 74 75 61 6c 20 6c 61 79 6f   the actual layo
5c70: 75 74 20 6f 66 20 74 68 65 20 6b 65 79 73 20 61  ut of the keys a
5c80: 6e 64 0a 70 6f 69 6e 74 65 72 73 20 77 69 74 68  nd.pointers with
5c90: 69 6e 20 74 68 65 20 70 61 67 65 20 69 73 20 6d  in the page is m
5ca0: 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20  ore complicated 
5cb0: 61 6e 64 20 77 69 6c 6c 20 62 65 20 64 65 73 63  and will be desc
5cc0: 72 69 62 65 64 20 69 6e 0a 74 68 65 20 73 65 71  ribed in.the seq
5cd0: 75 65 6c 2e 29 20 20 41 6c 6c 20 6b 65 79 73 20  uel.)  All keys 
5ce0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
5cf0: 70 61 67 65 20 61 72 65 20 75 6e 69 71 75 65 20  page are unique 
5d00: 61 6e 64 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c  and are logicall
5d10: 79 0a 6f 72 67 61 6e 69 7a 65 64 20 69 6e 20 61  y.organized in a
5d20: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 66  scending order f
5d30: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
5d40: 74 2e 20 20 28 41 67 61 69 6e 2c 20 74 68 69 73  t.  (Again, this
5d50: 20 6f 72 64 65 72 69 6e 67 0a 69 73 20 6c 6f 67   ordering.is log
5d60: 69 63 61 6c 2c 20 6e 6f 74 20 70 68 79 73 69 63  ical, not physic
5d70: 61 6c 2e 20 20 54 68 65 20 61 63 74 75 61 6c 20  al.  The actual 
5d80: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 6b 65 79 73  location of keys
5d90: 20 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65   within the page
5da0: 0a 69 73 20 61 72 62 69 74 72 61 72 79 2e 29 20  .is arbitrary.) 
5db0: 5e 46 6f 72 20 61 6e 79 20 6b 65 79 20 58 2c 20  ^For any key X, 
5dc0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20  pointers to the 
5dd0: 6c 65 66 74 0a 6f 66 20 61 20 58 20 72 65 66 65  left.of a X refe
5de0: 72 20 74 6f 20 62 2d 74 72 65 65 20 70 61 67 65  r to b-tree page
5df0: 73 20 6f 6e 20 77 68 69 63 68 20 61 6c 6c 20 6b  s on which all k
5e00: 65 79 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  eys are less tha
5e10: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 2e  n or equal to X.
5e20: 0a 5e 50 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  .^Pointers to th
5e30: 65 20 72 69 67 68 74 20 6f 66 20 58 20 72 65 66  e right of X ref
5e40: 65 72 20 74 6f 20 70 61 67 65 73 20 77 68 65 72  er to pages wher
5e50: 65 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 0a  e all keys are .
5e60: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 2e 3c  greater than X.<
5e70: 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 69 6e 20 61  /p>..<p>Within a
5e80: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5e90: 65 20 70 61 67 65 2c 20 65 61 63 68 20 6b 65 79  e page, each key
5ea0: 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 65 72   and the pointer
5eb0: 20 74 6f 20 69 74 73 0a 69 6d 6d 65 64 69 61 74   to its.immediat
5ec0: 65 20 6c 65 66 74 20 61 72 65 20 63 6f 6d 62 69  e left are combi
5ed0: 6e 65 64 20 69 6e 74 6f 20 61 20 73 74 72 75 63  ned into a struc
5ee0: 74 75 72 65 20 63 61 6c 6c 65 64 20 61 20 22 63  ture called a "c
5ef0: 65 6c 6c 22 2e 20 20 54 68 65 0a 72 69 67 68 74  ell".  The.right
5f00: 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20 69 73  -most pointer is
5f10: 20 68 65 6c 64 20 73 65 70 61 72 61 74 65 6c 79   held separately
5f20: 2e 20 20 41 20 6c 65 61 66 20 62 2d 74 72 65 65  .  A leaf b-tree
5f30: 20 70 61 67 65 20 68 61 73 20 6e 6f 0a 70 6f 69   page has no.poi
5f40: 6e 74 65 72 73 2c 20 62 75 74 20 69 74 20 73 74  nters, but it st
5f50: 69 6c 6c 20 75 73 65 73 20 74 68 65 20 63 65 6c  ill uses the cel
5f60: 6c 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 68  l structure to h
5f70: 6f 6c 64 20 6b 65 79 73 20 66 6f 72 0a 69 6e 64  old keys for.ind
5f80: 65 78 20 62 2d 74 72 65 65 73 20 6f 72 20 6b 65  ex b-trees or ke
5f90: 79 73 20 61 6e 64 20 63 6f 6e 74 65 6e 74 20 66  ys and content f
5fa0: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  or table b-trees
5fb0: 2e 20 20 44 61 74 61 20 69 73 20 61 6c 73 6f 0a  .  Data is also.
5fc0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
5fd0: 20 63 65 6c 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   cell..</p>..<p>
5fe0: 45 76 65 72 79 20 62 2d 74 72 65 65 20 70 61 67  Every b-tree pag
5ff0: 65 20 68 61 73 20 61 74 20 6d 6f 73 74 20 6f 6e  e has at most on
6000: 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65 20  e parent b-tree 
6010: 70 61 67 65 2e 0a 41 20 62 2d 74 72 65 65 20 70  page..A b-tree p
6020: 61 67 65 20 77 69 74 68 6f 75 74 20 61 20 70 61  age without a pa
6030: 72 65 6e 74 20 69 73 20 63 61 6c 6c 65 64 20 61  rent is called a
6040: 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 41 20 72   root page.  A r
6050: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 0a  oot b-tree page.
6060: 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68  together with th
6070: 65 20 63 6c 6f 73 75 72 65 20 6f 66 20 69 74 73  e closure of its
6080: 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 6d 20 61   children form a
6090: 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65   complete b-tree
60a0: 2e 0a 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  ..It is possible
60b0: 20 28 61 6e 64 20 69 6e 20 66 61 63 74 20 72 61   (and in fact ra
60c0: 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20  ther common) to 
60d0: 68 61 76 65 20 61 20 63 6f 6d 70 6c 65 74 65 20  have a complete 
60e0: 62 2d 74 72 65 65 0a 74 68 61 74 20 63 6f 6e 73  b-tree.that cons
60f0: 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67 6c 65  ists of a single
6100: 20 70 61 67 65 20 74 68 61 74 20 69 73 20 62 6f   page that is bo
6110: 74 68 20 61 20 6c 65 61 66 20 61 6e 64 20 74 68  th a leaf and th
6120: 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75 73 65 20  e root..Because 
6130: 74 68 65 72 65 20 61 72 65 20 70 6f 69 6e 74 65  there are pointe
6140: 72 73 20 66 72 6f 6d 20 70 61 72 65 6e 74 73 20  rs from parents 
6150: 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20 65 76 65  to children, eve
6160: 72 79 20 70 61 67 65 20 6f 66 20 61 0a 63 6f 6d  ry page of a.com
6170: 70 6c 65 74 65 20 62 2d 74 72 65 65 20 63 61 6e  plete b-tree can
6180: 20 62 65 20 6c 6f 63 61 74 65 64 20 69 66 20 6f   be located if o
6190: 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 70 61 67  nly the root pag
61a0: 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e  e is known.  Hen
61b0: 63 65 2c 0a 62 2d 74 72 65 65 73 20 61 72 65 20  ce,.b-trees are 
61c0: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
61d0: 65 69 72 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  eir root page nu
61e0: 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  mber.</p>..<p>A 
61f0: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 65  b-tree page is e
6200: 69 74 68 65 72 20 61 20 74 61 62 6c 65 20 62 2d  ither a table b-
6210: 74 72 65 65 20 70 61 67 65 20 6f 72 20 61 6e 20  tree page or an 
6220: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
6230: 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20 77 69 74  e..All pages wit
6240: 68 69 6e 20 65 61 63 68 20 63 6f 6d 70 6c 65 74  hin each complet
6250: 65 20 62 2d 74 72 65 65 20 61 72 65 20 6f 66 20  e b-tree are of 
6260: 74 68 65 20 73 61 6d 65 20 74 79 70 65 3a 20 65  the same type: e
6270: 69 74 68 65 72 20 74 61 62 6c 65 0a 6f 72 20 69  ither table.or i
6280: 6e 64 65 78 2e 20 20 54 68 65 72 65 20 69 73 20  ndex.  There is 
6290: 6f 6e 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  one table b-tree
62a0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
62b0: 65 20 66 69 6c 65 0a 66 6f 72 20 65 61 63 68 20  e file.for each 
62c0: 72 6f 77 69 64 20 74 61 62 6c 65 20 69 6e 20 74  rowid table in t
62d0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
62e0: 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79  ma, including sy
62f0: 73 74 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68  stem tables.such
6300: 20 61 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   as sqlite_maste
6310: 72 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65  r.  There is one
6320: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 0a 69 6e   index b-tree.in
6330: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6340: 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
6350: 78 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 2c  x in the schema,
6360: 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
6370: 65 64 20 69 6e 64 65 78 65 73 0a 63 72 65 61 74  ed indexes.creat
6380: 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73 73  ed by uniqueness
6390: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54   constraints.  T
63a0: 68 65 72 65 20 61 72 65 20 6e 6f 20 62 2d 74 72  here are no b-tr
63b0: 65 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ees associated w
63c0: 69 74 68 0a 5b 76 69 72 74 75 61 6c 20 74 61 62  ith.[virtual tab
63d0: 6c 65 73 5d 2e 20 20 53 70 65 63 69 66 69 63 20  les].  Specific 
63e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
63f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
6400: 67 68 74 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20  ght make use.of 
6410: 5b 73 68 61 64 6f 77 20 74 61 62 6c 65 73 5d 20  [shadow tables] 
6420: 66 6f 72 20 73 74 6f 72 61 67 65 2c 20 62 75 74  for storage, but
6430: 20 74 68 6f 73 65 20 73 68 61 64 6f 77 20 74 61   those shadow ta
6440: 62 6c 65 73 20 77 69 6c 6c 20 68 61 76 65 20 73  bles will have s
6450: 65 70 61 72 61 74 65 0a 65 6e 74 72 69 65 73 20  eparate.entries 
6460: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6470: 73 63 68 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55  schema.  [WITHOU
6480: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20  T ROWID] tables 
6490: 75 73 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  use index b-tree
64a0: 73 0a 72 61 74 68 65 72 20 74 68 61 6e 20 61 20  s.rather than a 
64b0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 2c 20 73  table b-trees, s
64c0: 6f 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 69  o there is one.i
64d0: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
64e0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
64f0: 20 66 6f 72 20 65 61 63 68 20 5b 57 49 54 48 4f   for each [WITHO
6500: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
6510: 0a 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72  .The b-tree corr
6520: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65  esponding to the
6530: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
6540: 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 61  able is always a
6550: 20 74 61 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e   table.b-tree an
6560: 64 20 61 6c 77 61 79 73 20 68 61 73 20 61 20 72  d always has a r
6570: 6f 6f 74 20 70 61 67 65 20 6f 66 20 31 2e 0a 54  oot page of 1..T
6580: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
6590: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
65a0: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
65b0: 6d 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f  mber for every o
65c0: 74 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20  ther .table and 
65d0: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
65e0: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
65f0: 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69  .<p>Each entry i
6600: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
6610: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36   consists of a 6
6620: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
6630: 65 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20  eger key.and up 
6640: 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79  to 2147483647 by
6650: 74 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79  tes of arbitrary
6660: 20 64 61 74 61 2e 20 20 28 54 68 65 20 6b 65 79   data.  (The key
6670: 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72   of a table b-tr
6680: 65 65 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ee.corresponds t
6690: 6f 20 74 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66  o the [rowid] of
66a0: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 74   the SQL table t
66b0: 68 61 74 20 74 68 65 20 62 2d 74 72 65 65 20 69  hat the b-tree i
66c0: 6d 70 6c 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65  mplements.).Inte
66d0: 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65  rior table b-tre
66e0: 65 73 20 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79  es hold only key
66f0: 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 74  s and pointers t
6700: 6f 20 63 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20  o children..All 
6710: 64 61 74 61 20 69 73 20 63 6f 6e 74 61 69 6e 65  data is containe
6720: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  d in the table b
6730: 2d 74 72 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70  -tree leaves.</p
6740: 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79  >..<p>Each entry
6750: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   in an index b-t
6760: 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ree consists of 
6770: 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79  an arbitrary key
6780: 20 6f 66 20 75 70 0a 74 6f 20 32 31 34 37 34 38   of up.to 214748
6790: 33 36 34 37 20 62 79 74 65 73 20 69 6e 20 6c 65  3647 bytes in le
67a0: 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64 61 74 61  ngth and no data
67b0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
67c0: 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79  ragment cell_pay
67d0: 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f  load {cell paylo
67e0: 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66  ad}</tcl>.<p>Def
67f0: 69 6e 65 20 74 68 65 20 22 70 61 79 6c 6f 61 64  ine the "payload
6800: 22 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f 20 62  " of a cell to b
6810: 65 20 74 68 65 20 61 72 62 69 74 72 61 72 79 20  e the arbitrary 
6820: 6c 65 6e 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f  length section.o
6830: 66 20 74 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72  f the cell.  For
6840: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
6850: 2c 20 74 68 65 20 6b 65 79 20 69 73 20 61 6c 77  , the key is alw
6860: 61 79 73 20 61 72 62 69 74 72 61 72 79 20 69 6e  ays arbitrary in
6870: 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63   length.and henc
6880: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73  e the payload is
6890: 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 72 65   the key.  There
68a0: 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72   are no arbitrar
68b0: 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74  y length element
68c0: 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f  s.in the cells o
68d0: 66 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65  f interior table
68e0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e   b-tree pages an
68f0: 64 20 73 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73  d so those cells
6900: 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64   have no.payload
6910: 2e 20 20 54 61 62 6c 65 20 62 2d 74 72 65 65 20  .  Table b-tree 
6920: 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61  leaf pages conta
6930: 69 6e 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  in arbitrary len
6940: 67 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a  gth content and.
6950: 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20  so for cells on 
6960: 74 68 6f 73 65 20 70 61 67 65 73 20 74 68 65 20  those pages the 
6970: 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 63  payload is the c
6980: 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20  ontent..<p>When 
6990: 74 68 65 20 73 69 7a 65 20 6f 66 20 70 61 79 6c  the size of payl
69a0: 6f 61 64 20 66 6f 72 20 61 20 63 65 6c 6c 20 65  oad for a cell e
69b0: 78 63 65 65 64 73 20 61 20 63 65 72 74 61 69 6e  xceeds a certain
69c0: 20 74 68 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62   threshold (to.b
69d0: 65 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 29  e defined later)
69e0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66   then only the f
69f0: 69 72 73 74 20 66 65 77 20 62 79 74 65 73 20 6f  irst few bytes o
6a00: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 61 72  f the payload.ar
6a10: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
6a20: 62 2d 74 72 65 65 20 70 61 67 65 20 61 6e 64 20  b-tree page and 
6a30: 74 68 65 20 62 61 6c 61 6e 63 65 20 69 73 20 73  the balance is s
6a40: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
6a50: 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e  d list.of conten
6a60: 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  t overflow pages
6a70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
6a80: 65 65 20 70 61 67 65 20 69 73 20 64 69 76 69 64  ee page is divid
6a90: 65 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20  ed into regions 
6aa0: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
6ab0: 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c   order:..<ol>.<l
6ac0: 69 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  i>The 100-byte d
6ad0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
6ae0: 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61  der (found on pa
6af0: 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54  ge 1 only).<li>T
6b00: 68 65 20 38 20 6f 72 20 31 32 20 62 79 74 65 20  he 8 or 12 byte 
6b10: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6b20: 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20  er.<li>The cell 
6b30: 70 6f 69 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c  pointer array.<l
6b40: 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  i>Unallocated sp
6b50: 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c  ace.<li>The cell
6b60: 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c   content area.<l
6b70: 69 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  i>The reserved r
6b80: 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70  egion..</ol>.</p
6b90: 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d 62 79  >..<p>The 100-by
6ba0: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
6bb0: 20 68 65 61 64 65 72 20 69 73 20 66 6f 75 6e 64   header is found
6bc0: 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c   only on page 1,
6bd0: 20 77 68 69 63 68 20 69 73 0a 61 6c 77 61 79 73   which is.always
6be0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
6bf0: 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72  page.  All other
6c00: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 69 6e   b-tree pages in
6c10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6c20: 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20 31 30 30  le.omit this 100
6c30: 2d 62 79 74 65 20 68 65 61 64 65 72 2e 3c 2f 70  -byte header.</p
6c40: 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65 72 76  >..<p>The reserv
6c50: 65 64 20 72 65 67 69 6f 6e 20 69 73 20 61 6e 20  ed region is an 
6c60: 61 72 65 61 20 6f 66 20 75 6e 75 73 65 64 20 73  area of unused s
6c70: 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
6c80: 6f 66 20 65 76 65 72 79 0a 70 61 67 65 20 28 65  of every.page (e
6c90: 78 63 65 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e  xcept the lockin
6ca0: 67 20 70 61 67 65 29 20 74 68 61 74 20 65 78 74  g page) that ext
6cb0: 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73 65 20  ensions can use 
6cc0: 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61 67 65  to hold per-page
6cd0: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e  .information.  ^
6ce0: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6cf0: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6d00: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
6d10: 20 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e   the one-byte.un
6d20: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 66  signed integer f
6d30: 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66 66 73 65  ound at an offse
6d40: 74 20 6f 66 20 32 30 20 69 6e 74 6f 20 74 68 65  t of 20 into the
6d50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
6d60: 65 61 64 65 72 2e 0a 54 68 65 20 73 69 7a 65 20  eader..The size 
6d70: 6f 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20  of the reserved 
6d80: 72 65 67 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c  region is usuall
6d90: 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e  y zero.</p>..<p>
6da0: 54 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  The b-tree page 
6db0: 68 65 61 64 65 72 20 69 73 20 38 20 62 79 74 65  header is 8 byte
6dc0: 73 20 69 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65  s in size for le
6dd0: 61 66 20 70 61 67 65 73 20 61 6e 64 20 31 32 0a  af pages and 12.
6de0: 62 79 74 65 73 20 66 6f 72 20 69 6e 74 65 72 69  bytes for interi
6df0: 6f 72 20 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d  or pages.  All m
6e00: 75 6c 74 69 62 79 74 65 20 76 61 6c 75 65 73 20  ultibyte values 
6e10: 69 6e 20 74 68 65 20 70 61 67 65 20 68 65 61 64  in the page head
6e20: 65 72 0a 61 72 65 20 62 69 67 2d 65 6e 64 69 61  er.are big-endia
6e30: 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65 20 70 61  n..The b-tree pa
6e40: 67 65 20 68 65 61 64 65 72 20 69 73 20 63 6f 6d  ge header is com
6e50: 70 6f 73 65 64 20 6f 66 20 74 68 65 20 66 6f 6c  posed of the fol
6e60: 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f  lowing fields:</
6e70: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
6e80: 42 2d 74 72 65 65 20 50 61 67 65 20 48 65 61 64  B-tree Page Head
6e90: 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  er Format</i><br
6ea0: 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
6eb0: 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c  1 width="80%">.<
6ec0: 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
6ed0: 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
6ee0: 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  tion.<tr><td ali
6ef0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f00: 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  =top>0<td align=
6f10: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f20: 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>1<td align=lef
6f30: 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65  t>.^The one-byte
6f40: 20 66 6c 61 67 20 61 74 20 6f 66 66 73 65 74 20   flag at offset 
6f50: 30 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  0 indicating the
6f60: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
6f70: 65 2e 3c 75 6c 3e 0a 3c 6c 69 3e 5e 41 20 76 61  e.<ul>.<li>^A va
6f80: 6c 75 65 20 6f 66 20 32 20 28 30 78 30 32 29 20  lue of 2 (0x02) 
6f90: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6fa0: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e  s an interior in
6fb0: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6fc0: 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66  .<li>^A value of
6fd0: 20 35 20 28 30 78 30 35 29 20 6d 65 61 6e 73 20   5 (0x05) means 
6fe0: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
6ff0: 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d  nterior table b-
7000: 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e  tree page..<li>^
7010: 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 28 30  A value of 10 (0
7020: 78 30 61 29 20 6d 65 61 6e 73 20 74 68 65 20 70  x0a) means the p
7030: 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 69 6e  age is a leaf in
7040: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
7050: 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66  .<li>^A value of
7060: 20 31 33 20 28 30 78 30 64 29 20 6d 65 61 6e 73   13 (0x0d) means
7070: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c   the page is a l
7080: 65 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65  eaf table b-tree
7090: 20 70 61 67 65 2e 3c 2f 75 6c 3e 0a 5e 41 6e 79   page.</ul>.^Any
70a0: 20 6f 74 68 65 72 20 76 61 6c 75 65 20 66 6f 72   other value for
70b0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
70c0: 20 74 79 70 65 20 69 73 20 61 6e 20 65 72 72 6f   type is an erro
70d0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  r..<tr><td align
70e0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
70f0: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>1<td align=ce
7100: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7110: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
7120: 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69  .^The two-byte i
7130: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
7140: 20 31 20 67 69 76 65 73 20 74 68 65 20 73 74 61   1 gives the sta
7150: 72 74 20 6f 66 20 74 68 65 0a 66 69 72 73 74 20  rt of the.first 
7160: 66 72 65 65 62 6c 6f 63 6b 20 6f 6e 20 74 68 65  freeblock on the
7170: 20 70 61 67 65 2c 20 6f 72 20 69 73 20 7a 65 72   page, or is zer
7180: 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  o if there are n
7190: 6f 20 66 72 65 65 62 6c 6f 63 6b 73 2e 0a 3c 74  o freeblocks..<t
71a0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
71b0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c  er valign=top>3<
71c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
71d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
71e0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
71f0: 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65   two-byte intege
7200: 72 20 61 74 20 6f 66 66 73 65 74 20 33 20 67 69  r at offset 3 gi
7210: 76 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ves the number o
7220: 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 70  f cells on the p
7230: 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  age..<tr><td ali
7240: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7250: 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d  =top>5<td align=
7260: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7270: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
7280: 74 3e 0a 5e 28 54 68 65 20 74 77 6f 2d 62 79 74  t>.^(The two-byt
7290: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
72a0: 73 65 74 20 35 20 64 65 73 69 67 6e 61 74 65 73  set 5 designates
72b0: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
72c0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a 61  e cell content.a
72d0: 72 65 61 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c  rea.  A zero val
72e0: 75 65 20 66 6f 72 20 74 68 69 73 20 69 6e 74 65  ue for this inte
72f0: 67 65 72 20 69 73 20 69 6e 74 65 72 70 72 65 74  ger is interpret
7300: 65 64 20 61 73 20 36 35 35 33 36 2e 29 5e 0a 3c  ed as 65536.)^.<
7310: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
7320: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37  ter valign=top>7
7330: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7340: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
7350: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68   align=left>.^Th
7360: 65 20 6f 6e 65 2d 62 79 74 65 20 69 6e 74 65 67  e one-byte integ
7370: 65 72 20 61 74 20 6f 66 66 73 65 74 20 37 20 67  er at offset 7 g
7380: 69 76 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20  ives the number 
7390: 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72  of fragmented fr
73a0: 65 65 0a 62 79 74 65 73 20 77 69 74 68 69 6e 20  ee.bytes within 
73b0: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
73c0: 20 61 72 65 61 2e 0a 3c 74 72 3e 3c 74 64 20 61   area..<tr><td a
73d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
73e0: 67 6e 3d 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67  gn=top>8<td alig
73f0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7400: 74 6f 70 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>4<td align=l
7410: 65 66 74 3e 0a 5e 28 54 68 65 20 66 6f 75 72 2d  eft>.^(The four-
7420: 62 79 74 65 20 70 61 67 65 20 6e 75 6d 62 65 72  byte page number
7430: 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 73 20   at offset 8 is 
7440: 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 70  the right-most p
7450: 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 0a 76 61  ointer.  This.va
7460: 6c 75 65 20 61 70 70 65 61 72 73 20 69 6e 20 74  lue appears in t
7470: 68 65 20 68 65 61 64 65 72 20 6f 66 20 69 6e 74  he header of int
7480: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
7490: 65 73 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20 6f  es only and is o
74a0: 6d 69 74 74 65 64 20 66 72 6f 6d 0a 61 6c 6c 20  mitted from.all 
74b0: 6f 74 68 65 72 20 70 61 67 65 73 2e 29 5e 0a 3c  other pages.)^.<
74c0: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
74d0: 0a 0a 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20 70  ..<p>^The cell p
74e0: 6f 69 6e 74 65 72 20 61 72 72 61 79 20 6f 66 20  ointer array of 
74f0: 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 6d  a b-tree page im
7500: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
7510: 73 20 74 68 65 20 62 2d 74 72 65 65 0a 70 61 67  s the b-tree.pag
7520: 65 20 68 65 61 64 65 72 2e 20 20 4c 65 74 20 4b  e header.  Let K
7530: 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   be the number o
7540: 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62  f cells on the b
7550: 74 72 65 65 2e 20 20 5e 54 68 65 20 63 65 6c 6c  tree.  ^The cell
7560: 20 70 6f 69 6e 74 65 72 0a 61 72 72 61 79 20 63   pointer.array c
7570: 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20 32 2d 62  onsists of K 2-b
7580: 79 74 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73  yte integer offs
7590: 65 74 73 20 74 6f 20 74 68 65 20 63 65 6c 6c 20  ets to the cell 
75a0: 63 6f 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65 0a  contents.  ^The.
75b0: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61 72  cell pointers ar
75c0: 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20 6b 65  e arranged in ke
75d0: 79 20 6f 72 64 65 72 20 77 69 74 68 20 6c 65 66  y order with lef
75e0: 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65  t-most cell (the
75f0: 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 0a 73   cell with the.s
7600: 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20 66 69 72  mallest key) fir
7610: 73 74 20 61 6e 64 20 74 68 65 20 72 69 67 68 74  st and the right
7620: 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20  -most cell (the 
7630: 63 65 6c 6c 20 77 69 74 68 20 74 68 65 20 6c 61  cell with the la
7640: 72 67 65 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e  rgest.key) last.
7650: 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f  </p>..<p>Cell co
7660: 6e 74 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20  ntent is stored 
7670: 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  in the cell cont
7680: 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20 74 68  ent region of th
7690: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 53  e b-tree page..S
76a0: 51 4c 69 74 65 20 73 74 72 69 76 65 73 20 74 6f  QLite strives to
76b0: 20 70 6c 61 63 65 20 63 65 6c 6c 73 20 61 73 20   place cells as 
76c0: 66 61 72 20 74 6f 77 61 72 64 20 74 68 65 20 65  far toward the e
76d0: 6e 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65  nd of the b-tree
76e0: 20 70 61 67 65 20 61 73 0a 69 74 20 63 61 6e 2c   page as.it can,
76f0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65 61   in order to lea
7700: 76 65 20 73 70 61 63 65 20 66 6f 72 20 66 75 74  ve space for fut
7710: 75 72 65 20 67 72 6f 77 74 68 20 6f 66 20 74 68  ure growth of th
7720: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61  e cell pointer a
7730: 72 72 61 79 2e 0a 54 68 65 20 61 72 65 61 20 69  rray..The area i
7740: 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 6c 61  n between the la
7750: 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  st cell pointer 
7760: 61 72 72 61 79 20 65 6e 74 72 79 20 61 6e 64 20  array entry and 
7770: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
7780: 0a 74 68 65 20 66 69 72 73 74 20 63 65 6c 6c 20  .the first cell 
7790: 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74  is the unallocat
77a0: 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a  ed region..</p>.
77b0: 0a 3c 70 3e 5e 49 66 20 61 20 70 61 67 65 20 63  .<p>^If a page c
77c0: 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c 73  ontains no cells
77d0: 20 28 77 68 69 63 68 20 69 73 20 6f 6e 6c 79 20   (which is only 
77e0: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 20 72  possible for a r
77f0: 6f 6f 74 20 70 61 67 65 0a 6f 66 20 61 20 74 61  oot page.of a ta
7800: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
7810: 73 20 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e 20  s no rows) then 
7820: 74 68 65 20 6f 66 66 73 65 74 20 74 6f 20 74 68  the offset to th
7830: 65 0a 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e.cell content a
7840: 72 65 61 20 77 69 6c 6c 20 65 71 75 61 6c 20 74  rea will equal t
7850: 68 65 20 70 61 67 65 20 73 69 7a 65 20 6d 69 6e  he page size min
7860: 75 73 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  us the bytes of 
7870: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 2e 0a  reserved space..
7880: 5e 28 49 66 20 74 68 65 20 64 61 74 61 62 61 73  ^(If the databas
7890: 65 20 75 73 65 73 20 61 20 36 35 35 33 36 2d 62  e uses a 65536-b
78a0: 79 74 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  yte page size an
78b0: 64 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73  d the reserved s
78c0: 70 61 63 65 20 69 73 20 7a 65 72 6f 0a 28 74 68  pace is zero.(th
78d0: 65 20 75 73 75 61 6c 20 76 61 6c 75 65 20 66 6f  e usual value fo
78e0: 72 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  r reserved space
78f0: 29 20 74 68 65 6e 20 74 68 65 20 63 65 6c 6c 20  ) then the cell 
7900: 63 6f 6e 74 65 6e 74 20 6f 66 66 73 65 74 20 6f  content offset o
7910: 66 20 61 6e 0a 65 6d 70 74 79 20 70 61 67 65 20  f an.empty page 
7920: 77 61 6e 74 73 20 74 6f 20 62 65 20 36 35 35 33  wants to be 6553
7930: 36 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20 74 68  6.  .However, th
7940: 61 74 20 69 6e 74 65 67 65 72 20 69 73 20 74 6f  at integer is to
7950: 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 73 74  o large to be st
7960: 6f 72 65 64 20 69 6e 20 61 0a 32 2d 62 79 74 65  ored in a.2-byte
7970: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
7980: 72 2c 20 73 6f 20 61 20 76 61 6c 75 65 20 6f 66  r, so a value of
7990: 20 30 20 69 73 20 75 73 65 64 20 69 6e 20 69 74   0 is used in it
79a0: 73 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41  s place.)^..<p>A
79b0: 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61 20   freeblock is a 
79c0: 73 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74  structure used t
79d0: 6f 20 69 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c  o identify unall
79e0: 6f 63 61 74 65 64 20 73 70 61 63 65 20 77 69 74  ocated space wit
79f0: 68 69 6e 0a 61 20 62 2d 74 72 65 65 20 70 61 67  hin.a b-tree pag
7a00: 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73 20 61  e.  Freeblocks a
7a10: 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  re organized as 
7a20: 61 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66  a chain.  ^The f
7a30: 69 72 73 74 20 32 20 62 79 74 65 73 20 6f 66 0a  irst 2 bytes of.
7a40: 61 20 66 72 65 65 62 6c 6f 63 6b 20 61 72 65 20  a freeblock are 
7a50: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  a big-endian int
7a60: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
7a70: 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20  e offset in the 
7a80: 62 2d 74 72 65 65 20 70 61 67 65 0a 6f 66 20 74  b-tree page.of t
7a90: 68 65 20 6e 65 78 74 20 66 72 65 65 62 6c 6f 63  he next freebloc
7aa0: 6b 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20  k in the chain, 
7ab0: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66  or zero if the f
7ac0: 72 65 65 62 6c 6f 63 6b 20 69 73 20 74 68 65 20  reeblock is the 
7ad0: 6c 61 73 74 20 6f 6e 0a 74 68 65 20 63 68 61 69  last on.the chai
7ae0: 6e 2e 20 20 5e 54 68 65 20 74 68 69 72 64 20 61  n.  ^The third a
7af0: 6e 64 20 66 6f 75 72 74 68 20 62 79 74 65 73 20  nd fourth bytes 
7b00: 6f 66 20 65 61 63 68 20 66 72 65 65 62 6c 6f 63  of each freebloc
7b10: 6b 20 66 6f 72 6d 0a 61 20 62 69 67 2d 65 6e 64  k form.a big-end
7b20: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
7b30: 68 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  h is the size of
7b40: 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69   the freeblock i
7b50: 6e 20 62 79 74 65 73 2c 20 69 6e 63 6c 75 64 69  n bytes, includi
7b60: 6e 67 0a 74 68 65 20 34 2d 62 79 74 65 20 68 65  ng.the 4-byte he
7b70: 61 64 65 72 2e 20 20 5e 46 72 65 65 62 6c 6f 63  ader.  ^Freebloc
7b80: 6b 73 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f  ks are always co
7b90: 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72 64 65 72  nnected in order
7ba0: 20 0a 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20   .of increasing 
7bb0: 6f 66 66 73 65 74 2e 20 20 5e 54 68 65 20 73 65  offset.  ^The se
7bc0: 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20 74 68  cond field of th
7bd0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
7be0: 61 64 65 72 20 69 73 20 74 68 65 0a 6f 66 66 73  ader is the.offs
7bf0: 65 74 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  et of the first 
7c00: 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65  freeblock, or ze
7c10: 72 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ro if there are 
7c20: 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e  no freeblocks on
7c30: 20 74 68 65 0a 70 61 67 65 2e 20 20 5e 49 6e 20   the.page.  ^In 
7c40: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d  a well-formed b-
7c50: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 72 65  tree page, there
7c60: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20   will always be 
7c70: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 63 65 6c  at least one cel
7c80: 6c 0a 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  l.before the fir
7c90: 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70  st freeblock.</p
7ca0: 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63  >..<p>A freebloc
7cb0: 6b 20 72 65 71 75 69 72 65 73 20 61 74 20 6c 65  k requires at le
7cc0: 61 73 74 20 34 20 62 79 74 65 73 20 6f 66 20 73  ast 4 bytes of s
7cd0: 70 61 63 65 2e 20 20 49 66 20 74 68 65 72 65 20  pace.  If there 
7ce0: 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 0a 67  is an isolated.g
7cf0: 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20 6f 72  roup of 1, 2, or
7d00: 20 33 20 75 6e 75 73 65 64 20 62 79 74 65 73 20   3 unused bytes 
7d10: 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20  within the cell 
7d20: 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68  content area, th
7d30: 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d 70 72 69  ose bytes.compri
7d40: 73 65 20 61 20 66 72 61 67 6d 65 6e 74 2e 20 20  se a fragment.  
7d50: 5e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  ^The total numbe
7d60: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 6c  r of bytes in al
7d70: 6c 20 66 72 61 67 6d 65 6e 74 73 20 69 73 20 73  l fragments is s
7d80: 74 6f 72 65 64 0a 69 6e 20 74 68 65 20 66 69 66  tored.in the fif
7d90: 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  th field of the 
7da0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
7db0: 65 72 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  er.  ^In a well-
7dc0: 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61  formed b-tree pa
7dd0: 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75  ge,.the total nu
7de0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
7df0: 20 66 72 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e   fragments may n
7e00: 6f 74 20 65 78 63 65 65 64 20 36 30 2e 3c 2f 70  ot exceed 60.</p
7e10: 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20  >..<p>The total 
7e20: 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65 20 73  amount of free s
7e30: 70 61 63 65 20 6f 6e 20 61 20 62 2d 74 72 65 65  pace on a b-tree
7e40: 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f   page consists o
7e50: 66 20 74 68 65 20 73 69 7a 65 0a 6f 66 20 74 68  f the size.of th
7e60: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
7e70: 67 69 6f 6e 20 70 6c 75 73 20 74 68 65 20 74 6f  gion plus the to
7e80: 74 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20  tal size of all 
7e90: 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20  freeblocks plus 
7ea0: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72  the.number of fr
7eb0: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79  agmented free by
7ec0: 74 65 73 2e 20 20 5e 53 51 4c 69 74 65 20 6d 61  tes.  ^SQLite ma
7ed0: 79 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  y from time to t
7ee0: 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61  ime reorganize.a
7ef0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 73 6f 20   b-tree page so 
7f00: 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 6e  that there are n
7f10: 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20  o freeblocks or 
7f20: 66 72 61 67 6d 65 6e 74 20 62 79 74 65 73 2c 20  fragment bytes, 
7f30: 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74 65 73  all.unused bytes
7f40: 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
7f50: 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  n the unallocate
7f60: 64 20 73 70 61 63 65 20 72 65 67 69 6f 6e 2c 20  d space region, 
7f70: 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72  and all.cells ar
7f80: 65 20 70 61 63 6b 65 64 20 74 69 67 68 74 6c 79  e packed tightly
7f90: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
7fa0: 68 65 20 70 61 67 65 2e 20 20 54 68 69 73 20 69  he page.  This i
7fb0: 73 20 63 61 6c 6c 65 64 20 0a 22 64 65 66 72 61  s called ."defra
7fc0: 67 6d 65 6e 74 69 6e 67 22 20 74 68 65 20 62 2d  gmenting" the b-
7fd0: 74 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  tree page.</p>..
7fe0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
7ff0: 20 76 61 72 69 6e 74 20 7b 76 61 72 69 61 62 6c   varint {variabl
8000: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
8010: 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e  } {varint}</tcl>
8020: 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c 65 2d  ..<p>A variable-
8030: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 6f  length integer o
8040: 72 20 22 76 61 72 69 6e 74 22 20 69 73 20 61 20  r "varint" is a 
8050: 73 74 61 74 69 63 20 48 75 66 66 6d 61 6e 20 65  static Huffman e
8060: 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69  ncoding.of 64-bi
8070: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
8080: 74 20 69 6e 74 65 67 65 72 73 20 74 68 61 74 20  t integers that 
8090: 75 73 65 73 20 6c 65 73 73 20 73 70 61 63 65 20  uses less space 
80a0: 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69  for small positi
80b0: 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76  ve .values. .A v
80c0: 61 72 69 6e 74 20 69 73 20 62 65 74 77 65 65 6e  arint is between
80d0: 20 31 20 61 6e 64 20 39 20 62 79 74 65 73 20 69   1 and 9 bytes i
80e0: 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65 20 76  n length.  The v
80f0: 61 72 69 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f  arint consists o
8100: 66 20 65 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72  f either.zero or
8110: 20 6d 6f 72 65 20 62 79 74 65 73 20 77 68 69 63   more bytes whic
8120: 68 20 68 61 76 65 20 74 68 65 20 68 69 67 68 2d  h have the high-
8130: 6f 72 64 65 72 20 62 69 74 20 73 65 74 20 66 6f  order bit set fo
8140: 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 69 6e 67  llowed by a sing
8150: 6c 65 20 62 79 74 65 0a 77 69 74 68 20 74 68 65  le byte.with the
8160: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
8170: 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62  clear, or nine b
8180: 79 74 65 73 2c 20 77 68 69 63 68 65 76 65 72 20  ytes, whichever 
8190: 69 73 20 73 68 6f 72 74 65 72 2e 0a 54 68 65 20  is shorter..The 
81a0: 6c 6f 77 65 72 20 73 65 76 65 6e 20 62 69 74 73  lower seven bits
81b0: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
81c0: 66 69 72 73 74 20 65 69 67 68 74 20 62 79 74 65  first eight byte
81d0: 73 20 61 6e 64 20 61 6c 6c 20 38 20 62 69 74 73  s and all 8 bits
81e0: 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20 62 79   of.the ninth by
81f0: 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  te are used to r
8200: 65 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 36  econstruct the 6
8210: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
8220: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56  ement integer..V
8230: 61 72 69 6e 74 73 20 61 72 65 20 62 69 67 2d 65  arints are big-e
8240: 6e 64 69 61 6e 3a 20 62 69 74 73 20 74 61 6b 65  ndian: bits take
8250: 6e 20 66 72 6f 6d 20 74 68 65 20 65 61 72 6c 69  n from the earli
8260: 65 72 20 62 79 74 65 20 6f 66 20 74 68 65 20 76  er byte of the v
8270: 61 72 69 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f  arint.are the mo
8280: 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 74  re significant t
8290: 68 61 6e 20 62 69 74 73 20 74 61 6b 65 6e 20 66  han bits taken f
82a0: 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79  rom the later by
82b0: 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tes. </p>..<p>Th
82c0: 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65  e format of a ce
82d0: 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ll depends on wh
82e0: 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72  ich kind of b-tr
82f0: 65 65 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c  ee page the cell
8300: 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68  .appears on.  Th
8310: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
8320: 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d  e shows the elem
8330: 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20  ents of a cell, 
8340: 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65  in.order of appe
8350: 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20  arance, for the 
8360: 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70  various b-tree p
8370: 61 67 65 20 74 79 70 65 73 2e 0a 0a 3c 64 6c 3e  age types...<dl>
8380: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
8390: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 20 28  Tree Leaf Cell (
83a0: 68 65 61 64 65 72 20 30 78 30 64 29 3a 3c 2f 70  header 0x0d):</p
83b0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
83c0: 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  l>.<li>A varint 
83d0: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
83e0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
83f0: 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69  es of payload, i
8400: 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65  ncluding any.ove
8410: 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69  rflow.<li>A vari
8420: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
8430: 69 6e 74 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b  integer key, a.k
8440: 2e 61 2e 20 22 5b 72 6f 77 69 64 5d 22 0a 3c 6c  .a. "[rowid]".<l
8450: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
8460: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
8470: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
8480: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
8490: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
84a0: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
84b0: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
84c0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
84d0: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
84e0: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
84f0: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
8500: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
8510: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
8520: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
8530: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61  </dd>..<dt><p>Ta
8540: 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72  ble B-Tree Inter
8550: 69 6f 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72  ior Cell (header
8560: 20 30 78 30 35 29 3a 3c 2f 70 3e 3c 2f 64 74 3e   0x05):</p></dt>
8570: 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69  .<dd><p><ul>.<li
8580: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
8590: 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72  dian page number
85a0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65   which is the le
85b0: 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72  ft child pointer
85c0: 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  ..<li>A varint w
85d0: 68 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65  hich is the inte
85e0: 67 65 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70  ger key.</ul></p
85f0: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49  ></dd>..<dt><p>I
8600: 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66  ndex B-Tree Leaf
8610: 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78   Cell (header 0x
8620: 30 61 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64  0a):</p></dt>.<d
8630: 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  d><p><ul>.<li>A 
8640: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
8650: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
8660: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79   of bytes of key
8670: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
8680: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
8690: 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c  .<li>The initial
86a0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the 
86b0: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65  payload that doe
86c0: 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f  s not spill to o
86d0: 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c  verflow.pages..<
86e0: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
86f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70  endian integer p
8700: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
8710: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
8720: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61   the.overflow pa
8730: 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65  ge list - omitte
8740: 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64  d if all payload
8750: 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74   fits on the b-t
8760: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c  ree page..</ul><
8770: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
8780: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 49 6e  >Index B-Tree In
8790: 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68 65 61  terior Cell (hea
87a0: 64 65 72 20 30 78 30 32 29 3a 3c 2f 70 3e 3c 2f  der 0x02):</p></
87b0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
87c0: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
87d0: 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d  -endian page num
87e0: 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ber which is the
87f0: 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e   left child poin
8800: 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  ter..<li>A varin
8810: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
8820: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
8830: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
8840: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
8850: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
8860: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
8870: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
8880: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
8890: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
88a0: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
88b0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
88c0: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
88d0: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
88e0: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
88f0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
8900: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
8910: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
8920: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
8930: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
8940: 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68  dd>.</dl>..<p>Th
8950: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  e information ab
8960: 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63 61 73  ove can be recas
8970: 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 66  t into a table f
8980: 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77 73  ormat as follows
8990: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  :</p>..<tcl>hd_f
89a0: 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72 6d  ragment cellform
89b0: 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74 20  at {cell format 
89c0: 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c  summary}</tcl>.<
89d0: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
89e0: 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69  e Cell Format</i
89f0: 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
8a00: 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c  1 width="80%">.<
8a10: 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32  tr><th rowspan=2
8a20: 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c 74  >Datatype.    <t
8a30: 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70 65  h colspan=4>Appe
8a40: 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74  ars in....    <t
8a50: 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73 63  h rowspan=2>Desc
8a60: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e  ription.<tr><th>
8a70: 54 61 62 6c 65 20 4c 65 61 66 20 28 30 78 30 64  Table Leaf (0x0d
8a80: 29 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65 20  ).    <th>Table 
8a90: 49 6e 74 65 72 69 6f 72 20 28 30 78 30 35 29 0a  Interior (0x05).
8aa0: 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65      <th>Index Le
8ab0: 61 66 20 28 30 78 30 61 29 0a 20 20 20 20 3c 74  af (0x0a).    <t
8ac0: 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72  h>Index Interior
8ad0: 20 28 30 78 30 32 29 0a 3c 74 72 3e 3c 74 64 20   (0x02).<tr><td 
8ae0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8af0: 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69  ign=top>4-byte i
8b00: 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61  nteger.    <td a
8b10: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8b20: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
8b30: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8b40: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8b50: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8b60: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8b70: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
8b80: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8b90: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8ba0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8bb0: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
8bc0: 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68  umber of left ch
8bd0: 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ild.<tr><td alig
8be0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8bf0: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
8c00: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8c10: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8c20: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8c30: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c40: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8c50: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8c60: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8c70: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8c80: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c90: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8ca0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8cb0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
8cc0: 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c  of payload.<tr><
8cd0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8ce0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
8cf0: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
8d00: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8d10: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8d20: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8d30: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8d40: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8d50: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8d60: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8d70: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8d80: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8d90: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8da0: 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c  left>Rowid.<tr><
8db0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8dc0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20  valign=top>byte 
8dd0: 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c  array.    <td al
8de0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8df0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8e00: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8e10: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8e20: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8e30: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8e40: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8e50: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8e60: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8e70: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8e80: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f  align=left>Paylo
8e90: 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ad.<tr><td align
8ea0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8eb0: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8ec0: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
8ed0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8ee0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8ef0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8f00: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8f10: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8f20: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8f30: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8f40: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8f50: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8f60: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8f70: 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62  n=left>Page numb
8f80: 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72  er of first over
8f90: 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c  flow page.</tabl
8fa0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70  e></center>...<p
8fb0: 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70  >The amount of p
8fc0: 61 79 6c 6f 61 64 20 74 68 61 74 20 73 70 69 6c  ayload that spil
8fd0: 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ls onto overflow
8fe0: 20 70 61 67 65 73 20 61 6c 73 6f 20 64 65 70 65   pages also depe
8ff0: 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61 67 65 20  nds on.the page 
9000: 74 79 70 65 2e 20 20 46 6f 72 20 74 68 65 20 66  type.  For the f
9010: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61  ollowing computa
9020: 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20 62 65 20  tions, let U be 
9030: 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65 0a  the usable size.
9040: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61  of a database pa
9050: 67 65 2c 20 74 68 65 20 74 6f 74 61 6c 20 70 61  ge, the total pa
9060: 67 65 20 73 69 7a 65 20 6c 65 73 73 20 74 68 65  ge size less the
9070: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
9080: 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 65 61  at the.end of ea
9090: 63 68 20 70 61 67 65 2e 20 20 41 6e 64 20 6c 65  ch page.  And le
90a0: 74 20 50 20 62 65 20 74 68 65 20 70 61 79 6c 6f  t P be the paylo
90b0: 61 64 20 73 69 7a 65 2e 20 20 49 6e 20 74 68 65  ad size.  In the
90c0: 20 66 6f 6c 6c 6f 77 69 6e 67 2c 0a 73 79 6d 62   following,.symb
90d0: 6f 6c 20 58 20 72 65 70 72 65 73 65 6e 74 73 20  ol X represents 
90e0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75  the maximum amou
90f0: 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68  nt of payload th
9100: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
9110: 20 64 69 72 65 63 74 6c 79 0a 6f 6e 20 74 68 65   directly.on the
9120: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74   b-tree page wit
9130: 68 6f 75 74 20 73 70 69 6c 6c 69 6e 67 20 6f 6e  hout spilling on
9140: 74 6f 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  to an overflow p
9150: 61 67 65 20 61 6e 64 20 73 79 6d 62 6f 6c 20 4d  age and symbol M
9160: 0a 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20  .represents the 
9170: 6d 69 6e 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f  minimum amount o
9180: 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 6d  f payload that m
9190: 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 6f 6e  ust be stored on
91a0: 20 74 68 65 20 62 74 72 65 65 0a 70 61 67 65 20   the btree.page 
91b0: 62 65 66 6f 72 65 20 73 70 69 6c 6c 69 6e 67 20  before spilling 
91c0: 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 64 6c  is allowed...<dl
91d0: 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  >.<dt><p>Table B
91e0: 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a  -Tree Leaf Cell:
91f0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28  </dt>.<dd><p>.^(
9200: 4c 65 74 20 58 20 62 65 20 55 2d 33 35 2e 20 20  Let X be U-35.  
9210: 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73  If the payload s
9220: 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68  ize P is less th
9230: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 58  an or equal to X
9240: 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65   then.the entire
9250: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
9260: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
9270: 20 6c 65 61 66 20 70 61 67 65 2e 29 5e 0a 5e 28   leaf page.)^.^(
9280: 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29  Let M be ((U-12)
9290: 2a 33 32 2f 32 35 35 29 2d 32 33 20 61 6e 64 20  *32/255)-23 and 
92a0: 6c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d  let K be M+((P-M
92b0: 29 25 28 55 2d 34 29 29 2e 0a 49 66 20 50 20 69  )%(U-4))..If P i
92c0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 58  s greater than X
92d0: 0a 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  .then the number
92e0: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
92f0: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   on the table b-
9300: 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 69  tree leaf page i
9310: 73 20 4b 0a 69 66 20 4b 20 69 73 20 6c 65 73 73  s K.if K is less
9320: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 6f   or equal to X o
9330: 72 20 4d 20 6f 74 68 65 72 77 69 73 65 2e 29 5e  r M otherwise.)^
9340: 0a 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .^(The number of
9350: 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e   bytes stored on
9360: 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20 69   the leaf page i
9370: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
9380: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
9390: 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  ..<dt><p>Table B
93a0: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
93b0: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
93c0: 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73  >.Interior pages
93d0: 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65   of table b-tree
93e0: 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61  s have no payloa
93f0: 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69  d and so there i
9400: 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c  s never.any payl
9410: 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f  oad to spill..</
9420: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e  p></dd>..<dt><p>
9430: 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61  Index B-Tree Lea
9440: 66 20 4f 72 20 49 6e 74 65 72 69 6f 72 20 43 65  f Or Interior Ce
9450: 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  ll:</dt>.<dd><p>
9460: 0a 5e 28 4c 65 74 20 58 20 62 65 20 28 28 55 2d  .^(Let X be ((U-
9470: 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e  12)*64/255)-23).
9480: 20 20 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64    If the payload
9490: 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20   size P is less 
94a0: 74 68 61 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f  than.or equal to
94b0: 20 58 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69   X then the enti
94c0: 72 65 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74  re payload is st
94d0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
94e0: 65 65 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74  ee page.)^.^(Let
94f0: 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32   M be ((U-12)*32
9500: 2f 32 35 35 29 2d 32 33 20 61 6e 64 20 6c 65 74  /255)-23 and let
9510: 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28   K be M+((P-M)%(
9520: 55 2d 34 29 29 2e 0a 49 66 20 50 20 69 73 20 67  U-4))..If P is g
9530: 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74 68  reater than X th
9540: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  en the number.of
9550: 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e   bytes stored on
9560: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
9570: 65 20 70 61 67 65 20 69 73 20 4b 20 69 66 20 4b  e page is K if K
9580: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
9590: 0a 65 71 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d  .equal to X or M
95a0: 20 6f 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28   otherwise.)^.^(
95b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
95c0: 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  tes stored on th
95d0: 65 20 69 6e 64 65 78 20 70 61 67 65 20 69 73 20  e index page is 
95e0: 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20  never less than 
95f0: 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  M.)^.</p></dd>.<
9600: 2f 64 6c 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  /dl>..<p>Here is
9610: 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
9620: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
9630: 68 65 20 73 61 6d 65 20 63 6f 6d 70 75 74 61 74  he same computat
9640: 69 6f 6e 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 58  ion:..<ul>.<li>X
9650: 20 69 73 20 55 2d 33 35 20 66 6f 72 20 74 61 62   is U-35 for tab
9660: 6c 65 20 62 74 72 65 65 20 6c 65 61 66 20 70 61  le btree leaf pa
9670: 67 65 73 20 6f 72 0a 20 20 20 20 28 28 55 2d 31  ges or.    ((U-1
9680: 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 20 66 6f  2)*64/255)-23 fo
9690: 72 20 69 6e 64 65 78 20 70 61 67 65 73 2e 0a 3c  r index pages..<
96a0: 6c 69 3e 4d 20 69 73 20 61 6c 77 61 79 73 20 28  li>M is always (
96b0: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
96c0: 33 2e 0a 3c 6c 69 3e 4c 65 74 20 4b 20 62 65 20  3..<li>Let K be 
96d0: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e  M+((P-M)%(U-4)).
96e0: 0a 3c 6c 69 3e 5e 49 66 20 50 26 6c 74 3b 3d 58  .<li>^If P&lt;=X
96f0: 20 74 68 65 6e 20 61 6c 6c 20 50 20 62 79 74 65   then all P byte
9700: 73 20 6f 66 20 70 61 79 6c 6f 61 64 20 61 72 65  s of payload are
9710: 20 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79   stored directly
9720: 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 62 74 72   on the .    btr
9730: 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20  ee page without 
9740: 6f 76 65 72 66 6c 6f 77 2e 0a 3c 6c 69 3e 5e 49  overflow..<li>^I
9750: 66 20 50 26 67 74 3b 58 20 61 6e 64 20 4b 26 6c  f P&gt;X and K&l
9760: 74 3b 3d 58 20 74 68 65 6e 20 74 68 65 20 66 69  t;=X then the fi
9770: 72 73 74 20 4b 20 62 79 74 65 73 20 6f 66 20 50  rst K bytes of P
9780: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
9790: 68 65 20 0a 20 20 20 20 62 74 72 65 65 20 70 61  he .    btree pa
97a0: 67 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ge and the remai
97b0: 6e 69 6e 67 20 50 2d 4b 20 62 79 74 65 73 20 61  ning P-K bytes a
97c0: 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65  re stored on ove
97d0: 72 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 6c 69  rflow pages..<li
97e0: 3e 5e 49 66 20 50 26 67 74 3b 58 20 61 6e 64 20  >^If P&gt;X and 
97f0: 4b 26 67 74 3b 58 20 74 68 65 6e 20 74 68 65 20  K&gt;X then the 
9800: 66 69 72 73 74 20 4d 20 62 79 74 65 73 20 6f 66  first M bytes of
9810: 20 50 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e   P are stored on
9820: 20 74 68 65 0a 20 20 20 20 62 74 72 65 65 20 70   the.    btree p
9830: 61 67 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61  age and the rema
9840: 69 6e 69 6e 67 20 50 2d 4d 20 62 79 74 65 73 20  ining P-M bytes 
9850: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76  are stored on ov
9860: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 2f  erflow pages..</
9870: 75 6c 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72  ul>..<p>The over
9880: 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20  flow thresholds 
9890: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
98a0: 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66  give a minimum f
98b0: 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69  anout of.4 for i
98c0: 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64  ndex b-trees and
98d0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e   to make sure en
98e0: 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c  ough of the payl
98f0: 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d  oad.is on the b-
9900: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74  tree page that t
9910: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
9920: 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20   can usually be 
9930: 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74  accessed.without
9940: 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f   consulting an o
9950: 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49  verflow page.  I
9960: 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65  n hindsight, the
9970: 20 64 65 73 69 67 6e 65 72 20 6f 66 0a 74 68 65   designer of.the
9980: 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c   SQLite b-tree l
9990: 6f 67 69 63 20 72 65 61 6c 69 7a 65 64 20 74 68  ogic realized th
99a0: 61 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f  at these thresho
99b0: 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62  lds could have b
99c0: 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69  een.made much si
99d0: 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c  mpler.  However,
99e0: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
99f0: 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  s cannot be chan
9a00: 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75  ged.without resu
9a10: 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f  lting in an inco
9a20: 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f  mpatible file fo
9a30: 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63  rmat.  And the c
9a40: 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69  urrent computati
9a50: 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65  ons.work well, e
9a60: 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20  ven if they are 
9a70: 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78  a little complex
9a80: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
9a90: 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20  ragment ovflpgs 
9aa0: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20  {overflow page} 
9ab0: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d  {overflow pages}
9ac0: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43 65 6c 6c 20  </tcl>.<h2>Cell 
9ad0: 50 61 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77  Payload Overflow
9ae0: 20 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e   Pages</h2>..<p>
9af0: 5e 57 68 65 6e 20 74 68 65 20 70 61 79 6c 6f 61  ^When the payloa
9b00: 64 20 6f 66 20 61 20 62 2d 74 72 65 65 20 63 65  d of a b-tree ce
9b10: 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  ll is too large 
9b20: 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20 70  for the b-tree p
9b30: 61 67 65 2c 0a 74 68 65 20 73 75 72 70 6c 75 73  age,.the surplus
9b40: 20 69 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f   is spilled onto
9b50: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
9b60: 20 20 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67 65    ^Overflow page
9b70: 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a  s form a linked.
9b80: 6c 69 73 74 2e 20 20 5e 54 68 65 20 66 69 72 73  list.  ^The firs
9b90: 74 20 66 6f 75 72 20 62 79 74 65 73 20 6f 66 20  t four bytes of 
9ba0: 65 61 63 68 20 6f 76 65 72 66 6c 6f 77 20 70 61  each overflow pa
9bb0: 67 65 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64  ge are a big-end
9bc0: 69 61 6e 0a 69 6e 74 65 67 65 72 20 77 68 69 63  ian.integer whic
9bd0: 68 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  h is the page nu
9be0: 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74  mber of the next
9bf0: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
9c00: 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20  in, or zero.for 
9c10: 74 68 65 20 66 69 6e 61 6c 20 70 61 67 65 20 69  the final page i
9c20: 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54  n the chain.  ^T
9c30: 68 65 20 66 69 66 74 68 20 62 79 74 65 20 74 68  he fifth byte th
9c40: 72 6f 75 67 68 20 74 68 65 20 6c 61 73 74 20 75  rough the last u
9c50: 73 61 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75  sable.byte are u
9c60: 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72  sed to hold over
9c70: 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70  flow content.</p
9c80: 3e 0a 0a 3c 68 32 3e 50 6f 69 6e 74 65 72 20 4d  >..<h2>Pointer M
9c90: 61 70 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67  ap or Ptrmap Pag
9ca0: 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 50 6f 69 6e  es</h2>..<p>Poin
9cb0: 74 65 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61  ter map or ptrma
9cc0: 70 20 70 61 67 65 73 20 61 72 65 20 65 78 74 72  p pages are extr
9cd0: 61 20 70 61 67 65 73 20 69 6e 73 65 72 74 65 64  a pages inserted
9ce0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
9cf0: 73 65 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f  se.to make the o
9d00: 70 65 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74  peration of [aut
9d10: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
9d20: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
9d30: 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66  m] modes.more ef
9d40: 66 69 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20  ficient.  Other 
9d50: 70 61 67 65 20 74 79 70 65 73 20 69 6e 20 74 68  page types in th
9d60: 65 20 64 61 74 61 62 61 73 65 20 74 79 70 69 63  e database typic
9d70: 61 6c 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65  ally have pointe
9d80: 72 73 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74  rs.from parent t
9d90: 6f 20 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78  o child.  For ex
9da0: 61 6d 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72 69  ample, an interi
9db0: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 63  or b-tree page c
9dc0: 6f 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73  ontains pointers
9dd0: 0a 74 6f 20 69 74 73 20 63 68 69 6c 64 20 62 2d  .to its child b-
9de0: 74 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 61  tree pages and a
9df0: 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  n overflow chain
9e00: 20 68 61 73 20 61 20 70 6f 69 6e 74 65 72 0a 66   has a pointer.f
9e10: 72 6f 6d 20 65 61 72 6c 69 65 72 20 74 6f 20 6c  rom earlier to l
9e20: 61 74 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68  ater links in th
9e30: 65 20 63 68 61 69 6e 2e 20 20 41 20 70 74 72 6d  e chain.  A ptrm
9e40: 61 70 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ap page contains
9e50: 20 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61   linkage.informa
9e60: 74 69 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68  tion going in th
9e70: 65 20 6f 70 70 6f 73 69 74 65 20 64 69 72 65 63  e opposite direc
9e80: 74 69 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64  tion, from child
9e90: 20 74 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a   to parent.</p>.
9ea0: 0a 3c 70 3e 5e 50 74 72 6d 61 70 20 70 61 67 65  .<p>^Ptrmap page
9eb0: 73 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  s must exist in 
9ec0: 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  any database fil
9ed0: 65 20 77 68 69 63 68 20 68 61 73 20 61 20 6e 6f  e which has a no
9ee0: 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20 72  n-zero.largest r
9ef0: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 20  oot b-tree page 
9f00: 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20  value at offset 
9f10: 35 32 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  52 in the databa
9f20: 73 65 20 68 65 61 64 65 72 2e 0a 5e 49 66 20 74  se header..^If t
9f30: 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20  he largest root 
9f40: 62 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75  b-tree page valu
9f50: 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  e is zero, then 
9f60: 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75 73  the database mus
9f70: 74 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74  t not.contain pt
9f80: 72 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a  rmap pages.</p>.
9f90: 0a 3c 70 3e 5e 49 6e 20 61 20 64 61 74 61 62 61  .<p>^In a databa
9fa0: 73 65 20 77 69 74 68 20 70 74 72 6d 61 70 20 70  se with ptrmap p
9fb0: 61 67 65 73 2c 20 74 68 65 20 66 69 72 73 74 20  ages, the first 
9fc0: 70 74 72 6d 61 70 20 70 61 67 65 20 69 73 20 70  ptrmap page is p
9fd0: 61 67 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20  age 2..A ptrmap 
9fe0: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
9ff0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62   an array of 5-b
a000: 79 74 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65  yte entries.  Le
a010: 74 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65  t J be the.numbe
a020: 72 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  r of 5-byte entr
a030: 69 65 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ies that will fi
a040: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
a050: 73 70 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e  space of a page.
a060: 0a 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  .(In other words
a070: 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20  , J=U/5.)  ^The 
a080: 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67  first ptrmap pag
a090: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62  e will contain b
a0a0: 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f  ack pointer.info
a0b0: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65  rmation for page
a0c0: 73 20 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c  s 3 through J+2,
a0d0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54 68   inclusive.  ^Th
a0e0: 65 20 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72  e second pointer
a0f0: 20 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c 20 62   map.page will b
a100: 65 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e  e on page J+3 an
a110: 64 20 74 68 61 74 20 70 74 72 6d 61 70 20 70 61  d that ptrmap pa
a120: 67 65 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20  ge will provide 
a130: 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66  back pointer.inf
a140: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67  ormation for pag
a150: 65 73 20 4a 2b 34 20 74 68 72 6f 75 67 68 20 32  es J+4 through 2
a160: 2a 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e 20  *J+3 inclusive. 
a170: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f   And so forth fo
a180: 72 0a 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  r.the entire dat
a190: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
a1a0: 0a 3c 70 3e 5e 28 49 6e 20 61 20 64 61 74 61 62  .<p>^(In a datab
a1b0: 61 73 65 20 74 68 61 74 20 75 73 65 73 20 70 74  ase that uses pt
a1c0: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
a1d0: 70 61 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f  pages at locatio
a1e0: 6e 73 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79  ns identified.by
a1f0: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
a200: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
a210: 20 70 61 72 61 67 72 61 70 68 20 6d 75 73 74 20   paragraph must 
a220: 62 65 20 70 74 72 6d 61 70 20 70 61 67 65 20 61  be ptrmap page a
a230: 6e 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65  nd no.other page
a240: 20 6d 61 79 20 62 65 20 61 20 70 74 72 6d 61 70   may be a ptrmap
a250: 20 70 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20   page.  Except, 
a260: 69 66 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b  if the byte-lock
a270: 20 70 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f   page happens to
a280: 0a 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d  .fall on the sam
a290: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73  e page number as
a2a0: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20   a ptrmap page, 
a2b0: 74 68 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20  then the ptrmap 
a2c0: 69 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20  is moved.to the 
a2d0: 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66  following page f
a2e0: 6f 72 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65  or that one case
a2f0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  .)^</p>..<p>Each
a300: 20 35 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e   5-byte entry on
a310: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 20 70   a ptrmap page p
a320: 72 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e  rovides back-lin
a330: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
a340: 6f 75 74 20 0a 6f 6e 65 20 6f 66 20 74 68 65 20  out .one of the 
a350: 70 61 67 65 73 20 74 68 61 74 20 69 6d 6d 65 64  pages that immed
a360: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
a370: 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20  e pointer map.  
a380: 5e 28 49 66 20 70 61 67 65 20 42 20 69 73 20 61  ^(If page B is a
a390: 0a 70 74 72 6d 61 70 20 70 61 67 65 20 74 68 65  .ptrmap page the
a3a0: 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f  n back-link info
a3b0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61  rmation about pa
a3c0: 67 65 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64  ge B+1 is provid
a3d0: 65 64 20 62 79 0a 74 68 65 20 66 69 72 73 74 20  ed by.the first 
a3e0: 65 6e 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69  entry on the poi
a3f0: 6e 74 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72  nter map.  Infor
a400: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67  mation about pag
a410: 65 20 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65  e B+2 is.provide
a420: 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20  d by the second 
a430: 65 6e 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66  entry.  And so f
a440: 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  orth.)^</p>..<p>
a450: 45 61 63 68 20 35 2d 62 79 74 65 20 70 74 72 6d  Each 5-byte ptrm
a460: 61 70 20 65 6e 74 72 79 20 63 6f 6e 73 69 73 74  ap entry consist
a470: 73 20 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f 66  s of one byte of
a480: 20 22 70 61 67 65 20 74 79 70 65 22 20 69 6e 66   "page type" inf
a490: 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65  ormation.followe
a4a0: 64 20 62 79 20 61 20 34 2d 62 79 74 65 20 62 69  d by a 4-byte bi
a4b0: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
a4c0: 6d 62 65 72 2e 20 20 46 69 76 65 20 70 61 67 65  mber.  Five page
a4d0: 20 74 79 70 65 73 20 61 72 65 20 72 65 63 6f 67   types are recog
a4e0: 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c  nized:.</p>..<ol
a4f0: 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 72  >.<li>A b-tree r
a500: 6f 6f 74 20 70 61 67 65 2e 20 20 54 68 65 0a 70  oot page.  The.p
a510: 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c  age number shoul
a520: 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41  d be zero..<li>A
a530: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20   freelist page. 
a540: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
a550: 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e   should be.zero.
a560: 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73 74 20 70  .<li>The first p
a570: 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61  age of a.cell pa
a580: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 63  yload overflow c
a590: 68 61 69 6e 2e 20 20 54 68 65 20 70 61 67 65 20  hain.  The page 
a5a0: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 62 2d  number is the b-
a5b0: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 0a 63  tree page that.c
a5c0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 65 6c 6c  ontains the cell
a5d0: 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68   whose content h
a5e0: 61 73 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c  as overflowed..<
a5f0: 6c 69 3e 41 20 70 61 67 65 20 69 6e 20 61 6e 20  li>A page in an 
a600: 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f  overflow chain.o
a610: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 66 69  ther than the fi
a620: 72 73 74 20 70 61 67 65 2e 20 20 54 68 65 20 70  rst page.  The p
a630: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
a640: 65 20 70 72 69 6f 72 20 70 61 67 65 20 6f 66 20  e prior page of 
a650: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61  the.overflow cha
a660: 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f  in..<li>A non-ro
a670: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20  ot b-tree page. 
a680: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
a690: 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 20 62   is the parent b
a6a0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c  -tree page..</ol
a6b0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61  >..<p>^In any da
a6c0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74  tabase file that
a6d0: 20 63 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61 70   contains ptrmap
a6e0: 20 70 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72   pages, all b-tr
a6f0: 65 65 20 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d  ee root pages .m
a700: 75 73 74 20 63 6f 6d 65 20 62 65 66 6f 72 65 20  ust come before 
a710: 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74  any non-root b-t
a720: 72 65 65 20 70 61 67 65 2c 20 63 65 6c 6c 20 70  ree page, cell p
a730: 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20  ayload overflow 
a740: 70 61 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73  page, or.freelis
a750: 74 20 70 61 67 65 2e 20 20 54 68 69 73 20 72 65  t page.  This re
a760: 73 74 72 69 63 74 69 6f 6e 20 65 6e 73 75 72 65  striction ensure
a770: 73 20 74 68 61 74 20 61 20 72 6f 6f 74 20 70 61  s that a root pa
a780: 67 65 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65  ge will never.be
a790: 20 6d 6f 76 65 64 20 64 75 72 69 6e 67 20 61 6e   moved during an
a7a0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20   auto-vacuum or 
a7b0: 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75  incremental-vacu
a7c0: 75 6d 2e 20 20 54 68 65 20 61 75 74 6f 2d 76 61  um.  The auto-va
a7d0: 63 75 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20  cuum.logic does 
a7e0: 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20  not know how to 
a7f0: 75 70 64 61 74 65 20 74 68 65 20 72 6f 6f 74 5f  update the root_
a800: 70 61 67 65 20 66 69 65 6c 64 20 6f 66 20 74 68  page field of th
a810: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  e sqlite_master.
a820: 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 69 74 20  table and so it 
a830: 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  is necessary to 
a840: 70 72 65 76 65 6e 74 20 72 6f 6f 74 20 70 61 67  prevent root pag
a850: 65 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f  es from being mo
a860: 76 65 64 0a 64 75 72 69 6e 67 20 61 6e 20 61 75  ved.during an au
a870: 74 6f 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72 64  to-vacuum in ord
a880: 65 72 20 74 6f 20 70 72 65 73 65 72 76 65 20 74  er to preserve t
a890: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20  he integrity of 
a8a0: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
a8b0: 72 20 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20  r table.  ^Root 
a8c0: 70 61 67 65 73 20 61 72 65 20 6d 6f 76 65 64 20  pages are moved 
a8d0: 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
a8e0: 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65   of the.database
a8f0: 20 66 69 6c 65 20 62 79 20 74 68 65 20 43 52 45   file by the CRE
a900: 41 54 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54  ATE TABLE, CREAT
a910: 45 20 49 4e 44 45 58 2c 20 44 52 4f 50 20 54 41  E INDEX, DROP TA
a920: 42 4c 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e  BLE, and.DROP IN
a930: 44 45 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c  DEX operations.<
a940: 2f 70 3e 0a 0a 3c 68 31 3e 53 63 68 65 6d 61 20  /p>..<h1>Schema 
a950: 4c 61 79 65 72 3c 2f 68 31 3e 0a 0a 3c 70 3e 54  Layer</h1>..<p>T
a960: 68 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78  he foregoing tex
a970: 74 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d  t describes low-
a980: 6c 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66  level aspects of
a990: 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65   the SQLite file
a9a0: 0a 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d  .format.  The b-
a9b0: 74 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70  tree mechanism p
a9c0: 72 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66  rovides a powerf
a9d0: 75 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74  ul and efficient
a9e0: 20 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73   means of.access
a9f0: 69 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61  ing a large data
aa00: 20 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74   set.  This sect
aa10: 69 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62  ion will describ
aa20: 65 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65  e how the.low-le
aa30: 76 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72  vel b-tree layer
aa40: 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
aa50: 65 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76  ement higher-lev
aa60: 65 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74  el SQL.capabilit
aa70: 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ies.</p>..<tcl>h
aa80: 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72  d_fragment recor
aa90: 64 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64  d_format {record
aaa0: 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
aab0: 68 32 3e 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  h2>Record Format
aac0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 64 61  </h2>..<p>The da
aad0: 74 61 20 66 6f 72 20 61 20 74 61 62 6c 65 20 62  ta for a table b
aae0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20  -tree leaf page 
aaf0: 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61  and the key.of a
ab00: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  n index b-tree p
ab10: 61 67 65 20 77 61 73 20 63 68 61 72 61 63 74 65  age was characte
ab20: 72 69 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61  rized above.as a
ab30: 6e 20 61 72 62 69 74 72 61 72 79 20 73 65 71 75  n arbitrary sequ
ab40: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54  ence of bytes..T
ab50: 68 65 20 70 72 69 6f 72 20 64 69 73 63 75 73 73  he prior discuss
ab60: 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e  ion mentioned on
ab70: 65 20 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73  e key being less
ab80: 20 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62   than another, b
ab90: 75 74 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e  ut.did not defin
aba0: 65 20 77 68 61 74 20 22 6c 65 73 73 20 74 68 61  e what "less tha
abb0: 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63  n" meant.  The c
abc0: 75 72 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77  urrent section w
abd0: 69 6c 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73  ill address.thes
abe0: 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e  e omissions.</p>
abf0: 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69  ..<p>Payload, ei
ac00: 74 68 65 72 20 74 61 62 6c 65 20 62 2d 74 72 65  ther table b-tre
ac10: 65 20 64 61 74 61 20 6f 72 20 69 6e 64 65 78 20  e data or index 
ac20: 62 2d 74 72 65 65 20 6b 65 79 73 2c 20 0a 69 73  b-tree keys, .is
ac30: 20 61 6c 77 61 79 73 20 69 6e 20 74 68 65 20 22   always in the "
ac40: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a  record format"..
ac50: 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  The record forma
ac60: 74 20 64 65 66 69 6e 65 73 20 61 20 73 65 71 75  t defines a sequ
ac70: 65 6e 63 65 20 6f 66 20 76 61 6c 75 65 73 20 63  ence of values c
ac80: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20  orresponding.to 
ac90: 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62  columns in a tab
aca0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
acb0: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
acc0: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 75  specifies the nu
acd0: 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c  mber.of columns,
ace0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
acf0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e   each column, an
ad00: 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
ad10: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70   each column.</p
ad20: 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64  >..<p>The record
ad30: 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78   format makes ex
ad40: 74 65 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74  tensive use of t
ad50: 68 65 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65  he .[variable-le
ad60: 6e 67 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72  ngth integer] or
ad70: 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73   [varint].repres
ad80: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62  entation of 64-b
ad90: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
ada0: 72 73 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  rs defined above
adb0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
adc0: 72 61 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79  ragment serialty
add0: 70 65 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d  pe {serial type}
ade0: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c   {serial types}<
adf0: 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72  /tcl>.<p>A recor
ae00: 64 20 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61  d contains a hea
ae10: 64 65 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20  der and a body, 
ae20: 69 6e 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20  in that order.  
ae30: 0a 5e 28 54 68 65 20 68 65 61 64 65 72 20 62 65  .^(The header be
ae40: 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
ae50: 6c 65 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  le varint which 
ae60: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74  determines the t
ae70: 6f 74 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62  otal number.of b
ae80: 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64  ytes in the head
ae90: 65 72 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20  er.  The varint 
aea0: 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a  value is the siz
aeb0: 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
aec0: 69 6e 0a 62 79 74 65 73 20 69 6e 63 6c 75 64 69  in.bytes includi
aed0: 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
aee0: 6e 74 20 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46  nt itself.)^  ^F
aef0: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a  ollowing the siz
af00: 65 20 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65  e varint are.one
af10: 20 6f 72 20 6d 6f 72 65 20 61 64 64 69 74 69 6f   or more additio
af20: 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
af30: 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68   per column.  Th
af40: 65 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76  ese additional v
af50: 61 72 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65  arints.are calle
af60: 64 20 22 73 65 72 69 61 6c 20 74 79 70 65 22 20  d "serial type" 
af70: 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64 65 74 65  numbers and.dete
af80: 72 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74 79  rmine the dataty
af90: 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  pe of each colum
afa0: 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  n, according to 
afb0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68  the following ch
afc0: 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  art:</p>..<cente
afd0: 72 3e 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70  r>.<i>Serial Typ
afe0: 65 20 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52  e Codes Of The R
aff0: 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e  ecord Format</i>
b000: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
b010: 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
b020: 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c  >.<tr><th>Serial
b030: 20 54 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74   Type<th>Content
b040: 20 53 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67   Size<th>Meaning
b050: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
b060: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b070: 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >0<td valign=top
b080: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
b090: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b0a0: 56 61 6c 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e  Value is a NULL.
b0b0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
b0c0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b0d0: 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >1<td valign=top
b0e0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
b0f0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b100: 56 61 6c 75 65 20 69 73 20 61 6e 20 38 2d 62 69  Value is an 8-bi
b110: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
b120: 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c  t integer..<tr><
b130: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b140: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20  ign=center>2<td 
b150: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b160: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69  =center>2<td ali
b170: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b180: 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  is a big-endian 
b190: 31 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  16-bit twos-comp
b1a0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
b1b0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b1c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b1d0: 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  3<td valign=top 
b1e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74  align=center>3<t
b1f0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b200: 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e  alue is a big-en
b210: 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73  dian 24-bit twos
b220: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
b230: 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ger..<tr><td val
b240: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b250: 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e  nter>4<td valign
b260: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b270: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
b280: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62  t>.^Value is a b
b290: 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
b2a0: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
b2b0: 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74   integer..<tr><t
b2c0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b2d0: 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74 64 20 76  gn=center>5<td v
b2e0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b2f0: 63 65 6e 74 65 72 3e 36 3c 74 64 20 61 6c 69 67  center>6<td alig
b300: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b310: 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 34  s a big-endian 4
b320: 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  8-bit twos-compl
b330: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c  ement integer..<
b340: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b350: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
b360: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b370: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
b380: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b390: 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64  lue is a big-end
b3a0: 69 61 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d  ian 64-bit twos-
b3b0: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
b3c0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
b3d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
b3e0: 74 65 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>7<td valign=
b3f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b400: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >8<td align=left
b410: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
b420: 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35  g-endian IEEE 75
b430: 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c  4-2008 64-bit fl
b440: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
b450: 62 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ber..<tr><td val
b460: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b470: 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
b480: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b490: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
b4a0: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65  t>.^Value is the
b4b0: 20 69 6e 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c   integer 0. (Onl
b4c0: 79 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  y available for 
b4d0: 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20  [schema format] 
b4e0: 34 20 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c  4 and higher.).<
b4f0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b500: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39  p align=center>9
b510: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b520: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
b530: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b540: 6c 75 65 20 69 73 20 74 68 65 20 69 6e 74 65 67  lue is the integ
b550: 65 72 20 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69  er 1. (Only avai
b560: 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d  lable for [schem
b570: 61 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20  a format] 4 and 
b580: 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64  higher.).<tr><td
b590: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b5a0: 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20  n=center>10,11. 
b5b0: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
b5c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26  p align=center>&
b5d0: 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c  nbsp;<td align=l
b5e0: 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64  eft>.<i>Not used
b5f0: 2e 20 20 52 65 73 65 72 76 65 64 20 66 6f 72 20  .  Reserved for 
b600: 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c  expansion.</i>.<
b610: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b620: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
b630: 26 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65  &#x2265;12 and e
b640: 76 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  ven.    <td vali
b650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
b660: 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20  ter>(N-12)/2<td 
b670: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b680: 75 65 20 69 73 20 61 20 42 4c 4f 42 20 74 68 61  ue is a BLOB tha
b690: 74 20 69 73 20 28 4e 2d 31 32 29 2f 32 20 62 79  t is (N-12)/2 by
b6a0: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 3c  tes in length..<
b6b0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b6c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
b6d0: 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64 20 6f  &#x2265;13 and o
b6e0: 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  dd.    <td valig
b6f0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b700: 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61  er>(N-13)/2<td a
b710: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b720: 65 20 69 73 20 61 20 73 74 72 69 6e 67 20 69 6e  e is a string in
b730: 20 74 68 65 20 5b 74 65 78 74 20 65 6e 63 6f 64   the [text encod
b740: 69 6e 67 5d 20 61 6e 64 20 28 4e 2d 31 33 29 2f  ing] and (N-13)/
b750: 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  2 bytes in lengt
b760: 68 2e 0a 5e 54 68 65 20 6e 75 6c 20 74 65 72 6d  h..^The nul term
b770: 69 6e 61 74 6f 72 20 69 73 20 6e 6f 74 20 73 74  inator is not st
b780: 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  ored..</table></
b790: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
b7a0: 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72 69  header size vari
b7b0: 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79  nt.and serial ty
b7c0: 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20  pe varints will 
b7d0: 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20  usually consist 
b7e0: 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  of a single byte
b7f0: 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79  .  The.serial ty
b800: 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c  pe varints for l
b810: 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64  arge strings and
b820: 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74   BLOBs might ext
b830: 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68  end to two or th
b840: 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73  ree.byte varints
b850: 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74 68  , but that is th
b860: 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68  e exception rath
b870: 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65  er than the rule
b880: 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f  . .The varint fo
b890: 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66 66  rmat is very eff
b8a0: 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67  icient at coding
b8b0: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
b8c0: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  er.</p>..<p>^The
b8d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
b8e0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
b8f0: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
b900: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
b910: 64 65 72 2e 0a 5e 28 46 6f 72 20 73 65 72 69 61  der..^(For seria
b920: 6c 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39 2c  l types 0, 8, 9,
b930: 20 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68 65   12, and 13, the
b940: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20 62   value is zero b
b950: 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20  ytes in.length. 
b960: 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20   If all columns 
b970: 61 72 65 20 6f 66 20 74 68 65 73 65 20 74 79 70  are of these typ
b980: 65 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64 79  es then the body
b990: 20 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a   section of the.
b9a0: 72 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79 2e  record is empty.
b9b0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 65  )^</p>..<p>^A re
b9c0: 63 6f 72 64 20 6d 69 67 68 74 20 68 61 76 65 20  cord might have 
b9d0: 66 65 77 65 72 20 76 61 6c 75 65 73 20 74 68 61  fewer values tha
b9e0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
b9f0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 63  columns in the.c
ba00: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
ba10: 6c 65 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61  le.  This can ha
ba20: 70 70 65 6e 2c 20 66 6f 72 20 65 78 61 6d 70 6c  ppen, for exampl
ba30: 65 2c 20 61 66 74 65 72 20 61 6e 0a 5b 41 4c 54  e, after an.[ALT
ba40: 45 52 20 54 41 42 4c 45 7c 41 4c 54 45 52 20 54  ER TABLE|ALTER T
ba50: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
ba60: 55 4d 4e 5d 20 53 51 4c 20 73 74 61 74 65 6d 65  UMN] SQL stateme
ba70: 6e 74 20 68 61 73 20 69 6e 63 72 65 61 73 65 64  nt has increased
ba80: 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  .the number of c
ba90: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
baa0: 62 6c 65 20 73 63 68 65 6d 61 20 77 69 74 68 6f  ble schema witho
bab0: 75 74 20 6d 6f 64 69 66 79 69 6e 67 20 70 72 65  ut modifying pre
bac0: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 69 6e  existing rows.in
bad0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 4d 69 73   the table..^Mis
bae0: 73 69 6e 67 20 76 61 6c 75 65 73 20 61 74 20 74  sing values at t
baf0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
bb00: 63 6f 72 64 20 61 72 65 20 66 69 6c 6c 65 64 20  cord are filled 
bb10: 69 6e 20 75 73 69 6e 67 20 74 68 65 0a 5b 64 65  in using the.[de
bb20: 66 61 75 6c 74 20 76 61 6c 75 65 5d 20 66 6f 72  fault value] for
bb30: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
bb40: 6e 67 20 63 6f 6c 75 6d 6e 73 20 64 65 66 69 6e  ng columns defin
bb50: 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ed in the table 
bb60: 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  schema..</p>...<
bb70: 68 32 3e 52 65 63 6f 72 64 20 53 6f 72 74 20 4f  h2>Record Sort O
bb80: 72 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rder</h2>..<p>Th
bb90: 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20  e order of keys 
bba0: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
bbb0: 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ee is determined
bbc0: 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64   by the sort ord
bbd0: 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64  er of.the record
bbe0: 73 20 74 68 61 74 20 74 68 65 20 6b 65 79 73 20  s that the keys 
bbf0: 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f  represent.  Reco
bc00: 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72  rd comparison pr
bc10: 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a  ogresses column.
bc20: 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75  by column.  Colu
bc30: 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20  mns of a record 
bc40: 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f  are examined fro
bc50: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
bc60: 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69 72    The.first pair
bc70: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
bc80: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64   are not equal d
bc90: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65  etermines the re
bca0: 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20  lative order.of 
bcb0: 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e  the two records.
bcc0: 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72    The sort order
bcd0: 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63   of individual c
bce0: 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c  olumns is as.fol
bcf0: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
bd00: 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75 65  <li>^(NULL value
bd10: 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 20 30  s (serial type 0
bd20: 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29 5e 0a  ) sort first.)^.
bd30: 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20 76 61  <li>^(Numeric va
bd40: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
bd50: 65 73 20 31 20 74 68 72 6f 75 67 68 20 39 29 20  es 1 through 9) 
bd60: 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c 4c 73  sort after NULLs
bd70: 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20 6e 75  .      and in nu
bd80: 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e 0a 3c  meric order.)^.<
bd90: 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75 65 73  li>^(Text values
bda0: 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74 79 70   (odd serial typ
bdb0: 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67 65 72  es 13 and larger
bdc0: 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e 75 6d  ) sort after num
bdd0: 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65 73 20  eric.    values 
bde0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64 65 74  in the order det
bdf0: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63  ermined by the c
be00: 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e  olumns [collatin
be10: 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c  g function].)^.<
be20: 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75 65 73  li>^(BLOB values
be30: 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74 79   (even serial ty
be40: 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67 65  pes 12 and large
be50: 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61 6e 64  r) sort last and
be60: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 0a 20   in the order . 
be70: 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79     determined by
be80: 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f   memcmp().)^.</o
be90: 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74  l>..<p>A [collat
bea0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f  ing function] fo
beb0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  r each column is
bec0: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72   necessary in or
bed0: 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  der to compute.t
bee0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74  he order of text
bef0: 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c 69 74   fields..^(SQLit
bf00: 65 20 64 65 66 69 6e 65 73 20 74 68 72 65 65 20  e defines three 
bf10: 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69  built-in collati
bf20: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a  ng functions:)^.
bf30: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
bf40: 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  e><table border=
bf50: 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30  0 cellspacing=10
bf60: 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  >.<tr><td valign
bf70: 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20 20  =top>BINARY.    
bf80: 3c 74 64 3e 20 5e 28 54 68 65 20 62 75 69 6c 74  <td> ^(The built
bf90: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
bfa0: 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 73 74  tion compares st
bfb0: 72 69 6e 67 73 20 62 79 74 65 20 62 79 20 62 79  rings byte by by
bfc0: 74 65 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67  te.        using
bfd0: 20 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75   the memcmp() fu
bfe0: 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66  nction.        f
bff0: 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
c000: 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 3c 74   C library.)^.<t
c010: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
c020: 3e 4e 4f 43 41 53 45 0a 20 20 20 20 3c 74 64 3e  >NOCASE.    <td>
c030: 20 5e 28 54 68 65 20 4e 4f 43 41 53 45 20 63 6f   ^(The NOCASE co
c040: 6c 6c 61 74 69 6f 6e 20 69 73 20 6c 69 6b 65 20  llation is like 
c050: 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74 68  BINARY except th
c060: 61 74 20 75 70 70 65 72 63 61 73 65 0a 20 20 20  at uppercase.   
c070: 20 20 20 20 20 41 53 43 49 49 20 63 68 61 72 61       ASCII chara
c080: 63 74 65 72 73 20 28 27 41 27 20 74 68 72 6f 75  cters ('A' throu
c090: 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20 20 20  gh 'Z').        
c0a0: 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20  are folded into 
c0b0: 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73 65 20  their lowercase 
c0c0: 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72 69 6f  equivalents prio
c0d0: 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68 65  r to running the
c0e0: 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72 69  .        compari
c0f0: 73 6f 6e 2e 20 20 4f 6e 6c 79 20 41 53 43 49 49  son.  Only ASCII
c100: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
c110: 63 61 73 65 2d 66 6f 6c 64 65 64 2e 29 5e 0a 20  case-folded.)^. 
c120: 20 20 20 20 20 20 20 5e 28 4e 4f 43 41 53 45 0a         ^(NOCASE.
c130: 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f 74          does not
c140: 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65 6e   implement a gen
c150: 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e 69  eral purpose uni
c160: 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63 6f  code caseless co
c170: 6d 70 61 72 69 73 6f 6e 2e 29 5e 0a 3c 74 72 3e  mparison.)^.<tr>
c180: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 52  <td valign=top>R
c190: 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 20 5e 28  TRIM.    <td> ^(
c1a0: 52 54 52 49 4d 20 69 73 20 6c 69 6b 65 20 42 49  RTRIM is like BI
c1b0: 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74  NARY except that
c1c0: 20 65 78 74 72 61 20 73 70 61 63 65 73 20 61 74   extra spaces at
c1d0: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 69 74 68   the end of eith
c1e0: 65 72 0a 20 20 20 20 20 20 20 20 20 73 74 72 69  er.         stri
c1f0: 6e 67 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ng do not change
c200: 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49 6e   the result.  In
c210: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 73 74   other words, st
c220: 72 69 6e 67 73 20 77 69 6c 6c 0a 20 20 20 20 20  rings will.     
c230: 20 20 20 20 63 6f 6d 70 61 72 65 20 65 71 75 61      compare equa
c240: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
c250: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 79   as long as they
c260: 0a 20 20 20 20 20 20 20 20 20 64 69 66 66 65 72  .         differ
c270: 20 6f 6e 6c 79 20 69 6e 20 74 68 65 20 6e 75 6d   only in the num
c280: 62 65 72 20 6f 66 20 73 70 61 63 65 73 20 61 74  ber of spaces at
c290: 20 74 68 65 20 65 6e 64 2e 29 5e 0a 3c 2f 74 61   the end.)^.</ta
c2a0: 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
c2b0: 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f 6e 61  >..<p>^Additiona
c2c0: 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70  l application-sp
c2d0: 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e 67  ecific collating
c2e0: 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62   functions can b
c2f0: 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69 74  e added to.SQLit
c300: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
c310: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
c320: 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61  ation()] interfa
c330: 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ce.</p>..<p>^The
c340: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
c350: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
c360: 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73 20 42  all strings is B
c370: 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e 61 74  INARY..^Alternat
c380: 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ive collating fu
c390: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61 62 6c  nctions for tabl
c3a0: 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62 65  e columns can be
c3b0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
c3c0: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
c3d0: 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e 67   statement using
c3e0: 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61   the COLLATE cla
c3f0: 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f 6c 75  use on the [colu
c400: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a  mn definition]..
c410: 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20 69  ^When a column i
c420: 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20 73  s indexed, the s
c430: 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ame collating fu
c440: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
c450: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
c460: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
c470: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 65   is used for the
c480: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69   column in the i
c490: 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c 74  ndex, by default
c4a0: 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63 61  ,.though this ca
c4b0: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden 
c4c0: 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45 20  using a COLLATE 
c4d0: 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a 5b  clause in the .[
c4e0: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
c4f0: 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 32 3e 52 65  atement...<h2>Re
c500: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
c510: 53 51 4c 20 54 61 62 6c 65 73 3c 2f 68 32 3e 0a  SQL Tables</h2>.
c520: 0a 3c 70 3e 20 5e 45 61 63 68 20 6f 72 64 69 6e  .<p> ^Each ordin
c530: 61 72 79 20 53 51 4c 20 74 61 62 6c 65 20 69 6e  ary SQL table in
c540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
c550: 68 65 6d 61 20 69 73 20 72 65 70 72 65 73 65 6e  hema is represen
c560: 74 65 64 20 6f 6e 2d 64 69 73 6b 0a 62 79 20 61  ted on-disk.by a
c570: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20   table b-tree.  
c580: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74  ^Each entry in t
c590: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
c5a0: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
c5b0: 20 72 6f 77 0a 6f 66 20 74 68 65 20 53 51 4c 20   row.of the SQL 
c5c0: 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 5b 72 6f  table.  ^The [ro
c5d0: 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51 4c 20  wid] of the SQL 
c5e0: 74 61 62 6c 65 20 69 73 20 74 68 65 20 36 34 2d  table is the 64-
c5f0: 62 69 74 20 73 69 67 6e 65 64 0a 69 6e 74 65 67  bit signed.integ
c600: 65 72 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  er key for each 
c610: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
c620: 6c 65 20 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a 0a  le b-tree.</p>..
c630: 3c 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74  <p> ^The content
c640: 20 6f 66 20 65 61 63 68 20 53 51 4c 20 74 61 62   of each SQL tab
c650: 6c 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  le row is stored
c660: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
c670: 20 66 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63   file by.first c
c680: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c  ombining the val
c690: 75 65 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f  ues in the vario
c6a0: 75 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20  us columns into 
c6b0: 61 20 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20  a byte array.in 
c6c0: 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
c6d0: 74 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20  t, then storing 
c6e0: 74 68 61 74 20 62 79 74 65 20 61 72 72 61 79 20  that byte array 
c6f0: 61 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  as the payload i
c700: 6e 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68  n.an entry in th
c710: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20  e table b-tree. 
c720: 20 5e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76   ^The order of v
c730: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
c740: 6f 72 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20  ord is.the same 
c750: 61 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  as the order of 
c760: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53  columns in the S
c770: 51 4c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  QL table definit
c780: 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51  ion..^When an SQ
c790: 4c 20 74 61 62 6c 65 20 69 6e 63 6c 75 64 65 73  L table includes
c7a0: 20 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49   an.[INTEGER PRI
c7b0: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e  MARY KEY] column
c7c0: 20 28 77 68 69 63 68 20 61 6c 69 61 73 65 73 20   (which aliases 
c7d0: 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 74 68 65  the [rowid]) the
c7e0: 6e 20 74 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70  n that.column ap
c7f0: 70 65 61 72 73 20 69 6e 20 74 68 65 20 72 65 63  pears in the rec
c800: 6f 72 64 20 61 73 20 61 20 4e 55 4c 4c 20 76 61  ord as a NULL va
c810: 6c 75 65 2e 20 20 5e 53 51 4c 69 74 65 20 77 69  lue.  ^SQLite wi
c820: 6c 6c 20 61 6c 77 61 79 73 20 75 73 65 0a 74 68  ll always use.th
c830: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6b  e table b-tree k
c840: 65 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74  ey rather than t
c850: 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68  he NULL value wh
c860: 65 6e 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  en referencing t
c870: 68 65 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  he.[INTEGER PRIM
c880: 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e  ARY KEY] column.
c890: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68  </p>..<p> ^If th
c8a0: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
c8b0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c  a column is REAL
c8c0: 20 61 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e   and that column
c8d0: 20 63 6f 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75   contains a.valu
c8e0: 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 6f  e that can be co
c8f0: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
c900: 74 65 67 65 72 20 77 69 74 68 6f 75 74 20 6c 6f  teger without lo
c910: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
c920: 6e 0a 28 69 66 20 74 68 65 20 76 61 6c 75 65 20  n.(if the value 
c930: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 66 72 61 63  contains no frac
c940: 74 69 6f 6e 61 6c 20 70 61 72 74 20 61 6e 64 20  tional part and 
c950: 69 73 20 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65  is not too large
c960: 20 74 6f 20 62 65 0a 72 65 70 72 65 73 65 6e 74   to be.represent
c970: 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
c980: 29 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d  ) then the colum
c990: 6e 20 6d 61 79 20 62 65 20 73 74 6f 72 65 64 20  n may be stored 
c9a0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 61 73  in the record.as
c9b0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 5e 53   an integer.  ^S
c9c0: 51 4c 69 74 65 20 77 69 6c 6c 20 63 6f 6e 76 65  QLite will conve
c9d0: 72 74 20 74 68 65 20 76 61 6c 75 65 20 62 61 63  rt the value bac
c9e0: 6b 20 74 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f  k to floating.po
c9f0: 69 6e 74 20 77 68 65 6e 20 65 78 74 72 61 63 74  int when extract
ca00: 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65 20  ing it from the 
ca10: 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a 0a 3c 68 32  record.</p>..<h2
ca20: 3e 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20  >Representation 
ca30: 6f 66 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  of WITHOUT ROWID
ca40: 20 54 61 62 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70   Tables</h2>..<p
ca50: 3e 5e 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  >^If an SQL tabl
ca60: 65 20 69 73 20 63 72 65 61 74 65 64 20 75 73 69  e is created usi
ca70: 6e 67 20 74 68 65 20 22 57 49 54 48 4f 55 54 20  ng the "WITHOUT 
ca80: 52 4f 57 49 44 22 20 63 6c 61 75 73 65 20 61 74  ROWID" clause at
ca90: 20 74 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20   the.end of its 
caa0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
cab0: 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61  tement, then tha
cac0: 74 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  t table is a [WI
cad0: 54 48 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62  THOUT ROWID].tab
cae0: 6c 65 20 61 6e 64 20 75 73 65 73 20 61 20 64 69  le and uses a di
caf0: 66 66 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20  fferent on-disk 
cb00: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
cb10: 20 5e 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49   ^A WITHOUT ROWI
cb20: 44 0a 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20  D.table uses an 
cb30: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61 74  index b-tree rat
cb40: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
cb50: 20 62 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72   b-tree for stor
cb60: 61 67 65 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f  age..^The key fo
cb70: 72 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20  r each entry in 
cb80: 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49  the WITHOUT ROWI
cb90: 44 20 62 2d 74 72 65 65 20 69 73 20 61 20 72 65  D b-tree is a re
cba0: 63 6f 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66  cord composed.of
cbb0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
cbc0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
cbd0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
cbe0: 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  remaining column
cbf0: 73 20 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20  s of.the table. 
cc00: 20 5e 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65   ^The primary ke
cc10: 79 20 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72  y columns appear
cc20: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
cc30: 65 79 20 74 68 65 79 20 77 65 72 65 0a 64 65 63  ey they were.dec
cc40: 6c 61 72 65 64 20 69 6e 20 74 68 65 20 50 52 49  lared in the PRI
cc50: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
cc60: 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  and the remainin
cc70: 67 20 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72  g columns appear
cc80: 20 69 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68   in.the order th
cc90: 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20  ey occur in the 
cca0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
ccb0: 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e  tement...<p>^Hen
ccc0: 63 65 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ce, the content 
ccd0: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57  encoding for a W
cce0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
ccf0: 6c 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  le is the same.a
cd00: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  s the content en
cd10: 63 6f 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72  coding for an or
cd20: 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62  dinary rowid tab
cd30: 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  le, except that 
cd40: 74 68 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65  the.order of the
cd50: 20 63 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72   columns is rear
cd60: 72 61 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50  ranged so that P
cd70: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
cd80: 6e 73 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61  ns come.first, a
cd90: 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  nd the content i
cda0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  s used as the ke
cdb0: 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  y in an index b-
cdc0: 74 72 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e  tree rather.than
cdd0: 20 61 73 20 74 68 65 20 64 61 74 61 20 69 6e 20   as the data in 
cde0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a  a table b-tree..
cdf0: 5e 54 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63  ^The special enc
ce00: 6f 64 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20  oding rules for 
ce10: 63 6f 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41  columns with REA
ce20: 4c 20 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79  L affinity.apply
ce30: 20 74 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49   to WITHOUT ROWI
ce40: 44 20 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d  D tables the sam
ce50: 65 20 61 73 20 74 68 65 79 20 64 6f 20 77 69 74  e as they do wit
ce60: 68 20 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a  h rowid tables..
ce70: 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74 61 74  .<h2>Representat
ce80: 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64 69 63  ion Of SQL Indic
ce90: 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 45 61 63  es</h2>..<p>^Eac
cea0: 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77 68 65  h SQL index, whe
ceb0: 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c 79 20  ther explicitly 
cec0: 64 65 63 6c 61 72 65 64 20 76 69 61 20 61 20 5b  declared via a [
ced0: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
cee0: 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69  atement.or impli
cef0: 65 64 20 62 79 20 61 20 55 4e 49 51 55 45 20 6f  ed by a UNIQUE o
cf00: 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  r PRIMARY KEY co
cf10: 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72 65 73  nstraint, corres
cf20: 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69 6e 64  ponds to an .ind
cf30: 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ex b-tree in the
cf40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
cf50: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74  ^Each entry in t
cf60: 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
cf70: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
cf80: 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74   single row in t
cf90: 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 53  he .associated S
cfa0: 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b  QL table..^The k
cfb0: 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62  ey to an index b
cfc0: 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f 72  -tree is.a recor
cfd0: 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68  d composed of th
cfe0: 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  e columns that a
cff0: 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  re being indexed
d000: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
d010: 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72 72  .key of the corr
d020: 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
d030: 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69 6e 61  row.  For ordina
d040: 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72  ry tables, the r
d050: 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20 5b 72  ow key is.the [r
d060: 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72 20 5b  owid], and for [
d070: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
d080: 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20 6b 65  ables the row ke
d090: 79 20 69 73 20 74 68 65 20 50 52 49 4d 41 52 59  y is the PRIMARY
d0a0: 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20 65 76   KEY..Because ev
d0b0: 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74  ery row in the t
d0c0: 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69 71 75  able has a uniqu
d0d0: 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20 6b  e row key,.all k
d0e0: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
d0f0: 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a  are unique.</p>.
d100: 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61 6c  .<p>^In a normal
d110: 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 69 73   index, there is
d120: 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61   a one-to-one ma
d130: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 72 6f  pping between ro
d140: 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65 20 61  ws in a .table a
d150: 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20 65 61  nd entries in ea
d160: 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  ch index associa
d170: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
d180: 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c 20 69  ble..^However, i
d190: 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69 6e 64  n a [partial ind
d1a0: 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78 20 62  ex], the index b
d1b0: 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e 74 61  -tree only conta
d1c0: 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f 72 72  ins entries.corr
d1d0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 61 62  esponding to tab
d1e0: 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  le rows for whic
d1f0: 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
d200: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e  se expression on
d210: 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e 44 45   the.CREATE INDE
d220: 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  X statement is t
d230: 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64  rue..^Correspond
d240: 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68 65 20  ing rows in the 
d250: 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c 65 20  index and table 
d260: 62 2d 74 72 65 65 73 20 73 68 61 72 65 20 74 68  b-trees share th
d270: 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f 72 20  e same rowid.or 
d280: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
d290: 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e 20 74  es and contain t
d2a0: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
d2b0: 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20 63 6f  r all indexed co
d2c0: 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  lumns.</p>..<h3>
d2d0: 53 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72  Suppression of r
d2e0: 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73  edundant columns
d2f0: 20 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49   in WITHOUT ROWI
d300: 44 20 73 65 63 6f 6e 64 61 72 79 20 69 6e 64 65  D secondary inde
d310: 78 65 73 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  xes.</h3>..<p> ^
d320: 49 6e 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61  In an index on a
d330: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
d340: 61 62 6c 65 2c 20 69 66 20 6f 6e 65 20 6f 72 20  able, if one or 
d350: 6d 6f 72 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  more of the colu
d360: 6d 6e 73 0a 6f 66 20 74 68 65 20 74 61 62 6c 65  mns.of the table
d370: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
d380: 20 61 6c 73 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66   also columns of
d390: 20 74 68 65 20 69 6e 64 65 78 2c 20 74 68 65 6e   the index, then
d3a0: 20 74 68 65 0a 69 6e 64 65 78 65 64 20 63 6f 6c   the.indexed col
d3b0: 75 6d 6e 20 69 73 20 6e 6f 74 20 72 65 70 65 61  umn is not repea
d3c0: 74 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ted in the table
d3d0: 2d 6b 65 79 20 73 75 66 66 69 78 20 6f 6e 20 74  -key suffix on t
d3e0: 68 65 20 65 6e 64 20 6f 66 0a 74 68 65 20 69 6e  he end of.the in
d3f0: 64 65 78 20 72 65 63 6f 72 64 2e 20 20 5e 28 41  dex record.  ^(A
d400: 73 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f  s an example, co
d410: 6e 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f  nsider the follo
d420: 77 69 6e 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63  wing SQL:..<bloc
d430: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
d440: 41 54 45 20 54 41 42 4c 45 20 65 78 32 35 28 61  ATE TABLE ex25(a
d450: 2c 62 2c 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59  ,b,c,d,e,PRIMARY
d460: 20 4b 45 59 28 64 2c 63 2c 61 29 29 20 57 49 54   KEY(d,c,a)) WIT
d470: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 43 52 45 41  HOUT rowid;.CREA
d480: 54 45 20 49 4e 44 45 58 20 65 78 32 35 63 65 20  TE INDEX ex25ce 
d490: 4f 4e 20 65 78 32 35 28 63 2c 65 29 3b 0a 43 52  ON ex25(c,e);.CR
d4a0: 45 41 54 45 20 49 4e 44 45 58 20 65 78 32 35 61  EATE INDEX ex25a
d4b0: 63 64 65 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c  cde ON ex25(a,c,
d4c0: 64 2c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  d,e);.</pre></bl
d4d0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61  ockquote>..<p>Ea
d4e0: 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 65 78  ch row in the ex
d4f0: 32 35 63 65 20 69 6e 64 65 78 20 69 73 20 61 20  25ce index is a 
d500: 72 65 63 6f 72 64 0a 77 69 74 68 20 74 68 65 73  record.with thes
d510: 65 20 63 6f 6c 75 6d 6e 73 3a 20 63 2c 20 65 2c  e columns: c, e,
d520: 20 64 2c 20 61 2e 20 20 54 68 65 20 66 69 72 73   d, a.  The firs
d530: 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 20 61 72  t two columns ar
d540: 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65  e.the columns be
d550: 69 6e 67 20 69 6e 64 65 78 65 64 2c 20 63 20 61  ing indexed, c a
d560: 6e 64 20 65 2e 20 20 54 68 65 20 72 65 6d 61 69  nd e.  The remai
d570: 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 61 72 65  ning columns are
d580: 20 74 68 65 20 70 72 69 6d 61 72 79 0a 6b 65 79   the primary.key
d590: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
d5a0: 6e 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e  nding table row.
d5b0: 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20    Normally, the 
d5c0: 70 72 69 6d 61 72 79 20 6b 65 79 20 77 6f 75 6c  primary key woul
d5d0: 64 20 62 65 0a 63 6f 6c 75 6d 6e 73 20 64 2c 20  d be.columns d, 
d5e0: 63 2c 20 61 6e 64 20 61 2c 20 62 75 74 20 62 65  c, and a, but be
d5f0: 63 61 75 73 65 20 63 6f 6c 75 6d 6e 20 63 20 61  cause column c a
d600: 6c 72 65 61 64 79 20 61 70 70 65 61 72 73 20 65  lready appears e
d610: 61 72 6c 69 65 72 20 69 6e 20 74 68 65 0a 69 6e  arlier in the.in
d620: 64 65 78 2c 20 69 74 20 69 73 20 6f 6d 69 74 74  dex, it is omitt
d630: 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65 79 20  ed from the key 
d640: 73 75 66 66 69 78 2e 29 5e 3c 2f 70 3e 0a 0a 3c  suffix.)^</p>..<
d650: 70 3e 5e 28 49 6e 20 74 68 65 20 65 78 74 72 65  p>^(In the extre
d660: 6d 65 20 63 61 73 65 20 77 68 65 72 65 20 74 68  me case where th
d670: 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20  e columns being 
d680: 69 6e 64 65 78 65 64 20 63 6f 76 65 72 20 61 6c  indexed cover al
d690: 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  l columns.of the
d6a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
d6b0: 65 20 69 6e 64 65 78 20 77 69 6c 6c 20 63 6f 6e  e index will con
d6c0: 73 69 73 74 20 6f 66 20 6f 6e 6c 79 20 74 68 65  sist of only the
d6d0: 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 0a 69   columns being.i
d6e0: 6e 64 65 78 65 64 2e 20 20 54 68 65 20 65 78 32  ndexed.  The ex2
d6f0: 35 61 63 64 65 20 65 78 61 6d 70 6c 65 20 61 62  5acde example ab
d700: 6f 76 65 20 64 65 6d 6f 6e 73 74 72 61 74 65 73  ove demonstrates
d710: 20 74 68 69 73 2e 29 5e 20 20 5e 45 61 63 68 20   this.)^  ^Each 
d720: 65 6e 74 72 79 20 69 6e 0a 74 68 65 20 65 78 32  entry in.the ex2
d730: 35 61 63 64 65 20 69 6e 64 65 78 20 63 6f 6e 73  5acde index cons
d740: 69 73 74 73 20 6f 66 20 6f 6e 6c 79 20 74 68 65  ists of only the
d750: 20 63 6f 6c 75 6d 6e 73 20 61 2c 20 63 2c 20 64   columns a, c, d
d760: 2c 20 61 6e 64 20 65 2c 20 69 6e 20 74 68 61 74  , and e, in that
d770: 0a 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  .order.</p>..<p>
d780: 20 5e 54 68 65 20 73 75 70 70 72 65 73 73 69 6f   ^The suppressio
d790: 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20 63  n of redundant c
d7a0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6b 65  olumns in the ke
d7b0: 79 20 73 75 66 66 69 78 20 6f 66 20 61 6e 20 69  y suffix of an i
d7c0: 6e 64 65 78 0a 65 6e 74 72 79 20 6f 6e 6c 79 20  ndex.entry only 
d7d0: 6f 63 63 75 72 73 20 69 6e 20 57 49 54 48 4f 55  occurs in WITHOU
d7e0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e 20  T ROWID tables. 
d7f0: 20 5e 49 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79   ^In an ordinary
d800: 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 0a 74 68   rowid table,.th
d810: 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 61 6c  e index entry al
d820: 77 61 79 73 20 65 6e 64 73 20 77 69 74 68 20 74  ways ends with t
d830: 68 65 20 72 6f 77 69 64 20 65 76 65 6e 20 69 66  he rowid even if
d840: 20 74 68 65 20 5b 49 4e 54 45 47 45 52 20 50 52   the [INTEGER PR
d850: 49 4d 41 52 59 20 4b 45 59 5d 0a 63 6f 6c 75 6d  IMARY KEY].colum
d860: 6e 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  n is one of the 
d870: 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e  columns being in
d880: 64 65 78 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  dexed.</p>..<tcl
d890: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 71 6c  >hd_fragment sql
d8a0: 69 74 65 5f 6d 61 73 74 65 72 20 7b 73 71 6c 69  ite_master {sqli
d8b0: 74 65 5f 6d 61 73 74 65 72 7d 20 7b 73 71 6c 69  te_master} {sqli
d8c0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 7d  te_master table}
d8d0: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 53 74 6f 72 61  </tcl>.<h2>Stora
d8e0: 67 65 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61  ge Of The SQL Da
d8f0: 74 61 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68  tabase Schema</h
d900: 32 3e 0a 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f  2>..<p>^Page 1 o
d910: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
d920: 65 20 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61  e is the root pa
d930: 67 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d  ge of a table b-
d940: 74 72 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20  tree that.holds 
d950: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
d960: 6e 61 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61  named "sqlite_ma
d970: 73 74 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74  ster" (or "sqlit
d980: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69  e_temp_master" i
d990: 6e 0a 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n.the case of a 
d9a0: 54 45 4d 50 20 64 61 74 61 62 61 73 65 29 20 77  TEMP database) w
d9b0: 68 69 63 68 20 73 74 6f 72 65 73 20 74 68 65 20  hich stores the 
d9c0: 63 6f 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73  complete.databas
d9d0: 65 20 73 63 68 65 6d 61 2e 20 20 5e 28 54 68 65  e schema.  ^(The
d9e0: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
d9f0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
da00: 74 61 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69  table is as.if i
da10: 74 20 68 61 64 20 62 65 65 6e 20 63 72 65 61 74  t had been creat
da20: 65 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c  ed using the fol
da30: 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a  lowing SQL:</p>.
da40: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
da50: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
da60: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20  sqlite_master(. 
da70: 20 74 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61   type text,.  na
da80: 6d 65 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e  me text,.  tbl_n
da90: 61 6d 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74  ame text,.  root
daa0: 70 61 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20  page integer,.  
dab0: 73 71 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72  sql text.);.</pr
dac0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
dad0: 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  ^..<p>^The sqlit
dae0: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63  e_master table c
daf0: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20  ontains one row 
db00: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2c 20  for each table, 
db10: 69 6e 64 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64  index, view,.and
db20: 20 74 72 69 67 67 65 72 20 28 63 6f 6c 6c 65 63   trigger (collec
db30: 74 69 76 65 6c 79 20 22 6f 62 6a 65 63 74 73 22  tively "objects"
db40: 29 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ) in the databas
db50: 65 20 73 63 68 65 6d 61 2c 20 65 78 63 65 70 74  e schema, except
db60: 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74   there.is no ent
db70: 72 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ry for the sqlit
db80: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
db90: 74 73 65 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c  tself.  ^The sql
dba0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
dbb0: 0a 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65  .contains entrie
dbc0: 73 20 66 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20  s for [internal 
dbd0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20  schema objects] 
dbe0: 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 61  in addition to a
dbf0: 70 70 6c 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20  pplication-.and 
dc00: 70 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e  programmer-defin
dc10: 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70  ed objects....<p
dc20: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
dc30: 73 74 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e  ster.type column
dc40: 20 77 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20   will be one.of 
dc50: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65  the following te
dc60: 78 74 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61  xt strings:  'ta
dc70: 62 6c 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27  ble', 'index', '
dc80: 76 69 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67  view', or 'trigg
dc90: 65 72 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f  er'.according to
dca0: 20 74 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a   the type of obj
dcb0: 65 63 74 20 64 65 66 69 6e 65 64 2e 20 20 54 68  ect defined.  Th
dcc0: 65 20 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67  e 'table' string
dcd0: 20 69 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74   is used.for bot
dce0: 68 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b  h ordinary and [
dcf0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
dd00: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  )^</p>..<p>^(The
dd10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e   sqlite_master.n
dd20: 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  ame column will 
dd30: 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  hold the name of
dd40: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e   the object.)^.^
dd50: 28 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50  ([UNIQUE] and [P
dd60: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
dd70: 74 72 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65  traints on table
dd80: 73 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  s cause SQLite t
dd90: 6f 20 63 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e  o create.[intern
dda0: 61 6c 20 69 6e 64 65 78 65 73 5d 20 77 69 74 68  al indexes] with
ddb0: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
ddc0: 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  rm "sqlite_autoi
ddd0: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68  ndex_TABLE_N".wh
dde0: 65 72 65 20 54 41 42 4c 45 20 69 73 20 72 65 70  ere TABLE is rep
ddf0: 6c 61 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d  laced by the nam
de00: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
de10: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
de20: 0a 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20  .constraint and 
de30: 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  N is an integer 
de40: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
de50: 20 61 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20   and increasing 
de60: 62 79 20 6f 6e 65 0a 77 69 74 68 20 65 61 63 68  by one.with each
de70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e   constraint seen
de80: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 64 65   in the table de
de90: 66 69 6e 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e  finition.)^.^(In
dea0: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
deb0: 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  D] table, there 
dec0: 69 73 20 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73  is no sqlite_mas
ded0: 74 65 72 20 65 6e 74 72 79 20 66 6f 72 20 74 68  ter entry for th
dee0: 65 0a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  e.PRIMARY KEY, b
def0: 75 74 20 74 68 65 20 22 73 71 6c 69 74 65 5f 61  ut the "sqlite_a
df00: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
df10: 22 20 6e 61 6d 65 20 69 73 20 73 65 74 20 61 73  " name is set as
df20: 69 64 65 0a 66 6f 72 20 74 68 65 20 50 52 49 4d  ide.for the PRIM
df30: 41 52 59 20 4b 45 59 20 61 73 20 69 66 20 74 68  ARY KEY as if th
df40: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
df50: 65 6e 74 72 79 20 64 69 64 20 65 78 69 73 74 2e  entry did exist.
df60: 20 20 54 68 69 73 0a 77 69 6c 6c 20 61 66 66 65    This.will affe
df70: 63 74 20 74 68 65 20 6e 75 6d 62 65 72 69 6e 67  ct the numbering
df80: 20 6f 66 20 73 75 62 73 65 71 75 65 6e 74 20 55   of subsequent U
df90: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
dfa0: 73 2e 29 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74  s.)^.^The "sqlit
dfb0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c  e_autoindex_TABL
dfc0: 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20 6e 65 76  E_N" name is nev
dfd0: 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  er allocated for
dfe0: 20 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49   an.[INTEGER PRI
dff0: 4d 41 52 59 20 4b 45 59 5d 2c 20 65 69 74 68 65  MARY KEY], eithe
e000: 72 20 69 6e 20 72 6f 77 69 64 20 74 61 62 6c 65  r in rowid table
e010: 73 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57  s or WITHOUT ROW
e020: 49 44 20 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a  ID tables..</p>.
e030: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .<p>The sqlite_m
e040: 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63  aster.tbl_name c
e050: 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
e060: 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20  name of a table 
e070: 6f 72 20 76 69 65 77 0a 74 68 61 74 20 74 68 65  or view.that the
e080: 20 6f 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63   object is assoc
e090: 69 61 74 65 64 20 77 69 74 68 2e 20 20 5e 46 6f  iated with.  ^Fo
e0a0: 72 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65  r a table or vie
e0b0: 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20  w, the.tbl_name 
e0c0: 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79  column is a copy
e0d0: 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c   of the name col
e0e0: 75 6d 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e  umn.  ^For an in
e0f0: 64 65 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d  dex, the tbl_nam
e100: 65 0a 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e.is the name of
e110: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
e120: 69 73 20 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f  is indexed.  ^Fo
e130: 72 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  r a trigger, the
e140: 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e   tbl_name.column
e150: 20 73 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65   stores the name
e160: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
e170: 20 76 69 65 77 20 74 68 61 74 20 63 61 75 73 65   view that cause
e180: 73 20 74 68 65 20 74 72 69 67 67 65 72 20 0a 74  s the trigger .t
e190: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
e1a0: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
e1b0: 74 65 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c  ter.rootpage col
e1c0: 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70  umn stores the p
e1d0: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
e1e0: 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61  e root.b-tree pa
e1f0: 67 65 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e  ge for tables an
e200: 64 20 69 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46  d indexes.)^  ^F
e210: 6f 72 20 72 6f 77 73 20 74 68 61 74 20 64 65 66  or rows that def
e220: 69 6e 65 20 76 69 65 77 73 2c 20 74 72 69 67 67  ine views, trigg
e230: 65 72 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c  ers,.and virtual
e240: 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f   tables, the roo
e250: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20  tpage column is 
e260: 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  0 or NULL.</p>..
e270: 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  <p>^(The sqlite_
e280: 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d  master.sql colum
e290: 6e 20 73 74 6f 72 65 73 20 53 51 4c 20 74 65 78  n stores SQL tex
e2a0: 74 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  t that describes
e2b0: 20 74 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68   the.object.  Th
e2c0: 69 73 20 53 51 4c 20 74 65 78 74 20 69 73 20 61  is SQL text is a
e2d0: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 2c   [CREATE TABLE],
e2e0: 20 5b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   [CREATE VIRTUAL
e2f0: 20 54 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45   TABLE],.[CREATE
e300: 20 49 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45   INDEX],.[CREATE
e310: 20 56 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41   VIEW], or [CREA
e320: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
e330: 65 6d 65 6e 74 20 74 68 61 74 20 69 66 20 65 76  ement that if ev
e340: 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a  aluated against.
e350: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
e360: 65 20 77 68 65 6e 20 69 74 20 69 73 20 74 68 65  e when it is the
e370: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 6f   main database o
e380: 66 20 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f  f a [database co
e390: 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20  nnection].would 
e3a0: 72 65 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a  recreate the obj
e3b0: 65 63 74 2e 29 5e 20 20 54 68 65 20 74 65 78 74  ect.)^  The text
e3c0: 20 69 73 20 75 73 75 61 6c 6c 79 20 61 20 63 6f   is usually a co
e3d0: 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  py of the origin
e3e0: 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75 73 65  al.statement use
e3f0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
e400: 6f 62 6a 65 63 74 20 62 75 74 20 77 69 74 68 20  object but with 
e410: 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61  normalizations a
e420: 70 70 6c 69 65 64 20 73 6f 0a 74 68 61 74 20 74  pplied so.that t
e430: 68 65 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73  he text conforms
e440: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
e450: 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c  g rules:..<ul>.<
e460: 6c 69 3e 5e 54 68 65 20 43 52 45 41 54 45 2c 20  li>^The CREATE, 
e470: 54 41 42 4c 45 2c 20 56 49 45 57 2c 20 54 52 49  TABLE, VIEW, TRI
e480: 47 47 45 52 2c 20 61 6e 64 20 49 4e 44 45 58 20  GGER, and INDEX 
e490: 6b 65 79 77 6f 72 64 73 20 61 74 20 74 68 65 20  keywords at the 
e4a0: 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65  beginning.of the
e4b0: 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 63   statement are c
e4c0: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 20  onverted to all 
e4d0: 75 70 70 65 72 20 63 61 73 65 20 6c 65 74 74 65  upper case lette
e4e0: 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d  rs..<li>^The TEM
e4f0: 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b  P or TEMPORARY k
e500: 65 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76 65  eyword is remove
e510: 64 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 61  d if it occurs a
e520: 66 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69 61  fter the .initia
e530: 6c 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72 64  l CREATE keyword
e540: 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62  ..<li>^Any datab
e550: 61 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69  ase name qualifi
e560: 65 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 70  er that occurs p
e570: 72 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  rior to the name
e580: 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62   of the.object b
e590: 65 69 6e 67 20 63 72 65 61 74 65 64 20 69 73 20  eing created is 
e5a0: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65  removed..<li>^Le
e5b0: 61 64 69 6e 67 20 73 70 61 63 65 73 20 61 72 65  ading spaces are
e5c0: 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41   removed..<li>^A
e5d0: 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77  ll spaces follow
e5e0: 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 74 77  ing the first tw
e5f0: 6f 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63  o keywords are c
e600: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20  onverted into a 
e610: 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f  single.space..</
e620: 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65  ul>..<p>^(The te
e630: 78 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  xt in the sqlite
e640: 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75  _master.sql colu
e650: 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20  mn is a copy of 
e660: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45  the original.CRE
e670: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74 65  ATE statement te
e680: 78 74 20 74 68 61 74 20 63 72 65 61 74 65 64 20  xt that created 
e690: 74 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63 65  the object, exce
e6a0: 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73  pt normalized as
e6b0: 0a 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65  .described above
e6c0: 20 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65 64   and as modified
e6d0: 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 5b   by subsequent [
e6e0: 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74 61  ALTER TABLE] sta
e6f0: 74 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65  tements.)^.^(The
e700: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73   sqlite_master.s
e710: 71 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74  ql is NULL for t
e720: 68 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64  he [internal ind
e730: 65 78 65 73 5d 20 74 68 61 74 20 61 72 65 0a 61  exes] that are.a
e740: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
e750: 61 74 65 64 20 62 79 20 5b 55 4e 49 51 55 45 5d  ated by [UNIQUE]
e760: 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59   or [PRIMARY KEY
e770: 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e  ] constraints.)^
e780: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </p>...<tcl>hd_f
e790: 72 61 67 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d  ragment intschem
e7a0: 61 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  a {internal sche
e7b0: 6d 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69  ma objects} \.{i
e7c0: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
e7d0: 62 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c  bject} {internal
e7e0: 20 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61   index} {interna
e7f0: 6c 20 69 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e  l indexes} \.{in
e800: 74 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69  ternal table} {i
e810: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c  nternal tables}<
e820: 2f 74 63 6c 3e 0a 3c 68 33 3e 49 6e 74 65 72 6e  /tcl>.<h3>Intern
e830: 61 6c 20 53 63 68 65 6d 61 20 4f 62 6a 65 63 74  al Schema Object
e840: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 49 6e 20 61  s</h3>..<p>^In a
e850: 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  ddition to the t
e860: 61 62 6c 65 73 2c 20 69 6e 64 65 78 65 73 2c 20  ables, indexes, 
e870: 76 69 65 77 73 2c 20 61 6e 64 20 74 72 69 67 67  views, and trigg
e880: 65 72 73 20 63 72 65 61 74 65 64 20 62 79 0a 74  ers created by.t
e890: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61  he application a
e8a0: 6e 64 2f 6f 72 20 74 68 65 20 64 65 76 65 6c 6f  nd/or the develo
e8b0: 70 65 72 20 75 73 69 6e 67 20 43 52 45 41 54 45  per using CREATE
e8c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 53 51 4c 2c   statements SQL,
e8d0: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
e8e0: 65 72 20 74 61 62 6c 65 20 6d 61 79 20 63 6f 6e  er table may con
e8f0: 74 61 69 6e 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  tain zero or mor
e900: 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20 0a 3c  e entries for .<
e910: 69 3e 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d  i>internal schem
e920: 61 20 6f 62 6a 65 63 74 73 3c 2f 69 3e 20 74 68  a objects</i> th
e930: 61 74 20 61 72 65 20 63 72 65 61 74 65 64 20 62  at are created b
e940: 79 20 53 51 4c 69 74 65 20 66 6f 72 20 69 74 73  y SQLite for its
e950: 20 0a 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 75   .own internal u
e960: 73 65 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73 20  se.  ^The names 
e970: 6f 66 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  of internal sche
e980: 6d 61 20 6f 62 6a 65 63 74 73 0a 61 6c 77 61 79  ma objects.alway
e990: 73 20 62 65 67 69 6e 20 77 69 74 68 20 22 73 71  s begin with "sq
e9a0: 6c 69 74 65 5f 22 20 61 6e 64 20 61 6e 79 20 74  lite_" and any t
e9b0: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65  able, index, vie
e9c0: 77 2c 20 6f 72 20 74 72 69 67 67 65 72 0a 77 68  w, or trigger.wh
e9d0: 6f 73 65 20 6e 61 6d 65 20 62 65 67 69 6e 73 20  ose name begins 
e9e0: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 69  with "sqlite_" i
e9f0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 73 63  s an internal sc
ea00: 68 65 6d 61 20 6f 62 6a 65 63 74 2e 0a 5e 53 51  hema object..^SQ
ea10: 4c 69 74 65 20 70 72 6f 68 69 62 69 74 73 20 61  Lite prohibits a
ea20: 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 72 6f 6d  pplications from
ea30: 20 63 72 65 61 74 69 6e 67 20 6f 62 6a 65 63 74   creating object
ea40: 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 62 65  s whose names be
ea50: 67 69 6e 0a 77 69 74 68 20 22 73 71 6c 69 74 65  gin.with "sqlite
ea60: 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e 74 65 72 6e  _".  ..<p>Intern
ea70: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
ea80: 73 20 75 73 65 64 20 62 79 20 53 51 4c 69 74 65  s used by SQLite
ea90: 20 6d 61 79 20 69 6e 63 6c 75 64 65 20 74 68 65   may include the
eaa0: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 75 6c   following:..<ul
eab0: 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64 69 63 65 73  >.<li><p>Indices
eac0: 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74   with names of t
ead0: 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f  he form "sqlite_
eae0: 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f  autoindex_TABLE_
eaf0: 4e 22 20 74 68 61 74 0a 20 20 20 20 20 20 20 61  N" that.       a
eb00: 72 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  re used to imple
eb10: 6d 65 6e 74 20 5b 55 4e 49 51 55 45 5d 20 61 6e  ment [UNIQUE] an
eb20: 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  d [PRIMARY KEY] 
eb30: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 0a 20  constraints on. 
eb40: 20 20 20 20 20 20 6f 72 64 69 6e 61 72 79 20 74        ordinary t
eb50: 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41  ables...<li><p>A
eb60: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
eb70: 6e 61 6d 65 20 22 73 71 6c 69 74 65 5f 73 65 71  name "sqlite_seq
eb80: 75 65 6e 63 65 22 20 74 68 61 74 20 69 73 20 75  uence" that is u
eb90: 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63  sed to keep trac
eba0: 6b 0a 20 20 20 20 20 20 20 6f 66 20 74 68 65 20  k.       of the 
ebb0: 6d 61 78 69 6d 75 6d 20 68 69 73 74 6f 72 69 63  maximum historic
ebc0: 61 6c 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  al [INTEGER PRIM
ebd0: 41 52 59 20 4b 45 59 5d 20 66 6f 72 20 61 20 74  ARY KEY] for a t
ebe0: 61 62 6c 65 0a 20 20 20 20 20 20 20 75 73 69 6e  able.       usin
ebf0: 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  g [AUTOINCREMENT
ec00: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61 62 6c 65  ]...<li><p>Table
ec10: 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20  s with names of 
ec20: 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65  the form "sqlite
ec30: 5f 73 74 61 74 4e 22 20 77 68 65 72 65 20 4e 20  _statN" where N 
ec40: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 20  is an integer.. 
ec50: 20 20 20 20 20 20 53 75 63 68 20 74 61 62 6c 65        Such table
ec60: 73 20 73 74 6f 72 65 20 64 61 74 61 62 61 73 65  s store database
ec70: 20 73 74 61 74 69 73 74 69 63 73 20 67 61 74 68   statistics gath
ec80: 65 72 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41  ered by the [ANA
ec90: 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20 63 6f 6d  LYZE].       com
eca0: 6d 61 6e 64 20 61 6e 64 20 75 73 65 64 20 62 79  mand and used by
ecb0: 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
ecc0: 65 72 20 74 6f 20 68 65 6c 70 20 64 65 74 65 72  er to help deter
ecd0: 6d 69 6e 65 20 74 68 65 20 62 65 73 74 0a 20 20  mine the best.  
ece0: 20 20 20 20 20 61 6c 67 6f 72 69 74 68 6d 20 74       algorithm t
ecf0: 6f 20 75 73 65 20 66 6f 72 20 65 61 63 68 20 71  o use for each q
ed00: 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  uery..</ul>..<p>
ed10: 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20 73 63 68  New internal sch
ed20: 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e 61 6d 65  ema objects name
ed30: 73 2c 20 61 6c 77 61 79 73 20 62 65 67 69 6e 6e  s, always beginn
ed40: 69 6e 67 20 77 69 74 68 20 22 73 71 6c 69 74 65  ing with "sqlite
ed50: 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64 64 65 64  _",.may be added
ed60: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 66   to the SQLite f
ed70: 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 66 75  ile format in fu
ed80: 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0a 0a  ture releases...
ed90: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
eda0: 20 73 65 71 74 61 62 20 7b 73 71 6c 69 74 65 5f   seqtab {sqlite_
edb0: 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e 0a  sequence}</tcl>.
edc0: 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  <h3>The sqlite_s
edd0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 3c 2f 68  equence table</h
ede0: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69  3>..<p>^The sqli
edf0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ee00: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  e is an internal
ee10: 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 68   table used to h
ee20: 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41  elp implement.[A
ee30: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20  UTOINCREMENT].  
ee40: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
ee50: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 63 72  ence table is cr
ee60: 65 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  eated automatica
ee70: 6c 6c 79 0a 77 68 65 6e 65 76 65 72 20 61 6e 79  lly.whenever any
ee80: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
ee90: 77 69 74 68 20 61 6e 20 41 55 54 4f 49 4e 43 52  with an AUTOINCR
eea0: 45 4d 45 4e 54 20 69 6e 74 65 67 65 72 20 70 72  EMENT integer pr
eeb0: 69 6d 61 72 79 0a 6b 65 79 20 69 73 20 63 72 65  imary.key is cre
eec0: 61 74 65 64 2e 20 20 5e 4f 6e 63 65 20 63 72 65  ated.  ^Once cre
eed0: 61 74 65 64 2c 20 74 68 65 20 73 71 6c 69 74 65  ated, the sqlite
eee0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
eef0: 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 73 71  exists in the.sq
ef00: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
ef10: 65 20 66 6f 72 65 76 65 72 3b 20 69 74 20 63 61  e forever; it ca
ef20: 6e 6e 6f 74 20 62 65 20 64 72 6f 70 70 65 64 2e  nnot be dropped.
ef30: 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 66 6f  .^(The schema fo
ef40: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  r the sqlite_seq
ef50: 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73 3a 0a  uence table is:.
ef60: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
ef70: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
ef80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28  sqlite_sequence(
ef90: 6e 61 6d 65 2c 73 65 71 29 3b 0a 3c 2f 70 72 65  name,seq);.</pre
efa0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
efb0: 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69 73 20 61  ..<p>^There is a
efc0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74   single row in t
efd0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
efe0: 63 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63  ce table for eac
eff0: 68 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65  h ordinary.table
f000: 20 74 68 61 74 20 75 73 65 73 20 41 55 54 4f 49   that uses AUTOI
f010: 4e 43 52 45 4d 45 4e 54 2e 20 20 5e 28 54 68 65  NCREMENT.  ^(The
f020: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
f030: 6c 65 20 28 61 73 20 69 74 20 61 70 70 65 61 72  le (as it appear
f040: 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73 74  s in.sqlite_mast
f050: 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20 74  er.name) is in t
f060: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f070: 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61 6e  ce.main field an
f080: 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b 49  d the largest.[I
f090: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
f0a0: 45 59 5d 20 65 76 65 72 20 69 6e 73 65 72 74 65  EY] ever inserte
f0b0: 64 20 69 6e 74 6f 20 74 68 61 74 20 74 61 62 6c  d into that tabl
f0c0: 65 20 69 73 20 0a 69 6e 20 74 68 65 20 73 71 6c  e is .in the sql
f0d0: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
f0e0: 20 66 69 65 6c 64 2e 29 5e 20 20 0a 5e 4e 65 77   field.)^  .^New
f0f0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
f100: 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65 72  enerated integer
f110: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66 6f   primary keys fo
f120: 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  r AUTOINCREMENT.
f130: 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72 61  tables are guara
f140: 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72 67  nteed to be larg
f150: 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c 69  er than the sqli
f160: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
f170: 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20 74  field for.that t
f180: 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20 73  able..^(If the s
f190: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
f1a0: 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20 41  eq field of an A
f1b0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
f1c0: 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 74  le is already at
f1d0: 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e 74  .the largest int
f1e0: 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32 33  eger value (9223
f1f0: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
f200: 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20 74   then attempts t
f210: 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20 74  o add new.rows t
f220: 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69 74  o that table wit
f230: 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  h an automatical
f240: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74  ly generated int
f250: 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69 6c  eger primary wil
f260: 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20 5b  l fail.with an [
f270: 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72 72  SQLITE_FULL] err
f280: 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69 74  or.)^.^The sqlit
f290: 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66  e_sequence.seq f
f2a0: 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74 69  ield is automati
f2b0: 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69 66  cally updated if
f2c0: 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a 6e   required when.n
f2d0: 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20 69  ew entries are i
f2e0: 6e 73 65 72 74 65 64 20 74 6f 20 61 6e 20 41 55  nserted to an AU
f2f0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f300: 65 2e 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65  e.  .^The sqlite
f310: 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f  _sequence row fo
f320: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
f330: 4e 54 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f  NT table is auto
f340: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
f350: 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65  d.when the table
f360: 20 69 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66   is dropped..^If
f370: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f380: 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20  ence row for an 
f390: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f3a0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ble does not exi
f3b0: 73 74 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f  st when.the AUTO
f3c0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20  INCREMENT table 
f3d0: 69 73 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e  is updated, then
f3e0: 20 61 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65   a new sqlite_se
f3f0: 71 75 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72  quence row is cr
f400: 65 61 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20  eated..^(If the 
f410: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
f420: 73 65 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e  seq value for an
f430: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
f440: 61 62 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79  able is manually
f450: 20 0a 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69   .set to somethi
f460: 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e  ng other than an
f470: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65   integer and the
f480: 72 65 20 69 73 20 61 20 73 75 62 73 65 71 75 65  re is a subseque
f490: 6e 74 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e  nt attempt to.in
f4a0: 73 65 72 74 20 74 68 65 20 6f 72 20 75 70 64 61  sert the or upda
f4b0: 74 65 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45  te the AUTOINCRE
f4c0: 4d 45 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e  MENT table, then
f4d0: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
f4e0: 20 75 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c   undefined.)^..<
f4f0: 70 3e 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63  p>^Application c
f500: 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ode is allowed t
f510: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c  o modify the sql
f520: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
f530: 6c 65 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72  le, to add.new r
f540: 6f 77 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72  ows, to delete r
f550: 6f 77 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66  ows, or to modif
f560: 79 20 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e  y existing rows.
f570: 20 20 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c    ^However, appl
f580: 69 63 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e  ication.code can
f590: 6e 6f 74 20 63 72 65 61 74 65 20 74 68 65 20 73  not create the s
f5a0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f5b0: 61 62 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20  able if it does 
f5c0: 6e 6f 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  not already exis
f5d0: 74 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20  t..^Application 
f5e0: 63 6f 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20  code can delete 
f5f0: 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
f600: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f610: 65 6e 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20  ence table,.but 
f620: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65  application code
f630: 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65   cannot drop the
f640: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f650: 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64   table...<tcl>hd
f660: 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74  _fragment stat1t
f670: 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31  ab {sqlite_stat1
f680: 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c  } SQLITE_STAT1 <
f690: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71  /tcl>.<h3>The sq
f6a0: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f6b0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  </h3>..<p>^The s
f6c0: 71 6c 69 74 65 5f 73 74 61 74 31 20 69 73 20 61  qlite_stat1 is a
f6d0: 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65  n internal table
f6e0: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
f6f0: 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e  [ANALYZE] comman
f700: 64 0a 61 6e 64 20 75 73 65 64 20 74 6f 20 68 6f  d.and used to ho
f710: 6c 64 20 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20  ld supplemental 
f720: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
f730: 74 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  t tables and ind
f740: 65 78 65 73 20 74 68 61 74 20 74 68 65 0a 71 75  exes that the.qu
f750: 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20  ery planner can 
f760: 75 73 65 20 74 6f 20 68 65 6c 70 20 69 74 20 66  use to help it f
f770: 69 6e 64 20 62 65 74 74 65 72 20 77 61 79 73 20  ind better ways 
f780: 6f 66 20 70 65 72 66 6f 72 6d 69 6e 67 20 71 75  of performing qu
f790: 65 72 69 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74  eries..^Applicat
f7a0: 69 6f 6e 73 20 63 61 6e 20 75 70 64 61 74 65 2c  ions can update,
f7b0: 20 64 65 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e   delete from, in
f7c0: 73 65 72 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f  sert into or dro
f7d0: 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p the sqlite_sta
f7e0: 74 31 0a 74 61 62 6c 65 2c 20 62 75 74 20 6d 61  t1.table, but ma
f7f0: 79 20 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20  y not create or 
f800: 61 6c 74 65 72 20 74 68 65 20 73 71 6c 69 74 65  alter the sqlite
f810: 5f 73 74 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28  _stat1 table..^(
f820: 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
f830: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
f840: 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
f850: 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
f860: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
f870: 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31  BLE sqlite_stat1
f880: 28 74 62 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a  (tbl,idx,stat);.
f890: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
f8a0: 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  te>)^..<p> ^(The
f8b0: 72 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f  re is normally o
f8c0: 6e 65 20 72 6f 77 20 70 65 72 20 69 6e 64 65 78  ne row per index
f8d0: 2c 20 77 69 74 68 20 74 68 65 20 69 6e 64 65 78  , with the index
f8e0: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
f8f0: 68 65 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 73  he.name in the s
f900: 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20  qlite_stat1.idx 
f910: 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65  column.)^  ^(The
f920: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
f930: 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20  l column is.the 
f940: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
f950: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 69  e to which the i
f960: 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20  ndex belongs.)^ 
f970: 20 5e 28 49 6e 20 65 61 63 68 20 73 75 63 68 20   ^(In each such 
f980: 72 6f 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65  row, .the sqlite
f990: 5f 73 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d  _stat.stat colum
f9a0: 6e 20 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69  n will be.a stri
f9b0: 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
f9c0: 20 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67   a list of integ
f9d0: 65 72 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ers followed by 
f9e0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72  zero or more .ar
f9f0: 67 75 6d 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65  guments.)^  ^The
fa00: 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
fa10: 6e 20 74 68 69 73 0a 6c 69 73 74 20 69 73 20 74  n this.list is t
fa20: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
fa30: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
fa40: 20 74 68 65 20 69 6e 64 65 78 2e 20 20 28 54 68   the index.  (Th
fa50: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73  e number of.rows
fa60: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73   in the index is
fa70: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
fa80: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
fa90: 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 0a 65 78  in the table,.ex
faa0: 63 65 70 74 20 66 6f 72 20 5b 70 61 72 74 69 61  cept for [partia
fab0: 6c 20 69 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68  l indexes].).^Th
fac0: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
fad0: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
fae0: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ate number of ro
faf0: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  ws in the index.
fb00: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61  that have the sa
fb10: 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  me value in the 
fb20: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
fb30: 74 68 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65  the index.  ^The
fb40: 20 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20   third .integer 
fb50: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6e 75  is the number nu
fb60: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
fb70: 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 68  the index that h
fb80: 61 76 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61  ave .the same va
fb90: 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73  lue for the firs
fba0: 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20  t two columns.  
fbb0: 5e 54 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65  ^The N-th intege
fbc0: 72 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20  r (for N>1) .is 
fbd0: 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 61 76  the estimated av
fbe0: 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  erage number of 
fbf0: 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64  rows in .the ind
fc00: 65 78 20 77 68 69 63 68 20 68 61 76 65 20 74 68  ex which have th
fc10: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
fc20: 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63   the first N-1 c
fc30: 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20  olumns.  ^For.a 
fc40: 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20  K-column index, 
fc50: 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b  there will be K+
fc60: 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  1 integers in th
fc70: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20  e stat column.  
fc80: 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73  ^If.the index is
fc90: 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68   unique, then th
fca0: 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77  e last integer w
fcb0: 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54  ill be 1...<p>^T
fcc0: 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67  he list of integ
fcd0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
fce0: 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f  column can optio
fcf0: 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65  nally be followe
fd00: 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20  d.by arguments, 
fd10: 65 61 63 68 20 6f 66 20 77 68 69 63 68 20 69 73  each of which is
fd20: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e   a sequence of n
fd30: 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61 63 74  on-space charact
fd40: 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65  ers..^All argume
fd50: 6e 74 73 20 61 72 65 20 70 72 65 63 65 64 65 64  nts are preceded
fd60: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61   by a single spa
fd70: 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65  ce..^Unrecognize
fd80: 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  d arguments are 
fd90: 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
fda0: 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75  ...<p>^If the "u
fdb0: 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75 6d 65  nordered" argume
fdc0: 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  nt is present, t
fdd0: 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c  hen the query pl
fde0: 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68  anner assumes.th
fdf0: 61 74 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  at the index is 
fe00: 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69  unordered and wi
fe10: 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69  ll not use the i
fe20: 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65  ndex for a range
fe30: 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f   query.or for so
fe40: 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20  rting...<p>^The 
fe50: 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e  "sz=NNN" argumen
fe60: 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70  t (where NNN rep
fe70: 72 65 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e  resents a sequen
fe80: 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20  ce of 1 or more 
fe90: 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68  digits).means th
fea0: 61 74 20 74 68 65 20 61 76 65 72 61 67 65 20 72  at the average r
feb0: 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c  ow size over all
fec0: 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20   records of the 
fed0: 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69  table or.index i
fee0: 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20  s NNN bytes per 
fef0: 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74  row.  ^The SQLit
ff00: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
ff10: 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a 65 73  might use the.es
ff20: 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65  timated row size
ff30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f   information pro
ff40: 76 69 64 65 64 20 62 79 20 74 68 65 20 22 73 7a  vided by the "sz
ff50: 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68  =NNN" token.to h
ff60: 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d  elp it choose sm
ff70: 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64  aller tables and
ff80: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 72 65   indexes that re
ff90: 71 75 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20  quire less disk 
ffa0: 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70  I/O...<p>^(The p
ffb0: 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22  resence of the "
ffc0: 6e 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65  noskipscan" toke
ffd0: 6e 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n on the sqlite_
ffe0: 73 74 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64  stat1.stat field
fff0: 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65  .of an index pre
10000 76 65 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78  vents that index
10010 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64   from being used
10020 20 77 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d   with the.[skip-
10030 73 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  scan optimizatio
10040 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65  n].)^..<p>New te
10050 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65  xt tokens may be
10060 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e   added to the en
10070 64 20 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f  d of the stat co
10080 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65  lumn in future.e
10090 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53  nhancements to S
100a0 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70  QLite.  For comp
100b0 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63  atibility, unrec
100c0 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61  ognized tokens a
100d0 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65  t the end.of the
100e0 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65   stat column are
100f0 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
10100 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  d...<p>^(If the 
10110 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78  sqlite_stat1.idx
10120 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c   column is NULL,
10130 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65   then the sqlite
10140 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75  _stat1.stat.colu
10150 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  mn contains a si
10160 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69  ngle integer whi
10170 63 68 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  ch is the approx
10180 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a  imate number of.
10190 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
101a0 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
101b0 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c  sqlite_stat1.tbl
101c0 2e 29 5e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c  .)^.^(If the sql
101d0 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f  ite_stat1.idx co
101e0 6c 75 6d 6e 20 69 73 20 74 68 65 20 73 61 6d 65  lumn is the same
101f0 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f 73   as the sqlite_s
10200 74 61 74 31 2e 74 62 6c 0a 63 6f 6c 75 6d 6e 2c  tat1.tbl.column,
10210 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
10220 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  is a [WITHOUT RO
10230 57 49 44 5d 20 74 61 62 6c 65 20 61 6e 64 20 74  WID] table and t
10240 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
10250 73 74 61 74 0a 66 69 65 6c 64 20 63 6f 6e 74 61  stat.field conta
10260 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
10270 61 62 6f 75 74 20 74 68 65 20 69 6e 64 65 78 20  about the index 
10280 62 74 72 65 65 20 74 68 61 74 20 69 6d 70 6c 65  btree that imple
10290 6d 65 6e 74 73 20 74 68 65 0a 57 49 54 48 4f 55  ments the.WITHOU
102a0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e  T ROWID table.)^
102b0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
102c0 6e 74 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c  nt stat2tab {sql
102d0 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e  ite_stat2}</tcl>
102e0 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f  .<h3>The sqlite_
102f0 73 74 61 74 32 20 74 61 62 6c 65 3c 2f 68 33 3e  stat2 table</h3>
10300 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
10310 73 74 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72  stat2 is only cr
10320 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c  eated and is onl
10330 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
10340 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
10350 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  h SQLITE_ENABLE_
10360 53 54 41 54 32 20 61 6e 64 20 69 66 20 74 68 65  STAT2 and if the
10370 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
10380 6e 75 6d 62 65 72 20 69 73 20 62 65 74 77 65 65  number is betwee
10390 6e 0a 33 2e 36 2e 31 38 20 28 5b 64 61 74 65 6f  n.3.6.18 ([dateo
103a0 66 3a 33 2e 36 2e 31 38 5d 29 20 61 6e 64 20 33  f:3.6.18]) and 3
103b0 2e 37 2e 38 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .7.8 ([dateof:3.
103c0 37 2e 38 5d 29 2e 0a 54 68 65 20 73 71 6c 69 74  7.8])..The sqlit
103d0 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73  e_stat2 table is
103e0 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
103f0 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
10400 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
10410 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 31 38  te before 3.6.18
10420 20 6e 6f 72 20 61 66 74 65 72 20 33 2e 37 2e 38   nor after 3.7.8
10430 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ..The sqlite_sta
10440 74 32 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  t2 table contain
10450 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  s additional inf
10460 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74  ormation.about t
10470 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20  he distribution 
10480 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61  of keys within a
10490 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 63 68  n index..The sch
104a0 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
104b0 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73  e_stat2 table is
104c0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
104d0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
104e0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
104f0 69 74 65 5f 73 74 61 74 32 28 74 62 6c 2c 69 64  ite_stat2(tbl,id
10500 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c  x,sampleno,sampl
10510 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
10520 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
10530 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 69 64 78  sqlite_stat2.idx
10540 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20   column and the 
10550 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 74 62 6c  sqlite_stat2.tbl
10560 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20   column in each 
10570 0a 72 6f 77 20 6f 66 20 74 68 65 20 73 71 6c 69  .row of the sqli
10580 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69  te_stat2 table i
10590 64 65 6e 74 69 66 79 20 61 6e 20 69 6e 64 65 78  dentify an index
105a0 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68   described by th
105b0 61 74 20 72 6f 77 2e 0a 54 68 65 72 65 20 61 72  at row..There ar
105c0 65 20 75 73 75 61 6c 6c 79 20 31 30 20 72 6f 77  e usually 10 row
105d0 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
105e0 73 74 61 74 32 0a 74 61 62 6c 65 20 66 6f 72 20  stat2.table for 
105f0 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e  each index...<p>
10600 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
10610 20 65 6e 74 72 69 65 73 20 66 6f 72 20 61 6e 20   entries for an 
10620 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20  index that have 
10630 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 73 61 6d  sqlite_stat2.sam
10640 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20  pleno.between 0 
10650 61 6e 64 20 39 20 69 6e 63 6c 75 73 69 76 65 20  and 9 inclusive 
10660 61 72 65 20 73 61 6d 70 6c 65 73 20 6f 66 20 74  are samples of t
10670 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
10680 20 76 61 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e   value in the.in
10690 64 65 78 20 74 61 6b 65 6e 20 61 74 20 65 76 65  dex taken at eve
106a0 6e 6c 79 20 73 70 61 63 65 64 20 70 6f 69 6e 74  nly spaced point
106b0 73 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65  s along the inde
106c0 78 2e 0a 4c 65 74 20 43 20 62 65 20 74 68 65 20  x..Let C be the 
106d0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
106e0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 54 68 65  n the index..The
106f0 6e 20 74 68 65 20 73 61 6d 70 6c 65 64 20 72 6f  n the sampled ro
10700 77 73 20 61 72 65 20 67 69 76 65 6e 20 62 79 0a  ws are given by.
10710 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
10720 20 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28     rownumber = (
10730 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f  i*C*2 + C)/20.</
10740 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
10750 54 68 65 20 76 61 72 69 61 62 6c 65 20 69 20 69  The variable i i
10760 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 65  n the previous e
10770 78 70 72 65 73 73 69 6f 6e 20 76 61 72 69 65 73  xpression varies
10780 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39   between 0 and 9
10790 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  ..Conceptually, 
107a0 74 68 65 20 69 6e 64 65 78 20 73 70 61 63 65 20  the index space 
107b0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 0a  is divided into.
107c0 31 30 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65  10 uniform bucke
107d0 74 73 20 61 6e 64 20 74 68 65 20 73 61 6d 70 6c  ts and the sampl
107e0 65 73 20 61 72 65 20 74 68 65 20 6d 69 64 64 6c  es are the middl
107f0 65 20 72 6f 77 20 66 72 6f 6d 20 65 61 63 68 20  e row from each 
10800 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20  bucket...<p>The 
10810 66 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c 69 74  format for sqlit
10820 65 5f 73 74 61 74 32 20 69 73 20 72 65 63 6f 72  e_stat2 is recor
10830 64 65 64 20 68 65 72 65 20 66 6f 72 20 6c 65 67  ded here for leg
10840 61 63 79 20 72 65 66 65 72 65 6e 63 65 2e 20 20  acy reference.  
10850 0a 52 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73  .Recent versions
10860 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f   of SQLite no lo
10870 6e 67 65 72 20 73 75 70 70 6f 72 74 20 73 71 6c  nger support sql
10880 69 74 65 5f 73 74 61 74 32 20 61 6e 64 20 74 68  ite_stat2 and th
10890 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e.sqlite_stat2 t
108a0 61 62 6c 65 2c 20 69 66 20 69 73 20 65 78 69 73  able, if is exis
108b0 74 73 2c 20 69 73 20 73 69 6d 70 6c 79 20 69 67  ts, is simply ig
108c0 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  nored...<tcl>hd_
108d0 66 72 61 67 6d 65 6e 74 20 73 74 61 74 33 74 61  fragment stat3ta
108e0 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 33 7d  b {sqlite_stat3}
108f0 20 53 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74   SQLITE_STAT3</t
10900 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
10910 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 3c 2f  te_stat3 table</
10920 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  h3>..<p>The sqli
10930 74 65 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c 79  te_stat3 is only
10940 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20   used if SQLite 
10950 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68  is compiled.with
10960 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
10970 53 54 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54  STAT3] or [SQLIT
10980 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a  E_ENABLE_STAT4].
10990 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
109a0 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
109b0 20 69 73 20 33 2e 37 2e 39 20 28 5b 64 61 74 65   is 3.7.9 ([date
109c0 6f 66 3a 33 2e 37 2e 39 5d 29 20 6f 72 20 67 72  of:3.7.9]) or gr
109d0 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74  eater..The sqlit
109e0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
109f0 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
10a00 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
10a10 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
10a20 74 65 20 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e  te before 3.7.9.
10a30 0a 49 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  .If the [SQLITE_
10a40 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f  ENABLE_STAT4] co
10a50 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
10a60 6e 20 69 73 20 75 73 65 64 20 61 6e 64 20 74 68  n is used and th
10a70 65 0a 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e.SQLite version
10a80 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 38 2e 31   number is 3.8.1
10a90 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 31 5d   ([dateof:3.8.1]
10aa0 29 20 6f 72 20 67 72 65 61 74 65 72 2c 0a 74 68  ) or greater,.th
10ab0 65 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  en sqlite_stat3 
10ac0 6d 69 67 68 74 20 62 65 20 72 65 61 64 20 62 75  might be read bu
10ad0 74 20 6e 6f 74 20 77 72 69 74 74 65 6e 2e 0a 54  t not written..T
10ae0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10af0 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
10b00 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
10b10 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20  ation.about the 
10b20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20  distribution of 
10b30 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69  keys within an i
10b40 6e 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f  ndex, informatio
10b50 6e 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79  n that the.query
10b60 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65   planner can use
10b70 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65   to devise bette
10b80 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65  r and faster que
10b90 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e  ry algorithms..^
10ba0 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  (The schema of t
10bb0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10bc0 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
10bd0 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
10be0 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
10bf0 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
10c00 33 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  3(tbl,idx,nEq,nL
10c10 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
10c20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10c30 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20  te>)^..<p>There 
10c40 61 72 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74  are usually mult
10c50 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
10c60 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
10c70 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20   table for each 
10c80 69 6e 64 65 78 2e 0a 5e 28 54 68 65 20 73 71 6c  index..^(The sql
10c90 69 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c 65  ite_stat3.sample
10ca0 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68   column holds th
10cb0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  e value of the l
10cc0 65 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20 6f  eft-most field o
10cd0 66 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e 74  f an.index ident
10ce0 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f  ified by sqlite_
10cf0 73 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73 71  stat3.idx and sq
10d00 6c 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e 29  lite_stat3.tbl.)
10d10 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  ^.^(The sqlite_s
10d20 74 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20  tat3.nEq column 
10d30 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10d40 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
10d50 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
10d60 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d  ndex whose left-
10d70 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63  most column exac
10d80 74 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20  tly matches.the 
10d90 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20  sample.)^.^(The 
10da0 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74  sqlite_stat3.nLt
10db0 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f   holds the appro
10dc0 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66  ximate number of
10dd0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a   entries in the.
10de0 69 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74  index whose left
10df0 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20  -most column is 
10e00 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73 61  less than the sa
10e10 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71  mple.)^.^(The sq
10e20 6c 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20  lite_stat3.nDLt 
10e30 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65  column holds the
10e40 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d   approximate.num
10e50 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
10e60 6c 65 66 74 2d 6d 6f 73 74 20 65 6e 74 72 69 65  left-most entrie
10e70 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74  s in the index t
10e80 68 61 74 20 61 72 65 20 6c 65 73 73 20 74 68 61  hat are less tha
10e90 6e 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  n.the sample.)^.
10ea0 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62  .<p>^There can b
10eb0 65 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e  e an arbitrary n
10ec0 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f  umber of sqlite_
10ed0 73 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65  stat3 entries pe
10ee0 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e  r index..The [AN
10ef0 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77  ALYZE] command w
10f00 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65  ill typically ge
10f10 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74  nerate sqlite_st
10f20 61 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20  at3 tables.that 
10f30 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20  contain between 
10f40 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65  10 and 40 sample
10f50 73 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72  s that are distr
10f60 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68  ibuted across.th
10f70 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20  e key space and 
10f80 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76  with large nEq v
10f90 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20  alues...<p>^(In 
10fa0 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71  a well-formed sq
10fb0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10fc0 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f  , the samples fo
10fd0 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64  r any single.ind
10fe0 65 78 20 6d 75 73 74 20 61 70 70 65 61 72 20 69  ex must appear i
10ff0 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72  n the same order
11000 20 74 68 61 74 20 74 68 65 79 20 6f 63 63 75 72   that they occur
11010 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20   in the index.  
11020 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  .In other words,
11030 20 69 66 20 74 68 65 20 65 6e 74 72 79 20 77 69   if the entry wi
11040 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  th left-most col
11050 75 6d 6e 20 53 31 20 69 73 20 65 61 72 6c 69 65  umn S1 is earlie
11060 72 20 69 6e 0a 74 68 65 20 69 6e 64 65 78 20 62  r in.the index b
11070 2d 74 72 65 65 20 74 68 61 6e 20 74 68 65 0a 65  -tree than the.e
11080 6e 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d  ntry with left-m
11090 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 32 2c 20 74  ost column S2, t
110a0 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74  hen in the sqlit
110b0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 0a  e_stat3 table, .
110c0 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68  sample S1 must h
110d0 61 76 65 20 61 20 73 6d 61 6c 6c 65 72 20 72 6f  ave a smaller ro
110e0 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20  wid than sample 
110f0 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  S2.)^..<tcl>hd_f
11100 72 61 67 6d 65 6e 74 20 73 74 61 74 34 74 61 62  ragment stat4tab
11110 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 34 7d 20   {sqlite_stat4} 
11120 53 51 4c 49 54 45 5f 53 54 41 54 34 3c 2f 74 63  SQLITE_STAT4</tc
11130 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74  l>.<h3>The sqlit
11140 65 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f 68  e_stat4 table</h
11150 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  3>..<p>The sqlit
11160 65 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79 20  e_stat4 is only 
11170 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f  created and is o
11180 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69  nly used if SQLi
11190 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77  te is compiled.w
111a0 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  ith [SQLITE_ENAB
111b0 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69 66  LE_STAT4] and if
111c0 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
111d0 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e  ion number is.3.
111e0 38 2e 31 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38  8.1 ([dateof:3.8
111f0 2e 31 5d 29 20 6f 72 20 67 72 65 61 74 65 72 2e  .1]) or greater.
11200 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
11210 34 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68  4 table is neith
11220 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74  er read nor writ
11230 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69  ten by any.versi
11240 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66  on of SQLite bef
11250 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73  ore 3.8.1..The s
11260 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11270 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
11280 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
11290 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
112a0 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
112b0 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
112c0 20 6f 72 20 74 68 65 20 64 69 73 74 72 69 62 75   or the distribu
112d0 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20  tion of.keys in 
112e0 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
112f0 6f 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  of a [WITHOUT RO
11300 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
11310 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61  query planner ca
11320 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 20  n sometimes use 
11330 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  the additional i
11340 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68  nformation in.th
11350 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
11360 61 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20 62  able to devise b
11370 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65 72  etter and faster
11380 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d   query algorithm
11390 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20  s..^(The schema 
113a0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
113b0 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73 20  at4 table is as 
113c0 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
113d0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
113e0 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
113f0 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45  stat4(tbl,idx,nE
11400 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c  q,nLt,nDLt,sampl
11410 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
11420 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68  kquote>)^..<p>Th
11430 65 72 65 20 61 72 65 20 74 79 70 69 63 61 6c 6c  ere are typicall
11440 79 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f 20  y between 10 to 
11450 34 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  40 entries in th
11460 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
11470 61 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69 6e  able for.each in
11480 64 65 78 20 66 6f 72 20 77 68 69 63 68 20 73 74  dex for which st
11490 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76 61  atistics are ava
114a0 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72 20  ilable, however 
114b0 74 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72 65  these limits are
114c0 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64 73  .not hard bounds
114d0 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  ..The meanings o
114e0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
114f0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11500 34 20 74 61 62 6c 65 20 61 72 65 20 61 73 20 66  4 table are as f
11510 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
11520 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
11530 22 30 22 20 77 69 64 74 68 3d 22 31 30 30 25 22  "0" width="100%"
11540 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30   cellpadding="10
11550 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ">.<tr><td valig
11560 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
11570 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a  ight">tbl:</td>.
11580 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11590 6c 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20 63  lite_stat4.tbl c
115a0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65  olumn holds name
115b0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
115c0 61 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65 20  at owns.    the 
115d0 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 20 72  index that the r
115e0 6f 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a 0a  ow describes)^..
115f0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
11600 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
11610 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20  t">idx:</td>.   
11620 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74   <td>^(The sqlit
11630 65 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c 75  e_stat4.idx colu
11640 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66  mn holds name of
11650 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
11660 74 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73 63  the.    row desc
11670 72 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68 65  ribes, or in the
11680 20 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e 20   case of.    an 
11690 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74  sqlite_stat4 ent
116a0 72 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f 55  ry for a [WITHOU
116b0 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20  T ROWID] table, 
116c0 74 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20  the.    name of 
116d0 74 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c 66  the table itself
116e0 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  .)^..<tr><td val
116f0 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
11700 22 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c  "right">sample:<
11710 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
11720 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11730 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
11740 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20 69  lds a BLOB.    i
11750 6e 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  n the [record fo
11760 72 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f 64  rmat] that encod
11770 65 73 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  es the indexed c
11780 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20  olumns followed 
11790 62 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69 64  by.    the rowid
117a0 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
117b0 6c 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f 6c  le or by the col
117c0 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d  umns of the prim
117d0 61 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f 72  ary key .    for
117e0 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
117f0 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28   table.)^.    ^(
11800 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
11810 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72  .sample BLOB for
11820 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57   the WITHOUT ROW
11830 49 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66 20  ID table itself 
11840 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75  .    contains ju
11850 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  st the columns o
11860 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
11870 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68 65  y.)^.    Let the
11880 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11890 6e 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74 68  ns encoded by th
118a0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73  e sqlite_stat4.s
118b0 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e  ample blob be N.
118c0 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65  .    ^For indexe
118d0 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79  s on an ordinary
118e0 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e 20   rowid table, N 
118f0 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65  will be one more
11900 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
11910 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73   .    of columns
11920 20 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e 46   indexed..    ^F
11930 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57 49  or indexes on WI
11940 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
11950 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68  es, N will be th
11960 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11970 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64 20  mns.    indexed 
11980 70 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72 20  plus the number 
11990 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
119a0 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20  e primary key.. 
119b0 20 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f 55     ^For a WITHOU
119c0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e  T ROWID table, N
119d0 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d   will be the num
119e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
119f0 6e 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61 72  n the.    primar
11a00 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20  y key...<tr><td 
11a10 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
11a20 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c  gn="right">nEq:<
11a30 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
11a40 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11a50 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nEq column holds
11a60 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
11a70 65 67 65 72 73 20 77 68 65 72 65 20 0a 20 20 20  egers where .   
11a80 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65   the K-th intege
11a90 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  r is the approxi
11aa0 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65  mate number of e
11ab0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
11ac0 64 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c 65  dex.    whose le
11ad0 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e  ft-most K column
11ae0 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
11af0 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  the K left-most 
11b00 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74  columns.    of t
11b10 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74  he sample.)^..<t
11b20 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
11b30 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
11b40 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  >nLt:</td>.    <
11b50 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
11b60 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e  stat4.nLt column
11b70 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66   holds a list of
11b80 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72   N integers wher
11b90 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69  e.    the K-th i
11ba0 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
11bb0 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
11bc0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
11bd0 68 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68 6f  he.    index who
11be0 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63  se K left-most c
11bf0 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65  olumns are colle
11c00 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61  ctively less tha
11c10 6e 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65 66  n the .    K lef
11c20 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f  t-most columns o
11c30 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  f the sample.)^.
11c40 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
11c50 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
11c60 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20  ht">nDLt:</td>. 
11c70 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11c80 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63  ite_stat4.nDLt c
11c90 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
11ca0 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73  st of N integers
11cb0 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b   where.    the K
11cc0 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
11cd0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 20  he approximate. 
11ce0 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74     number of ent
11cf0 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
11d00 78 20 74 68 61 74 20 61 72 65 20 64 69 73 74 69  x that are disti
11d10 6e 63 74 20 69 6e 20 74 68 65 20 66 69 72 73 74  nct in the first
11d20 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20   K columns and. 
11d30 20 20 20 77 68 65 72 65 20 74 68 65 20 6c 65 66     where the lef
11d40 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73  t-most K columns
11d50 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c   are collectivel
11d60 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
11d70 6c 65 66 74 2d 6d 6f 73 74 0a 20 20 20 20 4b 20  left-most.    K 
11d80 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 73  columns of the s
11d90 61 6d 70 6c 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65  ample.)^.</table
11da0 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  >.</center>..<p>
11db0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
11dc0 20 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a 61   is a generaliza
11dd0 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c 69  tion of the sqli
11de0 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2e 20  te_stat3 table. 
11df0 20 54 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   The.sqlite_stat
11e00 33 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73  3 table provides
11e10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11e20 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
11e30 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e   column of an.in
11e40 64 65 78 20 77 68 65 72 65 61 73 20 74 68 65 20  dex whereas the 
11e50 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11e60 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f  le provides info
11e70 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 6c  rmation about al
11e80 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  l columns.of the
11e90 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65   index...<p>^The
11ea0 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62  re can be an arb
11eb0 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66  itrary number of
11ec0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e   sqlite_stat4 en
11ed0 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e  tries per index.
11ee0 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63  .The [ANALYZE] c
11ef0 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69  ommand will typi
11f00 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73  cally generate s
11f10 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11f20 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  es.that contain 
11f30 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34  between 10 and 4
11f40 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61  0 samples that a
11f50 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20 61  re distributed a
11f60 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70  cross.the key sp
11f70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72  ace and with lar
11f80 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a  ge nEq values...
11f90 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66  <p>^(In a well-f
11fa0 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61  ormed sqlite_sta
11fb0 74 34 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61  t4 table, the sa
11fc0 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69  mples for any si
11fd0 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20  ngle.index must 
11fe0 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 73 61  appear in the sa
11ff0 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  me order that th
12000 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20  ey occur in the 
12010 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65  index.  .In othe
12020 72 20 77 6f 72 64 73 2c 20 69 66 20 65 6e 74 72  r words, if entr
12030 79 20 53 31 20 69 73 20 65 61 72 6c 69 65 72 20  y S1 is earlier 
12040 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74  in the index b-t
12050 72 65 65 20 74 68 61 6e 20 0a 65 6e 74 72 79 20  ree than .entry 
12060 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65 20  S2, then in the 
12070 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
12080 6c 65 2c 20 73 61 6d 70 6c 65 20 53 31 20 6d 75  le, sample S1 mu
12090 73 74 20 68 61 76 65 20 61 0a 73 6d 61 6c 6c 65  st have a.smalle
120a0 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61 6d  r rowid than sam
120b0 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e  ple S2.)^..<tcl>
120c0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c  hd_fragment roll
120d0 62 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c  backjournal {rol
120e0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f  lback journal fo
120f0 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e  rmat}</tcl>.<h1>
12100 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  The Rollback Jou
12110 72 6e 61 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68  rnal</h1>..<p>Th
12120 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12130 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73  al is a file ass
12140 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
12150 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  h SQLite databas
12160 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64  e.file that hold
12170 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
12180 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68  ed to restore th
12190 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
121a0 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73  to its initial.s
121b0 74 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20  tate during the 
121c0 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e  course of a tran
121d0 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f  saction..^The ro
121e0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
121f0 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f  ile is always lo
12200 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  cated in the sam
12210 65 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20  e .directory as 
12220 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
12230 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61  e and has the sa
12240 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64  me name as the d
12250 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74  atabase file but
12260 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67   with the string
12270 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f  ."<tt>-journal</
12280 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20  tt>" appended.  
12290 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  There can only b
122a0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62  e a single rollb
122b0 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f  ack journal.asso
122c0 63 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69  ciated with a gi
122d0 76 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  ve database and 
122e0 68 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20  hence there can 
122f0 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74  only be one writ
12300 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70  e.transaction op
12310 65 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e  en against a sin
12320 67 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20  gle database at 
12330 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c  one time.</p>..<
12340 70 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69  p>If a transacti
12350 6f 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75  on is aborted du
12360 65 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74  e to an applicat
12370 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70  ion crash, an op
12380 65 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63  erating.system c
12390 72 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77  rash, or a hardw
123a0 61 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72  are power failur
123b0 65 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e  e or crash, then
123c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61   the database ma
123d0 79 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20  y.be left in an 
123e0 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
123f0 74 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74  te.  ^The next t
12400 69 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d  ime SQLite attem
12410 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20  pts to open.the 
12420 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74  database file, t
12430 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
12440 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
12450 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65  nal file will be
12460 20 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74   .detected and t
12470 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20  he journal will 
12480 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  be automatically
12490 20 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20   played back to 
124a0 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61  restore the.data
124b0 62 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74  base to its stat
124c0 65 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f  e at the start o
124d0 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65  f the incomplete
124e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70   transaction.</p
124f0 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63  >..<p>^A rollbac
12500 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c  k journal is onl
12510 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  y considered to 
12520 62 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65  be valid if it e
12530 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69  xists and.contai
12540 6e 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65  ns a valid heade
12550 72 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e  r.  Hence a tran
12560 73 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63  saction can be c
12570 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a  ommitted in one.
12580 6f 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c  of three ways:.<
12590 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f  ol>.<li>^(The ro
125a0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
125b0 69 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74  ile can be delet
125c0 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20  ed)^,.<li>^(The 
125d0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
125e0 20 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75   file can be tru
125f0 6e 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c  ncated to zero l
12600 65 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e  ength)^, or.<li>
12610 5e 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  ^(The header of 
12620 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
12630 72 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72  rnal can be over
12640 77 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76  written with.inv
12650 61 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74  alid header text
12660 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61   (for example, a
12670 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f  ll zeros).)^.</o
12680 6c 3e 0a 3c 70 3e 0a 5e 54 68 65 73 65 20 74 68  l>.<p>.^These th
12690 72 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d  ree ways of comm
126a0 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63  itting a transac
126b0 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20  tion correspond 
126c0 74 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a 54  to the DELETE,.T
126d0 52 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45 52  RUNCATE, and PER
126e0 53 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20 72  SIST settings, r
126f0 65 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66 20  espectively, of 
12700 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  the [journal_mod
12710 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a  e pragma]..</p>.
12720 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c  ..<p>A valid rol
12730 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65  lback journal be
12740 67 69 6e 73 20 77 69 74 68 20 61 20 68 65 61 64  gins with a head
12750 65 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  er in the follow
12760 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a  ing format:</p>.
12770 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c  .<center>.<i>Rol
12780 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65  lback Journal He
12790 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
127a0 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
127b0 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
127c0 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
127d0 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
127e0 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
127f0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12800 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64  center>0.    <td
12810 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12820 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c  n=center>8.    <
12830 74 64 3e 48 65 61 64 65 72 20 73 74 72 69 6e 67  td>Header string
12840 3a 20 20 30 78 64 39 2c 20 30 78 64 35 2c 20 30  :  0xd9, 0xd5, 0
12850 78 30 35 2c 20 30 78 66 39 2c 20 30 78 32 30 2c  x05, 0xf9, 0x20,
12860 20 30 78 61 31 2c 20 30 78 36 33 2c 20 30 78 64   0xa1, 0x63, 0xd
12870 37 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  7.<tr><td valign
12880 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12890 72 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>8.    <td vali
128a0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
128b0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68  ter>4.    <td>Th
128c0 65 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d  e "Page Count" -
128d0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
128e0 61 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74  ages in the next
128f0 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20   segment of the 
12900 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c  .        journal
12910 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20  , or -1 to.     
12920 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74     mean all cont
12930 65 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ent to the end o
12940 66 20 74 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c  f the file.<tr><
12950 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12960 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20  ign=center>12.  
12970 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12980 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12990 20 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d      <td>A random
129a0 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63   nonce for the c
129b0 68 65 63 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20  hecksum.<tr><td 
129c0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
129d0 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c  =center>16.    <
129e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
129f0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12a00 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a   <td>Initial siz
12a10 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
12a20 65 20 69 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c  e in pages.<tr><
12a30 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12a40 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20  ign=center>20.  
12a50 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12a60 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12a70 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20      <td>Size of 
12a80 61 20 64 69 73 6b 20 73 65 63 74 6f 72 20 61 73  a disk sector as
12a90 73 75 6d 65 64 20 62 79 20 74 68 65 20 70 72 6f  sumed by the pro
12aa0 63 65 73 73 20 74 68 61 74 20 77 72 6f 74 65 20  cess that wrote 
12ab0 74 68 69 73 0a 20 20 20 20 20 20 20 20 6a 6f 75  this.        jou
12ac0 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  rnal..<tr><td va
12ad0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12ae0 65 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64  enter>24.    <td
12af0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12b00 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12b10 74 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73  td>Size of pages
12b20 20 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c   in this journal
12b30 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ..</table>.</cen
12b40 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c  ter>..<p>^A roll
12b50 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61  back journal hea
12b60 64 65 72 20 69 73 20 70 61 64 64 65 64 20 77 69  der is padded wi
12b70 74 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20  th zeros out to 
12b80 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73  the size of a .s
12b90 69 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73  ingle sector (as
12ba0 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20   defined by the 
12bb0 73 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65  sector size inte
12bc0 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
12bd0 29 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69 73  )..The header is
12be0 20 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20   in a sector by 
12bf0 69 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69  itself so that i
12c00 66 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f  f a power loss o
12c10 63 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74  ccurs while.writ
12c20 69 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20  ing the sector, 
12c30 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
12c40 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61   follows the hea
12c50 64 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70  der will be.(hop
12c60 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65  efully) undamage
12c70 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  d.</p>..<p>^Afte
12c80 72 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  r the header and
12c90 20 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72   zero padding ar
12ca0 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
12cb0 61 67 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45  age records.  ^E
12cc0 61 63 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20  ach.page record 
12cd0 73 74 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66  stores a copy of
12ce0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
12cf0 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
12d00 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65  database file.be
12d10 66 6f 72 65 20 69 74 20 77 61 73 20 63 68 61 6e  fore it was chan
12d20 67 65 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20  ged.  ^The same 
12d30 70 61 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70  page may not app
12d40 65 61 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ear more than on
12d50 63 65 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67  ce.within a sing
12d60 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  le rollback jour
12d70 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b  nal..To rollback
12d80 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74   an incomplete t
12d90 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72  ransaction, a pr
12da0 6f 63 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79  ocess.has merely
12db0 20 74 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c   to read the rol
12dc0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72  lback journal fr
12dd0 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20  om beginning to 
12de0 65 6e 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61  end and.write pa
12df0 67 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ges found in the
12e00 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e   journal back in
12e10 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
12e20 66 69 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72  file at the.appr
12e30 6f 70 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e  opriate location
12e40 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
12e50 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
12e60 73 69 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20  size (the value 
12e70 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  of the integer a
12e80 74 20 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20  t offset 24 .in 
12e90 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
12ea0 65 72 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74  er) be N..Then t
12eb0 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70  he format of a p
12ec0 61 67 65 20 72 65 63 6f 72 64 20 69 73 20 61 73  age record is as
12ed0 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
12ee0 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62  center>.<i>Rollb
12ef0 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65  ack Journal Page
12f00 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f   Record Format</
12f10 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
12f20 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
12f30 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
12f40 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
12f50 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
12f60 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12f70 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20  gn=center>0.    
12f80 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12f90 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12fa0 20 20 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e    <td>The page n
12fb0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 64 61 74  umber in the dat
12fc0 61 62 61 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c  abase file.<tr><
12fd0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12fe0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12ff0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
13000 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20  align=center>N. 
13010 20 20 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20     <td>Original 
13020 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70  content of the p
13030 61 67 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65  age prior to the
13040 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 74 72   start of the tr
13050 61 6e 73 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74  ansaction.<tr><t
13060 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13070 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20  gn=center>N+4.  
13080 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
13090 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
130a0 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
130b0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
130c0 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63  er>...<p>^(The c
130d0 68 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e  hecksum is an un
130e0 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e  signed 32-bit in
130f0 74 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61  teger computed a
13100 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
13110 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c  <ol>.<li>Initial
13120 69 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d  ize the checksum
13130 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d   to the checksum
13140 20 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75   nonce value fou
13150 6e 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61  nd in the.journa
13160 6c 20 68 65 61 64 65 72 20 61 74 20 6f 66 66 73  l header at offs
13170 65 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69  et 12..<li>Initi
13180 61 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f  alize index X to
13190 20 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65   be N-200 (where
131a0 20 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f   N is the size o
131b0 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  f a database pag
131c0 65 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e  e.in bytes..<li>
131d0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 62 79  Interpret the by
131e0 74 65 20 61 74 20 6f 66 66 73 65 74 20 58 20 69  te at offset X i
131f0 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20  nto the page as 
13200 61 6e 20 38 2d 62 69 74 20 75 6e 73 69 67 6e 65  an 8-bit unsigne
13210 64 20 69 6e 74 65 67 65 72 0a 20 61 6e 64 20 61  d integer. and a
13220 64 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  dd the value of 
13230 74 68 61 74 20 69 6e 74 65 67 65 72 20 74 6f 20  that integer to 
13240 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c  the checksum..<l
13250 69 3e 53 75 62 74 72 61 63 74 20 32 30 30 20 66  i>Subtract 200 f
13260 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20  rom X..<li>If X 
13270 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
13280 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f  or equal to zero
13290 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 74 65  , go back to ste
132a0 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  p 3..</ol>)^..<p
132b0 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61  >The checksum va
132c0 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f 20 67  lue is used to g
132d0 75 61 72 64 20 61 67 61 69 6e 73 74 20 69 6e 63  uard against inc
132e0 6f 6d 70 6c 65 74 65 20 77 72 69 74 65 73 20 6f  omplete writes o
132f0 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65  f.a journal page
13300 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e   record followin
13310 67 20 61 20 70 6f 77 65 72 20 66 61 69 6c 75 72  g a power failur
13320 65 2e 20 20 41 20 64 69 66 66 65 72 65 6e 74 20  e.  A different 
13330 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20  random nonce.is 
13340 75 73 65 64 20 65 61 63 68 20 74 69 6d 65 20 61  used each time a
13350 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
13360 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64 65 72  started in order
13370 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
13380 20 72 69 73 6b 0a 74 68 61 74 20 75 6e 77 72 69   risk.that unwri
13390 74 74 65 6e 20 73 65 63 74 6f 72 73 20 6d 69 67  tten sectors mig
133a0 68 74 20 62 79 20 63 68 61 6e 63 65 20 63 6f 6e  ht by chance con
133b0 74 61 69 6e 20 64 61 74 61 20 66 72 6f 6d 20 74  tain data from t
133c0 68 65 20 73 61 6d 65 20 70 61 67 65 0a 74 68 61  he same page.tha
133d0 74 20 77 61 73 20 61 20 70 61 72 74 20 6f 66 20  t was a part of 
133e0 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20  prior journals. 
133f0 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74 68 65   By changing the
13400 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a   nonce for each.
13410 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61  transaction, sta
13420 6c 65 20 64 61 74 61 20 6f 6e 20 64 69 73 6b 20  le data on disk 
13430 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72  will still gener
13440 61 74 65 20 61 6e 20 69 6e 63 6f 72 72 65 63 74  ate an incorrect
13450 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65   checksum.and be
13460 20 64 65 74 65 63 74 65 64 20 77 69 74 68 20 68   detected with h
13470 69 67 68 20 70 72 6f 62 61 62 69 6c 69 74 79 2e  igh probability.
13480 20 20 54 68 65 20 63 68 65 63 6b 73 75 6d 20 6f    The checksum o
13490 6e 6c 79 20 75 73 65 73 20 61 20 73 70 61 72 73  nly uses a spars
134a0 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62  e sample.of 32-b
134b0 69 74 20 77 6f 72 64 73 20 66 72 6f 6d 20 74 68  it words from th
134c0 65 20 64 61 74 61 20 72 65 63 6f 72 64 20 66 6f  e data record fo
134d0 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 72 65  r performance re
134e0 61 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e 20 73  asons - design s
134f0 74 75 64 69 65 73 20 0a 64 75 72 69 6e 67 20 74  tudies .during t
13500 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73  he planning phas
13510 65 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 30  es of SQLite 3.0
13520 2e 30 20 73 68 6f 77 65 64 0a 61 20 73 69 67 6e  .0 showed.a sign
13530 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
13540 6e 63 65 20 68 69 74 20 69 6e 20 63 68 65 63 6b  nce hit in check
13550 73 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e 74 69  summing the enti
13560 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70  re page.</p>..<p
13570 3e 4c 65 74 20 74 68 65 20 70 61 67 65 20 63 6f  >Let the page co
13580 75 6e 74 20 76 61 6c 75 65 20 61 74 20 6f 66 66  unt value at off
13590 73 65 74 20 38 20 69 6e 20 74 68 65 20 6a 6f 75  set 8 in the jou
135a0 72 6e 61 6c 20 68 65 61 64 65 72 20 62 65 20 4d  rnal header be M
135b0 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72 65 61 74  ..^If M is great
135c0 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65  er than zero the
135d0 6e 20 61 66 74 65 72 20 4d 20 70 61 67 65 20 72  n after M page r
135e0 65 63 6f 72 64 73 20 74 68 65 20 6a 6f 75 72 6e  ecords the journ
135f0 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a  al file.may be z
13600 65 72 6f 20 70 61 64 64 65 64 20 6f 75 74 20 74  ero padded out t
13610 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69  o the next multi
13620 70 6c 65 20 6f 66 20 74 68 65 20 73 65 63 74 6f  ple of the secto
13630 72 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68  r size and anoth
13640 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  er.journal heade
13650 72 20 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65  r may be inserte
13660 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c  d.  ^All journal
13670 20 68 65 61 64 65 72 73 20 77 69 74 68 69 6e 20   headers within 
13680 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c  the same.journal
13690 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 74 68   must contain th
136a0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
136b0 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 73 65  page size and se
136c0 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a  ctor size.</p>..
136d0 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d 31 20 69  <p>^If M is -1 i
136e0 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f  n the initial jo
136f0 75 72 6e 61 6c 20 68 65 61 64 65 72 2c 20 74 68  urnal header, th
13700 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
13710 20 70 61 67 65 20 72 65 63 6f 72 64 73 0a 74 68   page records.th
13720 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d  at follow is com
13730 70 75 74 65 64 20 62 79 20 63 6f 6d 70 75 74 69  puted by computi
13740 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70 61 67 65  ng how many page
13750 20 72 65 63 6f 72 64 73 20 77 69 6c 6c 20 66 69   records will fi
13760 74 20 69 6e 0a 74 68 65 20 61 76 61 69 6c 61 62  t in.the availab
13770 6c 65 20 73 70 61 63 65 20 6f 66 20 74 68 65 20  le space of the 
13780 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
13790 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f   journal file.</
137a0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
137b0 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b  ment walformat {
137c0 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  WAL format}</tcl
137d0 3e 0a 3c 68 31 3e 54 68 65 20 57 72 69 74 65 2d  >.<h1>The Write-
137e0 41 68 65 61 64 20 4c 6f 67 3c 2f 68 31 3e 0a 0a  Ahead Log</h1>..
137f0 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74  <p>Beginning wit
13800 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30  h [version 3.7.0
13810 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 30  ] ([dateof:3.7.0
13820 5d 29 2c 20 0a 53 51 4c 69 74 65 20 73 75 70 70  ]), .SQLite supp
13830 6f 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73  orts a new trans
13840 61 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d  action.control m
13850 65 63 68 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20  echanism called 
13860 22 5b 57 41 4c 20 7c 20 77 72 69 74 65 2d 61 68  "[WAL | write-ah
13870 65 61 64 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57  ead log]" or "[W
13880 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61  AL]"..^When a da
13890 74 61 62 61 73 65 20 69 73 20 69 6e 20 57 41 4c  tabase is in WAL
138a0 20 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65   mode, all conne
138b0 63 74 69 6f 6e 73 20 74 6f 20 74 68 61 74 20 64  ctions to that d
138c0 61 74 61 62 61 73 65 20 6d 75 73 74 0a 75 73 65  atabase must.use
138d0 20 74 68 65 20 57 41 4c 2e 20 20 5e 41 20 70 61   the WAL.  ^A pa
138e0 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
138f0 65 20 77 69 6c 6c 20 75 73 65 20 65 69 74 68 65  e will use eithe
13900 72 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  r a rollback jou
13910 72 6e 61 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62  rnal.or a WAL, b
13920 75 74 20 6e 6f 74 20 62 6f 74 68 20 61 74 20 74  ut not both at t
13930 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54  he same time..^T
13940 68 65 20 57 41 4c 20 69 73 20 61 6c 77 61 79 73  he WAL is always
13950 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20   located in the 
13960 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61  same directory a
13970 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66  s the database.f
13980 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20  ile and has the 
13990 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65  same name as the
139a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
139b0 75 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69  ut with the stri
139c0 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74  ng."<tt>-wal</tt
139d0 3e 22 20 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e  >" appended.</p>
139e0 0a 0a 3c 68 32 3e 57 41 4c 20 46 69 6c 65 20 46  ..<h2>WAL File F
139f0 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 41  ormat</h2>..<p>A
13a00 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73   WAL file consis
13a10 74 73 20 6f 66 20 61 20 68 65 61 64 65 72 20 66  ts of a header f
13a20 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
13a30 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22  or more "frames"
13a40 2e 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65 63  ..Each frame rec
13a50 6f 72 64 73 20 74 68 65 20 72 65 76 69 73 65 64  ords the revised
13a60 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69   content of a si
13a70 6e 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74  ngle page from t
13a80 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
13a90 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74  .  All changes t
13aa0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  o the database a
13ab0 72 65 20 72 65 63 6f 72 64 65 64 20 62 79 20 77  re recorded by w
13ac0 72 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e  riting.frames in
13ad0 74 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61  to the WAL.  Tra
13ae0 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74  nsactions commit
13af0 20 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73   when a frame is
13b00 20 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f   written that.co
13b10 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20  ntains a commit 
13b20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67  marker.  ^A sing
13b30 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75  le WAL can and u
13b40 73 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f  sually does reco
13b50 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61  rd .multiple tra
13b60 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69  nsactions.  Peri
13b70 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f  odically, the co
13b80 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c  ntent of the WAL
13b90 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20   is.transferred 
13ba0 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61  back into the da
13bb0 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61  tabase file in a
13bc0 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c  n operation call
13bd0 65 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74  ed a."checkpoint
13be0 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69  ".</p>..<p>^A si
13bf0 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61  ngle WAL file ca
13c00 6e 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74  n be reused mult
13c10 69 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e  iple times.  ^In
13c20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
13c30 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75  e.WAL can fill u
13c40 70 20 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e  p with frames an
13c50 64 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70  d then be checkp
13c60 6f 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20  ointed and then 
13c70 6e 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f  new.frames can o
13c80 76 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64  verwrite the old
13c90 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61   ones.  ^A WAL a
13ca0 6c 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d  lways grows from
13cb0 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72   beginning.towar
13cc0 64 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63  d the end.  Chec
13cd0 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65  ksums and counte
13ce0 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 65  rs attached to e
13cf0 61 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73  ach frame are.us
13d00 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
13d10 77 68 69 63 68 20 66 72 61 6d 65 73 20 77 69 74  which frames wit
13d20 68 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20  hin the WAL are 
13d30 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a  valid and which.
13d40 61 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72  are leftovers fr
13d50 6f 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f  om prior checkpo
13d60 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  ints.</p>..<p>^(
13d70 54 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69  The WAL header i
13d80 73 20 33 32 20 62 79 74 65 73 20 69 6e 20 73 69  s 32 bytes in si
13d90 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ze and consists 
13da0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13db0 20 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61   eight.big-endia
13dc0 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65  n 32-bit unsigne
13dd0 64 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  d integer values
13de0 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
13df0 3c 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f  <i>WAL Header Fo
13e00 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
13e10 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
13e20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
13e30 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
13e40 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
13e50 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13e60 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13e70 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
13e80 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13e90 20 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d     <td>Magic num
13ea0 62 65 72 2e 20 20 30 78 33 37 37 66 30 36 38 32  ber.  0x377f0682
13eb0 20 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c   or 0x377f0683.<
13ec0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13ed0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13ee0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13ef0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13f00 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61    <td>File forma
13f10 74 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72  t version.  Curr
13f20 65 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c  ently 3007000..<
13f30 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13f40 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
13f50 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13f60 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13f70 20 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70    <td>Database p
13f80 61 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70  age size.  Examp
13f90 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64  le: 1024.<tr><td
13fa0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13fb0 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
13fc0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13fd0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13fe0 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75  >Checkpoint sequ
13ff0 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e  ence number.<tr>
14000 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14010 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
14020 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14030 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
14040 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64  <td>Salt-1: rand
14050 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65  om integer incre
14060 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
14070 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e   checkpoint.<tr>
14080 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14090 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
140a0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
140b0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
140c0 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69  <td>Salt-2: a di
140d0 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e  fferent random n
140e0 75 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20 63  umber for each c
140f0 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74  heckpoint.<tr><t
14100 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14110 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20  gn=center>24<td 
14120 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14130 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14140 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69  d>Checksum-1: Fi
14150 72 73 74 20 70 61 72 74 20 6f 66 20 61 20 63 68  rst part of a ch
14160 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
14170 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
14180 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
14190 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
141a0 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c  center>28<td val
141b0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
141c0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
141d0 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e  hecksum-2: Secon
141e0 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 68  d part of the ch
141f0 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
14200 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
14210 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a  header.</table>.
14220 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
14230 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c  ^Immediately fol
14240 6c 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68  lowing the wal-h
14250 65 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f  eader are zero o
14260 72 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e  r more frames. ^
14270 45 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69  Each.frame consi
14280 73 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65  sts of a 24-byte
14290 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f   frame-header fo
142a0 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70  llowed by a <i>p
142b0 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74  age-size</i> byt
142c0 65 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e  es.of page data.
142d0 20 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61   ^(The frame-hea
142e0 64 65 72 20 69 73 20 73 69 78 20 62 69 67 2d 65  der is six big-e
142f0 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73  ndian 32-bit uns
14300 69 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76  igned .integer v
14310 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77  alues, as follow
14320 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  s:..<center>.<i>
14330 57 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72  WAL Frame Header
14340 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
14350 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
14360 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
14370 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
14380 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
14390 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
143a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
143b0 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
143c0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
143d0 34 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e  4.    <td>Page n
143e0 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
143f0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14400 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
14410 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14420 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72  er>4.    <td>For
14430 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c   commit records,
14440 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
14450 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
14460 6e 20 70 61 67 65 73 0a 20 20 20 20 20 20 20 20  n pages.        
14470 61 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74  after the commit
14480 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72  .  For all other
14490 20 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a   records, zero..
144a0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
144b0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
144c0 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
144d0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
144e0 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f     <td>Salt-1 co
144f0 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41  pied from the WA
14500 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64  L header.<tr><td
14510 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14520 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
14530 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14540 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
14550 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66  >Salt-2 copied f
14560 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64  rom the WAL head
14570 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
14580 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14590 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
145a0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
145b0 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
145c0 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69  sum-1:  Cumulati
145d0 76 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74  ve checksum up t
145e0 68 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75  hrough and inclu
145f0 64 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c  ding this page.<
14600 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
14610 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
14620 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
14630 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
14640 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
14650 32 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20  2:  Second half 
14660 6f 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76  of the cumulativ
14670 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61  e checksum..</ta
14680 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
14690 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69  ..^(<p>A frame i
146a0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c  s considered val
146b0 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  id if and only i
146c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
146d0 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74  conditions are.t
146e0 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  rue:</p>..<ol>.<
146f0 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31  li><p>The salt-1
14700 20 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75   and salt-2 valu
14710 65 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d  es in the frame-
14720 68 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20  header match.   
14730 20 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20      salt values 
14740 69 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65  in the wal-heade
14750 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  r</p></li>..<li>
14760 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
14770 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69  values in the fi
14780 6e 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74  nal 8 bytes of t
14790 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a  he frame-header.
147a0 20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d         exactly m
147b0 61 74 63 68 20 74 68 65 20 63 68 65 63 6b 73 75  atch the checksu
147c0 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65  m computed conse
147d0 63 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a  cutively on the.
147e0 20 20 20 20 20 20 20 66 69 72 73 74 20 32 34 20         first 24 
147f0 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c  bytes of the WAL
14800 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 65 20   header and the 
14810 66 69 72 73 74 20 38 20 62 79 74 65 73 20 61 6e  first 8 bytes an
14820 64 0a 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e  d.       the con
14830 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d  tent of all fram
14840 65 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f 20  es.       up to 
14850 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
14860 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 2e  e current frame.
14870 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c  </p></li></li>.<
14880 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  /ol>)^..<tcl>hd_
14890 66 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d  fragment walcksm
148a0 20 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20 61   {WAL checksum a
148b0 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a  lgorithm}</tcl>.
148c0 3c 68 32 3e 43 68 65 63 6b 73 75 6d 20 41 6c 67  <h2>Checksum Alg
148d0 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e  orithm</h2>..<p>
148e0 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
148f0 63 6f 6d 70 75 74 65 64 20 62 79 20 69 6e 74 65  computed by inte
14900 72 70 72 65 74 69 6e 67 20 74 68 65 20 69 6e 70  rpreting the inp
14910 75 74 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75  ut as.an even nu
14920 6d 62 65 72 20 6f 66 20 75 6e 73 69 67 6e 65 64  mber of unsigned
14930 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
14940 3a 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  : x(0) through x
14950 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74  (N)..^The 32-bit
14960 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 62 69   integers are bi
14970 67 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 0a  g-endian if the.
14980 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 6e 20  magic number in 
14990 74 68 65 20 66 69 72 73 74 20 34 20 62 79 74 65  the first 4 byte
149a0 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61  s of the WAL hea
149b0 64 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38  der is 0x377f068
149c0 33 20 61 6e 64 0a 74 68 65 20 69 6e 74 65 67 65  3 and.the intege
149d0 72 73 20 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e  rs are little-en
149e0 64 69 61 6e 20 69 66 20 74 68 65 20 6d 61 67 69  dian if the magi
149f0 63 20 6e 75 6d 62 65 72 20 69 73 20 30 78 33 37  c number is 0x37
14a00 37 66 30 36 38 32 2e 0a 5e 54 68 65 20 63 68 65  7f0682..^The che
14a10 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 61 72 65  cksum values are
14a20 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64 20 69   always stored i
14a30 6e 20 74 68 65 20 66 72 61 6d 65 20 68 65 61 64  n the frame head
14a40 65 72 20 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69  er in a.big-endi
14a50 61 6e 20 66 6f 72 6d 61 74 20 72 65 67 61 72 64  an format regard
14a60 6c 65 73 73 20 6f 66 20 77 68 69 63 68 20 62 79  less of which by
14a70 74 65 20 6f 72 64 65 72 20 69 73 20 75 73 65 64  te order is used
14a80 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20   to compute.the 
14a90 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c  checksum.</p>..<
14aa0 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61  p>The checksum a
14ab0 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f  lgorithm only wo
14ac0 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20  rks for content 
14ad0 77 68 69 63 68 20 69 73 20 61 20 6d 75 6c 74 69  which is a multi
14ae0 70 6c 65 20 6f 66 0a 38 20 62 79 74 65 73 20 69  ple of.8 bytes i
14af0 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74  n length.  In ot
14b00 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
14b10 65 20 69 6e 70 75 74 73 20 61 72 65 20 78 28 30  e inputs are x(0
14b20 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 0a 74  ) through x(N).t
14b30 68 65 6e 20 4e 20 6d 75 73 74 20 62 65 20 6f 64  hen N must be od
14b40 64 2e 0a 5e 28 54 68 65 20 63 68 65 63 6b 73 75  d..^(The checksu
14b50 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 61  m algorithm is a
14b60 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
14b70 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73  ckquote><pre> .s
14b80 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f 72 20 69  0 = s1 = 0.for i
14b90 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73   from 0 to n-1 s
14ba0 74 65 70 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20  tep 2:.   s0 += 
14bb0 78 28 69 29 20 2b 20 73 31 3b 0a 20 20 20 73 31  x(i) + s1;.   s1
14bc0 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20 73 30 3b   += x(i+1) + s0;
14bd0 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73 75 6c 74  .endfor.# result
14be0 20 69 6e 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f   in s0 and s1.</
14bf0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
14c00 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74  >)^..<p>^The out
14c10 70 75 74 73 20 73 30 20 61 6e 64 20 73 31 20 61  puts s0 and s1 a
14c20 72 65 20 62 6f 74 68 20 77 65 69 67 68 74 65 64  re both weighted
14c30 20 63 68 65 63 6b 73 75 6d 73 20 75 73 69 6e 67   checksums using
14c40 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68   Fibonacci weigh
14c50 74 73 0a 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ts.in reverse or
14c60 64 65 72 2e 20 20 28 5e 54 68 65 20 6c 61 72 67  der.  (^The larg
14c70 65 73 74 20 46 69 62 6f 6e 61 63 63 69 20 77 65  est Fibonacci we
14c80 69 67 68 74 20 6f 63 63 75 72 73 20 6f 6e 20 74  ight occurs on t
14c90 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
14ca0 0a 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63 65  .of the sequence
14cb0 20 62 65 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20   being summed.) 
14cc0 20 5e 54 68 65 20 73 31 20 76 61 6c 75 65 20 73   ^The s1 value s
14cd0 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62 69 74 20  pans all 32-bit 
14ce0 69 6e 74 65 67 65 72 0a 74 65 72 6d 73 20 6f 66  integer.terms of
14cf0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 77 68   the sequence wh
14d00 65 72 65 61 73 20 73 30 20 6f 6d 69 74 73 20 74  ereas s0 omits t
14d10 68 65 20 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f  he final term.</
14d20 70 3e 0a 0a 3c 68 32 3e 43 68 65 63 6b 70 6f 69  p>..<h2>Checkpoi
14d30 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32  nt Algorithm</h2
14d40 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68 65  >..<p>^On a [che
14d50 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57 41  ckpoint], the WA
14d60 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75 73 68  L is first flush
14d70 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
14d80 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a 74   storage using.t
14d90 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20  he xSync method 
14da0 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
14db0 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46 53  io_methods | VFS
14dc0 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64 20  ]. .^Then valid 
14dd0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57  content of the W
14de0 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  AL is transferre
14df0 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  d into the datab
14e00 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c  ase file..^Final
14e10 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ly, the database
14e20 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20 70   is flushed to p
14e30 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67  ersistent storag
14e40 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72 0a  e using another.
14e50 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61 6c  xSync method cal
14e60 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70 65  l..The xSync ope
14e70 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61 73  rations serve as
14e80 20 77 72 69 74 65 20 62 61 72 72 69 65 72 73 20   write barriers 
14e90 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61 75  - all writes lau
14ea0 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68 65  nched.before the
14eb0 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d 70   xSync must comp
14ec0 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79 20  lete before any 
14ed0 77 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e 63  write that launc
14ee0 68 65 73 20 61 66 74 65 72 20 74 68 65 0a 78 53  hes after the.xS
14ef0 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a  ync begins.</p>.
14f00 0a 3c 70 3e 5e 41 66 74 65 72 20 61 20 63 68 65  .<p>^After a che
14f10 63 6b 70 6f 69 6e 74 2c 20 6e 65 77 20 77 72 69  ckpoint, new wri
14f20 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  te transactions 
14f30 6f 76 65 72 77 72 69 74 65 0a 74 68 65 20 57 41  overwrite.the WA
14f40 4c 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20  L file from the 
14f50 62 65 67 69 6e 6e 69 6e 67 2e 20 20 5e 41 74 20  beginning.  ^At 
14f60 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
14f70 20 66 69 72 73 74 20 6e 65 77 0a 77 72 69 74 65   first new.write
14f80 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
14f90 65 20 57 41 4c 20 68 65 61 64 65 72 20 73 61 6c  e WAL header sal
14fa0 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69 6e 63  t-1 value is inc
14fb0 72 65 6d 65 6e 74 65 64 0a 61 6e 64 20 74 68 65  remented.and the
14fc0 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 20 69 73   salt-2 value is
14fd0 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54 68   randomized.  Th
14fe0 65 73 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ese changes to t
14ff0 68 65 20 73 61 6c 74 73 20 69 6e 76 61 6c 69 64  he salts invalid
15000 61 74 65 0a 6f 6c 64 20 66 72 61 6d 65 73 20 69  ate.old frames i
15010 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
15020 61 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e  ave already been
15030 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 62 75   checkpointed bu
15040 74 20 6e 6f 74 20 79 65 74 0a 6f 76 65 72 77 72  t not yet.overwr
15050 69 74 74 65 6e 2c 20 61 6e 64 20 70 72 65 76 65  itten, and preve
15060 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 62 65 69  nt them from bei
15070 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  ng checkpointed 
15080 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  again.</p>..<tcl
15090 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
150a0 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64 20 61  read {WAL read a
150b0 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a  lgorithm}</tcl>.
150c0 3c 68 32 3e 52 65 61 64 65 72 20 41 6c 67 6f 72  <h2>Reader Algor
150d0 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 28  ithm</h2>..<p>^(
150e0 54 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66  To read a page f
150f0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
15100 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e   (call it page n
15110 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64  umber P), a read
15120 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20  er.first checks 
15130 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69  the WAL to see i
15140 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61  f it contains pa
15150 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68  ge P.  If so, th
15160 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69  en the.last vali
15170 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61  d instance of pa
15180 67 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c  ge P that is fol
15190 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69  lowed by a commi
151a0 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20  t frame.or is a 
151b0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73  commit frame its
151c0 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20  elf becomes the 
151d0 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e  value read.)^  ^
151e0 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61  If the WAL.conta
151f0 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66  ins no copies of
15200 20 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65   page P that are
15210 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68   valid and which
15220 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72   are a commit.fr
15230 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f  ame or are follo
15240 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20  wed by a commit 
15250 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65  frame, then page
15260 20 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a   P is read from.
15270 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
15280 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74  e.</p>..<p>To st
15290 61 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73  art a read trans
152a0 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64  action, the read
152b0 65 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69  er records the i
152c0 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74  ndex of the last
152d0 0a 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20  .valid frame in 
152e0 74 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65  the WAL.  The re
152f0 61 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72  ader uses this r
15300 65 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65  ecorded "mxFrame
15310 22 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20  " value.for all 
15320 73 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20  subsequent read 
15330 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77  operations.  New
15340 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61   transactions ca
15350 6e 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f  n be appended.to
15360 20 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73   the WAL, but as
15370 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61   long as the rea
15380 64 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69  der uses its ori
15390 67 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61  ginal mxFrame va
153a0 6c 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20  lue.and ignores 
153b0 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70  subsequently app
153c0 65 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74  ended content, t
153d0 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73  he reader will s
153e0 65 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74  ee a .consistent
153f0 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65   snapshot of the
15400 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61   database from a
15410 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e   single point in
15420 20 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74   time.  .^This t
15430 65 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20  echnique allows 
15440 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72  multiple concurr
15450 65 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76  ent readers to v
15460 69 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76  iew different .v
15470 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64  ersions of the d
15480 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20  atabase content 
15490 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c  simultaneously.<
154a0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64  /p>..<p>The read
154b0 65 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20  er algorithm in 
154c0 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
154d0 61 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f  agraphs works co
154e0 72 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65  rrectly, but .be
154f0 63 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72  cause frames for
15500 20 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65   page P can appe
15510 61 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ar anywhere with
15520 69 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a  in the WAL, the.
15530 72 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63  reader has to sc
15540 61 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41  an the entire WA
15550 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61  L looking for pa
15560 67 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66  ge P frames.  If
15570 20 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67   the.WAL is larg
15580 65 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61  e (multiple mega
15590 62 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c  bytes is typical
155a0 29 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20  ) that scan can 
155b0 62 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61  be slow,.and rea
155c0 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75  d performance su
155d0 66 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72  ffers.  ^To over
155e0 63 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65  come this proble
155f0 6d 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61  m, a separate.da
15600 74 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c  ta structure cal
15610 6c 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  led the wal-inde
15620 78 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20  x is maintained 
15630 74 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a  to expedite the.
15640 73 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65  search for frame
15650 73 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61  s of a particula
15660 72 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  r page.</p>..<tc
15670 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
15680 6c 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61  lindexformat {wa
15690 6c 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e  l-index} {WAL-in
156a0 64 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  dex format}</tcl
156b0 3e 0a 3c 68 32 3e 57 41 4c 2d 49 6e 64 65 78 20  >.<h2>WAL-Index 
156c0 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e  Format</h2>..<p>
156d0 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68  Conceptually, th
156e0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
156f0 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68  hared memory, th
15700 6f 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74  ough the current
15710 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74  .VFS implementat
15720 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70  ions use a mmapp
15730 65 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20  ed file for the 
15740 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65  wal-index.  ^The
15750 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73   mmapped.file is
15760 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
15770 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
15780 74 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74  tabase and has t
15790 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20  he same name.as 
157a0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74  the database wit
157b0 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74  h a "<tt>-shm</t
157c0 74 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e  t>" suffix appen
157d0 64 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68  ded.  Because.th
157e0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
157f0 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51  hared memory, SQ
15800 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
15810 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a  pport .[PRAGMA j
15820 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f  ournal_mode | jo
15830 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20  urnal_mode=WAL] 
15840 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69  .on a network fi
15850 6c 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c  lesystem when cl
15860 69 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66  ients are on dif
15870 66 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e  ferent machines.
15880 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68  .All users of th
15890 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20  e database must 
158a0 62 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65  be able to share
158b0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
158c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75  .</p>..<p>The pu
158d0 72 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c  rpose of the wal
158e0 2d 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73  -index is to ans
158f0 77 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f  wer this questio
15900 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a  n quickly:</p>..
15910 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a  <blockquote><i>.
15920 47 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d  Given a page num
15930 62 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69  ber P and a maxi
15940 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  mum WAL frame in
15950 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68  dex M,.return th
15960 65 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72  e largest WAL fr
15970 61 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61  ame index for pa
15980 67 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e  ge P that does n
15990 6f 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72  ot exceed M, .or
159a0 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   return NULL if 
159b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61  there are no fra
159c0 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74  mes for page P t
159d0 68 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65  hat do not excee
159e0 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b  d M..</i></block
159f0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c  quote>..<p>The <
15a00 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e  i>M</i> value in
15a10 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61   the previous pa
15a20 72 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22  ragraph is the "
15a30 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64  mxFrame" value.d
15a40 65 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72  efined in [WAL r
15a50 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20  ead algorithm | 
15a60 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61  section 4.4] tha
15a70 74 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65  t is read at the
15a80 20 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61   start .of a tra
15a90 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69  nsaction and whi
15aa0 63 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d  ch defines the m
15ab0 61 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f  aximum frame fro
15ac0 6d 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a  m the WAL that .
15ad0 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20  the reader will 
15ae0 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  use.</p>..<p>The
15af0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72   wal-index is tr
15b00 61 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20  ansient.  After 
15b10 61 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c  a crash, the wal
15b20 2d 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73  -index is.recons
15b30 74 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tructed from the
15b40 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69   original WAL fi
15b50 6c 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73  le.  ^The VFS is
15b60 20 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74   required.to eit
15b70 68 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20  her truncate or 
15b80 7a 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20  zero the header 
15b90 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
15ba0 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63   when the last.c
15bb0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20  onnection to it 
15bc0 63 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65  closes.  Because
15bd0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15be0 73 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20  s transient, it 
15bf0 63 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69  can.use an archi
15c00 74 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63  tecture-specific
15c10 20 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73   format; it does
15c20 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20   not have to be 
15c30 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a  cross-platform..
15c40 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68  Hence, unlike th
15c50 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57  e database and W
15c60 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20  AL file formats 
15c70 77 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20  which store all 
15c80 76 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e  values.as big en
15c90 64 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e  dian, the wal-in
15ca0 64 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69  dex stores multi
15cb0 2d 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20  -byte values in 
15cc0 74 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20  the native.byte 
15cd0 6f 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73  order of the hos
15ce0 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a  t computer.</p>.
15cf0 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
15d00 74 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77  t is concerned w
15d10 69 74 68 20 74 68 65 20 70 65 72 73 69 73 74 65  ith the persiste
15d20 6e 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  nt state of the 
15d30 64 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61  database.file, a
15d40 6e 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c  nd since the wal
15d50 2d 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e  -index is a tran
15d60 73 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c  sient structure,
15d70 20 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66   no further .inf
15d80 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
15d90 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
15da0 20 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20   wal-index will 
15db0 62 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65  be provided here
15dc0 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69  ..Complete detai
15dd0 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74  ls on the format
15de0 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
15df0 78 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  x are contained 
15e00 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20  within.comments 
15e10 69 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  in SQLite source
15e20 20 63 6f 64 65 2e 3c 2f 70 3e 0a                  code.</p>.