Documentation Source Text

Hex Artifact Content
Login

Artifact 271d2e657433ce24d85f3c95ee0c5b701cde8e4594007857cb7e9faa274bfbaa:


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 74 63 6c 3e  mber.</p>..<tcl>
61f0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 62 74 79  hd_fragment {bty
6200: 70 65 73 7d 20 7b 69 6e 64 65 78 20 62 2d 74 72  pes} {index b-tr
6210: 65 65 7d 20 7b 74 61 62 6c 65 20 62 2d 74 72 65  ee} {table b-tre
6220: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 62 2d  e}</tcl>.<p>A b-
6230: 74 72 65 65 20 70 61 67 65 20 69 73 20 65 69 74  tree page is eit
6240: 68 65 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72  her a table b-tr
6250: 65 65 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e  ee page or an in
6260: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6270: 0a 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69  .All pages withi
6280: 6e 20 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20  n each complete 
6290: 62 2d 74 72 65 65 20 61 72 65 20 6f 66 20 74 68  b-tree are of th
62a0: 65 20 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74  e same type: eit
62b0: 68 65 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64  her table.or ind
62c0: 65 78 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e  ex.  There is on
62d0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  e table b-trees 
62e0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
62f0: 66 69 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f  file.for each ro
6300: 77 69 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65  wid table in the
6310: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6320: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74  , including syst
6330: 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61  em tables.such a
6340: 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  s sqlite_master.
6350: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69    There is one i
6360: 6e 64 65 78 20 62 2d 74 72 65 65 0a 69 6e 20 74  ndex b-tree.in t
6370: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
6380: 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20   for each index 
6390: 69 6e 20 74 68 65 20 73 63 68 65 6d 61 2c 20 69  in the schema, i
63a0: 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
63b0: 20 69 6e 64 65 78 65 73 0a 63 72 65 61 74 65 64   indexes.created
63c0: 20 62 79 20 75 6e 69 71 75 65 6e 65 73 73 20 63   by uniqueness c
63d0: 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65  onstraints.  The
63e0: 72 65 20 61 72 65 20 6e 6f 20 62 2d 74 72 65 65  re are no b-tree
63f0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
6400: 68 0a 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  h.[virtual table
6410: 73 5d 2e 20 20 53 70 65 63 69 66 69 63 20 76 69  s].  Specific vi
6420: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
6430: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68  ementations migh
6440: 74 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73  t make use.of [s
6450: 68 61 64 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f  hadow tables] fo
6460: 72 20 73 74 6f 72 61 67 65 2c 20 62 75 74 20 74  r storage, but t
6470: 68 6f 73 65 20 73 68 61 64 6f 77 20 74 61 62 6c  hose shadow tabl
6480: 65 73 20 77 69 6c 6c 20 68 61 76 65 20 73 65 70  es will have sep
6490: 61 72 61 74 65 0a 65 6e 74 72 69 65 73 20 69 6e  arate.entries in
64a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
64b0: 68 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54 20  hema.  [WITHOUT 
64c0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 75 73  ROWID] tables us
64d0: 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 0a  e index b-trees.
64e0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74 61  rather than a ta
64f0: 62 6c 65 20 62 2d 74 72 65 65 73 2c 20 73 6f 20  ble b-trees, so 
6500: 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64  there is one.ind
6510: 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ex b-tree in the
6520: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
6530: 6f 72 20 65 61 63 68 20 5b 57 49 54 48 4f 55 54  or each [WITHOUT
6540: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54   ROWID] table..T
6550: 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  he b-tree corres
6560: 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 73  ponding to the s
6570: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
6580: 6c 65 20 69 73 20 61 6c 77 61 79 73 20 61 20 74  le is always a t
6590: 61 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64 20  able.b-tree and 
65a0: 61 6c 77 61 79 73 20 68 61 73 20 61 20 72 6f 6f  always has a roo
65b0: 74 20 70 61 67 65 20 6f 66 20 31 2e 0a 54 68 65  t page of 1..The
65c0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
65d0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68  able contains th
65e0: 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
65f0: 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68  er for every oth
6600: 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e  er .table and in
6610: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
6620: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
6630: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
6640: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63  a table b-tree c
6650: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d  onsists of a 64-
6660: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6670: 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f  er key.and up to
6680: 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74 65   2147483647 byte
6690: 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20 64  s of arbitrary d
66a0: 61 74 61 2e 20 20 28 54 68 65 20 6b 65 79 20 6f  ata.  (The key o
66b0: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
66c0: 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20  .corresponds to 
66d0: 74 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74  the [rowid] of t
66e0: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61  he SQL table tha
66f0: 74 20 74 68 65 20 62 2d 74 72 65 65 20 69 6d 70  t the b-tree imp
6700: 6c 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69  lements.).Interi
6710: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  or table b-trees
6720: 20 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20   hold only keys 
6730: 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  and pointers to 
6740: 63 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61  children..All da
6750: 74 61 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20  ta is contained 
6760: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
6770: 72 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a  ree leaves.</p>.
6780: 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69  .<p>Each entry i
6790: 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  n an index b-tre
67a0: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e  e consists of an
67b0: 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f   arbitrary key o
67c0: 66 20 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36  f up.to 21474836
67d0: 34 37 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67  47 bytes in leng
67e0: 74 68 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c  th and no data.<
67f0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
6800: 67 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f  gment cell_paylo
6810: 61 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64  ad {cell payload
6820: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e  }</tcl>.<p>Defin
6830: 65 20 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20  e the "payload" 
6840: 6f 66 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20  of a cell to be 
6850: 74 68 65 20 61 72 62 69 74 72 61 72 79 20 6c 65  the arbitrary le
6860: 6e 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20  ngth section.of 
6870: 74 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61  the cell.  For a
6880: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20  n index b-tree, 
6890: 74 68 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79  the key is alway
68a0: 73 20 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c  s arbitrary in l
68b0: 65 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20  ength.and hence 
68c0: 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74  the payload is t
68d0: 68 65 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61  he key.  There a
68e0: 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20  re no arbitrary 
68f0: 6c 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a  length elements.
6900: 69 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20  in the cells of 
6910: 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62  interior table b
6920: 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64 20  -tree pages and 
6930: 73 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68  so those cells h
6940: 61 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20  ave no.payload. 
6950: 20 54 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65   Table b-tree le
6960: 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e  af pages contain
6970: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6980: 68 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f  h content and.so
6990: 20 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68   for cells on th
69a0: 6f 73 65 20 70 61 67 65 73 20 74 68 65 20 70 61  ose pages the pa
69b0: 79 6c 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e  yload is the con
69c0: 74 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68  tent..<p>When th
69d0: 65 20 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61  e size of payloa
69e0: 64 20 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63  d for a cell exc
69f0: 65 65 64 73 20 61 20 63 65 72 74 61 69 6e 20 74  eeds a certain t
6a00: 68 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20  hreshold (to.be 
6a10: 64 65 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74  defined later) t
6a20: 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72  hen only the fir
6a30: 73 74 20 66 65 77 20 62 79 74 65 73 20 6f 66 20  st few bytes of 
6a40: 74 68 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20  the payload.are 
6a50: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d  stored on the b-
6a60: 74 72 65 65 20 70 61 67 65 20 61 6e 64 20 74 68  tree page and th
6a70: 65 20 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f  e balance is sto
6a80: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
6a90: 6c 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20  list.of content 
6aa0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c  overflow pages.<
6ab0: 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65  /p>..<p>A b-tree
6ac0: 20 70 61 67 65 20 69 73 20 64 69 76 69 64 65 64   page is divided
6ad0: 20 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e   into regions in
6ae0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
6af0: 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  rder:..<ol>.<li>
6b00: 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74  The 100-byte dat
6b10: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
6b20: 72 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65  r (found on page
6b30: 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65   1 only).<li>The
6b40: 20 38 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d   8 or 12 byte b-
6b50: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
6b60: 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f  .<li>The cell po
6b70: 69 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e  inter array.<li>
6b80: 55 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  Unallocated spac
6b90: 65 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63  e.<li>The cell c
6ba0: 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e  ontent area.<li>
6bb0: 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67  The reserved reg
6bc0: 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a  ion..</ol>.</p>.
6bd0: 0a 3c 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65  .<p>The 100-byte
6be0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
6bf0: 65 61 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f  eader is found o
6c00: 6e 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77  nly on page 1, w
6c10: 68 69 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61  hich is.always a
6c20: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6c30: 67 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62  ge.  All other b
6c40: 2d 74 72 65 65 20 70 61 67 65 73 20 69 6e 20 74  -tree pages in t
6c50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
6c60: 0a 6f 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62  .omit this 100-b
6c70: 79 74 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a  yte header.</p>.
6c80: 0a 3c 70 3e 54 68 65 20 72 65 73 65 72 76 65 64  .<p>The reserved
6c90: 20 72 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72   region is an ar
6ca0: 65 61 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61  ea of unused spa
6cb0: 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ce at the end of
6cc0: 20 65 76 65 72 79 0a 70 61 67 65 20 28 65 78 63   every.page (exc
6cd0: 65 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20  ept the locking 
6ce0: 70 61 67 65 29 20 74 68 61 74 20 65 78 74 65 6e  page) that exten
6cf0: 73 69 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f  sions can use to
6d00: 20 68 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69   hold per-page.i
6d10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68  nformation.  ^Th
6d20: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65  e size of the re
6d30: 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73  served region is
6d40: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
6d50: 68 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69  he one-byte.unsi
6d60: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75  gned integer fou
6d70: 6e 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  nd at an offset 
6d80: 6f 66 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64  of 20 into the d
6d90: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
6da0: 64 65 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66  der..The size of
6db0: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72 65   the reserved re
6dc0: 67 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20  gion is usually 
6dd0: 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  zero.</p>..<p>Th
6de0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
6df0: 61 64 65 72 20 69 73 20 38 20 62 79 74 65 73 20  ader is 8 bytes 
6e00: 69 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66  in size for leaf
6e10: 20 70 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79   pages and 12.by
6e20: 74 65 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72  tes for interior
6e30: 20 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c   pages.  All mul
6e40: 74 69 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e  tibyte values in
6e50: 20 74 68 65 20 70 61 67 65 20 68 65 61 64 65 72   the page header
6e60: 0a 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e  .are big-endian.
6e70: 0a 54 68 65 20 62 2d 74 72 65 65 20 70 61 67 65  .The b-tree page
6e80: 20 68 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f   header is compo
6e90: 73 65 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  sed of the follo
6ea0: 77 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e  wing fields:</p>
6eb0: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d  ..<center>.<i>B-
6ec0: 74 72 65 65 20 50 61 67 65 20 48 65 61 64 65 72  tree Page Header
6ed0: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
6ee0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20  <table border=1 
6ef0: 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72  width="80%">.<tr
6f00: 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
6f10: 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
6f20: 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  on.<tr><td align
6f30: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6f40: 6f 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>0<td align=ce
6f50: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6f60: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
6f70: 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 66  .^The one-byte f
6f80: 6c 61 67 20 61 74 20 6f 66 66 73 65 74 20 30 20  lag at offset 0 
6f90: 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 62  indicating the b
6fa0: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 2e  -tree page type.
6fb0: 3c 75 6c 3e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75  <ul>.<li>^A valu
6fc0: 65 20 6f 66 20 32 20 28 30 78 30 32 29 20 6d 65  e of 2 (0x02) me
6fd0: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6fe0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65  an interior inde
6ff0: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  x b-tree page..<
7000: 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20 35  li>^A value of 5
7010: 20 28 30 78 30 35 29 20 6d 65 61 6e 73 20 74 68   (0x05) means th
7020: 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e 74  e page is an int
7030: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
7040: 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20  ee page..<li>^A 
7050: 76 61 6c 75 65 20 6f 66 20 31 30 20 28 30 78 30  value of 10 (0x0
7060: 61 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67  a) means the pag
7070: 65 20 69 73 20 61 20 6c 65 61 66 20 69 6e 64 65  e is a leaf inde
7080: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  x b-tree page..<
7090: 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20 31  li>^A value of 1
70a0: 33 20 28 30 78 30 64 29 20 6d 65 61 6e 73 20 74  3 (0x0d) means t
70b0: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
70c0: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  f table b-tree p
70d0: 61 67 65 2e 3c 2f 75 6c 3e 0a 5e 41 6e 79 20 6f  age.</ul>.^Any o
70e0: 74 68 65 72 20 76 61 6c 75 65 20 66 6f 72 20 74  ther value for t
70f0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  he b-tree page t
7100: 79 70 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e  ype is an error.
7110: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
7120: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7130: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >1<td align=cent
7140: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
7150: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
7160: 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74  The two-byte int
7170: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 31  eger at offset 1
7180: 20 67 69 76 65 73 20 74 68 65 20 73 74 61 72 74   gives the start
7190: 20 6f 66 20 74 68 65 0a 66 69 72 73 74 20 66 72   of the.first fr
71a0: 65 65 62 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 70  eeblock on the p
71b0: 61 67 65 2c 20 6f 72 20 69 73 20 7a 65 72 6f 20  age, or is zero 
71c0: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
71d0: 66 72 65 65 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e  freeblocks..<tr>
71e0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
71f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64   valign=top>3<td
7200: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7210: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
7220: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74  ign=left>.^The t
7230: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  wo-byte integer 
7240: 61 74 20 6f 66 66 73 65 74 20 33 20 67 69 76 65  at offset 3 give
7250: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
7260: 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 70 61 67  cells on the pag
7270: 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  e..<tr><td align
7280: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
7290: 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>5<td align=ce
72a0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
72b0: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
72c0: 0a 5e 28 54 68 65 20 74 77 6f 2d 62 79 74 65 20  .^(The two-byte 
72d0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
72e0: 74 20 35 20 64 65 73 69 67 6e 61 74 65 73 20 74  t 5 designates t
72f0: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
7300: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65  cell content.are
7310: 61 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65  a.  A zero value
7320: 20 66 6f 72 20 74 68 69 73 20 69 6e 74 65 67 65   for this intege
7330: 72 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  r is interpreted
7340: 20 61 73 20 36 35 35 33 36 2e 29 5e 0a 3c 74 72   as 65536.)^.<tr
7350: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
7360: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74  r valign=top>7<t
7370: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7380: 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61  align=top>1<td a
7390: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20  lign=left>.^The 
73a0: 6f 6e 65 2d 62 79 74 65 20 69 6e 74 65 67 65 72  one-byte integer
73b0: 20 61 74 20 6f 66 66 73 65 74 20 37 20 67 69 76   at offset 7 giv
73c0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
73d0: 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65   fragmented free
73e0: 0a 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68  .bytes within th
73f0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
7400: 72 65 61 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  rea..<tr><td ali
7410: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7420: 3d 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  =top>8<td align=
7430: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7440: 70 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>4<td align=lef
7450: 74 3e 0a 5e 28 54 68 65 20 66 6f 75 72 2d 62 79  t>.^(The four-by
7460: 74 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 61  te page number a
7470: 74 20 6f 66 66 73 65 74 20 38 20 69 73 20 74 68  t offset 8 is th
7480: 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69  e right-most poi
7490: 6e 74 65 72 2e 20 20 54 68 69 73 0a 76 61 6c 75  nter.  This.valu
74a0: 65 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65  e appears in the
74b0: 20 68 65 61 64 65 72 20 6f 66 20 69 6e 74 65 72   header of inter
74c0: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 73  ior b-tree pages
74d0: 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20 6f 6d 69   only and is omi
74e0: 74 74 65 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74  tted from.all ot
74f0: 68 65 72 20 70 61 67 65 73 2e 29 5e 0a 3c 2f 74  her pages.)^.</t
7500: 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a  able></center>..
7510: 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69  <p>^The cell poi
7520: 6e 74 65 72 20 61 72 72 61 79 20 6f 66 20 61 20  nter array of a 
7530: 62 2d 74 72 65 65 20 70 61 67 65 20 69 6d 6d 65  b-tree page imme
7540: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
7550: 74 68 65 20 62 2d 74 72 65 65 0a 70 61 67 65 20  the b-tree.page 
7560: 68 65 61 64 65 72 2e 20 20 4c 65 74 20 4b 20 62  header.  Let K b
7570: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
7580: 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62 74 72  cells on the btr
7590: 65 65 2e 20 20 5e 54 68 65 20 63 65 6c 6c 20 70  ee.  ^The cell p
75a0: 6f 69 6e 74 65 72 0a 61 72 72 61 79 20 63 6f 6e  ointer.array con
75b0: 73 69 73 74 73 20 6f 66 20 4b 20 32 2d 62 79 74  sists of K 2-byt
75c0: 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74  e integer offset
75d0: 73 20 74 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f  s to the cell co
75e0: 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65  ntents.  ^The.ce
75f0: 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20  ll pointers are 
7600: 61 72 72 61 6e 67 65 64 20 69 6e 20 6b 65 79 20  arranged in key 
7610: 6f 72 64 65 72 20 77 69 74 68 20 6c 65 66 74 2d  order with left-
7620: 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63  most cell (the c
7630: 65 6c 6c 20 77 69 74 68 20 74 68 65 0a 73 6d 61  ell with the.sma
7640: 6c 6c 65 73 74 20 6b 65 79 29 20 66 69 72 73 74  llest key) first
7650: 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 6d   and the right-m
7660: 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65  ost cell (the ce
7670: 6c 6c 20 77 69 74 68 20 74 68 65 20 6c 61 72 67  ll with the larg
7680: 65 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f  est.key) last.</
7690: 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74  p>..<p>Cell cont
76a0: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ent is stored in
76b0: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
76c0: 74 20 72 65 67 69 6f 6e 20 6f 66 20 74 68 65 20  t region of the 
76d0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 53 51 4c  b-tree page..SQL
76e0: 69 74 65 20 73 74 72 69 76 65 73 20 74 6f 20 70  ite strives to p
76f0: 6c 61 63 65 20 63 65 6c 6c 73 20 61 73 20 66 61  lace cells as fa
7700: 72 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  r toward the end
7710: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
7720: 61 67 65 20 61 73 0a 69 74 20 63 61 6e 2c 20 69  age as.it can, i
7730: 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65 61 76 65  n order to leave
7740: 20 73 70 61 63 65 20 66 6f 72 20 66 75 74 75 72   space for futur
7750: 65 20 67 72 6f 77 74 68 20 6f 66 20 74 68 65 20  e growth of the 
7760: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
7770: 61 79 2e 0a 54 68 65 20 61 72 65 61 20 69 6e 20  ay..The area in 
7780: 62 65 74 77 65 65 6e 20 74 68 65 20 6c 61 73 74  between the last
7790: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
77a0: 72 61 79 20 65 6e 74 72 79 20 61 6e 64 20 74 68  ray entry and th
77b0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74  e beginning of.t
77c0: 68 65 20 66 69 72 73 74 20 63 65 6c 6c 20 69 73  he first cell is
77d0: 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64   the unallocated
77e0: 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c   region..</p>..<
77f0: 70 3e 5e 49 66 20 61 20 70 61 67 65 20 63 6f 6e  p>^If a page con
7800: 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28  tains no cells (
7810: 77 68 69 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f  which is only po
7820: 73 73 69 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f  ssible for a roo
7830: 74 20 70 61 67 65 0a 6f 66 20 61 20 74 61 62 6c  t page.of a tabl
7840: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
7850: 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e 20 74 68  no rows) then th
7860: 65 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65 0a  e offset to the.
7870: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
7880: 61 20 77 69 6c 6c 20 65 71 75 61 6c 20 74 68 65  a will equal the
7890: 20 70 61 67 65 20 73 69 7a 65 20 6d 69 6e 75 73   page size minus
78a0: 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 72 65   the bytes of re
78b0: 73 65 72 76 65 64 20 73 70 61 63 65 2e 0a 5e 28  served space..^(
78c0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
78d0: 75 73 65 73 20 61 20 36 35 35 33 36 2d 62 79 74  uses a 65536-byt
78e0: 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20  e page size and 
78f0: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
7900: 63 65 20 69 73 20 7a 65 72 6f 0a 28 74 68 65 20  ce is zero.(the 
7910: 75 73 75 61 6c 20 76 61 6c 75 65 20 66 6f 72 20  usual value for 
7920: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 29 20  reserved space) 
7930: 74 68 65 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f  then the cell co
7940: 6e 74 65 6e 74 20 6f 66 66 73 65 74 20 6f 66 20  ntent offset of 
7950: 61 6e 0a 65 6d 70 74 79 20 70 61 67 65 20 77 61  an.empty page wa
7960: 6e 74 73 20 74 6f 20 62 65 20 36 35 35 33 36 2e  nts to be 65536.
7970: 20 20 0a 48 6f 77 65 76 65 72 2c 20 74 68 61 74    .However, that
7980: 20 69 6e 74 65 67 65 72 20 69 73 20 74 6f 6f 20   integer is too 
7990: 6c 61 72 67 65 20 74 6f 20 62 65 20 73 74 6f 72  large to be stor
79a0: 65 64 20 69 6e 20 61 0a 32 2d 62 79 74 65 20 75  ed in a.2-byte u
79b0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c  nsigned integer,
79c0: 20 73 6f 20 61 20 76 61 6c 75 65 20 6f 66 20 30   so a value of 0
79d0: 20 69 73 20 75 73 65 64 20 69 6e 20 69 74 73 20   is used in its 
79e0: 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66  place.)^..<p>A f
79f0: 72 65 65 62 6c 6f 63 6b 20 69 73 20 61 20 73 74  reeblock is a st
7a00: 72 75 63 74 75 72 65 20 75 73 65 64 20 74 6f 20  ructure used to 
7a10: 69 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63  identify unalloc
7a20: 61 74 65 64 20 73 70 61 63 65 20 77 69 74 68 69  ated space withi
7a30: 6e 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 2e  n.a b-tree page.
7a40: 20 20 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65    Freeblocks are
7a50: 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20   organized as a 
7a60: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 72  chain.  ^The fir
7a70: 73 74 20 32 20 62 79 74 65 73 20 6f 66 0a 61 20  st 2 bytes of.a 
7a80: 66 72 65 65 62 6c 6f 63 6b 20 61 72 65 20 61 20  freeblock are a 
7a90: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
7aa0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
7ab0: 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20 62 2d  offset in the b-
7ac0: 74 72 65 65 20 70 61 67 65 0a 6f 66 20 74 68 65  tree page.of the
7ad0: 20 6e 65 78 74 20 66 72 65 65 62 6c 6f 63 6b 20   next freeblock 
7ae0: 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72  in the chain, or
7af0: 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72 65   zero if the fre
7b00: 65 62 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c 61  eblock is the la
7b10: 73 74 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e  st on.the chain.
7b20: 20 20 5e 54 68 65 20 74 68 69 72 64 20 61 6e 64    ^The third and
7b30: 20 66 6f 75 72 74 68 20 62 79 74 65 73 20 6f 66   fourth bytes of
7b40: 20 65 61 63 68 20 66 72 65 65 62 6c 6f 63 6b 20   each freeblock 
7b50: 66 6f 72 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61  form.a big-endia
7b60: 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
7b70: 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
7b80: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  he freeblock in 
7b90: 62 79 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67  bytes, including
7ba0: 0a 74 68 65 20 34 2d 62 79 74 65 20 68 65 61 64  .the 4-byte head
7bb0: 65 72 2e 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73  er.  ^Freeblocks
7bc0: 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e   are always conn
7bd0: 65 63 74 65 64 20 69 6e 20 6f 72 64 65 72 20 0a  ected in order .
7be0: 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20 6f 66  of increasing of
7bf0: 66 73 65 74 2e 20 20 5e 54 68 65 20 73 65 63 6f  fset.  ^The seco
7c00: 6e 64 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  nd field of the 
7c10: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
7c20: 65 72 20 69 73 20 74 68 65 0a 6f 66 66 73 65 74  er is the.offset
7c30: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
7c40: 65 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f  eeblock, or zero
7c50: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
7c60: 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74   freeblocks on t
7c70: 68 65 0a 70 61 67 65 2e 20 20 5e 49 6e 20 61 20  he.page.  ^In a 
7c80: 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72  well-formed b-tr
7c90: 65 65 20 70 61 67 65 2c 20 74 68 65 72 65 20 77  ee page, there w
7ca0: 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 61 74  ill always be at
7cb0: 20 6c 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a   least one cell.
7cc0: 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
7cd0: 20 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a   freeblock.</p>.
7ce0: 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20  .<p>A freeblock 
7cf0: 72 65 71 75 69 72 65 73 20 61 74 20 6c 65 61 73  requires at leas
7d00: 74 20 34 20 62 79 74 65 73 20 6f 66 20 73 70 61  t 4 bytes of spa
7d10: 63 65 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ce.  If there is
7d20: 20 61 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f   an isolated.gro
7d30: 75 70 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33  up of 1, 2, or 3
7d40: 20 75 6e 75 73 65 64 20 62 79 74 65 73 20 77 69   unused bytes wi
7d50: 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f  thin the cell co
7d60: 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 6f 73  ntent area, thos
7d70: 65 20 62 79 74 65 73 0a 63 6f 6d 70 72 69 73 65  e bytes.comprise
7d80: 20 61 20 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54   a fragment.  ^T
7d90: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7da0: 6f 66 20 62 79 74 65 73 20 69 6e 20 61 6c 6c 20  of bytes in all 
7db0: 66 72 61 67 6d 65 6e 74 73 20 69 73 20 73 74 6f  fragments is sto
7dc0: 72 65 64 0a 69 6e 20 74 68 65 20 66 69 66 74 68  red.in the fifth
7dd0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d   field of the b-
7de0: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
7df0: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
7e00: 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65  rmed b-tree page
7e10: 2c 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  ,.the total numb
7e20: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 66  er of bytes in f
7e30: 72 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74  ragments may not
7e40: 20 65 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a   exceed 60.</p>.
7e50: 0a 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d  .<p>The total am
7e60: 6f 75 6e 74 20 6f 66 20 66 72 65 65 20 73 70 61  ount of free spa
7e70: 63 65 20 6f 6e 20 61 20 62 2d 74 72 65 65 20 70  ce on a b-tree p
7e80: 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  age consists of 
7e90: 74 68 65 20 73 69 7a 65 0a 6f 66 20 74 68 65 20  the size.of the 
7ea0: 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69  unallocated regi
7eb0: 6f 6e 20 70 6c 75 73 20 74 68 65 20 74 6f 74 61  on plus the tota
7ec0: 6c 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72  l size of all fr
7ed0: 65 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68  eeblocks plus th
7ee0: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67  e.number of frag
7ef0: 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79 74 65  mented free byte
7f00: 73 2e 20 20 5e 53 51 4c 69 74 65 20 6d 61 79 20  s.  ^SQLite may 
7f10: 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d  from time to tim
7f20: 65 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62  e reorganize.a b
7f30: 2d 74 72 65 65 20 70 61 67 65 20 73 6f 20 74 68  -tree page so th
7f40: 61 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  at there are no 
7f50: 66 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72  freeblocks or fr
7f60: 61 67 6d 65 6e 74 20 62 79 74 65 73 2c 20 61 6c  agment bytes, al
7f70: 6c 0a 75 6e 75 73 65 64 20 62 79 74 65 73 20 61  l.unused bytes a
7f80: 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
7f90: 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  the unallocated 
7fa0: 73 70 61 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e  space region, an
7fb0: 64 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20  d all.cells are 
7fc0: 70 61 63 6b 65 64 20 74 69 67 68 74 6c 79 20 61  packed tightly a
7fd0: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
7fe0: 20 70 61 67 65 2e 20 20 54 68 69 73 20 69 73 20   page.  This is 
7ff0: 63 61 6c 6c 65 64 20 0a 22 64 65 66 72 61 67 6d  called ."defragm
8000: 65 6e 74 69 6e 67 22 20 74 68 65 20 62 2d 74 72  enting" the b-tr
8010: 65 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74  ee page.</p>..<t
8020: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
8030: 61 72 69 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d  arint {variable-
8040: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 7d 20  length integer} 
8050: 7b 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a  {varint}</tcl>..
8060: 3c 70 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c 65  <p>A variable-le
8070: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 6f 72 20  ngth integer or 
8080: 22 76 61 72 69 6e 74 22 20 69 73 20 61 20 73 74  "varint" is a st
8090: 61 74 69 63 20 48 75 66 66 6d 61 6e 20 65 6e 63  atic Huffman enc
80a0: 6f 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20  oding.of 64-bit 
80b0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
80c0: 69 6e 74 65 67 65 72 73 20 74 68 61 74 20 75 73  integers that us
80d0: 65 73 20 6c 65 73 73 20 73 70 61 63 65 20 66 6f  es less space fo
80e0: 72 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65  r small positive
80f0: 20 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76 61 72   .values. .A var
8100: 69 6e 74 20 69 73 20 62 65 74 77 65 65 6e 20 31  int is between 1
8110: 20 61 6e 64 20 39 20 62 79 74 65 73 20 69 6e 20   and 9 bytes in 
8120: 6c 65 6e 67 74 68 2e 20 20 54 68 65 20 76 61 72  length.  The var
8130: 69 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  int consists of 
8140: 65 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d  either.zero or m
8150: 6f 72 65 20 62 79 74 65 73 20 77 68 69 63 68 20  ore bytes which 
8160: 68 61 76 65 20 74 68 65 20 68 69 67 68 2d 6f 72  have the high-or
8170: 64 65 72 20 62 69 74 20 73 65 74 20 66 6f 6c 6c  der bit set foll
8180: 6f 77 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  owed by a single
8190: 20 62 79 74 65 0a 77 69 74 68 20 74 68 65 20 68   byte.with the h
81a0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 63 6c  igh-order bit cl
81b0: 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74  ear, or nine byt
81c0: 65 73 2c 20 77 68 69 63 68 65 76 65 72 20 69 73  es, whichever is
81d0: 20 73 68 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f   shorter..The lo
81e0: 77 65 72 20 73 65 76 65 6e 20 62 69 74 73 20 6f  wer seven bits o
81f0: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 66 69  f each of the fi
8200: 72 73 74 20 65 69 67 68 74 20 62 79 74 65 73 20  rst eight bytes 
8210: 61 6e 64 20 61 6c 6c 20 38 20 62 69 74 73 20 6f  and all 8 bits o
8220: 66 0a 74 68 65 20 6e 69 6e 74 68 20 62 79 74 65  f.the ninth byte
8230: 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
8240: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 36 34 2d  onstruct the 64-
8250: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
8260: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56 61 72  ent integer..Var
8270: 69 6e 74 73 20 61 72 65 20 62 69 67 2d 65 6e 64  ints are big-end
8280: 69 61 6e 3a 20 62 69 74 73 20 74 61 6b 65 6e 20  ian: bits taken 
8290: 66 72 6f 6d 20 74 68 65 20 65 61 72 6c 69 65 72  from the earlier
82a0: 20 62 79 74 65 20 6f 66 20 74 68 65 20 76 61 72   byte of the var
82b0: 69 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f 72 65  int.are the more
82c0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 74 68 61   significant tha
82d0: 6e 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  n bits taken fro
82e0: 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79 74 65  m the later byte
82f0: 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  s. </p>..<p>The 
8300: 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c  format of a cell
8310: 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 69 63   depends on whic
8320: 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72 65 65  h kind of b-tree
8330: 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c 0a 61   page the cell.a
8340: 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68 65 20  ppears on.  The 
8350: 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
8360: 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d 65 6e  shows the elemen
8370: 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e  ts of a cell, in
8380: 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65 61 72  .order of appear
8390: 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20 76 61  ance, for the va
83a0: 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70 61 67  rious b-tree pag
83b0: 65 20 74 79 70 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c  e types...<dl>.<
83c0: 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72  dt><p>Table B-Tr
83d0: 65 65 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65  ee Leaf Cell (he
83e0: 61 64 65 72 20 30 78 30 64 29 3a 3c 2f 70 3e 3c  ader 0x0d):</p><
83f0: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8400: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
8410: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
8420: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8430: 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63   of payload, inc
8440: 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66  luding any.overf
8450: 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  low.<li>A varint
8460: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 69 6e   which is the in
8470: 74 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61  teger key, a.k.a
8480: 2e 20 22 5b 72 6f 77 69 64 5d 22 0a 3c 6c 69 3e  . "[rowid]".<li>
8490: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
84a0: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
84b0: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
84c0: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
84d0: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
84e0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
84f0: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
8500: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
8510: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
8520: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
8530: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
8540: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
8550: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
8560: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
8570: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  dd>..<dt><p>Tabl
8580: 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  e B-Tree Interio
8590: 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30  r Cell (header 0
85a0: 78 30 35 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  x05):</p></dt>.<
85b0: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
85c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
85d0: 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77  an page number w
85e0: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
85f0: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
8600: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8610: 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ch is the intege
8620: 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c  r key.</ul></p><
8630: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64  /dd>..<dt><p>Ind
8640: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  ex B-Tree Leaf C
8650: 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 61  ell (header 0x0a
8660: 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  ):</p></dt>.<dd>
8670: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61  <p><ul>.<li>A va
8680: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
8690: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
86a0: 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70  f bytes of key p
86b0: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
86c0: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
86d0: 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70  li>The initial p
86e0: 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61  ortion of the pa
86f0: 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20  yload that does 
8700: 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65  not spill to ove
8710: 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69  rflow.pages..<li
8720: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
8730: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67  dian integer pag
8740: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
8750: 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74   first page of t
8760: 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  he.overflow page
8770: 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20   list - omitted 
8780: 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66  if all payload f
8790: 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  its on the b-tre
87a0: 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70  e page..</ul></p
87b0: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49  ></dd>..<dt><p>I
87c0: 6e 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65  ndex B-Tree Inte
87d0: 72 69 6f 72 20 43 65 6c 6c 20 28 68 65 61 64 65  rior Cell (heade
87e0: 72 20 30 78 30 32 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x02):</p></dt
87f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8800: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8810: 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65  ndian page numbe
8820: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
8830: 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65  eft child pointe
8840: 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  r..<li>A varint 
8850: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
8860: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
8870: 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61  es of key payloa
8880: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
8890: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68  .overflow.<li>Th
88a0: 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f  e initial portio
88b0: 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  n of the payload
88c0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
88d0: 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77  pill to overflow
88e0: 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d  .pages..<li>A 4-
88f0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
8900: 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d  integer page num
8910: 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73  ber for the firs
8920: 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76  t page of the.ov
8930: 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74  erflow page list
8940: 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c   - omitted if al
8950: 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f  l payload fits o
8960: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
8970: 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  e..</ul></p></dd
8980: 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20  >.</dl>..<p>The 
8990: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76  information abov
89a0: 65 20 63 61 6e 20 62 65 20 72 65 63 61 73 74 20  e can be recast 
89b0: 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 66 6f 72  into a table for
89c0: 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  mat as follows:<
89d0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
89e0: 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74  gment cellformat
89f0: 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75   {cell format su
8a00: 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65  mmary}</tcl>.<ce
8a10: 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20  nter>.<i>B-tree 
8a20: 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a  Cell Format</i>.
8a30: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20  <table border=1 
8a40: 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72  width="80%">.<tr
8a50: 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44  ><th rowspan=2>D
8a60: 61 74 61 74 79 70 65 0a 20 20 20 20 3c 74 68 20  atatype.    <th 
8a70: 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61 72  colspan=4>Appear
8a80: 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20  s in....    <th 
8a90: 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73 63 72 69  rowspan=2>Descri
8aa0: 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61  ption.<tr><th>Ta
8ab0: 62 6c 65 20 4c 65 61 66 20 28 30 78 30 64 29 0a  ble Leaf (0x0d).
8ac0: 20 20 20 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e      <th>Table In
8ad0: 74 65 72 69 6f 72 20 28 30 78 30 35 29 0a 20 20  terior (0x05).  
8ae0: 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66    <th>Index Leaf
8af0: 20 28 30 78 30 61 29 0a 20 20 20 20 3c 74 68 3e   (0x0a).    <th>
8b00: 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72 20 28  Index Interior (
8b10: 30 78 30 32 29 0a 3c 74 72 3e 3c 74 64 20 61 6c  0x02).<tr><td al
8b20: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8b30: 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74  n=top>4-byte int
8b40: 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69  eger.    <td ali
8b50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b60: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b70: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b80: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b90: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8ba0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8bb0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8bc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8bd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8be0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8bf0: 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d  gn=left>Page num
8c00: 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68 69 6c  ber of left chil
8c10: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
8c20: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8c30: 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64  p>varint.    <td
8c40: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8c50: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8c60: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8c70: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8c80: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8c90: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8ca0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8cb0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8cc0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8cd0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8ce0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75  td align=left>Nu
8cf0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8d00: 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64   payload.<tr><td
8d10: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8d20: 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a  lign=top>varint.
8d30: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8d40: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8d50: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8d60: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8d70: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8d80: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8d90: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8da0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8db0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8dc0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8dd0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8de0: 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64  ft>Rowid.<tr><td
8df0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8e00: 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72  lign=top>byte ar
8e10: 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  ray.    <td alig
8e20: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8e30: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8e40: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8e50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8e60: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8e70: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8e80: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8e90: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8ea0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8eb0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8ec0: 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64  ign=left>Payload
8ed0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8ee0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8ef0: 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a  >4-byte integer.
8f00: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8f10: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8f20: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8f30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8f40: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8f50: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8f60: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8f70: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8f90: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8fa0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8fb0: 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72  left>Page number
8fc0: 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72 66 6c   of first overfl
8fd0: 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e  ow page.</table>
8fe0: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 54  </center>...<p>T
8ff0: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79  he amount of pay
9000: 6c 6f 61 64 20 74 68 61 74 20 73 70 69 6c 6c 73  load that spills
9010: 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70   onto overflow p
9020: 61 67 65 73 20 61 6c 73 6f 20 64 65 70 65 6e 64  ages also depend
9030: 73 20 6f 6e 0a 74 68 65 20 70 61 67 65 20 74 79  s on.the page ty
9040: 70 65 2e 20 20 46 6f 72 20 74 68 65 20 66 6f 6c  pe.  For the fol
9050: 6c 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61 74 69  lowing computati
9060: 6f 6e 73 2c 20 6c 65 74 20 55 20 62 65 20 74 68  ons, let U be th
9070: 65 20 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66  e usable size.of
9080: 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
9090: 2c 20 74 68 65 20 74 6f 74 61 6c 20 70 61 67 65  , the total page
90a0: 20 73 69 7a 65 20 6c 65 73 73 20 74 68 65 20 72   size less the r
90b0: 65 73 65 72 76 65 64 20 73 70 61 63 65 20 61 74  eserved space at
90c0: 20 74 68 65 0a 65 6e 64 20 6f 66 20 65 61 63 68   the.end of each
90d0: 20 70 61 67 65 2e 20 20 41 6e 64 20 6c 65 74 20   page.  And let 
90e0: 50 20 62 65 20 74 68 65 20 70 61 79 6c 6f 61 64  P be the payload
90f0: 20 73 69 7a 65 2e 20 20 49 6e 20 74 68 65 20 66   size.  In the f
9100: 6f 6c 6c 6f 77 69 6e 67 2c 0a 73 79 6d 62 6f 6c  ollowing,.symbol
9110: 20 58 20 72 65 70 72 65 73 65 6e 74 73 20 74 68   X represents th
9120: 65 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74  e maximum amount
9130: 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74   of payload that
9140: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 64   can be stored d
9150: 69 72 65 63 74 6c 79 0a 6f 6e 20 74 68 65 20 62  irectly.on the b
9160: 2d 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f  -tree page witho
9170: 75 74 20 73 70 69 6c 6c 69 6e 67 20 6f 6e 74 6f  ut spilling onto
9180: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
9190: 65 20 61 6e 64 20 73 79 6d 62 6f 6c 20 4d 0a 72  e and symbol M.r
91a0: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d 69  epresents the mi
91b0: 6e 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  nimum amount of 
91c0: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 6d 75 73  payload that mus
91d0: 74 20 62 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  t be stored on t
91e0: 68 65 20 62 74 72 65 65 0a 70 61 67 65 20 62 65  he btree.page be
91f0: 66 6f 72 65 20 73 70 69 6c 6c 69 6e 67 20 69 73  fore spilling is
9200: 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 64 6c 3e 0a   allowed...<dl>.
9210: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
9220: 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f  ree Leaf Cell:</
9230: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
9240: 74 20 58 20 62 65 20 55 2d 33 35 2e 20 20 49 66  t X be U-35.  If
9250: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
9260: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
9270: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74   or equal to X t
9280: 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65 20 70  hen.the entire p
9290: 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64  ayload is stored
92a0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 6c   on the b-tree l
92b0: 65 61 66 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65  eaf page.)^.^(Le
92c0: 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33  t M be ((U-12)*3
92d0: 32 2f 32 35 35 29 2d 32 33 20 61 6e 64 20 6c 65  2/255)-23 and le
92e0: 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25  t K be M+((P-M)%
92f0: 28 55 2d 34 29 29 2e 0a 49 66 20 50 20 69 73 20  (U-4))..If P is 
9300: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 0a 74  greater than X.t
9310: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
9320: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9330: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
9340: 65 65 20 6c 65 61 66 20 70 61 67 65 20 69 73 20  ee leaf page is 
9350: 4b 0a 69 66 20 4b 20 69 73 20 6c 65 73 73 20 6f  K.if K is less o
9360: 72 20 65 71 75 61 6c 20 74 6f 20 58 20 6f 72 20  r equal to X or 
9370: 4d 20 6f 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e  M otherwise.)^.^
9380: 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62  (The number of b
9390: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
93a0: 68 65 20 6c 65 61 66 20 70 61 67 65 20 69 73 20  he leaf page is 
93b0: 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20  never less than 
93c0: 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  M.)^.</p></dd>..
93d0: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
93e0: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
93f0: 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a  l:</dt>.<dd><p>.
9400: 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f  Interior pages o
9410: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  f table b-trees 
9420: 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20  have no payload 
9430: 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20  and so there is 
9440: 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61  never.any payloa
9450: 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e  d to spill..</p>
9460: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e  </dd>..<dt><p>In
9470: 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20  dex B-Tree Leaf 
9480: 4f 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c  Or Interior Cell
9490: 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e  :</dt>.<dd><p>.^
94a0: 28 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32  (Let X be ((U-12
94b0: 29 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20  )*64/255)-23).  
94c0: 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73  If the payload s
94d0: 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68  ize P is less th
94e0: 61 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58  an.or equal to X
94f0: 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
9500: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
9510: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
9520: 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d   page.)^.^(Let M
9530: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
9540: 35 35 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b  55)-23 and let K
9550: 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   be M+((P-M)%(U-
9560: 34 29 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65  4))..If P is gre
9570: 61 74 65 72 20 74 68 61 6e 20 58 20 74 68 65 6e  ater than X then
9580: 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62   the number.of b
9590: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
95a0: 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
95b0: 70 61 67 65 20 69 73 20 4b 20 69 66 20 4b 20 69  page is K if K i
95c0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 0a 65  s less than or.e
95d0: 71 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f  qual to X or M o
95e0: 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68  therwise.)^.^(Th
95f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
9600: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
9610: 69 6e 64 65 78 20 70 61 67 65 20 69 73 20 6e 65  index page is ne
9620: 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e  ver less than M.
9630: 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  )^.</p></dd>.</d
9640: 6c 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  l>..<p>Here is a
9650: 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65  n alternative de
9660: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
9670: 20 73 61 6d 65 20 63 6f 6d 70 75 74 61 74 69 6f   same computatio
9680: 6e 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 58 20 69  n:..<ul>.<li>X i
9690: 73 20 55 2d 33 35 20 66 6f 72 20 74 61 62 6c 65  s U-35 for table
96a0: 20 62 74 72 65 65 20 6c 65 61 66 20 70 61 67 65   btree leaf page
96b0: 73 20 6f 72 0a 20 20 20 20 28 28 55 2d 31 32 29  s or.    ((U-12)
96c0: 2a 36 34 2f 32 35 35 29 2d 32 33 20 66 6f 72 20  *64/255)-23 for 
96d0: 69 6e 64 65 78 20 70 61 67 65 73 2e 0a 3c 6c 69  index pages..<li
96e0: 3e 4d 20 69 73 20 61 6c 77 61 79 73 20 28 28 55  >M is always ((U
96f0: 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e  -12)*32/255)-23.
9700: 0a 3c 6c 69 3e 4c 65 74 20 4b 20 62 65 20 4d 2b  .<li>Let K be M+
9710: 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 3c  ((P-M)%(U-4))..<
9720: 6c 69 3e 5e 49 66 20 50 26 6c 74 3b 3d 58 20 74  li>^If P&lt;=X t
9730: 68 65 6e 20 61 6c 6c 20 50 20 62 79 74 65 73 20  hen all P bytes 
9740: 6f 66 20 70 61 79 6c 6f 61 64 20 61 72 65 20 73  of payload are s
9750: 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79 20 6f  tored directly o
9760: 6e 20 74 68 65 20 0a 20 20 20 20 62 74 72 65 65  n the .    btree
9770: 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 6f 76   page without ov
9780: 65 72 66 6c 6f 77 2e 0a 3c 6c 69 3e 5e 49 66 20  erflow..<li>^If 
9790: 50 26 67 74 3b 58 20 61 6e 64 20 4b 26 6c 74 3b  P&gt;X and K&lt;
97a0: 3d 58 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  =X then the firs
97b0: 74 20 4b 20 62 79 74 65 73 20 6f 66 20 50 20 61  t K bytes of P a
97c0: 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  re stored on the
97d0: 20 0a 20 20 20 20 62 74 72 65 65 20 70 61 67 65   .    btree page
97e0: 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69   and the remaini
97f0: 6e 67 20 50 2d 4b 20 62 79 74 65 73 20 61 72 65  ng P-K bytes are
9800: 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72 66   stored on overf
9810: 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 5e  low pages..<li>^
9820: 49 66 20 50 26 67 74 3b 58 20 61 6e 64 20 4b 26  If P&gt;X and K&
9830: 67 74 3b 58 20 74 68 65 6e 20 74 68 65 20 66 69  gt;X then the fi
9840: 72 73 74 20 4d 20 62 79 74 65 73 20 6f 66 20 50  rst M bytes of P
9850: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
9860: 68 65 0a 20 20 20 20 62 74 72 65 65 20 70 61 67  he.    btree pag
9870: 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
9880: 69 6e 67 20 50 2d 4d 20 62 79 74 65 73 20 61 72  ing P-M bytes ar
9890: 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72  e stored on over
98a0: 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 2f 75 6c  flow pages..</ul
98b0: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c  >..<p>The overfl
98c0: 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72  ow thresholds ar
98d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69  e designed to gi
98e0: 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e  ve a minimum fan
98f0: 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64  out of.4 for ind
9900: 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74  ex b-trees and t
9910: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75  o make sure enou
9920: 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  gh of the payloa
9930: 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  d.is on the b-tr
9940: 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68 65  ee page that the
9950: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
9960: 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63  an usually be ac
9970: 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63  cessed.without c
9980: 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65  onsulting an ove
9990: 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20  rflow page.  In 
99a0: 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64  hindsight, the d
99b0: 65 73 69 67 6e 65 72 20 6f 66 0a 74 68 65 20 53  esigner of.the S
99c0: 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f 67  QLite b-tree log
99d0: 69 63 20 72 65 61 6c 69 7a 65 64 20 74 68 61 74  ic realized that
99e0: 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64   these threshold
99f0: 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  s could have bee
9a00: 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70  n.made much simp
9a10: 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  ler.  However, t
9a20: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  he computations 
9a30: 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  cannot be change
9a40: 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75 6c 74  d.without result
9a50: 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70  ing in an incomp
9a60: 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d  atible file form
9a70: 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63 75 72  at.  And the cur
9a80: 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e  rent computation
9a90: 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65  s.work well, eve
9aa0: 6e 20 69 66 20 74 68 65 79 20 61 72 65 20 61 20  n if they are a 
9ab0: 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c  little complex.<
9ac0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
9ad0: 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f  gment ovflpgs {o
9ae0: 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f  verflow page} {o
9af0: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f  verflow pages}</
9b00: 74 63 6c 3e 0a 3c 68 32 3e 43 65 6c 6c 20 50 61  tcl>.<h2>Cell Pa
9b10: 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50  yload Overflow P
9b20: 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 57  ages</h2>..<p>^W
9b30: 68 65 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20  hen the payload 
9b40: 6f 66 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c  of a b-tree cell
9b50: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f   is too large fo
9b60: 72 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  r the b-tree pag
9b70: 65 2c 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69  e,.the surplus i
9b80: 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f  s spilled onto o
9b90: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20  verflow pages.  
9ba0: 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20  ^Overflow pages 
9bb0: 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69  form a linked.li
9bc0: 73 74 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  st.  ^The first 
9bd0: 66 6f 75 72 20 62 79 74 65 73 20 6f 66 20 65 61  four bytes of ea
9be0: 63 68 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  ch overflow page
9bf0: 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61   are a big-endia
9c00: 6e 0a 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n.integer which 
9c10: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
9c20: 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 70  er of the next p
9c30: 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e  age in the chain
9c40: 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68  , or zero.for th
9c50: 65 20 66 69 6e 61 6c 20 70 61 67 65 20 69 6e 20  e final page in 
9c60: 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65  the chain.  ^The
9c70: 20 66 69 66 74 68 20 62 79 74 65 20 74 68 72 6f   fifth byte thro
9c80: 75 67 68 20 74 68 65 20 6c 61 73 74 20 75 73 61  ugh the last usa
9c90: 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75 73 65  ble.byte are use
9ca0: 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c  d to hold overfl
9cb0: 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a  ow content.</p>.
9cc0: 0a 3c 68 32 3e 50 6f 69 6e 74 65 72 20 4d 61 70  .<h2>Pointer Map
9cd0: 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67 65 73   or Ptrmap Pages
9ce0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65  </h2>..<p>Pointe
9cf0: 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61 70 20  r map or ptrmap 
9d00: 70 61 67 65 73 20 61 72 65 20 65 78 74 72 61 20  pages are extra 
9d10: 70 61 67 65 73 20 69 6e 73 65 72 74 65 64 20 69  pages inserted i
9d20: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
9d30: 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f 70 65  .to make the ope
9d40: 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f  ration of [auto_
9d50: 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63  vacuum] and [inc
9d60: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d  remental_vacuum]
9d70: 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66 66 69   modes.more effi
9d80: 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20 70 61  cient.  Other pa
9d90: 67 65 20 74 79 70 65 73 20 69 6e 20 74 68 65 20  ge types in the 
9da0: 64 61 74 61 62 61 73 65 20 74 79 70 69 63 61 6c  database typical
9db0: 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65 72 73  ly have pointers
9dc0: 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20  .from parent to 
9dd0: 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d  child.  For exam
9de0: 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72  ple, an interior
9df0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e   b-tree page con
9e00: 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74  tains pointers.t
9e10: 6f 20 69 74 73 20 63 68 69 6c 64 20 62 2d 74 72  o its child b-tr
9e20: 65 65 20 70 61 67 65 73 20 61 6e 64 20 61 6e 20  ee pages and an 
9e30: 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 20 68  overflow chain h
9e40: 61 73 20 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f  as a pointer.fro
9e50: 6d 20 65 61 72 6c 69 65 72 20 74 6f 20 6c 61 74  m earlier to lat
9e60: 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20  er links in the 
9e70: 63 68 61 69 6e 2e 20 20 41 20 70 74 72 6d 61 70  chain.  A ptrmap
9e80: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c   page contains l
9e90: 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69  inkage.informati
9ea0: 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68 65 20  on going in the 
9eb0: 6f 70 70 6f 73 69 74 65 20 64 69 72 65 63 74 69  opposite directi
9ec0: 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64 20 74  on, from child t
9ed0: 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  o parent.</p>..<
9ee0: 70 3e 5e 50 74 72 6d 61 70 20 70 61 67 65 73 20  p>^Ptrmap pages 
9ef0: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 61 6e  must exist in an
9f00: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
9f10: 77 68 69 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d  which has a non-
9f20: 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f  zero.largest roo
9f30: 74 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61  t b-tree page va
9f40: 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 35 32  lue at offset 52
9f50: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9f60: 20 68 65 61 64 65 72 2e 0a 5e 49 66 20 74 68 65   header..^If the
9f70: 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d   largest root b-
9f80: 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20  tree page value 
9f90: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
9fa0: 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20  e database must 
9fb0: 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d  not.contain ptrm
9fc0: 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  ap pages.</p>..<
9fd0: 70 3e 5e 49 6e 20 61 20 64 61 74 61 62 61 73 65  p>^In a database
9fe0: 20 77 69 74 68 20 70 74 72 6d 61 70 20 70 61 67   with ptrmap pag
9ff0: 65 73 2c 20 74 68 65 20 66 69 72 73 74 20 70 74  es, the first pt
a000: 72 6d 61 70 20 70 61 67 65 20 69 73 20 70 61 67  rmap page is pag
a010: 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20 70 61  e 2..A ptrmap pa
a020: 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ge consists of a
a030: 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62 79 74  n array of 5-byt
a040: 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65 74 20  e entries.  Let 
a050: 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65 72 20  J be the.number 
a060: 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65  of 5-byte entrie
a070: 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  s that will fit 
a080: 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70  in the usable sp
a090: 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e 0a 28  ace of a page..(
a0a0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
a0b0: 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20 66 69  J=U/5.)  ^The fi
a0c0: 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65 20  rst ptrmap page 
a0d0: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63  will contain bac
a0e0: 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d  k pointer.inform
a0f0: 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20  ation for pages 
a100: 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69  3 through J+2, i
a110: 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54 68 65 20  nclusive.  ^The 
a120: 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d  second pointer m
a130: 61 70 0a 70 61 67 65 20 77 69 6c 6c 20 62 65 20  ap.page will be 
a140: 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e 64 20  on page J+3 and 
a150: 74 68 61 74 20 70 74 72 6d 61 70 20 70 61 67 65  that ptrmap page
a160: 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 62 61   will provide ba
a170: 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72  ck pointer.infor
a180: 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73  mation for pages
a190: 20 4a 2b 34 20 74 68 72 6f 75 67 68 20 32 2a 4a   J+4 through 2*J
a1a0: 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  +3 inclusive.  A
a1b0: 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a  nd so forth for.
a1c0: 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
a1d0: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
a1e0: 70 3e 5e 28 49 6e 20 61 20 64 61 74 61 62 61 73  p>^(In a databas
a1f0: 65 20 74 68 61 74 20 75 73 65 73 20 70 74 72 6d  e that uses ptrm
a200: 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 70 61  ap pages, all pa
a210: 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73  ges at locations
a220: 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79 20 74   identified.by t
a230: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69  he computation i
a240: 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
a250: 61 72 61 67 72 61 70 68 20 6d 75 73 74 20 62 65  aragraph must be
a260: 20 70 74 72 6d 61 70 20 70 61 67 65 20 61 6e 64   ptrmap page and
a270: 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65 20 6d   no.other page m
a280: 61 79 20 62 65 20 61 20 70 74 72 6d 61 70 20 70  ay be a ptrmap p
a290: 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20 69 66  age.  Except, if
a2a0: 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70   the byte-lock p
a2b0: 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f 0a 66  age happens to.f
a2c0: 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  all on the same 
a2d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73 20 61  page number as a
a2e0: 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20 74 68   ptrmap page, th
a2f0: 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20 69 73  en the ptrmap is
a300: 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20 66 6f   moved.to the fo
a310: 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66 6f 72  llowing page for
a320: 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65 2e 29   that one case.)
a330: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35  ^</p>..<p>Each 5
a340: 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e 20 61  -byte entry on a
a350: 20 70 74 72 6d 61 70 20 70 61 67 65 20 70 72 6f   ptrmap page pro
a360: 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20  vides back-link 
a370: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
a380: 74 20 0a 6f 6e 65 20 6f 66 20 74 68 65 20 70 61  t .one of the pa
a390: 67 65 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61  ges that immedia
a3a0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20  tely follow the 
a3b0: 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28  pointer map.  ^(
a3c0: 49 66 20 70 61 67 65 20 42 20 69 73 20 61 0a 70  If page B is a.p
a3d0: 74 72 6d 61 70 20 70 61 67 65 20 74 68 65 6e 20  trmap page then 
a3e0: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
a3f0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65  ation about page
a400: 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64 65 64   B+1 is provided
a410: 20 62 79 0a 74 68 65 20 66 69 72 73 74 20 65 6e   by.the first en
a420: 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74  try on the point
a430: 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61  er map.  Informa
a440: 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20  tion about page 
a450: 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65 64 20  B+2 is.provided 
a460: 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6e  by the second en
a470: 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72  try.  And so for
a480: 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  th.)^</p>..<p>Ea
a490: 63 68 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70  ch 5-byte ptrmap
a4a0: 20 65 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20   entry consists 
a4b0: 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22  of one byte of "
a4c0: 70 61 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72  page type" infor
a4d0: 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20  mation.followed 
a4e0: 62 79 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  by a 4-byte big-
a4f0: 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62  endian page numb
a500: 65 72 2e 20 20 46 69 76 65 20 70 61 67 65 20 74  er.  Five page t
a510: 79 70 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69  ypes are recogni
a520: 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  zed:.</p>..<ol>.
a530: 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f  <li>A b-tree roo
a540: 74 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67  t page.  The.pag
a550: 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20  e number should 
a560: 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66  be zero..<li>A f
a570: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
a580: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he page number s
a590: 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c  hould be.zero..<
a5a0: 6c 69 3e 54 68 65 20 66 69 72 73 74 20 70 61 67  li>The first pag
a5b0: 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c  e of a.cell payl
a5c0: 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61  oad overflow cha
a5d0: 69 6e 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  in.  The page nu
a5e0: 6d 62 65 72 20 69 73 20 74 68 65 20 62 2d 74 72  mber is the b-tr
a5f0: 65 65 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e  ee page that.con
a600: 74 61 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77  tains the cell w
a610: 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73  hose content has
a620: 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69   overflowed..<li
a630: 3e 41 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76  >A page in an ov
a640: 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68  erflow chain.oth
a650: 65 72 20 74 68 61 6e 20 74 68 65 20 66 69 72 73  er than the firs
a660: 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67  t page.  The pag
a670: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  e number is the 
a680: 70 72 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68  prior page of th
a690: 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  e.overflow chain
a6a0: 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74  ..<li>A non-root
a6b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54   b-tree page.  T
a6c0: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he.page number i
a6d0: 73 20 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74  s the parent b-t
a6e0: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a  ree page..</ol>.
a6f0: 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61  .<p>^In any data
a700: 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 63  base file that c
a710: 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70  ontains ptrmap p
a720: 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65  ages, all b-tree
a730: 20 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73   root pages .mus
a740: 74 20 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e  t come before an
a750: 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65  y non-root b-tre
a760: 65 20 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79  e page, cell pay
a770: 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61  load overflow pa
a780: 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20  ge, or.freelist 
a790: 70 61 67 65 2e 20 20 54 68 69 73 20 72 65 73 74  page.  This rest
a7a0: 72 69 63 74 69 6f 6e 20 65 6e 73 75 72 65 73 20  riction ensures 
a7b0: 74 68 61 74 20 61 20 72 6f 6f 74 20 70 61 67 65  that a root page
a7c0: 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d   will never.be m
a7d0: 6f 76 65 64 20 64 75 72 69 6e 67 20 61 6e 20 61  oved during an a
a7e0: 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e  uto-vacuum or in
a7f0: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
a800: 2e 20 20 54 68 65 20 61 75 74 6f 2d 76 61 63 75  .  The auto-vacu
a810: 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f  um.logic does no
a820: 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70  t know how to up
a830: 64 61 74 65 20 74 68 65 20 72 6f 6f 74 5f 70 61  date the root_pa
a840: 67 65 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ge field of the 
a850: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 74 61  sqlite_master.ta
a860: 62 6c 65 20 61 6e 64 20 73 6f 20 69 74 20 69 73  ble and so it is
a870: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 70 72   necessary to pr
a880: 65 76 65 6e 74 20 72 6f 6f 74 20 70 61 67 65 73  event root pages
a890: 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65   from being move
a8a0: 64 0a 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d.during an auto
a8b0: 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72 64 65 72  -vacuum in order
a8c0: 20 74 6f 20 70 72 65 73 65 72 76 65 20 74 68 65   to preserve the
a8d0: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68   integrity of th
a8e0: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
a8f0: 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61  table.  ^Root pa
a900: 67 65 73 20 61 72 65 20 6d 6f 76 65 64 20 74 6f  ges are moved to
a910: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
a920: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
a930: 69 6c 65 20 62 79 20 74 68 65 20 43 52 45 41 54  ile by the CREAT
a940: 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20  E TABLE, CREATE 
a950: 49 4e 44 45 58 2c 20 44 52 4f 50 20 54 41 42 4c  INDEX, DROP TABL
a960: 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45  E, and.DROP INDE
a970: 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70  X operations.</p
a980: 3e 0a 0a 3c 68 31 3e 53 63 68 65 6d 61 20 4c 61  >..<h1>Schema La
a990: 79 65 72 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  yer</h1>..<p>The
a9a0: 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74 20   foregoing text 
a9b0: 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65  describes low-le
a9c0: 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  vel aspects of t
a9d0: 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a 66  he SQLite file.f
a9e0: 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74 72  ormat.  The b-tr
a9f0: 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f  ee mechanism pro
aa00: 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75 6c  vides a powerful
aa10: 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20 6d   and efficient m
aa20: 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69 6e  eans of.accessin
aa30: 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20 73  g a large data s
aa40: 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f  et.  This sectio
aa50: 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65 20  n will describe 
aa60: 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65  how the.low-leve
aa70: 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 69  l b-tree layer i
aa80: 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
aa90: 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65 6c  ent higher-level
aaa0: 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69 65   SQL.capabilitie
aab0: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s.</p>..<tcl>hd_
aac0: 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f  fragment record_
aad0: 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20 66  format {record f
aae0: 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  ormat}</tcl>.<h2
aaf0: 3e 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f  >Record Format</
ab00: 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61  h2>..<p>The data
ab10: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 62 2d 74   for a table b-t
ab20: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
ab30: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20  d the key.of an 
ab40: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
ab50: 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69  e was characteri
ab60: 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20  zed above.as an 
ab70: 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e  arbitrary sequen
ab80: 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65  ce of bytes..The
ab90: 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f   prior discussio
aba0: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20  n mentioned one 
abb0: 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74  key being less t
abc0: 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74  han another, but
abd0: 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20  .did not define 
abe0: 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22  what "less than"
abf0: 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72   meant.  The cur
ac00: 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c  rent section wil
ac10: 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20  l address.these 
ac20: 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  omissions.</p>..
ac30: 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68  <p>Payload, eith
ac40: 65 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  er table b-tree 
ac50: 64 61 74 61 20 6f 72 20 69 6e 64 65 78 20 62 2d  data or index b-
ac60: 74 72 65 65 20 6b 65 79 73 2c 20 0a 69 73 20 61  tree keys, .is a
ac70: 6c 77 61 79 73 20 69 6e 20 74 68 65 20 22 72 65  lways in the "re
ac80: 63 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68  cord format"..Th
ac90: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
aca0: 64 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e  defines a sequen
acb0: 63 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72  ce of values cor
acc0: 72 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f  responding.to co
acd0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
ace0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20   or index.  The 
acf0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70  record format sp
ad00: 65 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62  ecifies the numb
ad10: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74  er.of columns, t
ad20: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
ad30: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ach column, and 
ad40: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65  the content of e
ad50: 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  ach column.</p>.
ad60: 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66  .<p>The record f
ad70: 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65  ormat makes exte
ad80: 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65  nsive use of the
ad90: 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   .[variable-leng
ada0: 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b  th integer] or [
adb0: 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e  varint].represen
adc0: 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74  tation of 64-bit
add0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
ade0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c   defined above.<
adf0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
ae00: 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65  gment serialtype
ae10: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b   {serial type} {
ae20: 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74  serial types}</t
ae30: 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20  cl>.<p>A record 
ae40: 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65  contains a heade
ae50: 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e  r and a body, in
ae60: 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e   that order.  .^
ae70: 28 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69  (The header begi
ae80: 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
ae90: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65   varint which de
aea0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
aeb0: 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  al number.of byt
aec0: 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
aed0: 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61  .  The varint va
aee0: 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
aef0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
af00: 0a 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67  .bytes including
af10: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
af20: 20 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c   itself.)^  ^Fol
af30: 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
af40: 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f  varint are.one o
af50: 72 20 6d 6f 72 65 20 61 64 64 69 74 69 6f 6e 61  r more additiona
af60: 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
af70: 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73  er column.  Thes
af80: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
af90: 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65 64 20  ints.are called 
afa0: 22 73 65 72 69 61 6c 20 74 79 70 65 22 20 6e 75  "serial type" nu
afb0: 6d 62 65 72 73 20 61 6e 64 0a 64 65 74 65 72 6d  mbers and.determ
afc0: 69 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65  ine the datatype
afd0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
afe0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
aff0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72  e following char
b000: 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  t:</p>..<center>
b010: 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20  .<i>Serial Type 
b020: 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63  Codes Of The Rec
b030: 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
b040: 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
b050: 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
b060: 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54  <tr><th>Serial T
b070: 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53  ype<th>Content S
b080: 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c  ize<th>Meaning.<
b090: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b0a0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
b0b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b0c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
b0d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b0e0: 6c 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c  lue is a NULL..<
b0f0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b100: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
b110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
b130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b140: 6c 75 65 20 69 73 20 61 6e 20 38 2d 62 69 74 20  lue is an 8-bit 
b150: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
b160: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
b170: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b180: 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61  n=center>2<td va
b190: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b1a0: 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e  enter>2<td align
b1b0: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b1c0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 31 36   a big-endian 16
b1d0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
b1e0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
b1f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b200: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
b210: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b220: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
b230: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b240: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
b250: 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 24-bit twos-c
b260: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
b270: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b280: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b290: 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
b2a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b2b0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
b2c0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b2d0: 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74  -endian 32-bit t
b2e0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b2f0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b300: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b310: 3d 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c  =center>5<td val
b320: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b330: 6e 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d  nter>6<td align=
b340: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b350: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d  a big-endian 48-
b360: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b370: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b380: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b390: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
b3a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b3b0: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b3c0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b3d0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b3e0: 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 64-bit twos-co
b3f0: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
b400: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b410: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b420: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
b430: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
b440: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b450: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
b460: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
b470: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
b480: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
b490: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b4a0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b4b0: 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
b4c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b4d0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
b4e0: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
b4f0: 6e 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20  nteger 0. (Only 
b500: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
b510: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
b520: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
b530: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b540: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74  align=center>9<t
b550: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b560: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61  gn=center>0<td a
b570: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b580: 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  e is the integer
b590: 20 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61   1. (Only availa
b5a0: 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20  ble for [schema 
b5b0: 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69  format] 4 and hi
b5c0: 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76  gher.).<tr><td v
b5d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b5e0: 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20  center>10,11.   
b5f0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b600: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 3c 69 3e  align=center><i>
b610: 76 61 72 69 61 62 6c 65 3c 2f 69 3e 3c 74 64 20  variable</i><td 
b620: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 52  align=left>.<i>R
b630: 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65  eserved for inte
b640: 72 6e 61 6c 20 75 73 65 2e 20 20 54 68 65 73 65  rnal use.  These
b650: 20 73 65 72 69 61 6c 20 74 79 70 65 20 63 6f 64   serial type cod
b660: 65 73 20 77 69 6c 6c 0a 20 20 20 6e 65 76 65 72  es will.   never
b670: 20 61 70 70 65 61 72 20 69 6e 20 61 20 77 65 6c   appear in a wel
b680: 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
b690: 65 20 66 69 6c 65 2c 20 62 75 74 20 74 68 65 79  e file, but they
b6a0: 0a 20 20 20 6d 69 67 68 74 20 62 65 20 75 73 65  .   might be use
b6b0: 64 20 69 6e 20 74 72 61 6e 73 69 65 6e 74 20 61  d in transient a
b6c0: 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  nd temporary dat
b6d0: 61 62 61 73 65 20 66 69 6c 65 73 0a 20 20 20 74  abase files.   t
b6e0: 68 61 74 20 53 51 4c 69 74 65 20 73 6f 6d 65 74  hat SQLite somet
b6f0: 69 6d 65 73 20 67 65 6e 65 72 61 74 65 73 20 66  imes generates f
b700: 6f 72 20 69 74 73 20 6f 77 6e 20 75 73 65 2e 0a  or its own use..
b710: 20 20 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20     The meanings 
b720: 6f 66 20 74 68 65 73 65 20 63 6f 64 65 73 20 63  of these codes c
b730: 61 6e 20 73 68 69 66 74 20 66 72 6f 6d 20 6f 6e  an shift from on
b740: 65 20 72 65 6c 65 61 73 65 0a 20 20 20 6f 66 20  e release.   of 
b750: 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
b760: 78 74 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20  xt.</i>.<tr><td 
b770: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b780: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b790: 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20 20 20  ;12 and even.   
b7a0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b7b0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d  align=center>(N-
b7c0: 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  12)/2<td align=l
b7d0: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
b7e0: 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e   BLOB that is (N
b7f0: 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20  -12)/2 bytes in 
b800: 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20  length..<tr><td 
b810: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b820: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b830: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
b840: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b850: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
b860: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
b870: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b880: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 5b 74  string in the [t
b890: 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e  ext encoding] an
b8a0: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
b8b0: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65   in length..^The
b8c0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
b8d0: 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c  is not stored..<
b8e0: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
b8f0: 0a 0a 3c 70 3e 54 68 65 20 68 65 61 64 65 72 20  ..<p>The header 
b900: 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64 20  size varint.and 
b910: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b920: 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79  nts will usually
b930: 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73 69   consist of a si
b940: 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 0a  ngle byte.  The.
b950: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b960: 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73 74  nts for large st
b970: 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73 20  rings and BLOBs 
b980: 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f 20  might extend to 
b990: 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79 74  two or three.byt
b9a0: 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20 74  e varints, but t
b9b0: 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65 70  hat is the excep
b9c0: 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61 6e  tion rather than
b9d0: 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65 20   the rule. .The 
b9e0: 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69 73  varint format is
b9f0: 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 20   very efficient 
ba00: 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72 65  at coding the re
ba10: 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e  cord header.</p>
ba20: 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75 65 73  ..<p>^The values
ba30: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
ba40: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
ba50: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
ba60: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
ba70: 46 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65 73  For serial types
ba80: 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e   0, 8, 9, 12, an
ba90: 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20  d 13, the value 
baa0: 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e  is zero bytes in
bab0: 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c  .length.  If all
bac0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20   columns are of 
bad0: 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65 6e  these types then
bae0: 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f   the body sectio
baf0: 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20  n of the.record 
bb00: 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a  is empty.)^</p>.
bb10: 0a 3c 70 3e 5e 41 20 72 65 63 6f 72 64 20 6d 69  .<p>^A record mi
bb20: 67 68 74 20 68 61 76 65 20 66 65 77 65 72 20 76  ght have fewer v
bb30: 61 6c 75 65 73 20 74 68 61 6e 20 74 68 65 20 6e  alues than the n
bb40: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
bb50: 20 69 6e 20 74 68 65 0a 63 6f 72 72 65 73 70 6f   in the.correspo
bb60: 6e 64 69 6e 67 20 74 61 62 6c 65 2e 20 20 54 68  nding table.  Th
bb70: 69 73 20 63 61 6e 20 68 61 70 70 65 6e 2c 20 66  is can happen, f
bb80: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 66 74 65  or example, afte
bb90: 72 20 61 6e 0a 5b 41 4c 54 45 52 20 54 41 42 4c  r an.[ALTER TABL
bba0: 45 7c 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  E|ALTER TABLE ..
bbb0: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 53 51  . ADD COLUMN] SQ
bbc0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  L statement has 
bbd0: 69 6e 63 72 65 61 73 65 64 0a 74 68 65 20 6e 75  increased.the nu
bbe0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
bbf0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 73 63 68  in the table sch
bc00: 65 6d 61 20 77 69 74 68 6f 75 74 20 6d 6f 64 69  ema without modi
bc10: 66 79 69 6e 67 20 70 72 65 65 78 69 73 74 69 6e  fying preexistin
bc20: 67 20 72 6f 77 73 0a 69 6e 20 74 68 65 20 74 61  g rows.in the ta
bc30: 62 6c 65 2e 0a 5e 4d 69 73 73 69 6e 67 20 76 61  ble..^Missing va
bc40: 6c 75 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  lues at the end 
bc50: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 61 72  of the record ar
bc60: 65 20 66 69 6c 6c 65 64 20 69 6e 20 75 73 69 6e  e filled in usin
bc70: 67 20 74 68 65 0a 5b 64 65 66 61 75 6c 74 20 76  g the.[default v
bc80: 61 6c 75 65 5d 20 66 6f 72 20 74 68 65 20 63 6f  alue] for the co
bc90: 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75  rresponding colu
bca0: 6d 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  mns defined in t
bcb0: 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61 2e  he table schema.
bcc0: 0a 3c 2f 70 3e 0a 0a 0a 3c 68 32 3e 52 65 63 6f  .</p>...<h2>Reco
bcd0: 72 64 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68  rd Sort Order</h
bce0: 32 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72  2>..<p>The order
bcf0: 20 6f 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   of keys in an i
bd00: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 20 64  ndex b-tree is d
bd10: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
bd20: 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74   sort order of.t
bd30: 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
bd40: 74 68 65 20 6b 65 79 73 20 72 65 70 72 65 73 65  the keys represe
bd50: 6e 74 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70  nt.  Record comp
bd60: 61 72 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65  arison progresse
bd70: 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75  s column.by colu
bd80: 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20  mn.  Columns of 
bd90: 61 20 72 65 63 6f 72 64 20 61 72 65 20 65 78 61  a record are exa
bda0: 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  mined from left 
bdb0: 74 6f 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66  to right.  The.f
bdc0: 69 72 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c  irst pair of col
bdd0: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  umns that are no
bde0: 74 20 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e  t equal determin
bdf0: 65 73 20 74 68 65 20 72 65 6c 61 74 69 76 65 20  es the relative 
be00: 6f 72 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f  order.of the two
be10: 20 72 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73   records.  The s
be20: 6f 72 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64  ort order of ind
be30: 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
be40: 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as.follows:</
be50: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e  p>..<ol>.<li>^(N
be60: 55 4c 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69  ULL values (seri
be70: 61 6c 20 74 79 70 65 20 30 29 20 73 6f 72 74 20  al type 0) sort 
be80: 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e  first.)^.<li>^(N
be90: 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 28 73  umeric values (s
bea0: 65 72 69 61 6c 20 74 79 70 65 73 20 31 20 74 68  erial types 1 th
beb0: 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20 61 66  rough 9) sort af
bec0: 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20  ter NULLs.      
bed0: 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f  and in numeric o
bee0: 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65  rder.)^.<li>^(Te
bef0: 78 74 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73  xt values (odd s
bf00: 65 72 69 61 6c 20 74 79 70 65 73 20 31 33 20 61  erial types 13 a
bf10: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
bf20: 61 66 74 65 72 20 6e 75 6d 65 72 69 63 0a 20 20  after numeric.  
bf30: 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20    values in the 
bf40: 6f 72 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64  order determined
bf50: 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   by the columns 
bf60: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
bf70: 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c  ion].)^.<li>^(BL
bf80: 4f 42 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20  OB values (even 
bf90: 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 32 20  serial types 12 
bfa0: 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74  and larger) sort
bfb0: 20 6c 61 73 74 20 61 6e 64 20 69 6e 20 74 68 65   last and in the
bfc0: 20 6f 72 64 65 72 20 0a 20 20 20 20 64 65 74 65   order .    dete
bfd0: 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70  rmined by memcmp
bfe0: 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  ().)^.</ol>..<p>
bff0: 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  A [collating fun
c000: 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20  ction] for each 
c010: 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73 73  column is necess
c020: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
c030: 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72 64 65  compute.the orde
c040: 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c 64 73  r of text fields
c050: 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65 66 69 6e  ..^(SQLite defin
c060: 65 73 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69  es three built-i
c070: 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  n collating func
c080: 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c  tions:)^.</p>..<
c090: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c  blockquote><tabl
c0a0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73  e border=0 cells
c0b0: 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c  pacing=10>.<tr><
c0c0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49  td valign=top>BI
c0d0: 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28  NARY.    <td> ^(
c0e0: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  The built-in BIN
c0f0: 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f  ARY collation co
c100: 6d 70 61 72 65 73 20 73 74 72 69 6e 67 73 20 62  mpares strings b
c110: 79 74 65 20 62 79 20 62 79 74 65 0a 20 20 20 20  yte by byte.    
c120: 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d 65      using the me
c130: 6d 63 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a  mcmp() function.
c140: 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65          from the
c150: 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
c160: 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76  ary.)^.<tr><td v
c170: 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45  align=top>NOCASE
c180: 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20  .    <td> ^(The 
c190: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e  NOCASE collation
c1a0: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
c1b0: 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70 65  except that uppe
c1c0: 72 63 61 73 65 0a 20 20 20 20 20 20 20 20 41 53  rcase.        AS
c1d0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28  CII characters (
c1e0: 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29  'A' through 'Z')
c1f0: 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c  .        are fol
c200: 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c  ded into their l
c210: 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c  owercase equival
c220: 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ents prior to ru
c230: 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  nning the.      
c240: 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4f    comparison.  O
c250: 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72 61 63  nly ASCII charac
c260: 74 65 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f  ters are case-fo
c270: 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20 20 20 20  lded.)^.        
c280: 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20  ^(NOCASE.       
c290: 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d   does not implem
c2a0: 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75  ent a general pu
c2b0: 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61  rpose unicode ca
c2c0: 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f  seless compariso
c2d0: 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  n.)^.<tr><td val
c2e0: 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20  ign=top>RTRIM.  
c2f0: 20 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d 20 69    <td> ^(RTRIM i
c300: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
c310: 63 65 70 74 20 74 68 61 74 20 65 78 74 72 61 20  cept that extra 
c320: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c330: 64 20 6f 66 20 65 69 74 68 65 72 0a 20 20 20 20  d of either.    
c340: 20 20 20 20 20 73 74 72 69 6e 67 20 64 6f 20 6e       string do n
c350: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 72 65  ot change the re
c360: 73 75 6c 74 2e 20 20 49 6e 20 6f 74 68 65 72 20  sult.  In other 
c370: 77 6f 72 64 73 2c 20 73 74 72 69 6e 67 73 20 77  words, strings w
c380: 69 6c 6c 0a 20 20 20 20 20 20 20 20 20 63 6f 6d  ill.         com
c390: 70 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e  pare equal to on
c3a0: 65 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e  e another as lon
c3b0: 67 20 61 73 20 74 68 65 79 0a 20 20 20 20 20 20  g as they.      
c3c0: 20 20 20 64 69 66 66 65 72 20 6f 6e 6c 79 20 69     differ only i
c3d0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
c3e0: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c3f0: 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  d.)^.</table></b
c400: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
c410: 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69  Additional appli
c420: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  cation-specific 
c430: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
c440: 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64  ons can be added
c450: 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67   to.SQLite using
c460: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
c470: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
c480: 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  ] interface.</p>
c490: 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c  ..<p>^The defaul
c4a0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
c4b0: 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
c4c0: 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a  ings is BINARY..
c4d0: 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c  ^Alternative col
c4e0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
c4f0: 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d   for table colum
c500: 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ns can be specif
c510: 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  ied in the.[CREA
c520: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
c530: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f  ent using the CO
c540: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20  LLATE clause on 
c550: 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  the [column defi
c560: 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61  nition]..^When a
c570: 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78   column is index
c580: 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c  ed, the same col
c590: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
c5a0: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
c5b0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
c5c0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
c5d0: 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  d for the column
c5e0: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62   in the index, b
c5f0: 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67  y default,.thoug
c600: 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76  h this can be ov
c610: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61  erridden using a
c620: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
c630: 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20  in the .[CREATE 
c640: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
c650: 2e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74  ...<h2>Represent
c660: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62  ation Of SQL Tab
c670: 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45  les</h2>..<p> ^E
c680: 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c  ach ordinary SQL
c690: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
c6a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
c6b0: 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d   represented on-
c6c0: 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20  disk.by a table 
c6d0: 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20 65  b-tree.  ^Each e
c6e0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
c6f0: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
c700: 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66  onds to a row.of
c710: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20   the SQL table. 
c720: 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66   ^The [rowid] of
c730: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69   the SQL table i
c740: 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67  s the 64-bit sig
c750: 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20  ned.integer key 
c760: 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69  for each entry i
c770: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
c780: 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ee.</p>..<p> ^Th
c790: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63  e content of eac
c7a0: 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20  h SQL table row 
c7b0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
c7c0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
c7d0: 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e  y.first combinin
c7e0: 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  g the values in 
c7f0: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75  the various colu
c800: 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20  mns into a byte 
c810: 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63  array.in the rec
c820: 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e  ord format, then
c830: 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79   storing that by
c840: 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20  te array as the 
c850: 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e  payload in.an en
c860: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
c870: 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f   b-tree.  ^The o
c880: 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  rder of values i
c890: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a  n the record is.
c8a0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
c8b0: 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  order of columns
c8c0: 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c   in the SQL tabl
c8d0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57  e definition..^W
c8e0: 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65  hen an SQL table
c8f0: 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e   includes an.[IN
c900: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c910: 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68  Y] column (which
c920: 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f   aliases the [ro
c930: 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a  wid]) then that.
c940: 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69  column appears i
c950: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20  n the record as 
c960: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e  a NULL value.  ^
c970: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
c980: 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65  ys use.the table
c990: 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68   b-tree key rath
c9a0: 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c  er than the NULL
c9b0: 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65   value when refe
c9c0: 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54  rencing the.[INT
c9d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c9e0: 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  ] column.</p>..<
c9f0: 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66 69  p> ^If the [affi
ca00: 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  nity] of a colum
ca10: 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68  n is REAL and th
ca20: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
ca30: 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20  ns a.value that 
ca40: 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64  can be converted
ca50: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77   to an integer w
ca60: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
ca70: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74  nformation.(if t
ca80: 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  he value contain
ca90: 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  s no fractional 
caa0: 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20  part and is not 
cab0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a  too large to be.
cac0: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
cad0: 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  n integer) then 
cae0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62  the column may b
caf0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
cb00: 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74  record.as an int
cb10: 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77  eger.  ^SQLite w
cb20: 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20  ill convert the 
cb30: 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c  value back to fl
cb40: 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65  oating.point whe
cb50: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20  n extracting it 
cb60: 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
cb70: 3c 2f 70 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73  </p>..<h2>Repres
cb80: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48  entation of WITH
cb90: 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73  OUT ROWID Tables
cba0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  </h2>..<p>^If an
cbb0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72   SQL table is cr
cbc0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
cbd0: 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20  "WITHOUT ROWID" 
cbe0: 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e  clause at the.en
cbf0: 64 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20  d of its CREATE 
cc00: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
cc10: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65   then that table
cc20: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
cc30: 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20  OWID].table and 
cc40: 75 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  uses a different
cc50: 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65   on-disk represe
cc60: 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54  ntation.  ^A WIT
cc70: 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65  HOUT ROWID.table
cc80: 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62   uses an index b
cc90: 2d 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61  -tree rather tha
cca0: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
ccb0: 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54   for storage..^T
ccc0: 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  he key for each 
ccd0: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54  entry in the WIT
cce0: 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65  HOUT ROWID b-tre
ccf0: 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f  e is a record co
cd00: 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f  mposed.of the co
cd10: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49  lumns of the PRI
cd20: 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65  MARY KEY followe
cd30: 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  d by all remaini
cd40: 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  ng columns of.th
cd50: 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70  e table.  ^The p
cd60: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
cd70: 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ns appear in the
cd80: 20 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79   order they they
cd90: 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69   were.declared i
cda0: 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  n the PRIMARY KE
cdb0: 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  Y clause and the
cdc0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
cdd0: 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65  ns appear in.the
cde0: 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75   order they occu
cdf0: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
ce00: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
ce10: 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65  ..<p>^Hence, the
ce20: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
ce30: 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  g for a WITHOUT 
ce40: 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74  ROWID table is t
ce50: 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63  he same.as the c
ce60: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
ce70: 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  for an ordinary 
ce80: 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63  rowid table, exc
ce90: 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64  ept that the.ord
cea0: 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  er of the column
ceb0: 73 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20  s is rearranged 
cec0: 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20  so that PRIMARY 
ced0: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  KEY columns come
cee0: 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20  .first, and the 
cef0: 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20  content is used 
cf00: 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e  as the key in an
cf10: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61   index b-tree ra
cf20: 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65  ther.than as the
cf30: 20 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65   data in a table
cf40: 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70   b-tree..^The sp
cf50: 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72  ecial encoding r
cf60: 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73  ules for columns
cf70: 20 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e   with REAL affin
cf80: 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54  ity.apply to WIT
cf90: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
cfa0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
cfb0: 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64  ey do with rowid
cfc0: 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65   tables...<h2>Re
cfd0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
cfe0: 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e  SQL Indices</h2>
cff0: 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69  ..<p>^Each SQL i
d000: 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20 65 78  ndex, whether ex
d010: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
d020: 64 20 76 69 61 20 61 20 5b 43 52 45 41 54 45 20  d via a [CREATE 
d030: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
d040: 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61  .or implied by a
d050: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
d060: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
d070: 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  t, corresponds t
d080: 6f 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72  o an .index b-tr
d090: 65 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ee in the databa
d0a0: 73 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65  se file..^Each e
d0b0: 6e 74 72 79 20 69 6e 20 74 68 65 20 69 6e 64 65  ntry in the inde
d0c0: 78 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  x b-tree corresp
d0d0: 6f 6e 64 73 20 74 6f 20 61 20 73 69 6e 67 6c 65  onds to a single
d0e0: 20 72 6f 77 20 69 6e 20 74 68 65 20 0a 61 73 73   row in the .ass
d0f0: 6f 63 69 61 74 65 64 20 53 51 4c 20 74 61 62 6c  ociated SQL tabl
d100: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61  e..^The key to a
d110: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
d120: 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f  s.a record compo
d130: 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  sed of the colum
d140: 6e 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e  ns that are bein
d150: 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77  g indexed follow
d160: 65 64 20 62 79 20 74 68 65 0a 6b 65 79 20 6f 66  ed by the.key of
d170: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
d180: 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 46  ng table row.  F
d190: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
d1a0: 65 73 2c 20 74 68 65 20 72 6f 77 20 6b 65 79 20  es, the row key 
d1b0: 69 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20  is.the [rowid], 
d1c0: 61 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  and for [WITHOUT
d1d0: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 74   ROWID] tables t
d1e0: 68 65 20 72 6f 77 20 6b 65 79 20 69 73 20 74 68  he row key is th
d1f0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42  e PRIMARY KEY..B
d200: 65 63 61 75 73 65 20 65 76 65 72 79 20 72 6f 77  ecause every row
d210: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61   in the table ha
d220: 73 20 61 20 75 6e 69 71 75 65 20 72 6f 77 20 6b  s a unique row k
d230: 65 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20  ey,.all keys in 
d240: 61 6e 20 69 6e 64 65 78 20 61 72 65 20 75 6e 69  an index are uni
d250: 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  que.</p>..<p>^In
d260: 20 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c   a normal index,
d270: 20 74 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d   there is a one-
d280: 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62  to-one mapping b
d290: 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61  etween rows in a
d2a0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e 74 72   .table and entr
d2b0: 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65  ies in each inde
d2c0: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
d2d0: 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48  h that table..^H
d2e0: 6f 77 65 76 65 72 2c 20 69 6e 20 61 20 5b 70 61  owever, in a [pa
d2f0: 72 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68  rtial index], th
d300: 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6f  e index b-tree o
d310: 6e 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74  nly contains ent
d320: 72 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69  ries.correspondi
d330: 6e 67 20 74 6f 20 74 61 62 6c 65 20 72 6f 77 73  ng to table rows
d340: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57   for which the W
d350: 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
d360: 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52  ession on the.CR
d370: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
d380: 6d 65 6e 74 20 69 73 20 74 72 75 65 2e 0a 5e 43  ment is true..^C
d390: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77  orresponding row
d3a0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61  s in the index a
d3b0: 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  nd table b-trees
d3c0: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
d3d0: 72 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61 72 79  rowid.or primary
d3e0: 20 6b 65 79 20 76 61 6c 75 65 73 20 61 6e 64 20   key values and 
d3f0: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
d400: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69   value for all i
d410: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c  ndexed columns.<
d420: 2f 70 3e 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73  /p>..<h3>Suppres
d430: 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e  sion of redundan
d440: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54  t columns in WIT
d450: 48 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e  HOUT ROWID secon
d460: 64 61 72 79 20 69 6e 64 65 78 65 73 0a 3c 2f 68  dary indexes.</h
d470: 33 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69  3>..<p> ^In an i
d480: 6e 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55  ndex on a WITHOU
d490: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69  T ROWID table, i
d4a0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  f one or more of
d4b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   the columns.of 
d4c0: 74 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52  the table PRIMAR
d4d0: 59 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63  Y KEY are also c
d4e0: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e  olumns of the in
d4f0: 64 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e  dex, then the.in
d500: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
d510: 6e 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20  not repeated in 
d520: 74 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75  the table-key su
d530: 66 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20  ffix on the end 
d540: 6f 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63  of.the index rec
d550: 6f 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78  ord.  ^(As an ex
d560: 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20  ample, consider 
d570: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
d580: 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  L:..<blockquote>
d590: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
d5a0: 4c 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c  LE ex25(a,b,c,d,
d5b0: 65 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c  e,PRIMARY KEY(d,
d5c0: 63 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f  c,a)) WITHOUT ro
d5d0: 77 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  wid;.CREATE INDE
d5e0: 58 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35  X ex25ce ON ex25
d5f0: 28 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e  (c,e);.CREATE IN
d600: 44 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20  DEX ex25acde ON 
d610: 65 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c  ex25(a,c,d,e);.<
d620: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
d630: 65 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20  e>..<p>Each row 
d640: 69 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e  in the ex25ce in
d650: 64 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a  dex is a record.
d660: 77 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d  with these colum
d670: 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20  ns: c, e, d, a. 
d680: 20 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   The first two c
d690: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63  olumns are.the c
d6a0: 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64  olumns being ind
d6b0: 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20  exed, c and e.  
d6c0: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  The remaining co
d6d0: 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72  lumns are the pr
d6e0: 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65  imary.key of the
d6f0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
d700: 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61  able row.  Norma
d710: 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79  lly, the primary
d720: 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f   key would be.co
d730: 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20  lumns d, c, and 
d740: 61 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63  a, but because c
d750: 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20  olumn c already 
d760: 61 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20  appears earlier 
d770: 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74  in the.index, it
d780: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d790: 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e   the key suffix.
d7a0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  )^</p>..<p>^(In 
d7b0: 74 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65  the extreme case
d7c0: 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d   where the colum
d7d0: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
d7e0: 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d   cover all colum
d7f0: 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns.of the PRIMAR
d800: 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78  Y KEY, the index
d810: 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66   will consist of
d820: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d830: 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e  s being.indexed.
d840: 20 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65    The ex25acde e
d850: 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d  xample above dem
d860: 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29  onstrates this.)
d870: 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69  ^  ^Each entry i
d880: 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69  n.the ex25acde i
d890: 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66  ndex consists of
d8a0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d8b0: 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65  s a, c, d, and e
d8c0: 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e  , in that.order.
d8d0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73  </p>..<p> ^The s
d8e0: 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65  uppression of re
d8f0: 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20  dundant columns 
d900: 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  in the key suffi
d910: 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e  x of an index.en
d920: 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20  try only occurs 
d930: 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  in WITHOUT ROWID
d940: 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e   tables.  ^In an
d950: 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
d960: 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78  table,.the index
d970: 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e   entry always en
d980: 64 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69  ds with the rowi
d990: 64 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49  d even if the [I
d9a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d9b0: 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e  EY].column is on
d9c0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
d9d0: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c   being indexed.<
d9e0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
d9f0: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
da00: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
da10: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
da20: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
da30: 3c 68 32 3e 53 74 6f 72 61 67 65 20 4f 66 20 54  <h2>Storage Of T
da40: 68 65 20 53 51 4c 20 44 61 74 61 62 61 73 65 20  he SQL Database 
da50: 53 63 68 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e  Schema</h2>..<p>
da60: 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74  ^Page 1 of a dat
da70: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68  abase file is th
da80: 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61  e root page of a
da90: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68   table b-tree th
daa0: 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69  at.holds a speci
dab0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
dac0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28  sqlite_master" (
dad0: 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  or "sqlite_temp_
dae0: 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63  master" in.the c
daf0: 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61  ase of a TEMP da
db00: 74 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74  tabase) which st
db10: 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74  ores the complet
db20: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
db30: 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75 63 74  a.  ^(The struct
db40: 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ure of the sqlit
db50: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
db60: 73 20 61 73 0a 69 66 20 69 74 20 68 61 64 20 62  s as.if it had b
db70: 65 65 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e  een created usin
db80: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
db90: 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  SQL:</p>..<block
dba0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
dbb0: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
dbc0: 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65 20 74  master(.  type t
dbd0: 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74  ext,.  name text
dbe0: 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78  ,.  tbl_name tex
dbf0: 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e  t,.  rootpage in
dc00: 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78  teger,.  sql tex
dc10: 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  t.);.</pre></blo
dc20: 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
dc30: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
dc40: 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  r table contains
dc50: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
dc60: 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  h table, index, 
dc70: 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65  view,.and trigge
dc80: 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20  r (collectively 
dc90: 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68  "objects") in th
dca0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
dcb0: 61 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 0a  a, except there.
dcc0: 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20  is no entry for 
dcd0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
dce0: 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20  r table itself. 
dcf0: 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73   ^The sqlite_mas
dd00: 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  ter table.contai
dd10: 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b  ns entries for [
dd20: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
dd30: 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69  objects] in addi
dd40: 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74  tion to applicat
dd50: 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d  ion-.and program
dd60: 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  mer-defined obje
dd70: 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20  cts....<p>^(The 
dd80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79  sqlite_master.ty
dd90: 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62  pe column will b
dda0: 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c  e one.of the fol
ddb0: 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72 69  lowing text stri
ddc0: 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27  ngs:  'table', '
ddd0: 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20  index', 'view', 
dde0: 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61 63 63  or 'trigger'.acc
ddf0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79  ording to the ty
de00: 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66  pe of object def
de10: 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c  ined.  The 'tabl
de20: 65 27 20 73 74 72 69 6e 67 20 69 73 20 75 73 65  e' string is use
de30: 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e  d.for both ordin
de40: 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c  ary and [virtual
de50: 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a   tables].)^</p>.
de60: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
de70: 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c  _master.name col
de80: 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68  umn will hold th
de90: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62  e name of the ob
dea0: 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55  ject.)^.^([UNIQU
deb0: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
dec0: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
ded0: 20 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65   on tables cause
dee0: 20 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74   SQLite to creat
def0: 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  e.[internal inde
df00: 78 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20  xes] with names 
df10: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
df20: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
df30: 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42  BLE_N".where TAB
df40: 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64 20 62  LE is replaced b
df50: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
df60: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
df70: 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72  tains the.constr
df80: 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e  aint and N is an
df90: 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69   integer beginni
dfa0: 6e 67 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e  ng with 1 and in
dfb0: 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a  creasing by one.
dfc0: 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72  with each constr
dfd0: 61 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65  aint seen in the
dfe0: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
dff0: 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54  n.)^.^(In a [WIT
e000: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
e010: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  e, there is no s
e020: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
e030: 72 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41  ry for the.PRIMA
e040: 52 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20  RY KEY, but the 
e050: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
e060: 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20  x_TABLE_N" name 
e070: 69 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72  is set aside.for
e080: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
e090: 20 61 73 20 69 66 20 74 68 65 20 73 71 6c 69 74   as if the sqlit
e0a0: 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64  e_master entry d
e0b0: 69 64 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a  id exist.  This.
e0c0: 77 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20  will affect the 
e0d0: 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62  numbering of sub
e0e0: 73 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63  sequent UNIQUE c
e0f0: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54  onstraints.)^.^T
e100: 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  he "sqlite_autoi
e110: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61  ndex_TABLE_N" na
e120: 6d 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f  me is never allo
e130: 63 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e  cated for an.[IN
e140: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e150: 59 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f  Y], either in ro
e160: 77 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49  wid tables or WI
e170: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
e180: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  es..</p>..<p>The
e190: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74   sqlite_master.t
e1a0: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68  bl_name column h
e1b0: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
e1c0: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
e1d0: 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74  .that the object
e1e0: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
e1f0: 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62  ith.  ^For a tab
e200: 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a  le or view, the.
e210: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
e220: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
e230: 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e   name column.  ^
e240: 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68  For an index, th
e250: 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68  e tbl_name.is th
e260: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
e270: 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64 65  ble that is inde
e280: 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69  xed.  ^For a tri
e290: 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61  gger, the tbl_na
e2a0: 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  me.column stores
e2b0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
e2c0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
e2d0: 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74  hat causes the t
e2e0: 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e  rigger .to fire.
e2f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  </p>..<p>^(The s
e300: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f  qlite_master.roo
e310: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f  tpage column sto
e320: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
e330: 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a  ber of the root.
e340: 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20  b-tree page for 
e350: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78  tables and index
e360: 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73  es.)^  ^For rows
e370: 20 74 68 61 74 20 64 65 66 69 6e 65 20 76 69 65   that define vie
e380: 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e  ws, triggers,.an
e390: 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  d virtual tables
e3a0: 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63  , the rootpage c
e3b0: 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55  olumn is 0 or NU
e3c0: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  LL.</p>..<p>^(Th
e3d0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
e3e0: 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  sql column store
e3f0: 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20  s SQL text that 
e400: 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62  describes the.ob
e410: 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20  ject.  This SQL 
e420: 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54  text is a [CREAT
e430: 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54  E TABLE], [CREAT
e440: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d  E VIRTUAL TABLE]
e450: 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  ,.[CREATE INDEX]
e460: 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c  ,.[CREATE VIEW],
e470: 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47   or [CREATE TRIG
e480: 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74  GER] statement t
e490: 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64  hat if evaluated
e4a0: 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74   against.the dat
e4b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20  abase file when 
e4c0: 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  it is the main d
e4d0: 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61  atabase of a [da
e4e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e4f0: 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74  n].would recreat
e500: 65 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20  e the object.)^ 
e510: 20 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75   The text is usu
e520: 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74  ally a copy of t
e530: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74  he original.stat
e540: 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72  ement used to cr
e550: 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20  eate the object 
e560: 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69  but with normali
e570: 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20  zations applied 
e580: 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74  so.that the text
e590: 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65   conforms to the
e5a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73   following rules
e5b0: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65  :..<ul>.<li>^The
e5c0: 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20   CREATE, TABLE, 
e5d0: 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61  VIEW, TRIGGER, a
e5e0: 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64  nd INDEX keyword
e5f0: 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
e600: 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d  ng.of the statem
e610: 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ent are converte
e620: 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63  d to all upper c
e630: 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69  ase letters..<li
e640: 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45  >^The TEMP or TE
e650: 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20  MPORARY keyword 
e660: 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74  is removed if it
e670: 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
e680: 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54  e .initial CREAT
e690: 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e  E keyword..<li>^
e6a0: 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d  Any database nam
e6b0: 65 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74  e qualifier that
e6c0: 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f   occurs prior to
e6d0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
e6e0: 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72  .object being cr
e6f0: 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64  eated is removed
e700: 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73  ..<li>^Leading s
e710: 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65  paces are remove
e720: 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63  d..<li>^All spac
e730: 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  es following the
e740: 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f   first two keywo
e750: 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  rds are converte
e760: 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a  d into a single.
e770: 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  space..</ul>..<p
e780: 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74  >^(The text in t
e790: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
e7a0: 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61  .sql column is a
e7b0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69   copy of the ori
e7c0: 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61  ginal.CREATE sta
e7d0: 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74  tement text that
e7e0: 20 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a   created the obj
e7f0: 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d  ect, except norm
e800: 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69  alized as.descri
e810: 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73  bed above and as
e820: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62   modified by sub
e830: 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54  sequent [ALTER T
e840: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  ABLE] statements
e850: 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
e860: 5f 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e  _master.sql is N
e870: 55 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74  ULL for the [int
e880: 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20 74  ernal indexes] t
e890: 68 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69  hat are.automati
e8a0: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79  cally created by
e8b0: 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52   [UNIQUE] or [PR
e8c0: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74  IMARY KEY] const
e8d0: 72 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a  raints.)^</p>...
e8e0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e8f0: 20 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65   intschema {inte
e900: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e910: 63 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c  cts} \.{internal
e920: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20   schema object} 
e930: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d  {internal index}
e940: 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78   {internal index
e950: 65 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  es} \.{internal 
e960: 74 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c  table} {internal
e970: 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c   tables}</tcl>.<
e980: 68 33 3e 49 6e 74 65 72 6e 61 6c 20 53 63 68 65  h3>Internal Sche
e990: 6d 61 20 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a  ma Objects</h3>.
e9a0: 0a 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e  .<p>^In addition
e9b0: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20   to the tables, 
e9c0: 69 6e 64 65 78 65 73 2c 20 76 69 65 77 73 2c 20  indexes, views, 
e9d0: 61 6e 64 20 74 72 69 67 67 65 72 73 20 63 72 65  and triggers cre
e9e0: 61 74 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c  ated by.the appl
e9f0: 69 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74  ication and/or t
ea00: 68 65 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69  he developer usi
ea10: 6e 67 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  ng CREATE statem
ea20: 65 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71  ents SQL, the.sq
ea30: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
ea40: 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65  e may contain ze
ea50: 72 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69  ro or more entri
ea60: 65 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72  es for .<i>inter
ea70: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
ea80: 74 73 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20  ts</i> that are 
ea90: 63 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74  created by SQLit
eaa0: 65 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69  e for its .own i
eab0: 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54  nternal use.  ^T
eac0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65  he names of inte
ead0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
eae0: 63 74 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e  cts.always begin
eaf0: 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20   with "sqlite_" 
eb00: 61 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69  and any table, i
eb10: 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74  ndex, view, or t
eb20: 72 69 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d  rigger.whose nam
eb30: 65 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 73  e begins with "s
eb40: 71 6c 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e  qlite_" is an in
eb50: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
eb60: 6a 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72  ject..^SQLite pr
eb70: 6f 68 69 62 69 74 73 20 61 70 70 6c 69 63 61 74  ohibits applicat
eb80: 69 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69  ions from creati
eb90: 6e 67 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65  ng objects whose
eba0: 20 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74   names begin.wit
ebb0: 68 20 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a  h "sqlite_".  ..
ebc0: 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65  <p>Internal sche
ebd0: 6d 61 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20  ma objects used 
ebe0: 62 79 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e  by SQLite may in
ebf0: 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77  clude the follow
ec00: 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ing:..<ul>.<li><
ec10: 70 3e 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e  p>Indices with n
ec20: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
ec30: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
ec40: 65 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74  ex_TABLE_N" that
ec50: 0a 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64  .       are used
ec60: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55   to implement [U
ec70: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
ec80: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
ec90: 69 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f  ints on.       o
eca0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a  rdinary tables..
ecb0: 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20  .<li><p>A table 
ecc0: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73  with the name "s
ecd0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20  qlite_sequence" 
ece0: 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
ecf0: 6b 65 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20  keep track.     
ed00: 20 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d    of the maximum
ed10: 20 68 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54   historical [INT
ed20: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
ed30: 5d 20 66 6f 72 20 61 20 74 61 62 6c 65 0a 20 20  ] for a table.  
ed40: 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f       using [AUTO
ed50: 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69  INCREMENT]...<li
ed60: 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20  ><p>Tables with 
ed70: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72  names of the for
ed80: 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22  m "sqlite_statN"
ed90: 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69   where N is an i
eda0: 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53  nteger..       S
edb0: 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65  uch tables store
edc0: 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73   database statis
edd0: 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79  tics gathered by
ede0: 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20   the [ANALYZE]. 
edf0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e        command an
ee00: 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  d used by the qu
ee10: 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68  ery planner to h
ee20: 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68  elp determine th
ee30: 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c  e best.       al
ee40: 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66  gorithm to use f
ee50: 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c  or each query..<
ee60: 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74  /ul>..<p>New int
ee70: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
ee80: 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61  ects names, alwa
ee90: 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ys beginning wit
eea0: 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79  h "sqlite_",.may
eeb0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
eec0: 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72   SQLite file for
eed0: 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65  mat in future re
eee0: 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64  leases...<tcl>hd
eef0: 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62  _fragment seqtab
ef00: 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63   {sqlite_sequenc
ef10: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  e}</tcl>.<h3>The
ef20: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ef30: 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e   table</h3>..<p>
ef40: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
ef50: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
ef60: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
ef70: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
ef80: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
ef90: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
efa0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
efb0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
efc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
efd0: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
efe0: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
eff0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
f000: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
f010: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
f020: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
f030: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f040: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
f050: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
f060: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
f070: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
f080: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
f090: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
f0a0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f0b0: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
f0c0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
f0d0: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
f0e0: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
f0f0: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
f100: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
f110: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
f120: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
f130: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
f140: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
f150: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
f160: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
f170: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
f180: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
f190: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
f1a0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
f1b0: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
f1c0: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
f1d0: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
f1e0: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
f1f0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
f200: 72 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  r inserted into 
f210: 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 0a 69  that table is .i
f220: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
f230: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 2e  uence.seq field.
f240: 29 5e 20 20 0a 5e 4e 65 77 20 61 75 74 6f 6d 61  )^  .^New automa
f250: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
f260: 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  d integer primar
f270: 79 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49  y keys for AUTOI
f280: 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20  NCREMENT.tables 
f290: 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74  are guaranteed t
f2a0: 6f 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e  o be larger than
f2b0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f2c0: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66  ence.seq field f
f2d0: 6f 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e  or.that table..^
f2e0: 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73  (If the sqlite_s
f2f0: 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c  equence.seq fiel
f300: 64 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52  d of an AUTOINCR
f310: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61  EMENT table is a
f320: 6c 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61  lready at.the la
f330: 72 67 65 73 74 20 69 6e 74 65 67 65 72 20 76 61  rgest integer va
f340: 6c 75 65 20 28 39 32 32 33 33 37 32 30 33 36 38  lue (92233720368
f350: 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 61  54775807) then a
f360: 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e  ttempts to add n
f370: 65 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20  ew.rows to that 
f380: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75  table with an au
f390: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65  tomatically gene
f3a0: 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70 72  rated integer pr
f3b0: 69 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a  imary will fail.
f3c0: 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f  with an [SQLITE_
f3d0: 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e  FULL] error.)^.^
f3e0: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
f3f0: 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73  nce.seq field is
f400: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
f410: 70 64 61 74 65 64 20 69 66 20 72 65 71 75 69 72  pdated if requir
f420: 65 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72  ed when.new entr
f430: 69 65 73 20 61 72 65 20 69 6e 73 65 72 74 65 64  ies are inserted
f440: 20 74 6f 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   to an AUTOINCRE
f450: 4d 45 4e 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54  MENT table.  .^T
f460: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f470: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
f480: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f490: 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  e is automatical
f4a0: 6c 79 20 64 65 6c 65 74 65 64 0a 77 68 65 6e 20  ly deleted.when 
f4b0: 74 68 65 20 74 61 62 6c 65 20 69 73 20 64 72 6f  the table is dro
f4c0: 70 70 65 64 2e 0a 5e 49 66 20 74 68 65 20 73 71  pped..^If the sq
f4d0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
f4e0: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
f4f0: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 64 6f 65  REMENT table doe
f500: 73 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  s not exist when
f510: 0a 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45  .the AUTOINCREME
f520: 4e 54 20 74 61 62 6c 65 20 69 73 20 75 70 64 61  NT table is upda
f530: 74 65 64 2c 20 74 68 65 6e 20 61 20 6e 65 77 20  ted, then a new 
f540: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f550: 72 6f 77 20 69 73 20 63 72 65 61 74 65 64 2e 0a  row is created..
f560: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
f570: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 76 61 6c  sequence.seq val
f580: 75 65 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e  ue for an AUTOIN
f590: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
f5a0: 20 6d 61 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74   manually .set t
f5b0: 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65  o something othe
f5c0: 72 20 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65  r than an intege
f5d0: 72 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 61  r and there is a
f5e0: 20 73 75 62 73 65 71 75 65 6e 74 20 61 74 74 65   subsequent atte
f5f0: 6d 70 74 20 74 6f 0a 69 6e 73 65 72 74 20 74 68  mpt to.insert th
f600: 65 20 6f 72 20 75 70 64 61 74 65 20 74 68 65 20  e or update the 
f610: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f620: 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ble, then the be
f630: 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
f640: 6e 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c  ned.)^..<p>^Appl
f650: 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 69 73 20  ication code is 
f660: 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66  allowed to modif
f670: 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  y the sqlite_seq
f680: 75 65 6e 63 65 20 74 61 62 6c 65 2c 20 74 6f 20  uence table, to 
f690: 61 64 64 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f  add.new rows, to
f6a0: 20 64 65 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72   delete rows, or
f6b0: 20 74 6f 20 6d 6f 64 69 66 79 20 65 78 69 73 74   to modify exist
f6c0: 69 6e 67 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65  ing rows.  ^Howe
f6d0: 76 65 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e  ver, application
f6e0: 0a 63 6f 64 65 20 63 61 6e 6e 6f 74 20 63 72 65  .code cannot cre
f6f0: 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ate the sqlite_s
f700: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 66  equence table if
f710: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72   it does not alr
f720: 65 61 64 79 20 65 78 69 73 74 2e 0a 5e 41 70 70  eady exist..^App
f730: 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61  lication code ca
f740: 6e 20 64 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74  n delete all ent
f750: 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 73 71  ries from the sq
f760: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
f770: 62 6c 65 2c 0a 62 75 74 20 61 70 70 6c 69 63 61  ble,.but applica
f780: 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74  tion code cannot
f790: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f7a0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2e  _sequence table.
f7b0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
f7c0: 6e 74 20 73 74 61 74 31 74 61 62 20 7b 73 71 6c  nt stat1tab {sql
f7d0: 69 74 65 5f 73 74 61 74 31 7d 20 53 51 4c 49 54  ite_stat1} SQLIT
f7e0: 45 5f 53 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c  E_STAT1 </tcl>.<
f7f0: 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  h3>The sqlite_st
f800: 61 74 31 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a  at1 table</h3>..
f810: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73  <p>^The sqlite_s
f820: 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74 65 72  tat1 is an inter
f830: 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61 74 65  nal table create
f840: 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a  d by the [ANALYZ
f850: 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20 75  E] command.and u
f860: 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75 70 70  sed to hold supp
f870: 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d 61  lemental informa
f880: 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c 65  tion about table
f890: 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68  s and indexes th
f8a0: 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
f8b0: 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
f8c0: 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62 65 74  help it find bet
f8d0: 74 65 72 20 77 61 79 73 20 6f 66 20 70 65 72 66  ter ways of perf
f8e0: 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73 2e 0a  orming queries..
f8f0: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61  ^Applications ca
f900: 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65 74 65  n update, delete
f910: 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69 6e   from, insert in
f920: 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65 20 73  to or drop the s
f930: 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61 62 6c  qlite_stat1.tabl
f940: 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74 20 63  e, but may not c
f950: 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74  reate or alter t
f960: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
f970: 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73 63 68  table..^(The sch
f980: 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
f990: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69 73  e_stat1 table is
f9a0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
f9b0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
f9c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
f9d0: 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64  ite_stat1(tbl,id
f9e0: 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c  x,stat);.</pre><
f9f0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
fa00: 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73 20 6e  <p> ^(There is n
fa10: 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20  ormally one row 
fa20: 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74 68 20  per index, with 
fa30: 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e 74 69  the index identi
fa40: 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61 6d 65  fied by the.name
fa50: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
fa60: 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e  tat1.idx column.
fa70: 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65  )^  ^(The sqlite
fa80: 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c 75 6d  _stat1.tbl colum
fa90: 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20 6f 66  n is.the name of
faa0: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
fab0: 69 63 68 20 74 68 65 20 69 6e 64 65 78 20 62 65  ich the index be
fac0: 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e 20 65  longs.)^  ^(In e
fad0: 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20 0a 74  ach such row, .t
fae0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 2e 73  he sqlite_stat.s
faf0: 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  tat column will 
fb00: 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  be.a string cons
fb10: 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69 73 74  isting of a list
fb20: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66 6f 6c   of integers fol
fb30: 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
fb40: 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e 74 73   more .arguments
fb50: 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73 74 20  .)^  ^The first 
fb60: 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a  integer in this.
fb70: 6c 69 73 74 20 69 73 20 74 68 65 20 61 70 70 72  list is the appr
fb80: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
fb90: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
fba0: 64 65 78 2e 20 20 28 54 68 65 20 6e 75 6d 62 65  dex.  (The numbe
fbb0: 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68 65  r of.rows in the
fbc0: 20 69 6e 64 65 78 20 69 73 20 74 68 65 20 73 61   index is the sa
fbd0: 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
fbe0: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
fbf0: 74 61 62 6c 65 2c 0a 65 78 63 65 70 74 20 66 6f  table,.except fo
fc00: 72 20 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78  r [partial index
fc10: 65 73 5d 2e 29 0a 5e 54 68 65 20 73 65 63 6f 6e  es].).^The secon
fc20: 64 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65  d integer is the
fc30: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
fc40: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
fc50: 68 65 20 69 6e 64 65 78 0a 74 68 61 74 20 68 61  he index.that ha
fc60: 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
fc70: 65 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 63  e in the first c
fc80: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64  olumn of the ind
fc90: 65 78 2e 20 20 5e 54 68 65 20 74 68 69 72 64 20  ex.  ^The third 
fca0: 0a 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20  .integer is the 
fcb0: 6e 75 6d 62 65 72 20 6e 75 6d 62 65 72 20 6f 66  number number of
fcc0: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
fcd0: 65 78 20 74 68 61 74 20 68 61 76 65 20 0a 74 68  ex that have .th
fce0: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
fcf0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   the first two c
fd00: 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20 4e 2d  olumns.  ^The N-
fd10: 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f 72 20  th integer (for 
fd20: 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 65 73 74  N>1) .is the est
fd30: 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 6e  imated average n
fd40: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
fd50: 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68 69 63   .the index whic
fd60: 68 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  h have the same 
fd70: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
fd80: 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73 2e  rst N-1 columns.
fd90: 20 20 5e 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d    ^For.a K-colum
fda0: 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 77  n index, there w
fdb0: 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65 67  ill be K+1 integ
fdc0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
fdd0: 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 0a 74 68 65  column.  ^If.the
fde0: 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65   index is unique
fdf0: 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20  , then the last 
fe00: 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20  integer will be 
fe10: 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74  1...<p>^The list
fe20: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
fe30: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
fe40: 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
fe50: 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 61 72  e followed.by ar
fe60: 67 75 6d 65 6e 74 73 2c 20 65 61 63 68 20 6f 66  guments, each of
fe70: 20 77 68 69 63 68 20 69 73 20 61 20 73 65 71 75   which is a sequ
fe80: 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d 73 70 61 63  ence of non-spac
fe90: 65 20 63 68 61 72 61 63 74 65 72 73 2e 0a 5e 41  e characters..^A
fea0: 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ll arguments are
feb0: 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73   preceded by a s
fec0: 69 6e 67 6c 65 20 73 70 61 63 65 2e 0a 5e 55 6e  ingle space..^Un
fed0: 72 65 63 6f 67 6e 69 7a 65 64 20 61 72 67 75 6d  recognized argum
fee0: 65 6e 74 73 20 61 72 65 20 73 69 6c 65 6e 74 6c  ents are silentl
fef0: 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e  y ignored...<p>^
ff00: 49 66 20 74 68 65 20 22 75 6e 6f 72 64 65 72 65  If the "unordere
ff10: 64 22 20 61 72 67 75 6d 65 6e 74 20 69 73 20 70  d" argument is p
ff20: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
ff30: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 61   query planner a
ff40: 73 73 75 6d 65 73 0a 74 68 61 74 20 74 68 65 20  ssumes.that the 
ff50: 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64 65 72  index is unorder
ff60: 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  ed and will not 
ff70: 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 66 6f  use the index fo
ff80: 72 20 61 20 72 61 6e 67 65 20 71 75 65 72 79 0a  r a range query.
ff90: 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67 2e 0a  or for sorting..
ffa0: 0a 3c 70 3e 5e 54 68 65 20 22 73 7a 3d 4e 4e 4e  .<p>^The "sz=NNN
ffb0: 22 20 61 72 67 75 6d 65 6e 74 20 28 77 68 65 72  " argument (wher
ffc0: 65 20 4e 4e 4e 20 72 65 70 72 65 73 65 6e 74 73  e NNN represents
ffd0: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 31   a sequence of 1
ffe0: 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 29   or more digits)
fff0: 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20  .means that the 
10000 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
10010 20 6f 76 65 72 20 61 6c 6c 20 72 65 63 6f 72 64   over all record
10020 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
10030 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e 20 62  r.index is NNN b
10040 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20 20 5e  ytes per row.  ^
10050 54 68 65 20 53 51 4c 69 74 65 20 71 75 65 72 79  The SQLite query
10060 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74 20 75   planner might u
10070 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74 65 64  se the.estimated
10080 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f 72 6d   row size inform
10090 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ation provided b
100a0 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 74  y the "sz=NNN" t
100b0 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69 74 20  oken.to help it 
100c0 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72 20 74  choose smaller t
100d0 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
100e0 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6c  s that require l
100f0 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a 0a 3c  ess disk I/O...<
10100 70 3e 5e 28 54 68 65 20 70 72 65 73 65 6e 63 65  p>^(The presence
10110 20 6f 66 20 74 68 65 20 22 6e 6f 73 6b 69 70 73   of the "noskips
10120 63 61 6e 22 20 74 6f 6b 65 6e 20 6f 6e 20 74 68  can" token on th
10130 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73  e sqlite_stat1.s
10140 74 61 74 20 66 69 65 6c 64 0a 6f 66 20 61 6e 20  tat field.of an 
10150 69 6e 64 65 78 20 70 72 65 76 65 6e 74 73 20 74  index prevents t
10160 68 61 74 20 69 6e 64 65 78 20 66 72 6f 6d 20 62  hat index from b
10170 65 69 6e 67 20 75 73 65 64 20 77 69 74 68 20 74  eing used with t
10180 68 65 0a 5b 73 6b 69 70 2d 73 63 61 6e 20 6f 70  he.[skip-scan op
10190 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e 29 5e 0a 0a  timization].)^..
101a0 3c 70 3e 4e 65 77 20 74 65 78 74 20 74 6f 6b 65  <p>New text toke
101b0 6e 73 20 6d 61 79 20 62 65 20 61 64 64 65 64 20  ns may be added 
101c0 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
101d0 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 69 6e  e stat column in
101e0 20 66 75 74 75 72 65 0a 65 6e 68 61 6e 63 65 6d   future.enhancem
101f0 65 6e 74 73 20 74 6f 20 53 51 4c 69 74 65 2e 20  ents to SQLite. 
10200 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   For compatibili
10210 74 79 2c 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64  ty, unrecognized
10220 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65 20 65   tokens at the e
10230 6e 64 0a 6f 66 20 74 68 65 20 73 74 61 74 20 63  nd.of the stat c
10240 6f 6c 75 6d 6e 20 61 72 65 20 73 69 6c 65 6e 74  olumn are silent
10250 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e  ly ignored...<p>
10260 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
10270 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat1.idx column
10280 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
10290 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
102a0 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74  stat.column cont
102b0 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
102c0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
102d0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
102e0 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e  umber of.rows in
102f0 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
10300 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f  ified by sqlite_
10310 73 74 61 74 31 2e 74 62 6c 2e 29 5e 0a 5e 28 49  stat1.tbl.)^.^(I
10320 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
10330 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73  t1.idx column is
10340 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
10350 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
10360 6c 0a 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  l.column, then t
10370 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
10380 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
10390 62 6c 65 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ble and the sqli
103a0 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a 66 69  te_stat1.stat.fi
103b0 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  eld contains inf
103c0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
103d0 68 65 20 69 6e 64 65 78 20 62 74 72 65 65 20 74  he index btree t
103e0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
103f0 68 65 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he.WITHOUT ROWID
10400 20 74 61 62 6c 65 2e 29 5e 0a 0a 3c 74 63 6c 3e   table.)^..<tcl>
10410 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
10420 32 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  2tab {sqlite_sta
10430 74 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  t2}</tcl>.<h3>Th
10440 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10450 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  able</h3>..<p>Th
10460 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69  e sqlite_stat2 i
10470 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61  s only created a
10480 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  nd is only used 
10490 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  if SQLite is com
104a0 70 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49 54  piled.with SQLIT
104b0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20 61  E_ENABLE_STAT2 a
104c0 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
104d0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
104e0 69 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31  is between.3.6.1
104f0 38 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 31  8 ([dateof:3.6.1
10500 38 5d 29 20 61 6e 64 20 33 2e 37 2e 38 20 28 5b  8]) and 3.7.8 ([
10510 64 61 74 65 6f 66 3a 33 2e 37 2e 38 5d 29 2e 0a  dateof:3.7.8])..
10520 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
10530 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65   table is neithe
10540 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74  r read nor writt
10550 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f  en by any.versio
10560 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f  n of SQLite befo
10570 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66  re 3.6.18 nor af
10580 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73  ter 3.7.8..The s
10590 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
105a0 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
105b0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
105c0 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
105d0 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
105e0 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
105f0 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20  ..The schema of 
10600 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
10610 20 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c   table is as fol
10620 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lows:..<blockquo
10630 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
10640 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61  TABLE sqlite_sta
10650 74 32 28 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c  t2(tbl,idx,sampl
10660 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70  eno,sample);.</p
10670 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
10680 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
10690 73 74 61 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat2.idx column
106a0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f   and the sqlite_
106b0 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e  stat2.tbl column
106c0 20 69 6e 20 65 61 63 68 20 0a 72 6f 77 20 6f 66   in each .row of
106d0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
106e0 32 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 79  2 table identify
106f0 20 61 6e 20 69 6e 64 65 78 20 64 65 73 63 72 69   an index descri
10700 62 65 64 20 62 79 20 74 68 61 74 20 72 6f 77 2e  bed by that row.
10710 0a 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c  .There are usual
10720 6c 79 20 31 30 20 72 6f 77 73 20 69 6e 20 74 68  ly 10 rows in th
10730 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 0a 74  e sqlite_stat2.t
10740 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e  able for each in
10750 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  dex...<p>The sql
10760 69 74 65 5f 73 74 61 74 32 20 65 6e 74 72 69 65  ite_stat2 entrie
10770 73 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74  s for an index t
10780 68 61 74 20 68 61 76 65 20 73 71 6c 69 74 65 5f  hat have sqlite_
10790 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62  stat2.sampleno.b
107a0 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39 20 69  etween 0 and 9 i
107b0 6e 63 6c 75 73 69 76 65 20 61 72 65 20 73 61 6d  nclusive are sam
107c0 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
107d0 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c 75 65 20  -most key value 
107e0 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 74 61 6b  in the.index tak
107f0 65 6e 20 61 74 20 65 76 65 6e 6c 79 20 73 70 61  en at evenly spa
10800 63 65 64 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67  ced points along
10810 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20   the index..Let 
10820 43 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  C be the number 
10830 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
10840 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68 65 20 73  ndex..Then the s
10850 61 6d 70 6c 65 64 20 72 6f 77 73 20 61 72 65 20  ampled rows are 
10860 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b  given by..<block
10870 71 75 6f 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e  quote>.     rown
10880 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b  umber = (i*C*2 +
10890 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75   C)/20.</blockqu
108a0 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72  ote>..<p>The var
108b0 69 61 62 6c 65 20 69 20 69 6e 20 74 68 65 20 70  iable i in the p
108c0 72 65 76 69 6f 75 73 20 65 78 70 72 65 73 73 69  revious expressi
108d0 6f 6e 20 76 61 72 69 65 73 20 62 65 74 77 65 65  on varies betwee
108e0 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65  n 0 and 9..Conce
108f0 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64  ptually, the ind
10900 65 78 20 73 70 61 63 65 20 69 73 20 64 69 76 69  ex space is divi
10910 64 65 64 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66  ded into.10 unif
10920 6f 72 6d 20 62 75 63 6b 65 74 73 20 61 6e 64 20  orm buckets and 
10930 74 68 65 20 73 61 6d 70 6c 65 73 20 61 72 65 20  the samples are 
10940 74 68 65 20 6d 69 64 64 6c 65 20 72 6f 77 20 66  the middle row f
10950 72 6f 6d 20 65 61 63 68 20 62 75 63 6b 65 74 2e  rom each bucket.
10960 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20  ..<p>The format 
10970 66 6f 72 20 73 71 6c 69 74 65 5f 73 74 61 74 32  for sqlite_stat2
10980 20 69 73 20 72 65 63 6f 72 64 65 64 20 68 65 72   is recorded her
10990 65 20 66 6f 72 20 6c 65 67 61 63 79 20 72 65 66  e for legacy ref
109a0 65 72 65 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74  erence.  .Recent
109b0 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
109c0 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75  ite no longer su
109d0 70 70 6f 72 74 20 73 71 6c 69 74 65 5f 73 74 61  pport sqlite_sta
109e0 74 32 20 61 6e 64 20 74 68 65 0a 73 71 6c 69 74  t2 and the.sqlit
109f0 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2c 20 69  e_stat2 table, i
10a00 66 20 69 73 20 65 78 69 73 74 73 2c 20 69 73 20  f is exists, is 
10a10 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a  simply ignored..
10a20 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10a30 74 20 73 74 61 74 33 74 61 62 20 7b 73 71 6c 69  t stat3tab {sqli
10a40 74 65 5f 73 74 61 74 33 7d 20 53 51 4c 49 54 45  te_stat3} SQLITE
10a50 5f 53 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 33  _STAT3</tcl>.<h3
10a60 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10a70 33 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70  3 table</h3>..<p
10a80 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10a90 33 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  3 is only used i
10aa0 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
10ab0 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54  iled.with [SQLIT
10ac0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
10ad0 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  or [SQLITE_ENABL
10ae0 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69 66 20  E_STAT4].and if 
10af0 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69  the SQLite versi
10b00 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37  on number is 3.7
10b10 2e 39 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e  .9 ([dateof:3.7.
10b20 39 5d 29 20 6f 72 20 67 72 65 61 74 65 72 2e 0a  9]) or greater..
10b30 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10b40 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65   table is neithe
10b50 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74  r read nor writt
10b60 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f  en by any.versio
10b70 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f  n of SQLite befo
10b80 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65  re 3.7.9..If the
10b90 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
10ba0 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74  STAT4] compile-t
10bb0 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
10bc0 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c 69 74  ed and the.SQLit
10bd0 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
10be0 20 69 73 20 33 2e 38 2e 31 20 28 5b 64 61 74 65   is 3.8.1 ([date
10bf0 6f 66 3a 33 2e 38 2e 31 5d 29 20 6f 72 20 67 72  of:3.8.1]) or gr
10c00 65 61 74 65 72 2c 0a 74 68 65 6e 20 73 71 6c 69  eater,.then sqli
10c10 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 20 62  te_stat3 might b
10c20 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20 77  e read but not w
10c30 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69  ritten..The sqli
10c40 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 63  te_stat3 table c
10c50 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
10c60 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
10c70 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
10c80 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
10c90 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69  thin an index, i
10ca0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
10cb0 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65  the.query planne
10cc0 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76  r can use to dev
10cd0 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
10ce0 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
10cf0 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63  rithms..^(The sc
10d00 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
10d10 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
10d20 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
10d30 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
10d40 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
10d50 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c 2c 69  lite_stat3(tbl,i
10d60 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c  dx,nEq,nLt,nDLt,
10d70 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  sample);.</pre><
10d80 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
10d90 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75 73 75  <p>There are usu
10da0 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20 65 6e  ally multiple en
10db0 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71 6c  tries in the sql
10dc0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10dd0 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a  for each index..
10de0 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10df0 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e  t3.sample column
10e00 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75 65   holds the value
10e10 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
10e20 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69 6e  t field of an.in
10e30 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20 62  dex identified b
10e40 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 69  y sqlite_stat3.i
10e50 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73 74  dx and sqlite_st
10e60 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68 65  at3.tbl.)^.^(The
10e70 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 45   sqlite_stat3.nE
10e80 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  q column holds t
10e90 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e  he approximate.n
10ea0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
10eb0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 77 68   in the index wh
10ec0 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ose left-most co
10ed0 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d 61 74  lumn exactly mat
10ee0 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c 65 2e  ches.the sample.
10ef0 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
10f00 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64 73 20  stat3.nLt holds 
10f10 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  the approximate 
10f20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
10f30 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 77  s in the.index w
10f40 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  hose left-most c
10f50 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20 74 68  olumn is less th
10f60 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  an the sample.)^
10f70 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
10f80 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at3.nDLt column 
10f90 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10fa0 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
10fb0 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f  distinct left-mo
10fc0 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  st entries in th
10fd0 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
10fe0 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73   less than.the s
10ff0 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68  ample.)^..<p>^Th
11000 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72  ere can be an ar
11010 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f  bitrary number o
11020 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 65  f sqlite_stat3 e
11030 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78  ntries per index
11040 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20  ..The [ANALYZE] 
11050 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70  command will typ
11060 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20  ically generate 
11070 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
11080 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e  les.that contain
11090 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20   between 10 and 
110a0 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20  40 samples that 
110b0 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20  are distributed 
110c0 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73  across.the key s
110d0 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61  pace and with la
110e0 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a  rge nEq values..
110f0 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d  .<p>^(In a well-
11100 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74  formed sqlite_st
11110 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65 20 73  at3 table, the s
11120 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73  amples for any s
11130 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74  ingle.index must
11140 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 73   appear in the s
11150 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 74  ame order that t
11160 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65  hey occur in the
11170 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68   index.  .In oth
11180 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
11190 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66 74   entry with left
111a0 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 31 20  -most column S1 
111b0 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a 74 68  is earlier in.th
111c0 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74  e index b-tree t
111d0 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20 77 69  han the.entry wi
111e0 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  th left-most col
111f0 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e 20  umn S2, then in 
11200 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
11210 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65 20   table, .sample 
11220 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 20 73  S1 must have a s
11230 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61  maller rowid tha
11240 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a  n sample S2.)^..
11250 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
11260 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69 74   stat4tab {sqlit
11270 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45 5f  e_stat4} SQLITE_
11280 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  STAT4</tcl>.<h3>
11290 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
112a0 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e   table</h3>..<p>
112b0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
112c0 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64   is only created
112d0 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65   and is only use
112e0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63  d if SQLite is c
112f0 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51  ompiled.with [SQ
11300 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
11310 34 5d 20 61 6e 64 20 69 66 20 74 68 65 20 53 51  4] and if the SQ
11320 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  Lite version num
11330 62 65 72 20 69 73 0a 33 2e 38 2e 31 20 28 5b 64  ber is.3.8.1 ([d
11340 61 74 65 6f 66 3a 33 2e 38 2e 31 5d 29 20 6f 72  ateof:3.8.1]) or
11350 20 67 72 65 61 74 65 72 2e 0a 54 68 65 20 73 71   greater..The sq
11360 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
11370 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61 64   is neither read
11380 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20   nor written by 
11390 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53  any.version of S
113a0 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e 38  QLite before 3.8
113b0 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  .1..The sqlite_s
113c0 74 61 74 34 20 74 61 62 6c 65 20 63 6f 6e 74 61  tat4 table conta
113d0 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  ins additional i
113e0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74  nformation.about
113f0 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
11400 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
11410 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 74 68 65   an index or the
11420 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
11430 0a 6b 65 79 73 20 69 6e 20 74 68 65 20 70 72 69  .keys in the pri
11440 6d 61 72 79 20 6b 65 79 20 6f 66 20 61 20 5b 57  mary key of a [W
11450 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
11460 62 6c 65 2e 0a 54 68 65 20 71 75 65 72 79 20 70  ble..The query p
11470 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f 6d 65 74  lanner can somet
11480 69 6d 65 73 20 75 73 65 20 74 68 65 20 61 64 64  imes use the add
11490 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
114a0 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71 6c 69 74  ion in.the sqlit
114b0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 74 6f  e_stat4 table to
114c0 20 64 65 76 69 73 65 20 62 65 74 74 65 72 20 61   devise better a
114d0 6e 64 20 66 61 73 74 65 72 20 71 75 65 72 79 20  nd faster query 
114e0 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68  algorithms..^(Th
114f0 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
11500 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11510 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le is as follows
11520 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
11530 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
11540 45 20 73 71 6c 69 74 65 5f 73 74 61 74 34 28 74  E sqlite_stat4(t
11550 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e  bl,idx,nEq,nLt,n
11560 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70  DLt,sample);.</p
11570 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
11580 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  )^..<p>There are
11590 20 74 79 70 69 63 61 6c 6c 79 20 62 65 74 77 65   typically betwe
115a0 65 6e 20 31 30 20 74 6f 20 34 30 20 65 6e 74 72  en 10 to 40 entr
115b0 69 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ies in the sqlit
115c0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 66 6f  e_stat4 table fo
115d0 72 0a 65 61 63 68 20 69 6e 64 65 78 20 66 6f 72  r.each index for
115e0 20 77 68 69 63 68 20 73 74 61 74 69 73 74 69 63   which statistic
115f0 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2c  s are available,
11600 20 68 6f 77 65 76 65 72 20 74 68 65 73 65 20 6c   however these l
11610 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74 20 68 61  imits are.not ha
11620 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68 65 20 6d  rd bounds..The m
11630 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 63  eanings of the c
11640 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 71  olumns in the sq
11650 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
11660 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a   are as follows:
11670 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
11680 65 20 62 6f 72 64 65 72 3d 22 30 22 20 77 69 64  e border="0" wid
11690 74 68 3d 22 31 30 30 25 22 20 63 65 6c 6c 70 61  th="100%" cellpa
116a0 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c 74 72 3e  dding="10">.<tr>
116b0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
116c0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 74   align="right">t
116d0 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  bl:</td>.    <td
116e0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
116f0 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 68  at4.tbl column h
11700 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65  olds name of the
11710 20 74 61 62 6c 65 20 74 68 61 74 20 6f 77 6e 73   table that owns
11720 0a 20 20 20 20 74 68 65 20 69 6e 64 65 78 20 74  .    the index t
11730 68 61 74 20 74 68 65 20 72 6f 77 20 64 65 73 63  hat the row desc
11740 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e 3c 74 64  ribes)^..<tr><td
11750 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
11760 69 67 6e 3d 22 72 69 67 68 74 22 3e 69 64 78 3a  ign="right">idx:
11770 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
11780 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
11790 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .idx column hold
117a0 73 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e  s name of the in
117b0 64 65 78 20 74 68 61 74 20 74 68 65 0a 20 20 20  dex that the.   
117c0 20 72 6f 77 20 64 65 73 63 72 69 62 65 73 2c 20   row describes, 
117d0 6f 72 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  or in the case o
117e0 66 0a 20 20 20 20 61 6e 20 73 71 6c 69 74 65 5f  f.    an sqlite_
117f0 73 74 61 74 34 20 65 6e 74 72 79 20 66 6f 72 20  stat4 entry for 
11800 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  a [WITHOUT ROWID
11810 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a 20 20 20  ] table, the.   
11820 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
11830 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a 0a 3c 74  le itself.)^..<t
11840 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
11850 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
11860 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e 0a 20 20  >sample:</td>.  
11870 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
11880 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65 20  te_stat4.sample 
11890 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 42  column holds a B
118a0 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68 65 20 5b  LOB.    in the [
118b0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 20 74  record format] t
118c0 68 61 74 20 65 6e 63 6f 64 65 73 20 74 68 65 20  hat encodes the 
118d0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20  indexed columns 
118e0 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 20 20  followed by.    
118f0 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 61 20  the rowid for a 
11900 72 6f 77 69 64 20 74 61 62 6c 65 20 6f 72 20 62  rowid table or b
11910 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  y the columns of
11920 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
11930 20 0a 20 20 20 20 66 6f 72 20 61 20 57 49 54 48   .    for a WITH
11940 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e  OUT ROWID table.
11950 29 5e 0a 20 20 20 20 5e 28 54 68 65 20 73 71 6c  )^.    ^(The sql
11960 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65  ite_stat4.sample
11970 20 42 4c 4f 42 20 66 6f 72 20 74 68 65 20 57 49   BLOB for the WI
11980 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
11990 65 20 69 74 73 65 6c 66 20 0a 20 20 20 20 63 6f  e itself .    co
119a0 6e 74 61 69 6e 73 20 6a 75 73 74 20 74 68 65 20  ntains just the 
119b0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 70  columns of the p
119c0 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e 0a 20 20  rimary key.)^.  
119d0 20 20 4c 65 74 20 74 68 65 20 6e 75 6d 62 65 72    Let the number
119e0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65 6e 63 6f   of columns enco
119f0 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
11a00 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65 20 62  e_stat4.sample b
11a10 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20 20 5e 46  lob be N..    ^F
11a20 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 61 6e  or indexes on an
11a30 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
11a40 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20 62 65  table, N will be
11a50 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 74   one more than t
11a60 68 65 20 6e 75 6d 62 65 72 20 0a 20 20 20 20 6f  he number .    o
11a70 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64 65 78 65  f columns indexe
11a80 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65  d..    ^For inde
11a90 78 65 73 20 6f 6e 20 57 49 54 48 4f 55 54 20 52  xes on WITHOUT R
11aa0 4f 57 49 44 20 74 61 62 6c 65 73 2c 20 4e 20 77  OWID tables, N w
11ab0 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65  ill be the numbe
11ac0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20  r of columns.   
11ad0 20 69 6e 64 65 78 65 64 20 70 6c 75 73 20 74 68   indexed plus th
11ae0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11af0 6d 6e 73 20 69 6e 20 74 68 65 20 70 72 69 6d 61  mns in the prima
11b00 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e 46 6f 72  ry key..    ^For
11b10 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
11b20 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20 62   table, N will b
11b30 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11b40 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
11b50 20 20 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a     primary key..
11b60 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
11b70 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
11b80 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e 0a 20 20  ht">nEq:</td>.  
11b90 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
11ba0 74 65 5f 73 74 61 74 34 2e 6e 45 71 20 63 6f 6c  te_stat4.nEq col
11bb0 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74  umn holds a list
11bc0 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77   of N integers w
11bd0 68 65 72 65 20 0a 20 20 20 20 74 68 65 20 4b 2d  here .    the K-
11be0 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  th integer is th
11bf0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75  e approximate nu
11c00 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
11c10 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 20 20 20  in the index.   
11c20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
11c30 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78 61 63 74   K columns exact
11c40 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4b 20 6c  ly match the K l
11c50 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73  eft-most columns
11c60 0a 20 20 20 20 6f 66 20 74 68 65 20 73 61 6d 70  .    of the samp
11c70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76  le.)^..<tr><td v
11c80 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
11c90 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74 3a 3c 2f  n="right">nLt:</
11ca0 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11cb0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e  e sqlite_stat4.n
11cc0 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Lt column holds 
11cd0 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65  a list of N inte
11ce0 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20 74  gers where.    t
11cf0 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20  he K-th integer 
11d00 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
11d10 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te number of ent
11d20 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  ries in the.    
11d30 69 6e 64 65 78 20 77 68 6f 73 65 20 4b 20 6c 65  index whose K le
11d40 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20  ft-most columns 
11d50 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79  are collectively
11d60 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 0a   less than the .
11d70 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20      K left-most 
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 0a 3c 74 72 3e 3c 74  ample.)^..<tr><t
11da0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11db0 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 44 4c  lign="right">nDL
11dc0 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e  t:</td>.    <td>
11dd0 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
11de0 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68  t4.nDLt column h
11df0 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e  olds a list of N
11e00 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a   integers where.
11e10 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74      the K-th int
11e20 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
11e30 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e 75 6d 62  oximate.    numb
11e40 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
11e50 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
11e60 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20  are distinct in 
11e70 74 68 65 20 66 69 72 73 74 20 4b 20 63 6f 6c 75  the first K colu
11e80 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77 68 65 72  mns and.    wher
11e90 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  e the left-most 
11ea0 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f  K columns are co
11eb0 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20  llectively less 
11ec0 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d 6f  than the left-mo
11ed0 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e 73  st.    K columns
11ee0 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29   of the sample.)
11ef0 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ^.</table>.</cen
11f00 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  ter>..<p>The sql
11f10 69 74 65 5f 73 74 61 74 34 20 69 73 20 61 20 67  ite_stat4 is a g
11f20 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  eneralization of
11f30 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11f40 33 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 73 71  3 table.  The.sq
11f50 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
11f60 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d   provides inform
11f70 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
11f80 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
11f90 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 77 68 65   of an.index whe
11fa0 72 65 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f  reas the sqlite_
11fb0 73 74 61 74 34 20 74 61 62 6c 65 20 70 72 6f 76  stat4 table prov
11fc0 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ides information
11fd0 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75 6d   about all colum
11fe0 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64 65 78 2e  ns.of the index.
11ff0 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20  ..<p>^There can 
12000 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  be an arbitrary 
12010 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  number of sqlite
12020 5f 73 74 61 74 34 20 65 6e 74 72 69 65 73 20 70  _stat4 entries p
12030 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41  er index..The [A
12040 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20  NALYZE] command 
12050 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67  will typically g
12060 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73  enerate sqlite_s
12070 74 61 74 34 20 74 61 62 6c 65 73 0a 74 68 61 74  tat4 tables.that
12080 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e   contain between
12090 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c   10 and 40 sampl
120a0 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73 74  es that are dist
120b0 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74  ributed across.t
120c0 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64  he key space and
120d0 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20   with large nEq 
120e0 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e  values...<p>^(In
120f0 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73   a well-formed s
12100 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
12110 65 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66  e, the samples f
12120 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e  or any single.in
12130 64 65 78 20 6d 75 73 74 20 61 70 70 65 61 72 20  dex must appear 
12140 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65  in the same orde
12150 72 20 74 68 61 74 20 74 68 65 79 20 6f 63 63 75  r that they occu
12160 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20  r in the index. 
12170 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73   .In other words
12180 2c 20 69 66 20 65 6e 74 72 79 20 53 31 20 69 73  , if entry S1 is
12190 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20   earlier in the 
121a0 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68 61  index b-tree tha
121b0 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20 74 68 65  n .entry S2, the
121c0 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n in the sqlite_
121d0 73 74 61 74 34 20 74 61 62 6c 65 2c 20 73 61 6d  stat4 table, sam
121e0 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76 65  ple S1 must have
121f0 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64   a.smaller rowid
12200 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e   than sample S2.
12210 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
12220 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75  ment rollbackjou
12230 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a  rnal {rollback j
12240 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f  ournal format}</
12250 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 52 6f 6c  tcl>.<h1>The Rol
12260 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68  lback Journal</h
12270 31 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62  1>..<p>The rollb
12280 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61  ack journal is a
12290 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64   file associated
122a0 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69 74   with each SQLit
122b0 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
122c0 74 68 61 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72  that holds infor
122d0 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72  mation used to r
122e0 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62  estore the datab
122f0 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20  ase file to its 
12300 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75  initial.state du
12310 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20  ring the course 
12320 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
12330 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  ..^The rollback 
12340 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20  journal file is 
12350 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
12360 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65  n the same .dire
12370 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
12380 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68  abase.file and h
12390 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
123a0 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
123b0 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74   file but with t
123c0 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d  he string."<tt>-
123d0 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70  journal</tt>" ap
123e0 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63  pended.  There c
123f0 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e  an only be a sin
12400 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  gle rollback jou
12410 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20  rnal.associated 
12420 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61  with a give data
12430 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74  base and hence t
12440 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
12450 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73   one write.trans
12460 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69  action open agai
12470 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nst a single dat
12480 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d  abase at one tim
12490 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20  e.</p>..<p>If a 
124a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
124b0 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e  borted due to an
124c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61   application cra
124d0 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67  sh, an operating
124e0 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f  .system crash, o
124f0 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77  r a hardware pow
12500 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72  er failure or cr
12510 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ash, then the da
12520 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65  tabase may.be le
12530 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69  ft in an inconsi
12540 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54  stent state.  ^T
12550 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c  he next time SQL
12560 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
12570 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  open.the databas
12580 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73  e file, the pres
12590 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ence of the roll
125a0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
125b0 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63  e will be .detec
125c0 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72  ted and the jour
125d0 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f  nal will be auto
125e0 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64  matically played
125f0 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65   back to restore
12600 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
12610 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68   its state at th
12620 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69  e start of the i
12630 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
12640 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ction.</p>..<p>^
12650 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
12660 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  al is only consi
12670 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
12680 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61  d if it exists a
12690 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  nd.contains a va
126a0 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e  lid header.  Hen
126b0 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ce a transaction
126c0 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65   can be committe
126d0 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65  d in one.of thre
126e0 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69  e ways:.<ol>.<li
126f0 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  >^(The rollback 
12700 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
12710 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c   be deleted)^,.<
12720 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63  li>^(The rollbac
12730 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
12740 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20  an be truncated 
12750 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e  to zero length)^
12760 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68  , or.<li>^(The h
12770 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c  eader of the rol
12780 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61  lback journal ca
12790 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  n be overwritten
127a0 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65   with.invalid he
127b0 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65  ader text (for e
127c0 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f  xample, all zero
127d0 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a  s).)^.</ol>.<p>.
127e0 5e 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79  ^These three way
127f0 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20  s of committing 
12800 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
12810 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20  rrespond to the 
12820 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45  DELETE,.TRUNCATE
12830 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65  , and PERSIST se
12840 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69  ttings, respecti
12850 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f  vely, of the [jo
12860 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d  urnal_mode pragm
12870 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20  a]..</p>...<p>A 
12880 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a  valid rollback j
12890 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69  ournal begins wi
128a0 74 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74  th a header in t
128b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
128c0 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  mat:</p>..<cente
128d0 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
128e0 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f  ournal Header Fo
128f0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
12900 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
12910 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
12920 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
12930 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
12940 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12950 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12960 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12970 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12980 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64  r>8.    <td>Head
12990 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39  er string:  0xd9
129a0 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78  , 0xd5, 0x05, 0x
129b0 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20  f9, 0x20, 0xa1, 
129c0 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c  0x63, 0xd7.<tr><
129d0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
129e0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20  ign=center>8.   
129f0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12a00 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12a10 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65     <td>The "Page
12a20 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75   Count" - The nu
12a30 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
12a40 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e   the next segmen
12a50 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20  t of the .      
12a60 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31    journal, or -1
12a70 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e   to.        mean
12a80 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20   all content to 
12a90 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  the end of the f
12aa0 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12ab0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12ac0 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76  ter>12.    <td v
12ad0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12ae0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12af0 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20  >A random nonce 
12b00 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d  for the checksum
12b10 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12b20 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12b30 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
12b40 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12b50 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
12b60 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
12b70 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
12b80 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ges.<tr><td vali
12b90 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12ba0 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76  ter>20.    <td v
12bb0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12bc0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12bd0 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20  >Size of a disk 
12be0 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62  sector assumed b
12bf0 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68  y the process th
12c00 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20  at wrote this.  
12c10 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c        journal..<
12c20 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12c30 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12c40 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12c50 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12c60 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12c70 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 69   of pages in thi
12c80 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62  s journal..</tab
12c90 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  le>.</center>..<
12ca0 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
12cb0 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20  urnal header is 
12cc0 70 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f  padded with zero
12cd0 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a  s out to the siz
12ce0 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73  e of a .single s
12cf0 65 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65  ector (as define
12d00 64 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20  d by the sector 
12d10 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20  size integer at 
12d20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20  offset 20)..The 
12d30 68 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73  header is in a s
12d40 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20  ector by itself 
12d50 73 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77  so that if a pow
12d60 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77  er loss occurs w
12d70 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65  hile.writing the
12d80 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61   sector, informa
12d90 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77  tion that follow
12da0 73 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c  s the header wil
12db0 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29  l be.(hopefully)
12dc0 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a   undamaged.</p>.
12dd0 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68  .<p>^After the h
12de0 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70  eader and zero p
12df0 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20  adding are zero 
12e00 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63  or more page rec
12e10 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67  ords.  ^Each.pag
12e20 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20  e record stores 
12e30 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f  a copy of the co
12e40 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20  ntent of a page 
12e50 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12e60 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74  e file.before it
12e70 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e   was changed.  ^
12e80 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
12e90 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
12ea0 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
12eb0 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
12ec0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
12ed0 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
12ee0 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
12ef0 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
12f00 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
12f10 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
12f20 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
12f30 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
12f40 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
12f50 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
12f60 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
12f70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
12f80 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
12f90 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
12fa0 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
12fb0 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
12fc0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12fd0 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12fe0 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
12ff0 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
13000 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
13010 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
13020 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
13030 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
13040 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
13050 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
13060 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
13070 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
13080 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
13090 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
130a0 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
130b0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
130c0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
130d0 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
130e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
130f0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
13100 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
13110 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
13120 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
13130 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13140 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
13150 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13160 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
13170 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
13180 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
13190 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
131a0 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
131b0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
131c0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
131d0 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76  er>N+4.    <td v
131e0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
131f0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13200 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c  >Checksum.</tabl
13210 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
13220 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d  p>^(The checksum
13230 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
13240 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63  32-bit integer c
13250 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f  omputed as follo
13260 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
13270 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  i>Initialize the
13280 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65   checksum to the
13290 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20   checksum nonce 
132a0 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74  value found in t
132b0 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he.journal heade
132c0 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a  r at offset 12..
132d0 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69  <li>Initialize i
132e0 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32  ndex X to be N-2
132f0 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74  00 (where N is t
13300 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74  he size of a dat
13310 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79  abase page.in by
13320 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72  tes..<li>Interpr
13330 65 74 20 74 68 65 20 62 79 74 65 20 61 74 20 6f  et the byte at o
13340 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74 68 65  ffset X into the
13350 20 70 61 67 65 20 61 73 20 61 6e 20 38 2d 62 69   page as an 8-bi
13360 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  t unsigned integ
13370 65 72 0a 20 61 6e 64 20 61 64 64 20 74 68 65 20  er. and add the 
13380 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e  value of that in
13390 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65  teger to the che
133a0 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72  cksum..<li>Subtr
133b0 61 63 74 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a  act 200 from X..
133c0 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61  <li>If X is grea
133d0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
133e0 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61  l to zero, go ba
133f0 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f  ck to step 3..</
13400 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68  ol>)^..<p>The ch
13410 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20  ecksum value is 
13420 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61 67  used to guard ag
13430 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65  ainst incomplete
13440 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75   writes of.a jou
13450 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64  rnal page record
13460 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77   following a pow
13470 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64  er failure.  A d
13480 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
13490 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61  nonce.is used ea
134a0 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
134b0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
134c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e   in order to min
134d0 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74  imize the risk.t
134e0 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65  hat unwritten se
134f0 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63  ctors might by c
13500 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61  hance contain da
13510 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65  ta from the same
13520 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20 61   page.that was a
13530 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a   part of prior j
13540 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61  ournals.  By cha
13550 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20  nging the nonce 
13560 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63  for each.transac
13570 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61  tion, stale data
13580 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74   on disk will st
13590 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20  ill generate an 
135a0 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73  incorrect checks
135b0 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74  um.and be detect
135c0 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72 6f  ed with high pro
135d0 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63  bability.  The c
135e0 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65  hecksum only use
135f0 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c  s a sparse sampl
13600 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64  e.of 32-bit word
13610 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20  s from the data 
13620 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f  record for perfo
13630 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d  rmance reasons -
13640 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73 20   design studies 
13650 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e  .during the plan
13660 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53  ning phases of S
13670 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77  QLite 3.0.0 show
13680 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74  ed.a significant
13690 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74   performance hit
136a0 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67   in checksumming
136b0 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67 65   the entire page
136c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
136d0 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  e page count val
136e0 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20 69  ue at offset 8 i
136f0 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65  n the journal he
13700 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d  ader be M..^If M
13710 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
13720 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72   zero then after
13730 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73 20   M page records 
13740 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
13750 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64  .may be zero pad
13760 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e  ded out to the n
13770 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ext multiple of 
13780 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
13790 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72  and another.jour
137a0 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62  nal header may b
137b0 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c  e inserted.  ^Al
137c0 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
137d0 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
137e0 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63  e.journal must c
137f0 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20  ontain the same 
13800 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
13810 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69  ze and sector si
13820 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  ze.</p>..<p>^If 
13830 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69  M is -1 in the i
13840 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68  nitial journal h
13850 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20  eader, then the 
13860 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72  number of page r
13870 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c  ecords.that foll
13880 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ow is computed b
13890 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20  y computing how 
138a0 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64  many page record
138b0 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68  s will fit in.th
138c0 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  e available spac
138d0 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64  e of the remaind
138e0 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  er of the journa
138f0 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  l file.</p>..<tc
13900 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
13910 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72  lformat {WAL for
13920 6d 61 74 7d 20 7b 57 41 4c 20 66 69 6c 65 20 66  mat} {WAL file f
13930 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31  ormat}</tcl>.<h1
13940 3e 54 68 65 20 57 72 69 74 65 2d 41 68 65 61 64  >The Write-Ahead
13950 20 4c 6f 67 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 65   Log</h1>..<p>Be
13960 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65  ginning with [ve
13970 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 20 28 5b 64  rsion 3.7.0] ([d
13980 61 74 65 6f 66 3a 33 2e 37 2e 30 5d 29 2c 20 0a  ateof:3.7.0]), .
13990 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
139a0 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f  a new transactio
139b0 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e  n.control mechan
139c0 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c  ism called "[WAL
139d0 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c   | write-ahead l
139e0 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e  og]" or "[WAL]".
139f0 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61 73  .^When a databas
13a00 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65  e is in WAL mode
13a10 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  , all connection
13a20 73 20 74 6f 20 74 68 61 74 20 64 61 74 61 62 61  s to that databa
13a30 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20  se must.use the 
13a40 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75  WAL.  ^A particu
13a50 6c 61 72 20 64 61 74 61 62 61 73 65 20 77 69 6c  lar database wil
13a60 6c 20 75 73 65 20 65 69 74 68 65 72 20 61 20 72  l use either a r
13a70 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
13a80 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f  or a WAL, but no
13a90 74 20 62 6f 74 68 20 61 74 20 74 68 65 20 73 61  t both at the sa
13aa0 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41  me time..^The WA
13ab0 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61  L is always loca
13ac0 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
13ad0 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
13ae0 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
13af0 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
13b00 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
13b10 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
13b20 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
13b30 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70  tt>-wal</tt>" ap
13b40 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 32  pended.</p>..<h2
13b50 3e 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74  >WAL File Format
13b60 3c 2f 68 32 3e 0a 0a 3c 70 3e 41 20 5b 57 41 4c  </h2>..<p>A [WAL
13b70 20 66 69 6c 65 5d 20 63 6f 6e 73 69 73 74 73 20   file] consists 
13b80 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c 6c  of a header foll
13b90 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
13ba0 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a 45  more "frames"..E
13bb0 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72 64  ach frame record
13bc0 73 20 74 68 65 20 72 65 76 69 73 65 64 20 63 6f  s the revised co
13bd0 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c  ntent of a singl
13be0 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 0a  e page from the.
13bf0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
13c00 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74  All changes to t
13c10 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
13c20 72 65 63 6f 72 64 65 64 20 62 79 20 77 72 69 74  recorded by writ
13c30 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20  ing.frames into 
13c40 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73 61  the WAL.  Transa
13c50 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68  ctions commit wh
13c60 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77 72  en a frame is wr
13c70 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61  itten that.conta
13c80 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72  ins a commit mar
13c90 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  ker.  ^A single 
13ca0 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75 61  WAL can and usua
13cb0 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64 20  lly does record 
13cc0 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73 61  .multiple transa
13cd0 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69  ctions.  Periodi
13ce0 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65  cally, the conte
13cf0 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
13d00 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62 61 63  .transferred bac
13d10 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
13d20 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f  ase file in an o
13d30 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20  peration called 
13d40 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c  a."checkpoint".<
13d50 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c  /p>..<p>^A singl
13d60 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20 62  e WAL file can b
13d70 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70 6c  e reused multipl
13d80 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74  e times.  ^In ot
13d90 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 57  her words, the.W
13da0 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20 77  AL can fill up w
13db0 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20 74  ith frames and t
13dc0 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69 6e  hen be checkpoin
13dd0 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65 77  ted and then new
13de0 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65 72  .frames can over
13df0 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e  write the old on
13e00 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77 61  es.  ^A WAL alwa
13e10 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62 65  ys grows from be
13e20 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74  ginning.toward t
13e30 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73 75  he end.  Checksu
13e40 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73 20  ms and counters 
13e50 61 74 74 61 63 68 65 64 20 74 6f 20 65 61 63 68  attached to each
13e60 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64 20   frame are.used 
13e70 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
13e80 63 68 20 66 72 61 6d 65 73 20 77 69 74 68 69 6e  ch frames within
13e90 20 74 68 65 20 57 41 4c 20 61 72 65 20 76 61 6c   the WAL are val
13ea0 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72 65  id and which.are
13eb0 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d 20   leftovers from 
13ec0 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  prior checkpoint
13ed0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  s.</p>..<p>^(The
13ee0 20 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 33   WAL header is 3
13ef0 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20  2 bytes in size 
13f00 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
13f10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69  the following ei
13f20 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33  ght.big-endian 3
13f30 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69  2-bit unsigned i
13f40 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f  nteger values:</
13f50 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
13f60 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  WAL Header Forma
13f70 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
13f80 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
13f90 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
13fa0 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
13fb0 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
13fc0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13fd0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
13fe0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13ff0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
14000 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72  <td>Magic number
14010 2e 20 20 30 78 33 37 37 66 30 36 38 32 20 6f 72  .  0x377f0682 or
14020 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72 3e   0x377f0683.<tr>
14030 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14040 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
14050 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14060 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
14070 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  td>File format v
14080 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74  ersion.  Current
14090 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e  ly 3007000..<tr>
140a0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
140b0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
140c0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
140d0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
140e0 74 64 3e 44 61 74 61 62 61 73 65 20 70 61 67 65  td>Database page
140f0 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a   size.  Example:
14100 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61   1024.<tr><td va
14110 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14120 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
14130 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14140 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
14150 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e 63  eckpoint sequenc
14160 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
14170 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14180 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76  n=center>16<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 34 0a 20 20 20 20 3c 74 64  center>4.    <td
141b0 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20  >Salt-1: random 
141c0 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65 6e  integer incremen
141d0 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
141e0 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64  eckpoint.<tr><td
141f0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14200 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
14210 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14220 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
14230 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66 65  >Salt-2: a diffe
14240 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62  rent random numb
14250 65 72 20 66 6f 72 20 65 61 63 68 20 63 68 65 63  er for each chec
14260 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76  kpoint.<tr><td v
14270 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14280 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c  center>24<td val
14290 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
142a0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
142b0 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74  hecksum-1: First
142c0 20 70 61 72 74 20 6f 66 20 61 20 63 68 65 63 6b   part of a check
142d0 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
142e0 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
142f0 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  der.<tr><td vali
14300 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14310 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e  ter>28<td valign
14320 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14330 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
14340 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70  ksum-2: Second p
14350 61 72 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b  art of the check
14360 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
14370 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
14380 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  der.</table>.</c
14390 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d  enter>)^..<p>^Im
143a0 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
143b0 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61 64  ing the wal-head
143c0 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  er are zero or m
143d0 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61 63  ore frames. ^Eac
143e0 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74 73  h.frame consists
143f0 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66 72   of a 24-byte fr
14400 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f  ame-header follo
14410 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67 65  wed by a <i>page
14420 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a  -size</i> bytes.
14430 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e 28  of page data. ^(
14440 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  The frame-header
14450 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64 69   is six big-endi
14460 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e  an 32-bit unsign
14470 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c 75  ed .integer valu
14480 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  es, as follows:.
14490 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c  .<center>.<i>WAL
144a0 20 46 72 61 6d 65 20 48 65 61 64 65 72 20 46 6f   Frame Header Fo
144b0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
144c0 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
144d0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
144e0 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
144f0 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
14500 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
14510 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14520 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
14530 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
14540 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62     <td>Page numb
14550 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
14560 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14570 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
14580 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14590 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f  4.    <td>For co
145a0 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74 68  mmit records, th
145b0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
145c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
145d0 61 67 65 73 0a 20 20 20 20 20 20 20 20 61 66 74  ages.        aft
145e0 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20  er the commit.  
145f0 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72 65  For all other re
14600 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72  cords, zero..<tr
14610 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14620 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
14630 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14640 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
14650 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65  <td>Salt-1 copie
14660 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
14670 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
14680 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14690 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
146a0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
146b0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
146c0 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f 6d  lt-2 copied from
146d0 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a   the WAL header.
146e0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
146f0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14700 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  16<td valign=top
14710 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
14720 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
14730 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65 20  -1:  Cumulative 
14740 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72 6f  checksum up thro
14750 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e  ugh and includin
14760 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e  g this page.<tr>
14770 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14780 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
14790 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
147a0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
147b0 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
147c0 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20   Second half of 
147d0 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20 63  the cumulative c
147e0 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65  hecksum..</table
147f0 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e  >.</center>)^..^
14800 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20 63  (<p>A frame is c
14810 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20  onsidered valid 
14820 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
14830 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
14840 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75 65  ditions are.true
14850 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
14860 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61 6e  <p>The salt-1 an
14870 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73 20  d salt-2 values 
14880 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61  in the frame-hea
14890 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20 20  der match.      
148a0 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e 20   salt values in 
148b0 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f  the wal-header</
148c0 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
148d0 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
148e0 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61 6c  ues in the final
148f0 20 38 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   8 bytes of the 
14900 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20 20  frame-header.   
14910 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74 63      exactly matc
14920 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 63  h the checksum c
14930 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75 74  omputed consecut
14940 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20  ively on the.   
14950 20 20 20 20 66 69 72 73 74 20 32 34 20 62 79 74      first 24 byt
14960 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65  es of the WAL he
14970 61 64 65 72 20 61 6e 64 20 74 68 65 20 66 69 72  ader and the fir
14980 73 74 20 38 20 62 79 74 65 73 20 61 6e 64 0a 20  st 8 bytes and. 
14990 20 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65 6e        the conten
149a0 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a  t of all frames.
149b0 20 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64         up to and
149c0 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63   including the c
149d0 75 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70  urrent frame.</p
149e0 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  ></li></li>.</ol
149f0 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  >)^..<tcl>hd_fra
14a00 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57  gment walcksm {W
14a10 41 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  AL checksum algo
14a20 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  rithm}</tcl>.<h2
14a30 3e 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69  >Checksum Algori
14a40 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  thm</h2>..<p>The
14a50 20 63 68 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d   checksum is com
14a60 70 75 74 65 64 20 62 79 20 69 6e 74 65 72 70 72  puted by interpr
14a70 65 74 69 6e 67 20 74 68 65 20 69 6e 70 75 74 20  eting the input 
14a80 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65  as.an even numbe
14a90 72 20 6f 66 20 75 6e 73 69 67 6e 65 64 20 33 32  r of unsigned 32
14aa0 2d 62 69 74 20 69 6e 74 65 67 65 72 73 3a 20 78  -bit integers: x
14ab0 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29  (0) through x(N)
14ac0 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ..^The 32-bit in
14ad0 74 65 67 65 72 73 20 61 72 65 20 62 69 67 2d 65  tegers are big-e
14ae0 6e 64 69 61 6e 20 69 66 20 74 68 65 0a 6d 61 67  ndian if the.mag
14af0 69 63 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ic number in the
14b00 20 66 69 72 73 74 20 34 20 62 79 74 65 73 20 6f   first 4 bytes o
14b10 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  f the WAL header
14b20 20 69 73 20 30 78 33 37 37 66 30 36 38 33 20 61   is 0x377f0683 a
14b30 6e 64 0a 74 68 65 20 69 6e 74 65 67 65 72 73 20  nd.the integers 
14b40 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61  are little-endia
14b50 6e 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 6e  n if the magic n
14b60 75 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30  umber is 0x377f0
14b70 36 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73  682..^The checks
14b80 75 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c  um values are al
14b90 77 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74  ways stored in t
14ba0 68 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20  he frame header 
14bb0 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20  in a.big-endian 
14bc0 66 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73  format regardles
14bd0 73 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20  s of which byte 
14be0 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
14bf0 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65   compute.the che
14c00 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  cksum.</p>..<p>T
14c10 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  he checksum algo
14c20 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73  rithm only works
14c30 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69   for content whi
14c40 63 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65  ch is a multiple
14c50 20 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c   of.8 bytes in l
14c60 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72  ength.  In other
14c70 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69   words, if the i
14c80 6e 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74  nputs are x(0) t
14c90 68 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e  hrough x(N).then
14ca0 20 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a   N must be odd..
14cb0 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61  ^(The checksum a
14cc0 6c 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66  lgorithm is as f
14cd0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
14ce0 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d  uote><pre> .s0 =
14cf0 20 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72   s1 = 0.for i fr
14d00 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70  om 0 to n-1 step
14d10 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69   2:.   s0 += x(i
14d20 29 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d  ) + s1;.   s1 +=
14d30 20 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e   x(i+1) + s0;.en
14d40 64 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e  dfor.# result in
14d50 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65   s0 and s1.</pre
14d60 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
14d70 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74  ..<p>^The output
14d80 73 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20  s s0 and s1 are 
14d90 62 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68  both weighted ch
14da0 65 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69  ecksums using Fi
14db0 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a  bonacci weights.
14dc0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
14dd0 2e 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74  .  (^The largest
14de0 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68   Fibonacci weigh
14df0 74 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20  t occurs on the 
14e00 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66  first element.of
14e10 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65   the sequence be
14e20 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54  ing summed.)  ^T
14e30 68 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e  he s1 value span
14e40 73 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74  s all 32-bit int
14e50 65 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68  eger.terms of th
14e60 65 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65  e sequence where
14e70 61 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20  as s0 omits the 
14e80 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a  final term.</p>.
14e90 0a 3c 68 32 3e 43 68 65 63 6b 70 6f 69 6e 74 20  .<h2>Checkpoint 
14ea0 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a  Algorithm</h2>..
14eb0 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70  <p>^On a [checkp
14ec0 6f 69 6e 74 5d 2c 20 74 68 65 20 57 41 4c 20 69  oint], the WAL i
14ed0 73 20 66 69 72 73 74 20 66 6c 75 73 68 65 64 20  s first flushed 
14ee0 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73 74  to persistent st
14ef0 6f 72 61 67 65 20 75 73 69 6e 67 0a 74 68 65 20  orage using.the 
14f00 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20  xSync method of 
14f10 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f  the [sqlite3_io_
14f20 6d 65 74 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20  methods | VFS]. 
14f30 0a 5e 54 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e  .^Then valid con
14f40 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20  tent of the WAL 
14f50 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 69  is transferred i
14f60 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
14f70 20 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c   file..^Finally,
14f80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
14f90 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73   flushed to pers
14fa0 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75  istent storage u
14fb0 73 69 6e 67 20 61 6e 6f 74 68 65 72 0a 78 53 79  sing another.xSy
14fc0 6e 63 20 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a  nc method call..
14fd0 54 68 65 20 78 53 79 6e 63 20 6f 70 65 72 61 74  The xSync operat
14fe0 69 6f 6e 73 20 73 65 72 76 65 20 61 73 20 77 72  ions serve as wr
14ff0 69 74 65 20 62 61 72 72 69 65 72 73 20 2d 20 61  ite barriers - a
15000 6c 6c 20 77 72 69 74 65 73 20 6c 61 75 6e 63 68  ll writes launch
15010 65 64 0a 62 65 66 6f 72 65 20 74 68 65 20 78 53  ed.before the xS
15020 79 6e 63 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  ync must complet
15030 65 20 62 65 66 6f 72 65 20 61 6e 79 20 77 72 69  e before any wri
15040 74 65 20 74 68 61 74 20 6c 61 75 6e 63 68 65 73  te that launches
15050 20 61 66 74 65 72 20 74 68 65 0a 78 53 79 6e 63   after the.xSync
15060 20 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70   begins.</p>..<p
15070 3e 41 20 63 68 65 63 6b 70 6f 69 6e 74 20 6e 65  >A checkpoint ne
15080 65 64 20 6e 6f 74 20 72 75 6e 20 74 6f 20 63 6f  ed not run to co
15090 6d 70 6c 65 74 69 6f 6e 2e 20 20 49 74 20 6d 69  mpletion.  It mi
150a0 67 68 74 20 62 65 20 74 68 61 74 20 73 6f 6d 65  ght be that some
150b0 0a 72 65 61 64 65 72 73 20 61 72 65 20 73 74 69  .readers are sti
150c0 6c 6c 20 75 73 69 6e 67 20 6f 6c 64 65 72 20 74  ll using older t
150d0 72 61 6e 73 61 63 74 69 6f 6e 73 20 77 69 74 68  ransactions with
150e0 20 64 61 74 61 20 74 68 61 74 20 69 73 20 63 6f   data that is co
150f0 6e 74 61 69 6e 65 64 0a 69 6e 20 74 68 65 20 64  ntained.in the d
15100 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
15110 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 72 61  n that case, tra
15120 6e 73 66 65 72 72 69 6e 67 20 63 6f 6e 74 65 6e  nsferring conten
15130 74 20 66 6f 72 20 6e 65 77 65 72 0a 74 72 61 6e  t for newer.tran
15140 73 61 63 74 69 6f 6e 73 20 66 72 6f 6d 20 74 68  sactions from th
15150 65 20 57 41 4c 20 66 69 6c 65 20 69 6e 74 6f 20  e WAL file into 
15160 74 68 65 20 64 61 74 61 62 61 73 65 20 77 6f 75  the database wou
15170 6c 64 20 64 65 6c 65 74 65 20 74 68 65 20 63 6f  ld delete the co
15180 6e 74 65 6e 74 0a 6f 75 74 20 66 72 6f 6d 20 75  ntent.out from u
15190 6e 64 65 72 20 72 65 61 64 65 72 73 20 73 74 69  nder readers sti
151a0 6c 6c 20 75 73 69 6e 67 20 74 68 65 20 6f 6c 64  ll using the old
151b0 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  er transactions.
151c0 20 20 54 6f 20 61 76 6f 69 64 20 74 68 61 74 2c    To avoid that,
151d0 0a 63 68 65 63 6b 70 6f 69 6e 74 73 20 6f 6e 6c  .checkpoints onl
151e0 79 20 72 75 6e 20 74 6f 20 63 6f 6d 70 6c 65 74  y run to complet
151f0 69 6f 6e 20 69 66 20 61 6c 6c 20 72 65 61 64 65  ion if all reade
15200 72 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 0a  r are using the.
15210 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  last transaction
15220 20 69 6e 20 74 68 65 20 57 41 4c 2e 0a 0a 3c 74   in the WAL...<t
15230 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
15240 61 6c 72 65 73 65 74 20 7b 72 65 73 65 74 20 74  alreset {reset t
15250 68 65 20 57 41 4c 7d 20 7b 57 41 4c 20 72 65 73  he WAL} {WAL res
15260 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41  et}</tcl>.<h2>WA
15270 4c 20 52 65 73 65 74 3c 2f 68 32 3e 0a 0a 3c 70  L Reset</h2>..<p
15280 3e 5e 41 66 74 65 72 20 61 20 63 6f 6d 70 6c 65  >^After a comple
15290 74 65 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 69  te checkpoint, i
152a0 66 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65  f no other conne
152b0 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 20 74 72  ctions are in tr
152c0 61 6e 73 61 63 74 69 6f 6e 73 0a 74 68 61 74 20  ansactions.that 
152d0 75 73 65 20 74 68 65 20 57 41 4c 2c 20 74 68 65  use the WAL, the
152e0 6e 20 73 75 62 73 65 71 75 65 6e 74 20 77 72 69  n subsequent wri
152f0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  te transactions 
15300 63 61 6e 0a 6f 76 65 72 77 72 69 74 65 20 74 68  can.overwrite th
15310 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d 20  e WAL file from 
15320 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
15330 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 22  This is called "
15340 72 65 73 65 74 74 69 6e 67 20 74 68 65 0a 57 41  resetting the.WA
15350 4c 22 2e 20 20 5e 41 74 20 74 68 65 20 73 74 61  L".  ^At the sta
15360 72 74 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  rt of the first 
15370 6e 65 77 0a 77 72 69 74 65 20 74 72 61 6e 73 61  new.write transa
15380 63 74 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20 68  ction, the WAL h
15390 65 61 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c  eader salt-1 val
153a0 75 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ue is incremente
153b0 64 0a 61 6e 64 20 74 68 65 20 73 61 6c 74 2d 32  d.and the salt-2
153c0 20 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d   value is random
153d0 69 7a 65 64 2e 20 20 54 68 65 73 65 20 63 68 61  ized.  These cha
153e0 6e 67 65 73 20 74 6f 20 74 68 65 20 73 61 6c 74  nges to the salt
153f0 73 20 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c 64  s invalidate.old
15400 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57   frames in the W
15410 41 4c 20 74 68 61 74 20 68 61 76 65 20 61 6c 72  AL that have alr
15420 65 61 64 79 20 62 65 65 6e 20 63 68 65 63 6b 70  eady been checkp
15430 6f 69 6e 74 65 64 20 62 75 74 20 6e 6f 74 20 79  ointed but not y
15440 65 74 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c 20  et.overwritten, 
15450 61 6e 64 20 70 72 65 76 65 6e 74 20 74 68 65 6d  and prevent them
15460 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 68 65 63   from being chec
15470 6b 70 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e 3c  kpointed again.<
15480 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57 41 4c 20  /p>..<p>The WAL 
15490 66 69 6c 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61  file can optiona
154a0 6c 6c 79 20 62 65 20 74 72 75 6e 63 61 74 65 64  lly be truncated
154b0 20 6f 6e 20 61 20 72 65 73 65 74 2c 20 62 75 74   on a reset, but
154c0 20 69 74 20 6e 65 65 64 20 6e 6f 74 20 62 65 2e   it need not be.
154d0 0a 50 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20  .Performance is 
154e0 75 73 75 61 6c 6c 79 20 61 20 6c 69 74 74 6c 65  usually a little
154f0 20 62 65 74 74 65 72 20 69 66 20 74 68 65 20 57   better if the W
15500 41 4c 20 69 73 20 6e 6f 74 20 74 72 75 6e 63 61  AL is not trunca
15510 74 65 2c 20 73 69 6e 63 65 0a 66 69 6c 65 73 79  te, since.filesy
15520 73 74 65 6d 73 20 67 65 6e 65 72 61 6c 6c 79 20  stems generally 
15530 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20 61  will overwrite a
15540 6e 20 65 78 69 73 74 69 6e 67 20 66 69 6c 65 20  n existing file 
15550 66 61 73 74 65 72 20 74 68 61 6e 20 74 68 65 79  faster than they
15560 0a 77 69 6c 6c 20 67 72 6f 77 20 61 20 66 69 6c  .will grow a fil
15570 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e...<tcl>hd_frag
15580 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41  ment walread {WA
15590 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
155a0 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64  }</tcl>.<h2>Read
155b0 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32  er Algorithm</h2
155c0 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20  >..<p>^(To read 
155d0 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
155e0 64 61 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69  database (call i
155f0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29  t page number P)
15600 2c 20 61 20 72 65 61 64 65 72 0a 66 69 72 73 74  , a reader.first
15610 20 63 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20   checks the WAL 
15620 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e  to see if it con
15630 74 61 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49  tains page P.  I
15640 66 20 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c  f so, then the.l
15650 61 73 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e  ast valid instan
15660 63 65 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  ce of page P tha
15670 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
15680 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a   a commit frame.
15690 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66  or is a commit f
156a0 72 61 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f  rame itself beco
156b0 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65  mes the value re
156c0 61 64 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57  ad.)^  ^If the W
156d0 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  AL.contains no c
156e0 6f 70 69 65 73 20 6f 66 20 70 61 67 65 20 50 20  opies of page P 
156f0 74 68 61 74 20 61 72 65 20 76 61 6c 69 64 20 61  that are valid a
15700 6e 64 20 77 68 69 63 68 20 61 72 65 20 61 20 63  nd which are a c
15710 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61  ommit.frame or a
15720 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  re followed by a
15730 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74   commit frame, t
15740 68 65 6e 20 70 61 67 65 20 50 20 69 73 20 72 65  hen page P is re
15750 61 64 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61  ad from.the data
15760 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
15770 3c 70 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65  <p>To start a re
15780 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ad transaction, 
15790 74 68 65 20 72 65 61 64 65 72 20 72 65 63 6f 72  the reader recor
157a0 64 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ds the number of
157b0 20 76 61 6c 75 65 0a 66 72 61 6d 65 73 20 69 6e   value.frames in
157c0 20 74 68 65 20 57 41 4c 20 61 73 20 22 6d 78 46   the WAL as "mxF
157d0 72 61 6d 65 22 2e 20 20 28 5b 6d 78 46 72 61 6d  rame".  ([mxFram
157e0 65 7c 4d 6f 72 65 20 64 65 74 61 69 6c 5d 29 0a  e|More detail]).
157f0 54 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20  The reader uses 
15800 74 68 69 73 20 72 65 63 6f 72 64 65 64 20 6d 78  this recorded mx
15810 46 72 61 6d 65 20 76 61 6c 75 65 0a 66 6f 72 20  Frame value.for 
15820 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72  all subsequent r
15830 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20  ead operations. 
15840 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   New transaction
15850 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65  s can be appende
15860 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75  d.to the WAL, bu
15870 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  t as long as the
15880 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74 73   reader uses its
15890 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d   original mxFram
158a0 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f  e value.and igno
158b0 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79  res subsequently
158c0 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e   appended conten
158d0 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77 69  t, the reader wi
158e0 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73  ll see a .consis
158f0 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66  tent snapshot of
15900 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
15910 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e  om a single poin
15920 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68  t in time.  .^Th
15930 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c  is technique all
15940 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e  ows multiple con
15950 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73 20  current readers 
15960 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65 6e  to view differen
15970 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  t .versions of t
15980 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
15990 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73  ent simultaneous
159a0 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
159b0 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d  reader algorithm
159c0 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
159d0 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b   paragraphs work
159e0 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74  s correctly, but
159f0 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65 73   .because frames
15a00 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20   for page P can 
15a10 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
15a20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20  within the WAL, 
15a30 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20 74  the.reader has t
15a40 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72  o scan the entir
15a50 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f  e WAL looking fo
15a60 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e  r page P frames.
15a70 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20    If the.WAL is 
15a80 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20  large (multiple 
15a90 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79 70  megabytes is typ
15aa0 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20  ical) that scan 
15ab0 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64  can be slow,.and
15ac0 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63   read performanc
15ad0 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20  e suffers.  ^To 
15ae0 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72  overcome this pr
15af0 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74  oblem, a separat
15b00 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e.data structure
15b10 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d   called the wal-
15b20 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69  index is maintai
15b30 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65 20  ned to expedite 
15b40 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66  the.search for f
15b50 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69  rames of a parti
15b60 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a  cular page.</p>.
15b70 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15b80 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74  t walindexformat
15b90 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49  </tcl>.<h2>WAL-I
15ba0 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  ndex Format</h2>
15bb0 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c  ..<p>Conceptuall
15bc0 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  y, the wal-index
15bd0 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15be0 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75  y, though the cu
15bf0 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d  rrent.VFS implem
15c00 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20  entations use a 
15c10 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 66 69  memory-mapped fi
15c20 6c 65 20 66 6f 72 20 6f 70 65 72 61 74 69 6e 67  le for operating
15c30 2d 73 79 73 74 65 6d 0a 70 6f 72 74 61 62 69 6c  -system.portabil
15c40 69 74 79 2e 20 20 5e 54 68 65 20 6d 65 6d 6f 72  ity.  ^The memor
15c50 79 2d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73  y-mapped.file is
15c60 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
15c70 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
15c80 74 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74  tabase and has t
15c90 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20  he same name.as 
15ca0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74  the database wit
15cb0 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74  h a "<tt>-shm</t
15cc0 74 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e  t>" suffix appen
15cd0 64 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68  ded.  Because.th
15ce0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
15cf0 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51  hared memory, SQ
15d00 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
15d10 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a  pport .[PRAGMA j
15d20 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f  ournal_mode | jo
15d30 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20  urnal_mode=WAL] 
15d40 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69  .on a network fi
15d50 6c 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c  lesystem when cl
15d60 69 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66  ients are on dif
15d70 66 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2c  ferent machines,
15d80 20 61 73 0a 61 6c 6c 20 63 6c 69 65 6e 74 73 20   as.all clients 
15d90 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
15da0 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20  must be able to 
15db0 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d  share the same m
15dc0 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  emory.</p>..<p>T
15dd0 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
15de0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74  e wal-index is t
15df0 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75  o answer this qu
15e00 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c  estion quickly:<
15e10 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15e20 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67  ><i>.Given a pag
15e30 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61  e number P and a
15e40 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61   maximum WAL fra
15e50 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75  me index M,.retu
15e60 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57  rn the largest W
15e70 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66  AL frame index f
15e80 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64  or page P that d
15e90 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d  oes not exceed M
15ea0 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  , .or return NUL
15eb0 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  L if there are n
15ec0 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  o frames for pag
15ed0 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  e P that do not 
15ee0 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f  exceed M..</i></
15ef0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
15f00 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c  The <i>M</i> val
15f10 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  ue in the previo
15f20 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20  us paragraph is 
15f30 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61  the "mxFrame" va
15f40 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b  lue.defined in [
15f50 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74  WAL read algorit
15f60 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34  hm | section 4.4
15f70 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61  ] that is read a
15f80 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20  t the start .of 
15f90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  a transaction an
15fa0 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20  d which defines 
15fb0 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d  the maximum fram
15fc0 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74  e from the WAL t
15fd0 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20  hat .the reader 
15fe0 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  will use.</p>..<
15ff0 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  p>The wal-index 
16000 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41  is transient.  A
16010 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68  fter a crash, th
16020 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72  e wal-index is.r
16030 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f  econstructed fro
16040 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57  m the original W
16050 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56  AL file.  ^The V
16060 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74  FS is required.t
16070 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74  o either truncat
16080 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65  e or zero the he
16090 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d  ader of the wal-
160a0 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c  index when the l
160b0 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ast.connection t
160c0 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65  o it closes.  Be
160d0 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e  cause the wal-in
160e0 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74  dex is transient
160f0 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20  , it can.use an 
16100 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65  architecture-spe
16110 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74  cific format; it
16120 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
16130 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66  o be cross-platf
16140 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69  orm..Hence, unli
16150 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ke the database 
16160 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72  and WAL file for
16170 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65  mats which store
16180 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62   all values.as b
16190 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77  ig endian, the w
161a0 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20  al-index stores 
161b0 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65  multi-byte value
161c0 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a  s in the native.
161d0 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68  byte order of th
161e0 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e  e host computer.
161f0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f  </p>..<p>This do
16200 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72  cument is concer
16210 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72  ned with the per
16220 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66  sistent state of
16230 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
16240 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68  le, and since th
16250 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61  e wal-index is a
16260 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63   transient struc
16270 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72  ture, no further
16280 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62   .information ab
16290 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
162a0 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
162b0 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64  will be provided
162c0 20 68 65 72 65 2e 0a 41 64 64 69 74 69 6f 6e 61   here..Additiona
162d0 6c 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65  l details on the
162e0 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77   format of the w
162f0 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e  al-index are con
16300 74 61 69 6e 65 64 20 69 6e 0a 74 68 65 20 73 65  tained in.the se
16310 70 61 72 61 74 65 20 5b 57 41 4c 2d 69 6e 64 65  parate [WAL-inde
16320 78 20 46 69 6c 65 20 46 6f 72 6d 61 74 5d 20 64  x File Format] d
16330 6f 63 75 6d 65 6e 74 2e 3c 2f 70 3e 0a           ocument.</p>.