Documentation Source Text

Hex Artifact Content
Login

Artifact bef93f3287f0ac530e26671554a71017879e3caa37af48857212b56c0ab29800:


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 68 33 3e 46 69 6c 65 20 66 6f 72 6d 61 74  .<h3>File format
2080: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73   version numbers
2090: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 69  </h3>..<p>The fi
20a0: 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20  le format write 
20b0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65  version and file
20c0: 20 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72   format read ver
20d0: 73 69 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a  sion at offsets.
20e0: 31 38 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e  18 and 19 are in
20f0: 74 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20  tended to allow 
2100: 66 6f 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  for enhancements
2110: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72   of the file for
2120: 6d 61 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65  mat.in future ve
2130: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2140: 2e 20 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65  .  In current ve
2150: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2160: 2c 20 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20  , both of.these 
2170: 76 61 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72  values are 1 for
2180: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
2190: 6c 6c 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20  lling modes and 
21a0: 32 20 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72  2 for [WAL].jour
21b0: 6e 61 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49  nalling mode.  I
21c0: 66 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  f a version of S
21d0: 51 4c 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74  QLite coded to t
21e0: 68 65 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20  he current.file 
21f0: 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 63 61  format specifica
2200: 74 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20  tion encounters 
2210: 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
2220: 77 68 65 72 65 20 74 68 65 20 72 65 61 64 0a 76  where the read.v
2230: 65 72 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32  ersion is 1 or 2
2240: 20 62 75 74 20 74 68 65 20 77 72 69 74 65 20 76   but the write v
2250: 65 72 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65  ersion is greate
2260: 72 20 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74  r than 2, then t
2270: 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
2280: 20 6d 75 73 74 20 62 65 20 74 72 65 61 74 65 64   must be treated
2290: 20 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   as read-only.  
22a0: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69  If a database fi
22b0: 6c 65 20 77 69 74 68 20 61 20 72 65 61 64 20 76  le with a read v
22c0: 65 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74  ersion.greater t
22d0: 68 61 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74  han 2 is encount
22e0: 65 72 65 64 2c 20 74 68 65 6e 20 74 68 61 74 20  ered, then that 
22f0: 64 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20  database cannot 
2300: 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
2310: 65 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  en.</p>..<h3>Res
2320: 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20  erved bytes per 
2330: 70 61 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 51  page</h3>..<p>SQ
2340: 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69  Lite has the abi
2350: 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64  lity to set asid
2360: 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72  e a small number
2370: 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20   of extra bytes 
2380: 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76  at.the end of ev
2390: 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65  ery page for use
23a0: 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20   by extensions. 
23b0: 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74   These extra byt
23c0: 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72  es are.used, for
23d0: 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65   example, by the
23e0: 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69   SQLite Encrypti
23f0: 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20  on Extension to 
2400: 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e  store a nonce.an
2410: 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68  d/or cryptograph
2420: 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f  ic checksum asso
2430: 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68  ciated with each
2440: 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72   page.  ^The ."r
2450: 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20 73  eserved space" s
2460: 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74  ize in the 1-byt
2470: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
2480: 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e 75  set 20 is the nu
2490: 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66  mber.of bytes of
24a0: 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e   space at the en
24b0: 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 74  d of each page t
24c0: 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65 78  o reserve for ex
24d0: 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76  tensions..This v
24e0: 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20  alue is usually 
24f0: 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61  0.  The value ca
2500: 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c  n be odd.</p>..<
2510: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2520: 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61  usable_size {usa
2530: 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a  ble size}</tcl>.
2540: 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73  <p>The "usable s
2550: 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62 61  ize" of a databa
2560: 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20 70  se page is the p
2570: 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66 79  age size specify
2580: 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69   by the.2-byte i
2590: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
25a0: 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64 65   16 in the heade
25b0: 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73 65  r less the "rese
25c0: 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a 65  rved" space size
25d0: 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65  .recorded in the
25e0: 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   1-byte integer 
25f0: 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20  at offset 20 in 
2600: 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65  the header.  The
2610: 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20   usable.size of 
2620: 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65 20  a page might be 
2630: 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20  an odd number.  
2640: 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75  ^(However, the u
2650: 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f  sable size is no
2660: 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  t.allowed to be 
2670: 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20  less than 480.  
2680: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2690: 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  if the page size
26a0: 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68   is 512,.then th
26b0: 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  e reserved space
26c0: 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63   size cannot exc
26d0: 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c  eed 32.)^</p>..<
26e0: 68 33 3e 50 61 79 6c 6f 61 64 20 66 72 61 63 74  h3>Payload fract
26f0: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ions</h3>..<p>^T
2700: 68 65 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 6d  he maximum and m
2710: 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20  inimum embedded 
2720: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
2730: 73 20 61 6e 64 20 74 68 65 20 6c 65 61 66 0a 70  s and the leaf.p
2740: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 20  ayload fraction 
2750: 76 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 36  values must be 6
2760: 34 2c 20 33 32 2c 20 61 6e 64 20 33 32 2e 20 20  4, 32, and 32.  
2770: 54 68 65 73 65 20 76 61 6c 75 65 73 20 77 65 72  These values wer
2780: 65 0a 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 74  e.originally int
2790: 65 6e 64 65 64 20 74 6f 20 62 65 20 74 75 6e 61  ended to be tuna
27a0: 62 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  ble parameters t
27b0: 68 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65  hat could be use
27c0: 64 20 74 6f 0a 6d 6f 64 69 66 79 20 74 68 65 20  d to.modify the 
27d0: 73 74 6f 72 61 67 65 20 66 6f 72 6d 61 74 20 6f  storage format o
27e0: 66 20 74 68 65 20 62 2d 74 72 65 65 20 61 6c 67  f the b-tree alg
27f0: 6f 72 69 74 68 6d 2e 20 20 48 6f 77 65 76 65 72  orithm.  However
2800: 2c 20 74 68 61 74 0a 66 75 6e 63 74 69 6f 6e 61  , that.functiona
2810: 6c 69 74 79 20 69 73 20 6e 6f 74 20 73 75 70 70  lity is not supp
2820: 6f 72 74 65 64 20 61 6e 64 20 74 68 65 72 65 20  orted and there 
2830: 61 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 20 70  are no current p
2840: 6c 61 6e 73 20 74 6f 20 61 64 64 0a 73 75 70 70  lans to add.supp
2850: 6f 72 74 20 69 6e 20 74 68 65 20 66 75 74 75 72  ort in the futur
2860: 65 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 73 65  e.  Hence, these
2870: 20 74 68 72 65 65 20 62 79 74 65 73 20 61 72 65   three bytes are
2880: 20 66 69 78 65 64 20 61 74 20 74 68 65 0a 76 61   fixed at the.va
2890: 6c 75 65 73 20 73 70 65 63 69 66 69 65 64 2e 3c  lues specified.<
28a0: 2f 70 3e 0a 0a 3c 68 33 3e 46 69 6c 65 20 63 68  /p>..<h3>File ch
28b0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 33  ange counter</h3
28c0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
28d0: 65 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61  ent chngctr {cha
28e0: 6e 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63  nge counter}</tc
28f0: 6c 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20  l>.<p>^The file 
2900: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2910: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
2920: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
2930: 0a 6f 66 66 73 65 74 20 32 34 20 74 68 61 74 20  .offset 24 that 
2940: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2950: 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
2960: 62 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c  base file is unl
2970: 6f 63 6b 65 64 0a 61 66 74 65 72 20 68 61 76 69  ocked.after havi
2980: 6e 67 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64  ng been modified
2990: 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f  ..When two or mo
29a0: 72 65 20 70 72 6f 63 65 73 73 65 73 20 61 72 65  re processes are
29b0: 20 72 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d   reading the sam
29c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  e database file,
29d0: 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63   each .process c
29e0: 61 6e 20 64 65 74 65 63 74 20 64 61 74 61 62 61  an detect databa
29f0: 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  se changes from 
2a00: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
2a10: 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74  by monitoring .t
2a20: 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2a30: 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c  r..A process wil
2a40: 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20  l normally want 
2a50: 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74  to flush its dat
2a60: 61 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65  abase page cache
2a70: 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72   when.another pr
2a80: 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74  ocess modified t
2a90: 68 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e  he database, sin
2aa0: 63 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73  ce the cache has
2ab0: 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54   become stale..T
2ac0: 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63  he file change c
2ad0: 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74  ounter facilitat
2ae0: 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70  es this.</p>..<p
2af0: 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68  >In WAL mode, ch
2b00: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
2b10: 61 62 61 73 65 20 61 72 65 20 64 65 74 65 63 74  abase are detect
2b20: 65 64 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c  ed using the wal
2b30: 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68  -index.and so th
2b40: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2b50: 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20   is not needed. 
2b60: 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e   Hence, the chan
2b70: 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74  ge counter might
2b80: 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e  .not be incremen
2b90: 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e  ted on each tran
2ba0: 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d  saction in WAL m
2bb0: 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e  ode.</p>..<h3>In
2bc0: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2bd0: 20 73 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 74 63 6c   size</h3>..<tcl
2be0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 69 6c  >hd_fragment fil
2bf0: 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61 64 65 72  esize {in-header
2c00: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 7d 3c   database size}<
2c10: 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 34 2d  /tcl>.<p>^The 4-
2c20: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
2c30: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2c40: 74 20 32 38 20 69 6e 74 6f 20 74 68 65 20 68 65  t 28 into the he
2c50: 61 64 65 72 20 0a 73 74 6f 72 65 73 20 74 68 65  ader .stores the
2c60: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
2c70: 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61  abase file in pa
2c80: 67 65 73 2e 20 20 5e 49 66 20 74 68 69 73 20 69  ges.  ^If this i
2c90: 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 73 69 7a  n-header.datasiz
2ca0: 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61  e size is not va
2cb0: 6c 69 64 20 28 73 65 65 20 74 68 65 20 6e 65 78  lid (see the nex
2cc0: 74 20 70 61 72 61 67 72 61 70 68 29 2c 20 74 68  t paragraph), th
2cd0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
2ce0: 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70 75 74 65  .size is compute
2cf0: 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20  d by looking.at 
2d00: 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 20  the actual size 
2d10: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2d20: 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76 65 72 73  file. Older vers
2d30: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 69  ions of SQLite.i
2d40: 67 6e 6f 72 65 64 20 74 68 65 20 69 6e 2d 68 65  gnored the in-he
2d50: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2d60: 7a 65 20 61 6e 64 20 75 73 65 64 20 74 68 65 20  ze and used the 
2d70: 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65  actual file size
2d80: 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e 20 20 5e  .exclusively.  ^
2d90: 4e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Newer versions o
2da0: 66 20 53 51 4c 69 74 65 20 75 73 65 20 74 68 65  f SQLite use the
2db0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2dc0: 61 73 65 0a 73 69 7a 65 20 69 66 20 69 74 20 69  ase.size if it i
2dd0: 73 20 61 76 61 69 6c 61 62 6c 65 20 62 75 74 20  s available but 
2de0: 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68 65  fall back to the
2df0: 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a   actual file siz
2e00: 65 20 69 66 0a 74 68 65 20 69 6e 2d 68 65 61 64  e if.the in-head
2e10: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
2e20: 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 2e 3c 2f   is not valid.</
2e30: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 2d 68  p>..<p>^The in-h
2e40: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2e50: 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73  ize is only cons
2e60: 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c  idered to be val
2e70: 69 64 20 69 66 0a 69 74 20 69 73 20 6e 6f 6e 2d  id if.it is non-
2e80: 7a 65 72 6f 20 61 6e 64 20 69 66 20 74 68 65 20  zero and if the 
2e90: 34 2d 62 79 74 65 20 5b 63 68 61 6e 67 65 20 63  4-byte [change c
2ea0: 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66 66 73 65  ounter] at offse
2eb0: 74 20 32 34 0a 65 78 61 63 74 6c 79 20 6d 61 74  t 24.exactly mat
2ec0: 63 68 65 73 20 74 68 65 20 34 2d 62 79 74 65 20  ches the 4-byte 
2ed0: 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  [version-valid-f
2ee0: 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74 20 6f 66  or number] at of
2ef0: 66 73 65 74 20 39 32 2e 0a 5e 28 54 68 65 20 69  fset 92..^(The i
2f00: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2f10: 65 20 73 69 7a 65 20 69 73 20 61 6c 77 61 79 73  e size is always
2f20: 20 76 61 6c 69 64 20 0a 77 68 65 6e 20 74 68 65   valid .when the
2f30: 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 6e 6c   database is onl
2f40: 79 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  y modified using
2f50: 20 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73   recent versions
2f60: 20 6f 66 20 53 51 4c 69 74 65 2c 0a 76 65 72 73   of SQLite,.vers
2f70: 69 6f 6e 73 20 33 2e 37 2e 30 20 28 5b 64 61 74  ions 3.7.0 ([dat
2f80: 65 6f 66 3a 33 2e 37 2e 30 5d 29 20 61 6e 64 20  eof:3.7.0]) and 
2f90: 6c 61 74 65 72 2e 29 5e 0a 49 66 20 61 20 6c 65  later.)^.If a le
2fa0: 67 61 63 79 20 76 65 72 73 69 6f 6e 20 6f 66 20  gacy version of 
2fb0: 53 51 4c 69 74 65 20 77 72 69 74 65 73 20 74 6f  SQLite writes to
2fc0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 69   the database, i
2fd0: 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20  t will not.know 
2fe0: 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 69 6e  to update the in
2ff0: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
3000: 20 73 69 7a 65 20 61 6e 64 20 73 6f 20 74 68 65   size and so the
3010: 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62   in-header.datab
3020: 61 73 65 20 73 69 7a 65 20 63 6f 75 6c 64 20 62  ase size could b
3030: 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 20 42 75  e incorrect.  Bu
3040: 74 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e  t legacy version
3050: 73 20 6f 66 20 53 51 4c 69 74 65 0a 77 69 6c 6c  s of SQLite.will
3060: 20 61 6c 73 6f 20 6c 65 61 76 65 20 74 68 65 20   also leave the 
3070: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
3080: 72 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73  r number at offs
3090: 65 74 20 39 32 20 75 6e 63 68 61 6e 67 65 64 0a  et 92 unchanged.
30a0: 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 6d  so it will not m
30b0: 61 74 63 68 20 74 68 65 20 63 68 61 6e 67 65 2d  atch the change-
30c0: 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e 63 65 2c  counter.  Hence,
30d0: 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68 65 61 64   invalid in-head
30e0: 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65  er.database size
30f0: 73 20 63 61 6e 20 62 65 20 64 65 74 65 63 74 65  s can be detecte
3100: 64 20 28 61 6e 64 20 69 67 6e 6f 72 65 64 29 20  d (and ignored) 
3110: 62 79 20 6f 62 73 65 72 76 69 6e 67 20 77 68 65  by observing whe
3120: 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75  n.the change-cou
3130: 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  nter does not ma
3140: 74 63 68 20 74 68 65 20 76 65 72 73 69 6f 6e 2d  tch the version-
3150: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
3160: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 72 65 65 20  .</p>..<h3>Free 
3170: 70 61 67 65 20 6c 69 73 74 3c 2f 68 33 3e 0a 0a  page list</h3>..
3180: 3c 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20  <p>Unused pages 
3190: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
31a0: 66 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20  file are stored 
31b0: 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20  on a freelist.  
31c0: 5e 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d  ^The.4-byte big-
31d0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
31e0: 74 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72  t offset 32 stor
31f0: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
3200: 65 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20  er of.the first 
3210: 70 61 67 65 20 6f 66 20 74 68 65 20 66 72 65 65  page of the free
3220: 6c 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66  list, or zero if
3230: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 69 73   the freelist is
3240: 20 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62   empty..^The 4-b
3250: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3260: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3270: 20 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65   36 stores store
3280: 73 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d  s the total .num
3290: 62 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20  ber of pages on 
32a0: 74 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70  the freelist.</p
32b0: 3e 0a 0a 3c 68 33 3e 53 63 68 65 6d 61 20 63 6f  >..<h3>Schema co
32c0: 6f 6b 69 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  okie</h3>..<p>^T
32d0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
32e0: 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   is a 4-byte big
32f0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3300: 61 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61  at offset 40.tha
3310: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
3320: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
3330: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3340: 61 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61  anges.  A .prepa
3350: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
3360: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
3370: 74 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72  t a specific ver
3380: 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61  sion of the.data
3390: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68  base schema.  Wh
33a0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
33b0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
33c0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75  the statement.mu
33d0: 73 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64  st be reprepared
33e0: 2e 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61  .  ^When a prepa
33f0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75  red statement ru
3400: 6e 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65  ns, it first che
3410: 63 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63  cks.the schema c
3420: 6f 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20  ookie to ensure 
3430: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65  the value is the
3440: 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68   same as when th
3450: 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20  e statement.was 
3460: 70 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20  prepared and if 
3470: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
3480: 65 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74  e has changed, t
3490: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74  he statement eit
34a0: 68 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c  her.automaticall
34b0: 79 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64  y reprepares and
34c0: 20 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62   reruns or it ab
34d0: 6f 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51  orts with an [SQ
34e0: 4c 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72  LITE_SCHEMA] .er
34f0: 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ror.</p>..<tcl>h
3500: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65  d_fragment {sche
3510: 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d  maformat} {schem
3520: 61 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d  a format} {schem
3530: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d  a format number}
3540: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 63 68 65 6d  </tcl>.<h3>Schem
3550: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c  a format number<
3560: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68  /h3>..<p>The sch
3570: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
3580: 72 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69  r is a 4-byte bi
3590: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
35a0: 20 61 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54   at offset 44..T
35b0: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
35c0: 20 6e 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c   number is simil
35d0: 61 72 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66  ar to the file f
35e0: 6f 72 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77  ormat read and w
35f0: 72 69 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d  rite.version num
3600: 62 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20  bers at offsets 
3610: 31 38 20 61 6e 64 20 31 39 20 65 78 63 65 70 74  18 and 19 except
3620: 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61   that the schema
3630: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72   format number.r
3640: 65 66 65 72 73 20 74 6f 20 74 68 65 20 68 69 67  efers to the hig
3650: 68 2d 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d  h-level SQL form
3660: 61 74 74 69 6e 67 20 72 61 74 68 65 72 20 74 68  atting rather th
3670: 61 6e 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c  an the low-level
3680: 20 62 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69   b-tree.formatti
3690: 6e 67 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61  ng.  Four schema
36a0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20   format numbers 
36b0: 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65  are currently de
36c0: 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  fined:</p>..<ol>
36d0: 0a 3c 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72  .<li value=1>For
36e0: 6d 61 74 20 31 20 69 73 20 75 6e 64 65 72 73 74  mat 1 is underst
36f0: 6f 6f 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69  ood by all versi
3700: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61  ons of SQLite ba
3710: 63 6b 20 74 6f 0a 5b 76 65 72 73 69 6f 6e 20 33  ck to.[version 3
3720: 2e 30 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  .0.0] ([dateof:3
3730: 2e 30 2e 30 5d 29 2e 3c 2f 6c 69 3e 0a 3c 6c 69  .0.0]).</li>.<li
3740: 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20   value=2>Format 
3750: 32 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69  2 adds the abili
3760: 74 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69  ty of rows withi
3770: 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
3780: 0a 74 6f 20 68 61 76 65 20 61 20 76 61 72 79 69  .to have a varyi
3790: 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ng number of col
37a0: 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74  umns, in order t
37b0: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41  o support the.[A
37c0: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
37d0: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
37e0: 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f   COLUMN] functio
37f0: 6e 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74  nality.  Support
3800: 20 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64   for.reading and
3810: 20 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20   writing format 
3820: 32 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  2 was added in S
3830: 51 4c 69 74 65 20 0a 5b 76 65 72 73 69 6f 6e 20  QLite .[version 
3840: 33 2e 31 2e 33 5d 20 6f 6e 20 5b 64 61 74 65 6f  3.1.3] on [dateo
3850: 66 3a 33 2e 31 2e 33 5d 2e 3c 2f 6c 69 3e 0a 3c  f:3.1.3].</li>.<
3860: 6c 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61  li value=3>Forma
3870: 74 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69  t 3 adds the abi
3880: 6c 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f  lity of extra co
3890: 6c 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b  lumns added by.[
38a0: 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c  ALTER TABLE | AL
38b0: 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44  TER TABLE ... AD
38c0: 44 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76  D COLUMN] to hav
38d0: 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  e non-NULL defau
38e0: 6c 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73  lt.values.  This
38f0: 20 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20   capability was 
3900: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
3910: 5b 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 5d 0a  [version 3.1.4].
3920: 6f 6e 20 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 34  on [dateof:3.1.4
3930: 5d 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75  ].</li>.<li valu
3940: 65 3d 34 3e 5e 46 6f 72 6d 61 74 20 34 20 63 61  e=4>^Format 4 ca
3950: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 72  uses SQLite to r
3960: 65 73 70 65 63 74 20 74 68 65 0a 5b 64 65 73 63  espect the.[desc
3970: 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 20 7c  ending indexes |
3980: 20 44 45 53 43 20 6b 65 79 77 6f 72 64 5d 20 6f   DESC keyword] o
3990: 6e 0a 69 6e 64 65 78 20 64 65 63 6c 61 72 61 74  n.index declarat
39a0: 69 6f 6e 73 2e 20 20 28 5e 54 68 65 20 44 45 53  ions.  (^The DES
39b0: 43 20 6b 65 79 77 6f 72 64 20 69 73 20 69 67 6e  C keyword is ign
39c0: 6f 72 65 64 20 69 6e 20 69 6e 64 65 78 65 73 20  ored in indexes 
39d0: 66 6f 72 20 0a 66 6f 72 6d 61 74 73 20 31 2c 20  for .formats 1, 
39e0: 32 2c 20 61 6e 64 20 33 2e 29 0a 5e 46 6f 72 6d  2, and 3.).^Form
39f0: 61 74 20 34 20 61 6c 73 6f 20 61 64 64 73 20 74  at 4 also adds t
3a00: 77 6f 20 6e 65 77 20 62 6f 6f 6c 65 61 6e 20 72  wo new boolean r
3a10: 65 63 6f 72 64 20 74 79 70 65 20 76 61 6c 75 65  ecord type value
3a20: 73 20 28 5b 73 65 72 69 61 6c 20 74 79 70 65 73  s ([serial types
3a30: 5d 0a 38 20 61 6e 64 20 39 29 2e 20 20 53 75 70  ].8 and 9).  Sup
3a40: 70 6f 72 74 20 66 6f 72 20 66 6f 72 6d 61 74 20  port for format 
3a50: 34 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  4 was added in S
3a60: 51 4c 69 74 65 20 33 2e 33 2e 30 20 6f 6e 0a 32  QLite 3.3.0 on.2
3a70: 30 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c 69 3e 0a  006-01-10.</li>.
3a80: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65 77 20 64  </ol>..<p>^New d
3a90: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
3aa0: 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  eated by SQLite 
3ab0: 75 73 65 20 66 6f 72 6d 61 74 20 34 20 62 79 20  use format 4 by 
3ac0: 64 65 66 61 75 6c 74 2e 0a 5e 54 68 65 20 5b 6c  default..^The [l
3ad0: 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61  egacy_file_forma
3ae0: 74 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65  t pragma] can be
3af0: 20 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 53   used to cause S
3b00: 51 4c 69 74 65 0a 74 6f 20 63 72 65 61 74 65 20  QLite.to create 
3b10: 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
3b20: 65 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74 20  es using format 
3b30: 31 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20 76 65  1..The format ve
3b40: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 63 61 6e  rsion number can
3b50: 20 62 65 20 6d 61 64 65 20 74 6f 20 64 65 66 61   be made to defa
3b60: 75 6c 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  ult to 1 instead
3b70: 20 6f 66 20 34 20 62 79 0a 73 65 74 74 69 6e 67   of 4 by.setting
3b80: 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54   [SQLITE_DEFAULT
3b90: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 5d 3d 31 20  _FILE_FORMAT]=1 
3ba0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  at compile-time.
3bb0: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 67 67 65  .</p>..<h3>Sugge
3bc0: 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c  sted cache size<
3bd0: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62  /h3>..<p>The 4-b
3be0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73  yte big-endian s
3bf0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74  igned integer at
3c00: 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68   offset 48 is th
3c10: 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68  e suggested.cach
3c20: 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20  e size in pages 
3c30: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
3c40: 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75   file.  The valu
3c50: 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f  e is a suggestio
3c60: 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74  n.only and SQLit
3c70: 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62  e is under no ob
3c80: 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f  ligation to hono
3c90: 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c  r it.  The absol
3ca0: 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65  ute value.of the
3cb0: 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64   integer is used
3cc0: 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65   as the suggeste
3cd0: 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67  d size.  The sug
3ce0: 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a  gested cache siz
3cf0: 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69  e.can be set usi
3d00: 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f  ng the [default_
3d10: 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d  cache_size pragm
3d20: 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 63  a].</p>..<h3>Inc
3d30: 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
3d40: 73 65 74 74 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c  settings</h3>..<
3d50: 70 3e 54 68 65 20 74 77 6f 20 34 2d 62 79 74 65  p>The two 4-byte
3d60: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
3d70: 67 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20  gers at offsets 
3d80: 35 32 20 61 6e 64 20 36 34 20 61 72 65 20 75 73  52 and 64 are us
3d90: 65 64 0a 74 6f 20 6d 61 6e 61 67 65 20 74 68 65  ed.to manage the
3da0: 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61   [auto_vacuum] a
3db0: 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f  nd [incremental_
3dc0: 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 2e 20 20  vacuum] modes.  
3dd0: 5e 49 66 0a 74 68 65 20 69 6e 74 65 67 65 72 20  ^If.the integer 
3de0: 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20  at offset 52 is 
3df0: 7a 65 72 6f 20 74 68 65 6e 20 70 6f 69 6e 74 65  zero then pointe
3e00: 72 2d 6d 61 70 20 28 70 74 72 6d 61 70 29 20 70  r-map (ptrmap) p
3e10: 61 67 65 73 20 61 72 65 0a 6f 6d 69 74 74 65 64  ages are.omitted
3e20: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
3e30: 73 65 20 66 69 6c 65 20 61 6e 64 20 6e 65 69 74  se file and neit
3e40: 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  her auto_vacuum 
3e50: 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 5f  nor.incremental_
3e60: 76 61 63 75 75 6d 20 61 72 65 20 73 75 70 70 6f  vacuum are suppo
3e70: 72 74 65 64 2e 20 20 5e 49 66 20 74 68 65 20 69  rted.  ^If the i
3e80: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3e90: 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65 72 6f 20   52 is.non-zero 
3ea0: 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 70  then it is the p
3eb0: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
3ec0: 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 70  e largest root p
3ed0: 61 67 65 20 69 6e 20 74 68 65 0a 64 61 74 61 62  age in the.datab
3ee0: 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 64 61  ase file, the da
3ef0: 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 6c 6c  tabase file will
3f00: 20 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20   contain ptrmap 
3f10: 70 61 67 65 73 2c 20 61 6e 64 20 74 68 65 0a 6d  pages, and the.m
3f20: 6f 64 65 20 6d 75 73 74 20 62 65 20 65 69 74 68  ode must be eith
3f30: 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6f  er auto_vacuum o
3f40: 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  r incremental_va
3f50: 63 75 75 6d 2e 20 20 5e 49 6e 20 74 68 69 73 20  cuum.  ^In this 
3f60: 6c 61 74 74 65 72 0a 63 61 73 65 2c 20 74 68 65  latter.case, the
3f70: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3f80: 65 74 20 36 34 20 69 73 20 74 72 75 65 20 66 6f  et 64 is true fo
3f90: 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  r incremental_va
3fa0: 63 75 75 6d 20 61 6e 64 0a 66 61 6c 73 65 20 66  cuum and.false f
3fb0: 6f 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 2e 20  or auto_vacuum. 
3fc0: 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65 72   ^If the integer
3fd0: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73   at offset 52 is
3fe0: 20 7a 65 72 6f 20 74 68 65 6e 0a 74 68 65 20 69   zero then.the i
3ff0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
4000: 20 36 34 20 6d 75 73 74 20 61 6c 73 6f 20 62 65   64 must also be
4010: 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   zero.</p>..<tcl
4020: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 6e 63  >hd_fragment enc
4030: 20 7b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 7d   {text encoding}
4040: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 65 78 74 20  </tcl>.<h3>Text 
4050: 65 6e 63 6f 64 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  encoding</h3>..<
4060: 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  p>^The 4-byte bi
4070: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4080: 20 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65   at offset 56 de
4090: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63  termines the enc
40a0: 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61  oding.used for a
40b0: 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20  ll text strings 
40c0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
40d0: 74 61 62 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c  tabase.  .^A val
40e0: 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 20 55 54  ue of 1 means UT
40f0: 46 2d 38 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  F-8..^A value of
4100: 20 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c   2 means UTF-16l
4110: 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 33  e..^A value of 3
4120: 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e   means UTF-16be.
4130: 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65 73  .No other values
4140: 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28   are allowed..^(
4150: 54 68 65 20 73 71 6c 69 74 65 33 2e 68 20 68 65  The sqlite3.h he
4160: 61 64 65 72 20 66 69 6c 65 20 64 65 66 69 6e 65  ader file define
4170: 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  s C-preprocessor
4180: 20 6d 61 63 72 6f 73 20 53 51 4c 49 54 45 5f 55   macros SQLITE_U
4190: 54 46 38 20 61 73 20 31 2c 0a 53 51 4c 49 54 45  TF8 as 1,.SQLITE
41a0: 5f 55 54 46 31 36 4c 45 20 61 73 20 32 2c 20 61  _UTF16LE as 2, a
41b0: 6e 64 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  nd SQLITE_UTF16B
41c0: 45 20 61 73 20 33 2c 20 74 6f 20 75 73 65 20 69  E as 3, to use i
41d0: 6e 20 70 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e  n place of.the n
41e0: 75 6d 65 72 69 63 20 63 6f 64 65 73 20 66 6f 72  umeric codes for
41f0: 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
4200: 6e 67 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55  ng.)^</p>..<h3>U
4210: 73 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ser version numb
4220: 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h3>..<p>^The
4230: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4240: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4250: 66 73 65 74 20 36 30 20 69 73 20 74 68 65 20 75  fset 60 is the u
4260: 73 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63  ser version whic
4270: 68 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75 65  h.is set and que
4280: 72 69 65 64 20 62 79 20 74 68 65 20 5b 75 73 65  ried by the [use
4290: 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61  r_version pragma
42a0: 5d 2e 20 20 54 68 65 20 75 73 65 72 20 76 65 72  ].  The user ver
42b0: 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64  sion is.not used
42c0: 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a   by SQLite.</p>.
42d0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
42e0: 74 20 61 70 70 69 64 20 7b 41 70 70 6c 69 63 61  t appid {Applica
42f0: 74 69 6f 6e 20 49 44 7d 3c 2f 74 63 6c 3e 0a 3c  tion ID}</tcl>.<
4300: 68 33 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20 49  h3>Application I
4310: 44 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  D</h3>..<p>^The 
4320: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4330: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
4340: 73 65 74 20 36 38 20 69 73 20 61 6e 20 22 41 70  set 68 is an "Ap
4350: 70 6c 69 63 61 74 69 6f 6e 20 49 44 22 20 74 68  plication ID" th
4360: 61 74 0a 63 61 6e 20 62 65 20 73 65 74 20 62 79  at.can be set by
4370: 20 74 68 65 20 5b 50 52 41 47 4d 41 20 61 70 70   the [PRAGMA app
4380: 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 20 63 6f 6d  lication_id] com
4390: 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  mand in order to
43a0: 20 69 64 65 6e 74 69 66 79 20 74 68 65 0a 64 61   identify the.da
43b0: 74 61 62 61 73 65 20 61 73 20 62 65 6c 6f 6e 67  tabase as belong
43c0: 69 6e 67 20 74 6f 20 6f 72 20 61 73 73 6f 63 69  ing to or associ
43d0: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
43e0: 69 63 75 6c 61 72 20 61 70 70 6c 69 63 61 74 69  icular applicati
43f0: 6f 6e 2e 0a 54 68 65 20 61 70 70 6c 69 63 61 74  on..The applicat
4400: 69 6f 6e 20 49 44 20 69 73 20 69 6e 74 65 6e 64  ion ID is intend
4410: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
4420: 66 69 6c 65 73 20 75 73 65 64 20 61 73 20 61 6e  files used as an
4430: 0a 5b 61 70 70 6c 69 63 61 74 69 6f 6e 20 66 69  .[application fi
4440: 6c 65 2d 66 6f 72 6d 61 74 5d 2e 20 20 54 68 65  le-format].  The
4450: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 20   application ID 
4460: 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 75  can be used by u
4470: 74 69 6c 69 74 69 65 73 20 0a 73 75 63 68 20 61  tilities .such a
4480: 73 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 64 61  s [http://www.da
4490: 72 77 69 6e 73 79 73 2e 63 6f 6d 2f 66 69 6c 65  rwinsys.com/file
44a0: 2f 20 7c 20 66 69 6c 65 28 31 29 5d 20 74 6f 20  / | file(1)] to 
44b0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 70  determine the sp
44c0: 65 63 69 66 69 63 0a 66 69 6c 65 20 74 79 70 65  ecific.file type
44d0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 73   rather than jus
44e0: 74 20 72 65 70 6f 72 74 69 6e 67 20 22 53 51 4c  t reporting "SQL
44f0: 69 74 65 33 20 44 61 74 61 62 61 73 65 22 2e 20  ite3 Database". 
4500: 20 41 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67   A list of.assig
4510: 6e 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ned application 
4520: 49 44 73 20 63 61 6e 20 62 65 20 73 65 65 6e 20  IDs can be seen 
4530: 62 79 20 63 6f 6e 73 75 6c 74 69 6e 67 20 74 68  by consulting th
4540: 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  e.[http://www.sq
4550: 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 61 72 74  lite.org/src/art
4560: 69 66 61 63 74 3f 63 69 3d 74 72 75 6e 6b 26 66  ifact?ci=trunk&f
4570: 69 6c 65 6e 61 6d 65 3d 6d 61 67 69 63 2e 74 78  ilename=magic.tx
4580: 74 7c 6d 61 67 69 63 2e 74 78 74 5d 0a 66 69 6c  t|magic.txt].fil
4590: 65 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20  e in the SQLite 
45a0: 73 6f 75 72 63 65 20 72 65 70 6f 73 69 74 6f 72  source repositor
45b0: 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  y.</p>..<tcl>hd_
45c0: 66 72 61 67 6d 65 6e 74 20 76 61 6c 69 64 66 6f  fragment validfo
45d0: 72 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  r {version-valid
45e0: 2d 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f 74 63  -for number}</tc
45f0: 6c 3e 0a 3c 68 33 3e 57 72 69 74 65 20 6c 69 62  l>.<h3>Write lib
4600: 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rary version num
4610: 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d  ber and version-
4620: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
4630: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h3>..<p>^The 4
4640: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4650: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
4660: 65 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65  et 96 stores the
4670: 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   .[SQLITE_VERSIO
4680: 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20  N_NUMBER] value 
4690: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
46a0: 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74  ibrary that most
46b0: 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69  .recently modifi
46c0: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
46d0: 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79  file.  ^The 4-by
46e0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
46f0: 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20  teger at.offset 
4700: 39 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  92 is the value 
4710: 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63  of the [change c
4720: 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65  ounter] when the
4730: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a   version number.
4740: 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65  was stored.  The
4750: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
4760: 65 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20  et 92 indicates 
4770: 77 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f  which transactio
4780: 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75  n.the version nu
4790: 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f  mber is valid fo
47a0: 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d  r and is sometim
47b0: 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76  es called the."v
47c0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
47d0: 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 33 3e 48   number"...<h3>H
47e0: 65 61 64 65 72 20 73 70 61 63 65 20 72 65 73 65  eader space rese
47f0: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
4800: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6c 6c 20  on</h3>..<p>All 
4810: 6f 74 68 65 72 20 62 79 74 65 73 20 6f 66 20 74  other bytes of t
4820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4830: 20 68 65 61 64 65 72 20 61 72 65 20 72 65 73 65   header are rese
4840: 72 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65 20  rved for.future 
4850: 65 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d 75  expansion and mu
4860: 73 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65 72  st be set to zer
4870: 6f 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 54 68 65 20  o.</p>..<h2>The 
4880: 4c 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f  Lock-Byte Page</
4890: 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b  h2>..<p>The lock
48a0: 2d 62 79 74 65 20 70 61 67 65 20 69 73 20 74 68  -byte page is th
48b0: 65 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66  e single page of
48c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
48d0: 6c 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le.that contains
48e0: 20 74 68 65 20 62 79 74 65 73 20 61 74 20 6f 66   the bytes at of
48f0: 66 73 65 74 73 20 62 65 74 77 65 65 6e 20 31 30  fsets between 10
4900: 37 33 37 34 31 38 32 34 20 61 6e 64 20 31 30 37  73741824 and 107
4910: 33 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69  3742335,.inclusi
4920: 76 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20  ve.  A database 
4930: 66 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73  file that is les
4940: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
4950: 74 6f 20 31 30 37 33 37 34 31 38 32 34 20 62 79  to 1073741824 by
4960: 74 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e  tes .in size con
4970: 74 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79  tains no lock-by
4980: 74 65 20 70 61 67 65 2e 20 20 41 20 64 61 74 61  te page.  A data
4990: 62 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72  base file larger
49a0: 20 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34   than.1073741824
49b0: 20 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c   contains exactl
49c0: 79 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20  y one lock-byte 
49d0: 70 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  page..</p>..<p>T
49e0: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
49f0: 65 20 69 73 20 73 65 74 20 61 73 69 64 65 20 66  e is set aside f
4a00: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6f 70  or use by the op
4a10: 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73  erating-system s
4a20: 70 65 63 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d  pecific.[VFS] im
4a30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20  plementation in 
4a40: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
4a50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c   database file l
4a60: 6f 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  ocking primitive
4a70: 73 2e 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73 20  s..^SQLite does 
4a80: 6e 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b  not use the lock
4a90: 2d 62 79 74 65 20 70 61 67 65 2e 20 20 5e 54 68  -byte page.  ^Th
4aa0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 0a 77  e SQLite core .w
4ab0: 69 6c 6c 20 6e 65 76 65 72 20 72 65 61 64 20 6f  ill never read o
4ac0: 72 20 77 72 69 74 65 20 74 68 65 20 6c 6f 63 6b  r write the lock
4ad0: 2d 62 79 74 65 20 70 61 67 65 2c 0a 74 68 6f 75  -byte page,.thou
4ae0: 67 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73  gh operating-sys
4af0: 74 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56 46  tem specific [VF
4b00: 53 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69  S] .implementati
4b10: 6f 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20 74  ons may choose t
4b20: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
4b30: 62 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63  bytes on the loc
4b40: 6b 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63 63  k-byte .page acc
4b50: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e  ording to the .n
4b60: 65 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69 76  eeds and procliv
4b70: 69 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64  ities of the und
4b80: 65 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20  erlying system. 
4b90: 20 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69   The unix and wi
4ba0: 6e 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d  n32.[VFS] implem
4bb0: 65 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20 63  entations that c
4bc0: 6f 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20 53  ome built into S
4bd0: 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72 69  QLite do not wri
4be0: 74 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62  te to the.lock-b
4bf0: 79 74 65 20 70 61 67 65 2c 20 62 75 74 20 74 68  yte page, but th
4c00: 69 72 64 2d 70 61 72 74 79 20 56 46 53 20 69 6d  ird-party VFS im
4c10: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f  plementations fo
4c20: 72 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69 6e  r.other operatin
4c30: 67 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74 2e  g systems might.
4c40: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63  </p>..<p>The loc
4c50: 6b 2d 62 79 74 65 20 70 61 67 65 20 61 72 6f 73  k-byte page aros
4c60: 65 20 66 72 6f 6d 20 74 68 65 20 6e 65 65 64 20  e from the need 
4c70: 74 6f 20 73 75 70 70 6f 72 74 20 57 69 6e 39 35  to support Win95
4c80: 20 77 68 69 63 68 20 77 61 73 20 74 68 65 0a 70   which was the.p
4c90: 72 65 64 6f 6d 69 6e 61 6e 74 20 6f 70 65 72 61  redominant opera
4ca0: 74 69 6e 67 20 73 79 73 74 65 6d 20 77 68 65 6e  ting system when
4cb0: 20 74 68 69 73 20 66 69 6c 65 20 66 6f 72 6d 61   this file forma
4cc0: 74 20 77 61 73 20 64 65 73 69 67 6e 65 64 20 61  t was designed a
4cd0: 6e 64 20 77 68 69 63 68 20 0a 6f 6e 6c 79 20 73  nd which .only s
4ce0: 75 70 70 6f 72 74 65 64 20 6d 61 6e 64 61 74 6f  upported mandato
4cf0: 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 2e  ry file locking.
4d00: 20 20 41 6c 6c 20 6d 6f 64 65 72 6e 20 6f 70 65    All modern ope
4d10: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 20 74  rating systems t
4d20: 68 61 74 0a 77 65 20 6b 6e 6f 77 20 6f 66 20 73  hat.we know of s
4d30: 75 70 70 6f 72 74 20 61 64 76 69 73 6f 72 79 20  upport advisory 
4d40: 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 2c 20 61 6e  file locking, an
4d50: 64 20 73 6f 20 74 68 65 20 6c 6f 63 6b 2d 62 79  d so the lock-by
4d60: 74 65 20 70 61 67 65 20 69 73 0a 6e 6f 74 20 72  te page is.not r
4d70: 65 61 6c 6c 79 20 6e 65 65 64 65 64 20 61 6e 79  eally needed any
4d80: 20 6d 6f 72 65 2c 20 62 75 74 20 69 73 20 72 65   more, but is re
4d90: 74 61 69 6e 65 64 20 66 6f 72 20 62 61 63 6b 77  tained for backw
4da0: 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
4db0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ty.</p>..<tcl>hd
4dc0: 5f 66 72 61 67 6d 65 6e 74 20 7b 66 72 65 65 6c  _fragment {freel
4dd0: 69 73 74 7d 20 7b 66 72 65 65 6c 69 73 74 7d 20  ist} {freelist} 
4de0: 7b 66 72 65 65 2d 70 61 67 65 20 6c 69 73 74 7d  {free-page list}
4df0: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 54 68 65 20 46  </tcl>.<h2>The F
4e00: 72 65 65 6c 69 73 74 3c 2f 68 32 3e 0a 0a 3c 70  reelist</h2>..<p
4e10: 3e 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  >A database file
4e20: 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f   might contain o
4e30: 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73  ne or more pages
4e40: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e   that are not in
4e50: 0a 61 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e  .active use.  Un
4e60: 75 73 65 64 20 70 61 67 65 73 20 63 61 6e 20 63  used pages can c
4e70: 6f 6d 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65  ome about, for e
4e80: 78 61 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66  xample, when inf
4e90: 6f 72 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65  ormation.is dele
4ea0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
4eb0: 61 62 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70  abase.  Unused p
4ec0: 61 67 65 73 20 61 72 65 20 73 74 6f 72 65 64 20  ages are stored 
4ed0: 6f 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a  on the freelist.
4ee0: 61 6e 64 20 61 72 65 20 72 65 75 73 65 64 20 77  and are reused w
4ef0: 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  hen additional p
4f00: 61 67 65 73 20 61 72 65 20 72 65 71 75 69 72 65  ages are require
4f10: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66  d.</p>..<p>The f
4f20: 72 65 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e  reelist is organ
4f30: 69 7a 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64  ized as a linked
4f40: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73   list of freelis
4f50: 74 20 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69  t trunk pages.wi
4f60: 74 68 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61  th each trunk pa
4f70: 67 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  ges containing p
4f80: 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
4f90: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65  zero or more fre
4fa0: 65 6c 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73  elist.leaf pages
4fb0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
4fc0: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20  list trunk page 
4fd0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
4fe0: 72 72 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62  rray of 4-byte b
4ff0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
5000: 72 73 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20  rs..The size of 
5010: 74 68 65 20 61 72 72 61 79 20 69 73 20 61 73 20  the array is as 
5020: 6d 61 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73  many integers as
5030: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
5040: 20 75 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66   usable space.of
5050: 20 61 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69   a page.  The mi
5060: 6e 69 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61  nimum usable spa
5070: 63 65 20 69 73 20 34 38 30 20 62 79 74 65 73 20  ce is 480 bytes 
5080: 73 6f 20 74 68 65 20 61 72 72 61 79 20 77 69 6c  so the array wil
5090: 6c 20 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c  l always.be at l
50a0: 65 61 73 74 20 31 32 30 20 65 6e 74 72 69 65 73  east 120 entries
50b0: 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68   in length.  ^Th
50c0: 65 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20  e first integer 
50d0: 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74 72  on a freelist tr
50e0: 75 6e 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20  unk.page is the 
50f0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
5100: 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74  he next freelist
5110: 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74   trunk page in t
5120: 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20  he list or zero 
5130: 0a 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20  .if this is the 
5140: 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20 74 72  last freelist tr
5150: 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20  unk page.  ^The 
5160: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f  second integer o
5170: 6e 20 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75  n a freelist.tru
5180: 6e 6b 20 70 61 67 65 20 69 73 20 74 68 65 20 6e  nk page is the n
5190: 75 6d 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61  umber of leaf pa
51a0: 67 65 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66  ge pointers to f
51b0: 6f 6c 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20  ollow.  .^(Call 
51c0: 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67  the second integ
51d0: 65 72 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74  er on a freelist
51e0: 20 74 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49   trunk page L..I
51f0: 66 20 4c 20 69 73 20 67 72 65 61 74 65 72 20 74  f L is greater t
5200: 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e  han zero then in
5210: 74 65 67 65 72 73 20 77 69 74 68 20 61 72 72 61  tegers with arra
5220: 79 20 69 6e 64 65 78 65 73 20 62 65 74 77 65 65  y indexes betwee
5230: 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c  n 2 and.L+1 incl
5240: 75 73 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61  usive contain pa
5250: 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66  ge numbers for f
5260: 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67  reelist leaf pag
5270: 65 73 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72  es.)^</p>..<p>Fr
5280: 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65  eelist leaf page
5290: 73 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66  s contain no inf
52a0: 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69  ormation.  ^SQLi
52b0: 74 65 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e  te avoids readin
52c0: 67 20 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65  g or.writing fre
52d0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
52e0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64   in order to red
52f0: 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70  uce disk I/O.</p
5300: 3e 0a 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53  >..<p>A bug in S
5310: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70  QLite versions p
5320: 72 69 6f 72 20 74 6f 20 33 2e 36 2e 30 20 28 5b  rior to 3.6.0 ([
5330: 64 61 74 65 6f 66 3a 33 2e 36 2e 30 5d 29 0a 63  dateof:3.6.0]).c
5340: 61 75 73 65 64 20 74 68 65 20 64 61 74 61 62 61  aused the databa
5350: 73 65 20 74 6f 20 62 65 0a 72 65 70 6f 72 74 65  se to be.reporte
5360: 64 20 61 73 20 63 6f 72 72 75 70 74 20 69 66 20  d as corrupt if 
5370: 61 6e 79 20 6f 66 20 74 68 65 20 6c 61 73 74 20  any of the last 
5380: 36 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  6 entries in the
5390: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
53a0: 70 61 67 65 20 0a 61 72 72 61 79 20 63 6f 6e 74  page .array cont
53b0: 61 69 6e 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76  ained non-zero v
53c0: 61 6c 75 65 73 2e 20 20 4e 65 77 65 72 20 76 65  alues.  Newer ve
53d0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
53e0: 20 64 6f 20 6e 6f 74 20 68 61 76 65 0a 74 68 69   do not have.thi
53f0: 73 20 70 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77  s problem.  ^How
5400: 65 76 65 72 2c 20 6e 65 77 65 72 20 76 65 72 73  ever, newer vers
5410: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 73  ions of SQLite s
5420: 74 69 6c 6c 20 61 76 6f 69 64 20 75 73 69 6e 67  till avoid using
5430: 20 74 68 65 20 0a 6c 61 73 74 20 73 69 78 20 65   the .last six e
5440: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
5450: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
5460: 65 20 61 72 72 61 79 20 69 6e 20 6f 72 64 65 72  e array in order
5470: 20 74 68 61 74 20 64 61 74 61 62 61 73 65 0a 66   that database.f
5480: 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79 20  iles created by 
5490: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  newer versions o
54a0: 66 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65 20  f SQLite can be 
54b0: 72 65 61 64 20 62 79 20 6f 6c 64 65 72 20 76 65  read by older ve
54c0: 72 73 69 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65  rsions.of SQLite
54d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
54e0: 75 6d 62 65 72 20 6f 66 20 66 72 65 65 6c 69 73  umber of freelis
54f0: 74 20 70 61 67 65 73 20 69 73 20 73 74 6f 72 65  t pages is store
5500: 64 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  d as a 4-byte bi
5510: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
5520: 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .in the database
5530: 20 68 65 61 64 65 72 20 61 74 20 61 6e 20 6f 66   header at an of
5540: 66 73 65 74 20 6f 66 20 33 36 20 66 72 6f 6d 20  fset of 36 from 
5550: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
5560: 20 74 68 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20   the file..^The 
5570: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
5580: 61 6c 73 6f 20 73 74 6f 72 65 73 20 74 68 65 20  also stores the 
5590: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
55a0: 68 65 20 66 69 72 73 74 20 66 72 65 65 6c 69 73  he first freelis
55b0: 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 61 73 20  t trunk.page as 
55c0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
55d0: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 61  ian integer at a
55e0: 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 32 20 66  n offset of 32 f
55f0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
5600: 67 0a 6f 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f  g.of the file.</
5610: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
5620: 6d 65 6e 74 20 62 74 72 65 65 20 7b 42 2a 2d 54  ment btree {B*-T
5630: 72 65 65 73 7d 20 7b 42 2d 74 72 65 65 7d 3c 2f  rees} {B-tree}</
5640: 74 63 6c 3e 0a 3c 68 32 3e 42 2d 74 72 65 65 20  tcl>.<h2>B-tree 
5650: 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54  Pages</h2>..<p>T
5660: 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f 72 69  he b-tree algori
5670: 74 68 6d 20 70 72 6f 76 69 64 65 73 20 6b 65 79  thm provides key
5680: 2f 64 61 74 61 20 73 74 6f 72 61 67 65 20 77 69  /data storage wi
5690: 74 68 20 75 6e 69 71 75 65 20 61 6e 64 0a 6f 72  th unique and.or
56a0: 64 65 72 65 64 20 6b 65 79 73 20 6f 6e 20 70 61  dered keys on pa
56b0: 67 65 2d 6f 72 69 65 6e 74 65 64 20 73 74 6f 72  ge-oriented stor
56c0: 61 67 65 20 64 65 76 69 63 65 73 2e 0a 46 6f 72  age devices..For
56d0: 20 62 61 63 6b 67 72 6f 75 6e 64 20 69 6e 66 6f   background info
56e0: 72 6d 61 74 69 6f 6e 20 6f 6e 20 62 2d 74 72 65  rmation on b-tre
56f0: 65 73 2c 20 73 65 65 0a 4b 6e 75 74 68 2c 20 3c  es, see.Knuth, <
5700: 75 3e 54 68 65 20 41 72 74 20 4f 66 20 43 6f 6d  u>The Art Of Com
5710: 70 75 74 65 72 20 50 72 6f 67 72 61 6d 6d 69 6e  puter Programmin
5720: 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d 65 20 33 20  g</u>, Volume 3 
5730: 22 53 6f 72 74 69 6e 67 0a 61 6e 64 20 53 65 61  "Sorting.and Sea
5740: 72 63 68 69 6e 67 22 2c 20 70 61 67 65 73 20 34  rching", pages 4
5750: 37 31 2d 34 37 39 2e 20 20 54 77 6f 20 6b 69 6e  71-479.  Two kin
5760: 64 73 20 6f 66 20 62 2d 74 72 65 65 73 20 61 72  ds of b-trees ar
5770: 65 20 75 73 65 64 20 62 79 0a 53 51 4c 69 74 65  e used by.SQLite
5780: 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d  .  The algorithm
5790: 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c   that Knuth call
57a0: 73 20 22 42 2a 2d 54 72 65 65 22 20 73 74 6f 72  s "B*-Tree" stor
57b0: 65 73 20 61 6c 6c 20 64 61 74 61 0a 69 6e 20 74  es all data.in t
57c0: 68 65 20 6c 65 61 76 65 73 20 6f 66 20 74 68 65  he leaves of the
57d0: 20 74 72 65 65 2e 20 20 53 51 4c 69 74 65 20 63   tree.  SQLite c
57e0: 61 6c 6c 73 20 74 68 69 73 20 76 61 72 69 65 74  alls this variet
57f0: 79 20 6f 66 20 62 2d 74 72 65 65 0a 61 20 22 74  y of b-tree.a "t
5800: 61 62 6c 65 20 62 2d 74 72 65 65 22 2e 20 54 68  able b-tree". Th
5810: 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74  e algorithm that
5820: 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20 73 69 6d   Knuth calls sim
5830: 70 6c 79 20 22 42 2d 54 72 65 65 22 0a 73 74 6f  ply "B-Tree".sto
5840: 72 65 73 20 62 6f 74 68 20 74 68 65 20 6b 65 79  res both the key
5850: 20 61 6e 64 20 74 68 65 20 64 61 74 61 20 74 6f   and the data to
5860: 67 65 74 68 65 72 20 69 6e 20 62 6f 74 68 20 6c  gether in both l
5870: 65 61 76 65 73 0a 61 6e 64 20 69 6e 20 69 6e 74  eaves.and in int
5880: 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20 49 6e  erior pages.  In
5890: 20 74 68 65 20 53 51 4c 69 74 65 20 69 6d 70 6c   the SQLite impl
58a0: 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
58b0: 6f 72 69 67 69 6e 61 6c 0a 42 2d 54 72 65 65 20  original.B-Tree 
58c0: 61 6c 67 6f 72 69 74 68 6d 20 73 74 6f 72 65 73  algorithm stores
58d0: 20 6b 65 79 73 20 6f 6e 6c 79 2c 20 6f 6d 69 74   keys only, omit
58e0: 74 69 6e 67 20 74 68 65 20 64 61 74 61 20 65 6e  ting the data en
58f0: 74 69 72 65 6c 79 2c 20 61 6e 64 0a 69 73 20 63  tirely, and.is c
5900: 61 6c 6c 65 64 20 61 6e 20 22 69 6e 64 65 78 20  alled an "index 
5910: 62 2d 74 72 65 65 22 2e 0a 0a 3c 70 3e 41 20 62  b-tree"...<p>A b
5920: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 65 69  -tree page is ei
5930: 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69 6f 72  ther an interior
5940: 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61 66 20   page or a leaf 
5950: 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70 61 67  page..A leaf pag
5960: 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79 73 20  e contains keys 
5970: 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73 65 20  and in the case 
5980: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
5990: 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73 20 61  e each.key has a
59a0: 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 2e 20  ssociated data. 
59b0: 20 41 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   An interior pag
59c0: 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79  e contains.K key
59d0: 73 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  s together with 
59e0: 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  K+1 pointers to 
59f0: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
5a00: 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65 72 22 20  es..A "pointer" 
5a10: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
5a20: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 6a 75  -tree page is ju
5a30: 73 74 20 74 68 65 20 33 31 2d 62 69 74 20 69 6e  st the 31-bit in
5a40: 74 65 67 65 72 0a 70 61 67 65 20 6e 75 6d 62 65  teger.page numbe
5a50: 72 20 6f 66 20 74 68 65 20 63 68 69 6c 64 20 70  r of the child p
5a60: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 65 66  age.</p>..<p>Def
5a70: 69 6e 65 20 74 68 65 20 64 65 70 74 68 0a 6f 66  ine the depth.of
5a80: 20 61 20 6c 65 61 66 20 62 2d 74 72 65 65 20 74   a leaf b-tree t
5a90: 6f 20 62 65 20 31 20 61 6e 64 20 74 68 65 20 64  o be 1 and the d
5aa0: 65 70 74 68 20 6f 66 20 61 6e 79 20 69 6e 74 65  epth of any inte
5ab0: 72 69 6f 72 20 62 2d 74 72 65 65 20 74 6f 20 62  rior b-tree to b
5ac0: 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  e one.more than 
5ad0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74  the maximum dept
5ae0: 68 20 6f 66 20 61 6e 79 20 6f 66 20 69 74 73 20  h of any of its 
5af0: 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e 20 61  children.  ^In a
5b00: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64 61 74   well-formed.dat
5b10: 61 62 61 73 65 2c 20 61 6c 6c 20 63 68 69 6c 64  abase, all child
5b20: 72 65 6e 20 6f 66 20 61 6e 20 69 6e 74 65 72 69  ren of an interi
5b30: 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65 20 74  or b-tree have t
5b40: 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f  he same depth.</
5b50: 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74  p>..<p>In an int
5b60: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5b70: 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20  e, the pointers 
5b80: 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c  and keys logical
5b90: 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77 69  ly alternate .wi
5ba0: 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20  th a pointer on 
5bb0: 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65 20  both ends. (The 
5bc0: 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63  previous sentenc
5bd0: 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65 72  e is to be under
5be0: 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c  stood.conceptual
5bf0: 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c 20  ly - the actual 
5c00: 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b 65  layout of the ke
5c10: 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20  ys and.pointers 
5c20: 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65 20  within the page 
5c30: 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
5c40: 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65 20  ted and will be 
5c50: 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
5c60: 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b   sequel.)  All k
5c70: 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  eys within the s
5c80: 61 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e 69  ame page are uni
5c90: 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67 69  que and are logi
5ca0: 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64 20  cally.organized 
5cb0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
5cc0: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
5cd0: 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c 20  right.  (Again, 
5ce0: 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69 73  this ordering.is
5cf0: 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70 68   logical, not ph
5d00: 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63 74  ysical.  The act
5d10: 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  ual location of 
5d20: 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20  keys within the 
5d30: 70 61 67 65 0a 69 73 20 61 72 62 69 74 72 61 72  page.is arbitrar
5d40: 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65 79  y.) ^For any key
5d50: 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   X, pointers to 
5d60: 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58 20  the left.of a X 
5d70: 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65 20  refer to b-tree 
5d80: 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20 61  pages on which a
5d90: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73 73  ll keys are less
5da0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
5db0: 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20 74  o X..^Pointers t
5dc0: 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 58  o the right of X
5dd0: 20 72 65 66 65 72 20 74 6f 20 70 61 67 65 73 20   refer to pages 
5de0: 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20 61  where all keys a
5df0: 72 65 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e  re .greater than
5e00: 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68   X.</p>..<p>With
5e10: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
5e20: 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68  -tree page, each
5e30: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69   key and the poi
5e40: 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65  nter to its.imme
5e50: 64 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63  diate left are c
5e60: 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
5e70: 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
5e80: 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72  a "cell".  The.r
5e90: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
5ea0: 72 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61  r is held separa
5eb0: 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d  tely.  A leaf b-
5ec0: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f  tree page has no
5ed0: 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69  .pointers, but i
5ee0: 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65  t still uses the
5ef0: 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20   cell structure 
5f00: 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72  to hold keys for
5f10: 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f  .index b-trees o
5f20: 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65  r keys and conte
5f30: 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74  nt for table b-t
5f40: 72 65 65 73 2e 20 20 44 61 74 61 20 69 73 20 61  rees.  Data is a
5f50: 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lso.contained in
5f60: 20 74 68 65 20 63 65 6c 6c 2e 0a 3c 2f 70 3e 0a   the cell..</p>.
5f70: 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65  .<p>Every b-tree
5f80: 20 70 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73   page has at mos
5f90: 74 20 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74  t one parent b-t
5fa0: 72 65 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72  ree page..A b-tr
5fb0: 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20  ee page without 
5fc0: 61 20 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c  a parent is call
5fd0: 65 64 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20  ed a root page. 
5fe0: 20 41 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70   A root b-tree p
5ff0: 61 67 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74  age.together wit
6000: 68 20 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66  h the closure of
6010: 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f   its children fo
6020: 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d  rm a complete b-
6030: 74 72 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73  tree..It is poss
6040: 69 62 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63  ible (and in fac
6050: 74 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29  t rather common)
6060: 20 74 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c   to have a compl
6070: 65 74 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20  ete b-tree.that 
6080: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69  consists of a si
6090: 6e 67 6c 65 20 70 61 67 65 20 74 68 61 74 20 69  ngle page that i
60a0: 73 20 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e  s both a leaf an
60b0: 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61  d the root..Beca
60c0: 75 73 65 20 74 68 65 72 65 20 61 72 65 20 70 6f  use there are po
60d0: 69 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65  inters from pare
60e0: 6e 74 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c  nts to children,
60f0: 20 65 76 65 72 79 20 70 61 67 65 20 6f 66 20 61   every page of a
6100: 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65  .complete b-tree
6110: 20 63 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20   can be located 
6120: 69 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74  if only the root
6130: 20 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20   page is known. 
6140: 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20   Hence,.b-trees 
6150: 61 72 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  are identified b
6160: 79 20 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67  y their root pag
6170: 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c  e number.</p>..<
6180: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
6190: 69 73 20 65 69 74 68 65 72 20 61 20 74 61 62 6c  is either a tabl
61a0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72  e b-tree page or
61b0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
61c0: 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73   page..All pages
61d0: 20 77 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d   within each com
61e0: 70 6c 65 74 65 20 62 2d 74 72 65 65 20 61 72 65  plete b-tree are
61f0: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79 70   of the same typ
6200: 65 3a 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a  e: either table.
6210: 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65  or index.  There
6220: 20 69 73 20 6f 6e 65 20 74 61 62 6c 65 20 62 2d   is one table b-
6230: 74 72 65 65 73 20 69 6e 20 74 68 65 20 64 61 74  trees in the dat
6240: 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 20 65  abase file.for e
6250: 61 63 68 20 72 6f 77 69 64 20 74 61 62 6c 65 20  ach rowid table 
6260: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6270: 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e  schema, includin
6280: 67 20 73 79 73 74 65 6d 20 74 61 62 6c 65 73 0a  g system tables.
6290: 73 75 63 68 20 61 73 20 73 71 6c 69 74 65 5f 6d  such as sqlite_m
62a0: 61 73 74 65 72 2e 20 20 54 68 65 72 65 20 69 73  aster.  There is
62b0: 20 6f 6e 65 20 69 6e 64 65 78 20 62 2d 74 72 65   one index b-tre
62c0: 65 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e.in the databas
62d0: 65 20 66 69 6c 65 20 66 6f 72 20 65 61 63 68 20  e file for each 
62e0: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 73 63 68  index in the sch
62f0: 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ema, including i
6300: 6d 70 6c 69 65 64 20 69 6e 64 65 78 65 73 0a 63  mplied indexes.c
6310: 72 65 61 74 65 64 20 62 79 20 75 6e 69 71 75 65  reated by unique
6320: 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 73  ness constraints
6330: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 20  .  There are no 
6340: 62 2d 74 72 65 65 73 20 61 73 73 6f 63 69 61 74  b-trees associat
6350: 65 64 20 77 69 74 68 0a 5b 76 69 72 74 75 61 6c  ed with.[virtual
6360: 20 74 61 62 6c 65 73 5d 2e 20 20 53 70 65 63 69   tables].  Speci
6370: 66 69 63 20 76 69 72 74 75 61 6c 20 74 61 62 6c  fic virtual tabl
6380: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6390: 73 20 6d 69 67 68 74 20 6d 61 6b 65 20 75 73 65  s might make use
63a0: 0a 6f 66 20 5b 73 68 61 64 6f 77 20 74 61 62 6c  .of [shadow tabl
63b0: 65 73 5d 20 66 6f 72 20 73 74 6f 72 61 67 65 2c  es] for storage,
63c0: 20 62 75 74 20 74 68 6f 73 65 20 73 68 61 64 6f   but those shado
63d0: 77 20 74 61 62 6c 65 73 20 77 69 6c 6c 20 68 61  w tables will ha
63e0: 76 65 20 73 65 70 61 72 61 74 65 0a 65 6e 74 72  ve separate.entr
63f0: 69 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ies in the datab
6400: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5b 57 49  ase schema.  [WI
6410: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
6420: 6c 65 73 20 75 73 65 20 69 6e 64 65 78 20 62 2d  les use index b-
6430: 74 72 65 65 73 0a 72 61 74 68 65 72 20 74 68 61  trees.rather tha
6440: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
6450: 73 2c 20 73 6f 20 74 68 65 72 65 20 69 73 20 6f  s, so there is o
6460: 6e 65 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 20  ne.index b-tree 
6470: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6480: 66 69 6c 65 20 66 6f 72 20 65 61 63 68 20 5b 57  file for each [W
6490: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
64a0: 62 6c 65 2e 0a 54 68 65 20 62 2d 74 72 65 65 20  ble..The b-tree 
64b0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
64c0: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
64d0: 65 72 20 74 61 62 6c 65 20 69 73 20 61 6c 77 61  er table is alwa
64e0: 79 73 20 61 20 74 61 62 6c 65 0a 62 2d 74 72 65  ys a table.b-tre
64f0: 65 20 61 6e 64 20 61 6c 77 61 79 73 20 68 61 73  e and always has
6500: 20 61 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20   a root page of 
6510: 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  1..The sqlite_ma
6520: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
6530: 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ins the root pag
6540: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 76 65  e number for eve
6550: 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c 65 20  ry other .table 
6560: 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74 68 65  and index in the
6570: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
6580: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74  /p>..<p>Each ent
6590: 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20 62 2d  ry in a table b-
65a0: 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  tree consists of
65b0: 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64   a 64-bit signed
65c0: 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61 6e 64   integer key.and
65d0: 20 75 70 20 74 6f 20 32 31 34 37 34 38 33 36 34   up to 214748364
65e0: 37 20 62 79 74 65 73 20 6f 66 20 61 72 62 69 74  7 bytes of arbit
65f0: 72 61 72 79 20 64 61 74 61 2e 20 20 28 54 68 65  rary data.  (The
6600: 20 6b 65 79 20 6f 66 20 61 20 74 61 62 6c 65 20   key of a table 
6610: 62 2d 74 72 65 65 0a 63 6f 72 72 65 73 70 6f 6e  b-tree.correspon
6620: 64 73 20 74 6f 20 74 68 65 20 5b 72 6f 77 69 64  ds to the [rowid
6630: 5d 20 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62  ] of the SQL tab
6640: 6c 65 20 74 68 61 74 20 74 68 65 20 62 2d 74 72  le that the b-tr
6650: 65 65 20 69 6d 70 6c 65 6d 65 6e 74 73 2e 29 0a  ee implements.).
6660: 49 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62  Interior table b
6670: 2d 74 72 65 65 73 20 68 6f 6c 64 20 6f 6e 6c 79  -trees hold only
6680: 20 6b 65 79 73 20 61 6e 64 20 70 6f 69 6e 74 65   keys and pointe
6690: 72 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e 0a  rs to children..
66a0: 41 6c 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74  All data is cont
66b0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61 62  ained in the tab
66c0: 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73  le b-tree leaves
66d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65  .</p>..<p>Each e
66e0: 6e 74 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78  ntry in an index
66f0: 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73   b-tree consists
6700: 20 6f 66 20 61 6e 20 61 72 62 69 74 72 61 72 79   of an arbitrary
6710: 20 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31   key of up.to 21
6720: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 69  47483647 bytes i
6730: 6e 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20  n length and no 
6740: 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  data.</p>..<tcl>
6750: 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c  hd_fragment cell
6760: 5f 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70  _payload {cell p
6770: 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70  ayload}</tcl>.<p
6780: 3e 44 65 66 69 6e 65 20 74 68 65 20 22 70 61 79  >Define the "pay
6790: 6c 6f 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20  load" of a cell 
67a0: 74 6f 20 62 65 20 74 68 65 20 61 72 62 69 74 72  to be the arbitr
67b0: 61 72 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69  ary length secti
67c0: 6f 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20  on.of the cell. 
67d0: 20 46 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d   For an index b-
67e0: 74 72 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73  tree, the key is
67f0: 20 61 6c 77 61 79 73 20 61 72 62 69 74 72 61 72   always arbitrar
6800: 79 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20  y in length.and 
6810: 68 65 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61  hence the payloa
6820: 64 20 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54  d is the key.  T
6830: 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69  here are no arbi
6840: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65  trary length ele
6850: 6d 65 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c  ments.in the cel
6860: 6c 73 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74  ls of interior t
6870: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6880: 73 20 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63  s and so those c
6890: 65 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79  ells have no.pay
68a0: 6c 6f 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74  load.  Table b-t
68b0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 63  ree leaf pages c
68c0: 6f 6e 74 61 69 6e 20 61 72 62 69 74 72 61 72 79  ontain arbitrary
68d0: 20 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20   length content 
68e0: 61 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73  and.so for cells
68f0: 20 6f 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20   on those pages 
6900: 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74  the payload is t
6910: 68 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57  he content..<p>W
6920: 68 65 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20  hen the size of 
6930: 70 61 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65  payload for a ce
6940: 6c 6c 20 65 78 63 65 65 64 73 20 61 20 63 65 72  ll exceeds a cer
6950: 74 61 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28  tain threshold (
6960: 74 6f 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61  to.be defined la
6970: 74 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ter) then only t
6980: 68 65 20 66 69 72 73 74 20 66 65 77 20 62 79 74  he first few byt
6990: 65 73 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  es of the payloa
69a0: 64 0a 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20  d.are stored on 
69b0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
69c0: 61 6e 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20  and the balance 
69d0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  is stored in a l
69e0: 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f  inked list.of co
69f0: 6e 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70  ntent overflow p
6a00: 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  ages.</p>..<p>A 
6a10: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 64  b-tree page is d
6a20: 69 76 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69  ivided into regi
6a30: 6f 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ons in the follo
6a40: 77 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c  wing order:..<ol
6a50: 3e 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79  >.<li>The 100-by
6a60: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
6a70: 20 68 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f   header (found o
6a80: 6e 20 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c  n page 1 only).<
6a90: 6c 69 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62  li>The 8 or 12 b
6aa0: 79 74 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  yte b-tree page 
6ab0: 68 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63  header.<li>The c
6ac0: 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61  ell pointer arra
6ad0: 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65  y.<li>Unallocate
6ae0: 64 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20  d space.<li>The 
6af0: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
6b00: 61 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76  a.<li>The reserv
6b10: 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e  ed region..</ol>
6b20: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30  .</p>..<p>The 10
6b30: 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20  0-byte database 
6b40: 66 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 66  file header is f
6b50: 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67  ound only on pag
6b60: 65 20 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c  e 1, which is.al
6b70: 77 61 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74  ways a table b-t
6b80: 72 65 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f  ree page.  All o
6b90: 74 68 65 72 20 62 2d 74 72 65 65 20 70 61 67 65  ther b-tree page
6ba0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
6bb0: 65 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73  e file.omit this
6bc0: 20 31 30 30 2d 62 79 74 65 20 68 65 61 64 65 72   100-byte header
6bd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
6be0: 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73  served region is
6bf0: 20 61 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73   an area of unus
6c00: 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65 20  ed space at the 
6c10: 65 6e 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67  end of every.pag
6c20: 65 20 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f  e (except the lo
6c30: 63 6b 69 6e 67 20 70 61 67 65 29 20 74 68 61 74  cking page) that
6c40: 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20   extensions can 
6c50: 75 73 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d  use to hold per-
6c60: 70 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  page.information
6c70: 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66 20  .  ^The size of 
6c80: 74 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67  the reserved reg
6c90: 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ion is determine
6ca0: 64 20 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74  d by the one-byt
6cb0: 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e.unsigned integ
6cc0: 65 72 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f  er found at an o
6cd0: 66 66 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f  ffset of 20 into
6ce0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6cf0: 6c 65 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73  le header..The s
6d00: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
6d10: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73  ved region is us
6d20: 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  ually zero.</p>.
6d30: 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70  .<p>The b-tree p
6d40: 61 67 65 20 68 65 61 64 65 72 20 69 73 20 38 20  age header is 8 
6d50: 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f  bytes in size fo
6d60: 72 20 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64  r leaf pages and
6d70: 20 31 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e   12.bytes for in
6d80: 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41  terior pages.  A
6d90: 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c  ll multibyte val
6da0: 75 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ues in the page 
6db0: 68 65 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65  header.are big-e
6dc0: 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65  ndian..The b-tre
6dd0: 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73  e page header is
6de0: 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65   composed of the
6df0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64   following field
6e00: 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
6e10: 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20  .<i>B-tree Page 
6e20: 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69  Header Format</i
6e30: 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  ><br>.<table bor
6e40: 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25  der=1 width="80%
6e50: 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65  ">.<tr><th>Offse
6e60: 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73  t<th>Size<th>Des
6e70: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  cription.<tr><td
6e80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6e90: 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c  lign=top>0<td al
6ea0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6eb0: 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e  n=top>1<td align
6ec0: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d  =left>.^The one-
6ed0: 62 79 74 65 20 66 6c 61 67 20 61 74 20 6f 66 66  byte flag at off
6ee0: 73 65 74 20 30 20 69 6e 64 69 63 61 74 69 6e 67  set 0 indicating
6ef0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6f00: 20 74 79 70 65 2e 3c 75 6c 3e 0a 3c 6c 69 3e 5e   type.<ul>.<li>^
6f10: 41 20 76 61 6c 75 65 20 6f 66 20 32 20 28 30 78  A value of 2 (0x
6f20: 30 32 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61  02) means the pa
6f30: 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f  ge is an interio
6f40: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  r index b-tree p
6f50: 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75  age..<li>^A valu
6f60: 65 20 6f 66 20 35 20 28 30 78 30 35 29 20 6d 65  e of 5 (0x05) me
6f70: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6f80: 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c  an interior tabl
6f90: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  e b-tree page..<
6fa0: 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20 31  li>^A value of 1
6fb0: 30 20 28 30 78 30 61 29 20 6d 65 61 6e 73 20 74  0 (0x0a) means t
6fc0: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
6fd0: 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  f index b-tree p
6fe0: 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75  age..<li>^A valu
6ff0: 65 20 6f 66 20 31 33 20 28 30 78 30 64 29 20 6d  e of 13 (0x0d) m
7000: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
7010: 20 61 20 6c 65 61 66 20 74 61 62 6c 65 20 62 2d   a leaf table b-
7020: 74 72 65 65 20 70 61 67 65 2e 3c 2f 75 6c 3e 0a  tree page.</ul>.
7030: 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65  ^Any other value
7040: 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20   for the b-tree 
7050: 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e 20  page type is an 
7060: 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20 61  error..<tr><td a
7070: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7080: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
7090: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
70a0: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
70b0: 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79  eft>.^The two-by
70c0: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
70d0: 66 73 65 74 20 31 20 67 69 76 65 73 20 74 68 65  fset 1 gives the
70e0: 20 73 74 61 72 74 20 6f 66 20 74 68 65 0a 66 69   start of the.fi
70f0: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 20 6f 6e  rst freeblock on
7100: 20 74 68 65 20 70 61 67 65 2c 20 6f 72 20 69 73   the page, or is
7110: 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61   zero if there a
7120: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7130: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
7140: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7150: 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>3<td align=cen
7160: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
7170: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
7180: 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e  ^The two-byte in
7190: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
71a0: 33 20 67 69 76 65 73 20 74 68 65 20 6e 75 6d 62  3 gives the numb
71b0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
71c0: 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64  he page..<tr><td
71d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
71e0: 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c  lign=top>5<td al
71f0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7200: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
7210: 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 74 77 6f  =left>.^(The two
7220: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
7230: 20 6f 66 66 73 65 74 20 35 20 64 65 73 69 67 6e   offset 5 design
7240: 61 74 65 73 20 74 68 65 20 73 74 61 72 74 20 6f  ates the start o
7250: 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  f the cell conte
7260: 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a 65 72 6f  nt.area.  A zero
7270: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69 73 20   value for this 
7280: 69 6e 74 65 67 65 72 20 69 73 20 69 6e 74 65 72  integer is inter
7290: 70 72 65 74 65 64 20 61 73 20 36 35 35 33 36 2e  preted as 65536.
72a0: 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  )^.<tr><td align
72b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
72c0: 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>7<td align=ce
72d0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
72e0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
72f0: 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 69  .^The one-byte i
7300: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
7310: 20 37 20 67 69 76 65 73 20 74 68 65 20 6e 75 6d   7 gives the num
7320: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
7330: 64 20 66 72 65 65 0a 62 79 74 65 73 20 77 69 74  d free.bytes wit
7340: 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hin the cell con
7350: 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74 72 3e 3c  tent area..<tr><
7360: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7370: 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20  valign=top>8<td 
7380: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7390: 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69  ign=top>4<td ali
73a0: 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 66  gn=left>.^(The f
73b0: 6f 75 72 2d 62 79 74 65 20 70 61 67 65 20 6e 75  our-byte page nu
73c0: 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74 20 38  mber at offset 8
73d0: 20 69 73 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   is the right-mo
73e0: 73 74 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 69  st pointer.  Thi
73f0: 73 0a 76 61 6c 75 65 20 61 70 70 65 61 72 73 20  s.value appears 
7400: 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  in the header of
7410: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
7420: 20 70 61 67 65 73 20 6f 6e 6c 79 20 61 6e 64 20   pages only and 
7430: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 0a  is omitted from.
7440: 61 6c 6c 20 6f 74 68 65 72 20 70 61 67 65 73 2e  all other pages.
7450: 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  )^.</table></cen
7460: 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65  ter>..<p>^The ce
7470: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
7480: 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67   of a b-tree pag
7490: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
74a0: 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65  llows the b-tree
74b0: 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c  .page header.  L
74c0: 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62  et K be the numb
74d0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
74e0: 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20  he btree.  ^The 
74f0: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72  cell pointer.arr
7500: 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b  ay consists of K
7510: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
7520: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63  offsets to the c
7530: 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e  ell contents.  ^
7540: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
7550: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
7560: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
7570: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
7580: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
7590: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
75a0: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
75b0: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
75c0: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
75d0: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
75e0: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
75f0: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
7600: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
7610: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
7620: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7630: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
7640: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
7650: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
7660: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
7670: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
7680: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
7690: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
76a0: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
76b0: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
76c0: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
76d0: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
76e0: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
76f0: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
7700: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
7710: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
7720: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
7730: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
7740: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61  /p>..<p>^If a pa
7750: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  ge contains no c
7760: 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f  ells (which is o
7770: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  nly possible for
7780: 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20   a root page.of 
7790: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
77a0: 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74  tains no rows) t
77b0: 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74  hen the offset t
77c0: 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e 74 65  o the.cell conte
77d0: 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65 71 75  nt area will equ
77e0: 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  al the page size
77f0: 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73   minus the bytes
7800: 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61   of reserved spa
7810: 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64 61 74  ce..^(If the dat
7820: 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35  abase uses a 655
7830: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
7840: 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76  e and the reserv
7850: 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f  ed space is zero
7860: 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75  .(the usual valu
7870: 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73  e for reserved s
7880: 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63  pace) then the c
7890: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73  ell content offs
78a0: 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70  et of an.empty p
78b0: 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20  age wants to be 
78c0: 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72  65536.  .However
78d0: 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69  , that integer i
78e0: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
78f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d  e stored in a.2-
7900: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
7910: 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75  teger, so a valu
7920: 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69  e of 0 is used i
7930: 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a  n its place.)^..
7940: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69  <p>A freeblock i
7950: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73  s a structure us
7960: 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75  ed to identify u
7970: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
7980: 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65   within.a b-tree
7990: 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63   page.  Freebloc
79a0: 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64  ks are organized
79b0: 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54   as a chain.  ^T
79c0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
79d0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
79e0: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
79f0: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
7a00: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
7a10: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
7a20: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
7a30: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
7a40: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
7a50: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
7a60: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
7a70: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69  chain.  ^The thi
7a80: 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79  rd and fourth by
7a90: 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65  tes of each free
7aa0: 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67  block form.a big
7ab0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
7ac0: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
7ad0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
7ae0: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
7af0: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
7b00: 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65  e header.  ^Free
7b10: 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79  blocks are alway
7b20: 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f  s connected in o
7b30: 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73  rder .of increas
7b40: 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68  ing offset.  ^Th
7b50: 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f  e second field o
7b60: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7b70: 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a  e header is the.
7b80: 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69  offset of the fi
7b90: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f  rst freeblock, o
7ba0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  r zero if there 
7bb0: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
7bc0: 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20  s on the.page.  
7bd0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7be0: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  d b-tree page, t
7bf0: 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  here will always
7c00: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
7c10: 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65   cell.before the
7c20: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
7c30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
7c40: 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61  block requires a
7c50: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
7c60: 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68  of space.  If th
7c70: 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  ere is an isolat
7c80: 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32  ed.group of 1, 2
7c90: 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79  , or 3 unused by
7ca0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7cb0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7cc0: 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f  , those bytes.co
7cd0: 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e  mprise a fragmen
7ce0: 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e  t.  ^The total n
7cf0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
7d00: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
7d10: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
7d20: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
7d30: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7d40: 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77  header.  ^In a w
7d50: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7d60: 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61  e page,.the tota
7d70: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7d80: 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d  s in fragments m
7d90: 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30  ay not exceed 60
7da0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f  .</p>..<p>The to
7db0: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72  tal amount of fr
7dc0: 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d  ee space on a b-
7dd0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73  tree page consis
7de0: 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f  ts of the size.o
7df0: 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  f the unallocate
7e00: 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68  d region plus th
7e10: 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20  e total size of 
7e20: 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70  all freeblocks p
7e30: 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  lus the.number o
7e40: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
7e50: 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74  e bytes.  ^SQLit
7e60: 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20  e may from time 
7e70: 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69  to time reorgani
7e80: 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  ze.a b-tree page
7e90: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61   so that there a
7ea0: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7eb0: 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74   or fragment byt
7ec0: 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62  es, all.unused b
7ed0: 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ytes are contain
7ee0: 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f  ed in the unallo
7ef0: 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69  cated space regi
7f00: 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c  on, and all.cell
7f10: 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67  s are packed tig
7f20: 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20  htly at the end 
7f30: 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68  of the page.  Th
7f40: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64  is is called ."d
7f50: 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68  efragmenting" th
7f60: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f  e b-tree page.</
7f70: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
7f80: 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72  ment varint {var
7f90: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7fa0: 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f  eger} {varint}</
7fb0: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61  tcl>..<p>A varia
7fc0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7fd0: 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69  er or "varint" i
7fe0: 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d  s a static Huffm
7ff0: 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36  an encoding.of 6
8000: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
8010: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74  ement integers t
8020: 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70  hat uses less sp
8030: 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f  ace for small po
8040: 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20  sitive .values. 
8050: 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74  .A varint is bet
8060: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
8070: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54  es in length.  T
8080: 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73  he varint consis
8090: 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72  ts of either.zer
80a0: 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  o or more bytes 
80b0: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68  which have the h
80c0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
80d0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
80e0: 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68  single byte.with
80f0: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
8100: 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69  bit clear, or ni
8110: 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65  ne bytes, whiche
8120: 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a  ver is shorter..
8130: 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20  The lower seven 
8140: 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20  bits of each of 
8150: 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20  the first eight 
8160: 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20  bytes and all 8 
8170: 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74  bits of.the nint
8180: 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20  h byte are used 
8190: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74  to reconstruct t
81a0: 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  he 64-bit twos-c
81b0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
81c0: 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62  r..Varints are b
81d0: 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20  ig-endian: bits 
81e0: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65  taken from the e
81f0: 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74  arlier byte of t
8200: 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68  he varint.are th
8210: 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61  e more significa
8220: 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74 61 6b  nt than bits tak
8230: 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65  en from the late
8240: 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  r bytes. </p>..<
8250: 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  p>The format of 
8260: 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f  a cell depends o
8270: 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20  n which kind of 
8280: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20  b-tree page the 
8290: 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e  cell.appears on.
82a0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
82b0: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
82c0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65  elements of a ce
82d0: 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20  ll, in.order of 
82e0: 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20  appearance, for 
82f0: 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72  the various b-tr
8300: 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 0a 0a  ee page types...
8310: 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  <dl>.<dt><p>Tabl
8320: 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  e B-Tree Leaf Ce
8330: 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 64 29  ll (header 0x0d)
8340: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
8350: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
8360: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
8370: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
8380: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
8390: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
83a0: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20  .overflow.<li>A 
83b0: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
83c0: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c  the integer key,
83d0: 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d   a.k.a. "[rowid]
83e0: 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  ".<li>The initia
83f0: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8400: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8410: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
8420: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8430: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8440: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8450: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8460: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
8470: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
8480: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
8490: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
84a0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
84b0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
84c0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
84d0: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
84e0: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68 65  nterior Cell (he
84f0: 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70 3e 3c  ader 0x05):</p><
8500: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8510: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8520: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
8530: 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68  mber which is th
8540: 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69  e left child poi
8550: 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69  nter..<li>A vari
8560: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
8570: 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c  integer key.</ul
8580: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
8590: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
85a0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
85b0: 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0a):</p></dt
85c0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
85d0: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
85e0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
85f0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8600: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
8610: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
8620: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
8630: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8640: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8650: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8660: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
8670: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
8680: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
8690: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
86a0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
86b0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
86c0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
86d0: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
86e0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
86f0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8700: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8710: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8720: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20  e Interior Cell 
8730: 28 68 65 61 64 65 72 20 30 78 30 32 29 3a 3c 2f  (header 0x02):</
8740: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
8750: 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  ul>.<li>A 4-byte
8760: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
8770: 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
8780: 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20   the left child 
8790: 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76  pointer..<li>A v
87a0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
87b0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
87c0: 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20  of bytes of key 
87d0: 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69  payload, includi
87e0: 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a  ng any.overflow.
87f0: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
8800: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
8810: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
8820: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
8830: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
8840: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8850: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
8860: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
8870: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
8880: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
8890: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
88a0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
88b0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
88c0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
88d0: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c  p></dd>.</dl>..<
88e0: 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  p>The informatio
88f0: 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20 72  n above can be r
8900: 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74 61 62  ecast into a tab
8910: 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c  le format as fol
8920: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  lows:</p>..<tcl>
8930: 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c  hd_fragment cell
8940: 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72  format {cell for
8950: 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63  mat summary}</tc
8960: 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42  l>.<center>.<i>B
8970: 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61  -tree Cell Forma
8980: 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  t</i>.<table bor
8990: 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25  der=1 width="80%
89a0: 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70  ">.<tr><th rowsp
89b0: 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a 20 20  an=2>Datatype.  
89c0: 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e    <th colspan=4>
89d0: 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20  Appears in....  
89e0: 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e    <th rowspan=2>
89f0: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
8a00: 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66 20 28  <th>Table Leaf (
8a10: 30 78 30 64 29 0a 20 20 20 20 3c 74 68 3e 54 61  0x0d).    <th>Ta
8a20: 62 6c 65 20 49 6e 74 65 72 69 6f 72 20 28 30 78  ble Interior (0x
8a30: 30 35 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65  05).    <th>Inde
8a40: 78 20 4c 65 61 66 20 28 30 78 30 61 29 0a 20 20  x Leaf (0x0a).  
8a50: 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e 74 65    <th>Index Inte
8a60: 72 69 6f 72 20 28 30 78 30 32 29 0a 3c 74 72 3e  rior (0x02).<tr>
8a70: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a80: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79   valign=top>4-by
8a90: 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c  te integer.    <
8aa0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8ab0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8ac0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8ad0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8ae0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8af0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8b00: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8b10: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8b20: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8b30: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8b40: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61  td align=left>Pa
8b50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66  ge number of lef
8b60: 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20  t child.<tr><td 
8b70: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8b80: 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20  ign=top>varint. 
8b90: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8ba0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8bb0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8bc0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8bd0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8be0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8bf0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8c00: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8c10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8c20: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8c30: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
8c40: 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79  eft>Number of by
8c50: 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c  tes of payload.<
8c60: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8c70: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76  ter valign=top>v
8c80: 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c  arint.    <td al
8c90: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8ca0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8cb0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8cc0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8cd0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8ce0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8cf0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8d00: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8d10: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8d20: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8d30: 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c  ign=left>Rowid.<
8d40: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8d50: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62  ter valign=top>b
8d60: 79 74 65 20 61 72 72 61 79 0a 20 20 20 20 3c 74  yte array.    <t
8d70: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8d80: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8d90: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8da0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8db0: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
8dc0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8dd0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8de0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8df0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8e00: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8e10: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50  <td align=left>P
8e20: 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61  ayload.<tr><td a
8e30: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8e40: 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e  gn=top>4-byte in
8e50: 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c  teger.    <td al
8e60: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8e70: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8e80: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8e90: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8ea0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8eb0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8ec0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8ed0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8ee0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8ef0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8f00: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20  align=left>Page 
8f10: 6e 75 6d 62 65 72 20 6f 66 20 66 69 72 73 74 20  number of first 
8f20: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f  overflow page.</
8f30: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
8f40: 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20  ..<p>The amount 
8f50: 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  of payload that 
8f60: 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72  spills onto over
8f70: 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20  flow pages also 
8f80: 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70  depends on.the p
8f90: 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74  age type.  For t
8fa0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
8fb0: 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55  putations, let U
8fc0: 20 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73   be the usable s
8fd0: 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73  ize.of a databas
8fe0: 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61  e page, the tota
8ff0: 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73  l page size less
9000: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70   the reserved sp
9010: 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  ace at the.end o
9020: 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e  f each page.  An
9030: 64 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70  d let P be the p
9040: 61 79 6c 6f 61 64 20 73 69 7a 65 2e 20 20 49 6e  ayload size.  In
9050: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2c 0a   the following,.
9060: 73 79 6d 62 6f 6c 20 58 20 72 65 70 72 65 73 65  symbol X represe
9070: 6e 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nts the maximum 
9080: 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61  amount of payloa
9090: 64 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  d that can be st
90a0: 6f 72 65 64 20 64 69 72 65 63 74 6c 79 0a 6f 6e  ored directly.on
90b0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
90c0: 20 77 69 74 68 6f 75 74 20 73 70 69 6c 6c 69 6e   without spillin
90d0: 67 20 6f 6e 74 6f 20 61 6e 20 6f 76 65 72 66 6c  g onto an overfl
90e0: 6f 77 20 70 61 67 65 20 61 6e 64 20 73 79 6d 62  ow page and symb
90f0: 6f 6c 20 4d 0a 72 65 70 72 65 73 65 6e 74 73 20  ol M.represents 
9100: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 61 6d 6f 75  the minimum amou
9110: 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68  nt of payload th
9120: 61 74 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  at must be store
9130: 64 20 6f 6e 20 74 68 65 20 62 74 72 65 65 0a 70  d on the btree.p
9140: 61 67 65 20 62 65 66 6f 72 65 20 73 70 69 6c 6c  age before spill
9150: 69 6e 67 20 69 73 20 61 6c 6c 6f 77 65 64 2e 0a  ing is allowed..
9160: 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62  .<dl>.<dt><p>Tab
9170: 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  le B-Tree Leaf C
9180: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
9190: 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 55 2d 33  >.^(Let X be U-3
91a0: 35 2e 20 20 49 66 20 74 68 65 20 70 61 79 6c 6f  5.  If the paylo
91b0: 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73  ad size P is les
91c0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
91d0: 74 6f 20 58 20 74 68 65 6e 0a 74 68 65 20 65 6e  to X then.the en
91e0: 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69 73 20  tire payload is 
91f0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d  stored on the b-
9200: 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 2e 29  tree leaf page.)
9210: 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55  ^.^(Let M be ((U
9220: 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 20  -12)*32/255)-23 
9230: 61 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d 2b 28  and let K be M+(
9240: 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 49 66  (P-M)%(U-4))..If
9250: 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68   P is greater th
9260: 61 6e 20 58 0a 74 68 65 6e 20 74 68 65 20 6e 75  an X.then the nu
9270: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74  mber of bytes st
9280: 6f 72 65 64 20 6f 6e 20 74 68 65 20 74 61 62 6c  ored on the tabl
9290: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
92a0: 67 65 20 69 73 20 4b 0a 69 66 20 4b 20 69 73 20  ge is K.if K is 
92b0: 6c 65 73 73 20 6f 72 20 65 71 75 61 6c 20 74 6f  less or equal to
92c0: 20 58 20 6f 72 20 4d 20 6f 74 68 65 72 77 69 73   X or M otherwis
92d0: 65 2e 29 5e 0a 5e 28 54 68 65 20 6e 75 6d 62 65  e.)^.^(The numbe
92e0: 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65  r of bytes store
92f0: 64 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61  d on the leaf pa
9300: 67 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73  ge is never less
9310: 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c   than M.)^.</p><
9320: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62  /dd>..<dt><p>Tab
9330: 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69  le B-Tree Interi
9340: 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64  or Cell:</dt>.<d
9350: 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72 20 70  d><p>.Interior p
9360: 61 67 65 73 20 6f 66 20 74 61 62 6c 65 20 62 2d  ages of table b-
9370: 74 72 65 65 73 20 68 61 76 65 20 6e 6f 20 70 61  trees have no pa
9380: 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74 68 65  yload and so the
9390: 72 65 20 69 73 20 6e 65 76 65 72 0a 61 6e 79 20  re is never.any 
93a0: 70 61 79 6c 6f 61 64 20 74 6f 20 73 70 69 6c 6c  payload to spill
93b0: 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ..</p></dd>..<dt
93c0: 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65  ><p>Index B-Tree
93d0: 20 4c 65 61 66 20 4f 72 20 49 6e 74 65 72 69 6f   Leaf Or Interio
93e0: 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64  r Cell:</dt>.<dd
93f0: 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20  ><p>.^(Let X be 
9400: 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d  ((U-12)*64/255)-
9410: 32 33 29 2e 20 20 49 66 20 74 68 65 20 70 61 79  23).  If the pay
9420: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
9430: 65 73 73 20 74 68 61 6e 0a 6f 72 20 65 71 75 61  ess than.or equa
9440: 6c 20 74 6f 20 58 20 74 68 65 6e 20 74 68 65 20  l to X then the 
9450: 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69  entire payload i
9460: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
9470: 62 2d 74 72 65 65 20 70 61 67 65 2e 29 5e 0a 5e  b-tree page.)^.^
9480: 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32  (Let M be ((U-12
9490: 29 2a 33 32 2f 32 35 35 29 2d 32 33 20 61 6e 64  )*32/255)-23 and
94a0: 20 6c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d   let K be M+((P-
94b0: 4d 29 25 28 55 2d 34 29 29 2e 0a 49 66 20 50 20  M)%(U-4))..If P 
94c0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
94d0: 58 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  X then the numbe
94e0: 72 0a 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65  r.of bytes store
94f0: 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 62  d on the index b
9500: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 4b 20  -tree page is K 
9510: 69 66 20 4b 20 69 73 20 6c 65 73 73 20 74 68 61  if K is less tha
9520: 6e 20 6f 72 0a 65 71 75 61 6c 20 74 6f 20 58 20  n or.equal to X 
9530: 6f 72 20 4d 20 6f 74 68 65 72 77 69 73 65 2e 29  or M otherwise.)
9540: 5e 0a 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f  ^.^(The number o
9550: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9560: 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67 65  n the index page
9570: 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74   is never less t
9580: 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64  han M.)^.</p></d
9590: 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 48 65 72  d>.</dl>..<p>Her
95a0: 65 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  e is an alternat
95b0: 69 76 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ive description 
95c0: 6f 66 20 74 68 65 20 73 61 6d 65 20 63 6f 6d 70  of the same comp
95d0: 75 74 61 74 69 6f 6e 3a 0a 0a 3c 75 6c 3e 0a 3c  utation:..<ul>.<
95e0: 6c 69 3e 58 20 69 73 20 55 2d 33 35 20 66 6f 72  li>X is U-35 for
95f0: 20 74 61 62 6c 65 20 62 74 72 65 65 20 6c 65 61   table btree lea
9600: 66 20 70 61 67 65 73 20 6f 72 0a 20 20 20 20 28  f pages or.    (
9610: 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32  (U-12)*64/255)-2
9620: 33 20 66 6f 72 20 69 6e 64 65 78 20 70 61 67 65  3 for index page
9630: 73 2e 0a 3c 6c 69 3e 4d 20 69 73 20 61 6c 77 61  s..<li>M is alwa
9640: 79 73 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  ys ((U-12)*32/25
9650: 35 29 2d 32 33 2e 0a 3c 6c 69 3e 4c 65 74 20 4b  5)-23..<li>Let K
9660: 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   be M+((P-M)%(U-
9670: 34 29 29 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 6c  4))..<li>^If P&l
9680: 74 3b 3d 58 20 74 68 65 6e 20 61 6c 6c 20 50 20  t;=X then all P 
9690: 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64  bytes of payload
96a0: 20 61 72 65 20 73 74 6f 72 65 64 20 64 69 72 65   are stored dire
96b0: 63 74 6c 79 20 6f 6e 20 74 68 65 20 0a 20 20 20  ctly on the .   
96c0: 20 62 74 72 65 65 20 70 61 67 65 20 77 69 74 68   btree page with
96d0: 6f 75 74 20 6f 76 65 72 66 6c 6f 77 2e 0a 3c 6c  out overflow..<l
96e0: 69 3e 5e 49 66 20 50 26 67 74 3b 58 20 61 6e 64  i>^If P&gt;X and
96f0: 20 4b 26 6c 74 3b 3d 58 20 74 68 65 6e 20 74 68   K&lt;=X then th
9700: 65 20 66 69 72 73 74 20 4b 20 62 79 74 65 73 20  e first K bytes 
9710: 6f 66 20 50 20 61 72 65 20 73 74 6f 72 65 64 20  of P are stored 
9720: 6f 6e 20 74 68 65 20 0a 20 20 20 20 62 74 72 65  on the .    btre
9730: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 72  e page and the r
9740: 65 6d 61 69 6e 69 6e 67 20 50 2d 4b 20 62 79 74  emaining P-K byt
9750: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
9760: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
9770: 0a 3c 6c 69 3e 5e 49 66 20 50 26 67 74 3b 58 20  .<li>^If P&gt;X 
9780: 61 6e 64 20 4b 26 67 74 3b 58 20 74 68 65 6e 20  and K&gt;X then 
9790: 74 68 65 20 66 69 72 73 74 20 4d 20 62 79 74 65  the first M byte
97a0: 73 20 6f 66 20 50 20 61 72 65 20 73 74 6f 72 65  s of P are store
97b0: 64 20 6f 6e 20 74 68 65 0a 20 20 20 20 62 74 72  d on the.    btr
97c0: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
97d0: 72 65 6d 61 69 6e 69 6e 67 20 50 2d 4d 20 62 79  remaining P-M by
97e0: 74 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f  tes are stored o
97f0: 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  n overflow pages
9800: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68 65 20  ..</ul>..<p>The 
9810: 6f 76 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f  overflow thresho
9820: 6c 64 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  lds are designed
9830: 20 74 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d   to give a minim
9840: 75 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66  um fanout of.4 f
9850: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73  or index b-trees
9860: 20 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72   and to make sur
9870: 65 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  e enough of the 
9880: 70 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68  payload.is on th
9890: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  e b-tree page th
98a0: 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  at the record he
98b0: 61 64 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79  ader can usually
98c0: 20 62 65 20 61 63 63 65 73 73 65 64 0a 77 69 74   be accessed.wit
98d0: 68 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20  hout consulting 
98e0: 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
98f0: 2e 20 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c  .  In hindsight,
9900: 20 74 68 65 20 64 65 73 69 67 6e 65 72 20 6f 66   the designer of
9910: 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72  .the SQLite b-tr
9920: 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65  ee logic realize
9930: 64 20 74 68 61 74 20 74 68 65 73 65 20 74 68 72  d that these thr
9940: 65 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61  esholds could ha
9950: 76 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63  ve been.made muc
9960: 68 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65  h simpler.  Howe
9970: 76 65 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61  ver, the computa
9980: 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
9990: 63 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20  changed.without 
99a0: 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20  resulting in an 
99b0: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c  incompatible fil
99c0: 65 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74  e format.  And t
99d0: 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75  he current compu
99e0: 74 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c  tations.work wel
99f0: 6c 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79 20  l, even if they 
9a00: 61 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d  are a little com
9a10: 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  plex.</p>..<tcl>
9a20: 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c  hd_fragment ovfl
9a30: 70 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61  pgs {overflow pa
9a40: 67 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61  ge} {overflow pa
9a50: 67 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43  ges}</tcl>.<h2>C
9a60: 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72  ell Payload Over
9a70: 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 32 3e 0a  flow Pages</h2>.
9a80: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61  .<p>^When the pa
9a90: 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65  yload of a b-tre
9aa0: 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61  e cell is too la
9ab0: 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  rge for the b-tr
9ac0: 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72  ee page,.the sur
9ad0: 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20  plus is spilled 
9ae0: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
9af0: 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20  ges.  ^Overflow 
9b00: 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e  pages form a lin
9b10: 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20  ked.list.  ^The 
9b20: 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65 73  first four bytes
9b30: 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f   of each overflo
9b40: 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69 67  w page are a big
9b50: 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20  -endian.integer 
9b60: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61 67  which is the pag
9b70: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
9b80: 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68 65  next page in the
9b90: 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a   chain, or zero.
9ba0: 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61  for the final pa
9bb0: 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ge in the chain.
9bc0: 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79 74    ^The fifth byt
9bd0: 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61  e through the la
9be0: 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61  st usable.byte a
9bf0: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
9c00: 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74  overflow content
9c10: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 50 6f 69 6e 74  .</p>..<h2>Point
9c20: 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d 61 70  er Map or Ptrmap
9c30: 20 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e   Pages</h2>..<p>
9c40: 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72 20 70  Pointer map or p
9c50: 74 72 6d 61 70 20 70 61 67 65 73 20 61 72 65 20  trmap pages are 
9c60: 65 78 74 72 61 20 70 61 67 65 73 20 69 6e 73 65  extra pages inse
9c70: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61  rted into the da
9c80: 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65 20 74  tabase.to make t
9c90: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
9ca0: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e  [auto_vacuum] an
9cb0: 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  d [incremental_v
9cc0: 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72  acuum] modes.mor
9cd0: 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20 4f 74  e efficient.  Ot
9ce0: 68 65 72 20 70 61 67 65 20 74 79 70 65 73 20 69  her page types i
9cf0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
9d00: 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20 70 6f  ypically have po
9d10: 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61 72 65  inters.from pare
9d20: 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20 46 6f  nt to child.  Fo
9d30: 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20 69 6e  r example, an in
9d40: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
9d50: 67 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e  ge contains poin
9d60: 74 65 72 73 0a 74 6f 20 69 74 73 20 63 68 69 6c  ters.to its chil
9d70: 64 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 61  d b-tree pages a
9d80: 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  nd an overflow c
9d90: 68 61 69 6e 20 68 61 73 20 61 20 70 6f 69 6e 74  hain has a point
9da0: 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65 72 20  er.from earlier 
9db0: 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73 20 69  to later links i
9dc0: 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 41 20  n the chain.  A 
9dd0: 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 74  ptrmap page cont
9de0: 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69 6e 66  ains linkage.inf
9df0: 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67 20 69  ormation going i
9e00: 6e 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 64  n the opposite d
9e10: 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d 20 63  irection, from c
9e20: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 2e 3c  hild to parent.<
9e30: 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61 70 20  /p>..<p>^Ptrmap 
9e40: 70 61 67 65 73 20 6d 75 73 74 20 65 78 69 73 74  pages must exist
9e50: 20 69 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65   in any database
9e60: 20 66 69 6c 65 20 77 68 69 63 68 20 68 61 73 20   file which has 
9e70: 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65  a non-zero.large
9e80: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
9e90: 61 67 65 20 76 61 6c 75 65 20 61 74 20 6f 66 66  age value at off
9ea0: 73 65 74 20 35 32 20 69 6e 20 74 68 65 20 64 61  set 52 in the da
9eb0: 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 5e  tabase header..^
9ec0: 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 72  If the largest r
9ed0: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 20  oot b-tree page 
9ee0: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74  value is zero, t
9ef0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
9f00: 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74 61 69   must not.contai
9f10: 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73 2e 3c  n ptrmap pages.<
9f20: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 64 61  /p>..<p>^In a da
9f30: 74 61 62 61 73 65 20 77 69 74 68 20 70 74 72 6d  tabase with ptrm
9f40: 61 70 20 70 61 67 65 73 2c 20 74 68 65 20 66 69  ap pages, the fi
9f50: 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65 20  rst ptrmap page 
9f60: 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70 74 72  is page 2..A ptr
9f70: 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69 73 74  map page consist
9f80: 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66  s of an array of
9f90: 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 2e   5-byte entries.
9fa0: 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65 0a 6e    Let J be the.n
9fb0: 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74 65 20  umber of 5-byte 
9fc0: 65 6e 74 72 69 65 73 20 74 68 61 74 20 77 69 6c  entries that wil
9fd0: 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61  l fit in the usa
9fe0: 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61 20 70  ble space of a p
9ff0: 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72 20 77  age..(In other w
a000: 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e  ords, J=U/5.)  ^
a010: 54 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70  The first ptrmap
a020: 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e 74 61   page will conta
a030: 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a  in back pointer.
a040: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
a050: 70 61 67 65 73 20 33 20 74 68 72 6f 75 67 68 20  pages 3 through 
a060: 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20  J+2, inclusive. 
a070: 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 70 6f 69   ^The second poi
a080: 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20 77 69  nter map.page wi
a090: 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20 4a 2b  ll be on page J+
a0a0: 33 20 61 6e 64 20 74 68 61 74 20 70 74 72 6d 61  3 and that ptrma
a0b0: 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72 6f 76  p page will prov
a0c0: 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74 65 72  ide back pointer
a0d0: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72  .information for
a0e0: 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72 6f 75   pages J+4 throu
a0f0: 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75 73 69  gh 2*J+3 inclusi
a100: 76 65 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  ve.  And so fort
a110: 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69 72 65  h for.the entire
a120: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
a130: 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 64  /p>..<p>^(In a d
a140: 61 74 61 62 61 73 65 20 74 68 61 74 20 75 73 65  atabase that use
a150: 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20  s ptrmap pages, 
a160: 61 6c 6c 20 70 61 67 65 73 20 61 74 20 6c 6f 63  all pages at loc
a170: 61 74 69 6f 6e 73 20 69 64 65 6e 74 69 66 69 65  ations identifie
a180: 64 0a 62 79 20 74 68 65 20 63 6f 6d 70 75 74 61  d.by the computa
a190: 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 72 65 76  tion in the prev
a1a0: 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 6d  ious paragraph m
a1b0: 75 73 74 20 62 65 20 70 74 72 6d 61 70 20 70 61  ust be ptrmap pa
a1c0: 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68 65 72 20  ge and no.other 
a1d0: 70 61 67 65 20 6d 61 79 20 62 65 20 61 20 70 74  page may be a pt
a1e0: 72 6d 61 70 20 70 61 67 65 2e 20 20 45 78 63 65  rmap page.  Exce
a1f0: 70 74 2c 20 69 66 20 74 68 65 20 62 79 74 65 2d  pt, if the byte-
a200: 6c 6f 63 6b 20 70 61 67 65 20 68 61 70 70 65 6e  lock page happen
a210: 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68 65  s to.fall on the
a220: 20 73 61 6d 65 20 70 61 67 65 20 6e 75 6d 62 65   same page numbe
a230: 72 20 61 73 20 61 20 70 74 72 6d 61 70 20 70 61  r as a ptrmap pa
a240: 67 65 2c 20 74 68 65 6e 20 74 68 65 20 70 74 72  ge, then the ptr
a250: 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a 74 6f 20  map is moved.to 
a260: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61  the following pa
a270: 67 65 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ge for that one 
a280: 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  case.)^</p>..<p>
a290: 45 61 63 68 20 35 2d 62 79 74 65 20 65 6e 74 72  Each 5-byte entr
a2a0: 79 20 6f 6e 20 61 20 70 74 72 6d 61 70 20 70 61  y on a ptrmap pa
a2b0: 67 65 20 70 72 6f 76 69 64 65 73 20 62 61 63 6b  ge provides back
a2c0: 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f  -link informatio
a2d0: 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20 6f 66 20  n about .one of 
a2e0: 74 68 65 20 70 61 67 65 73 20 74 68 61 74 20 69  the pages that i
a2f0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
a300: 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  w the pointer ma
a310: 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20  p.  ^(If page B 
a320: 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65  is a.ptrmap page
a330: 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20   then back-link 
a340: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
a350: 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72  t page B+1 is pr
a360: 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69  ovided by.the fi
a370: 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  rst entry on the
a380: 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49   pointer map.  I
a390: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a3a0: 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f   page B+2 is.pro
a3b0: 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63  vided by the sec
a3c0: 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20  ond entry.  And 
a3d0: 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a  so forth.)^</p>.
a3e0: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
a3f0: 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e  ptrmap entry con
a400: 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74  sists of one byt
a410: 65 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22  e of "page type"
a420: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c   information.fol
a430: 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74  lowed by a 4-byt
a440: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67  e big-endian pag
a450: 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20  e number.  Five 
a460: 70 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72  page types are r
a470: 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a  ecognized:.</p>.
a480: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72  .<ol>.<li>A b-tr
a490: 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54  ee root page.  T
a4a0: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he.page number s
a4b0: 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c  hould be zero..<
a4c0: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
a4d0: 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  ge.  The page nu
a4e0: 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a  mber should be.z
a4f0: 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72  ero..<li>The fir
a500: 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c  st page of a.cel
a510: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
a520: 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70  ow chain.  The p
a530: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
a540: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  e b-tree page th
a550: 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at.contains the 
a560: 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65  cell whose conte
a570: 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65  nt has overflowe
a580: 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e  d..<li>A page in
a590: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61   an overflow cha
a5a0: 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68  in.other than th
a5b0: 65 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54  e first page.  T
a5c0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
a5d0: 73 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65  s the prior page
a5e0: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
a5f0: 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f   chain..<li>A no
a600: 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  n-root b-tree pa
a610: 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75  ge.  The.page nu
a620: 6d 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65  mber is the pare
a630: 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  nt b-tree page..
a640: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e  </ol>..<p>^In an
a650: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
a660: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74  that contains pt
a670: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
a680: 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65  b-tree root page
a690: 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66  s .must come bef
a6a0: 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74  ore any non-root
a6b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65   b-tree page, ce
a6c0: 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  ll payload overf
a6d0: 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65  low page, or.fre
a6e0: 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69  elist page.  Thi
a6f0: 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e  s restriction en
a700: 73 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f  sures that a roo
a710: 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65  t page will neve
a720: 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e  r.be moved durin
a730: 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  g an auto-vacuum
a740: 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d   or incremental-
a750: 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74  vacuum.  The aut
a760: 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64  o-vacuum.logic d
a770: 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77  oes not know how
a780: 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 72   to update the r
a790: 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20 6f  oot_page field o
a7a0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
a7b0: 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f  ter.table and so
a7c0: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
a7d0: 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f 74   to prevent root
a7e0: 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69 6e   pages from bein
a7f0: 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20 61  g moved.during a
a800: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e  n auto-vacuum in
a810: 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65 72   order to preser
a820: 76 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  ve the integrity
a830: 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d   of the.sqlite_m
a840: 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e 52  aster table.  ^R
a850: 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d 6f  oot pages are mo
a860: 76 65 64 20 74 6f 20 74 68 65 20 62 65 67 69 6e  ved to the begin
a870: 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74 61  ning of the.data
a880: 62 61 73 65 20 66 69 6c 65 20 62 79 20 74 68 65  base file by the
a890: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43   CREATE TABLE, C
a8a0: 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52 4f  REATE INDEX, DRO
a8b0: 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f  P TABLE, and.DRO
a8c0: 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69 6f  P INDEX operatio
a8d0: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 53 63 68  ns.</p>..<h1>Sch
a8e0: 65 6d 61 20 4c 61 79 65 72 3c 2f 68 31 3e 0a 0a  ema Layer</h1>..
a8f0: 3c 70 3e 54 68 65 20 66 6f 72 65 67 6f 69 6e 67  <p>The foregoing
a900: 20 74 65 78 74 20 64 65 73 63 72 69 62 65 73 20   text describes 
a910: 6c 6f 77 2d 6c 65 76 65 6c 20 61 73 70 65 63 74  low-level aspect
a920: 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20  s of the SQLite 
a930: 66 69 6c 65 0a 66 6f 72 6d 61 74 2e 20 20 54 68  file.format.  Th
a940: 65 20 62 2d 74 72 65 65 20 6d 65 63 68 61 6e 69  e b-tree mechani
a950: 73 6d 20 70 72 6f 76 69 64 65 73 20 61 20 70 6f  sm provides a po
a960: 77 65 72 66 75 6c 20 61 6e 64 20 65 66 66 69 63  werful and effic
a970: 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66 0a 61 63  ient means of.ac
a980: 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67 65 20  cessing a large 
a990: 64 61 74 61 20 73 65 74 2e 20 20 54 68 69 73 20  data set.  This 
a9a0: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 64 65 73  section will des
a9b0: 63 72 69 62 65 20 68 6f 77 20 74 68 65 0a 6c 6f  cribe how the.lo
a9c0: 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 20 6c  w-level b-tree l
a9d0: 61 79 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  ayer is used to 
a9e0: 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67 68 65 72  implement higher
a9f0: 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61 70 61 62  -level SQL.capab
aa00: 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74  ilities.</p>..<t
aa10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
aa20: 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20 7b 72 65  ecord_format {re
aa30: 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c 2f 74 63  cord format}</tc
aa40: 6c 3e 0a 3c 68 32 3e 52 65 63 6f 72 64 20 46 6f  l>.<h2>Record Fo
aa50: 72 6d 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rmat</h2>..<p>Th
aa60: 65 20 64 61 74 61 20 66 6f 72 20 61 20 74 61 62  e data for a tab
aa70: 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  le b-tree leaf p
aa80: 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a  age and the key.
aa90: 6f 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  of an index b-tr
aaa0: 65 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72  ee page was char
aab0: 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a  acterized above.
aac0: 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
aad0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
aae0: 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73  s..The prior dis
aaf0: 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  cussion mentione
ab00: 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20  d one key being 
ab10: 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65  less than anothe
ab20: 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64  r, but.did not d
ab30: 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73  efine what "less
ab40: 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54   than" meant.  T
ab50: 68 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69  he current secti
ab60: 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a  on will address.
ab70: 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e  these omissions.
ab80: 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64  </p>..<p>Payload
ab90: 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 62  , either table b
aba0: 2d 74 72 65 65 20 64 61 74 61 20 6f 72 20 69 6e  -tree data or in
abb0: 64 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73 2c  dex b-tree keys,
abc0: 20 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74   .is always in t
abd0: 68 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d 61  he "record forma
abe0: 74 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20 66  t"..The record f
abf0: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
ac00: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
ac10: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
ac20: 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61  .to columns in a
ac30: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
ac40: 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72    The record for
ac50: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
ac60: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
ac70: 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70  mns, the datatyp
ac80: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
ac90: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
aca0: 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  t of each column
acb0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
acc0: 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65  cord format make
acd0: 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20  s extensive use 
ace0: 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c  of the .[variabl
acf0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
ad00: 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65  ] or [varint].re
ad10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
ad20: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
ad30: 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61  tegers defined a
ad40: 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  bove.</p>..<tcl>
ad50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69  hd_fragment seri
ad60: 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74  altype {serial t
ad70: 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70  ype} {serial typ
ad80: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72  es}</tcl>.<p>A r
ad90: 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61  ecord contains a
ada0: 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f   header and a bo
adb0: 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65  dy, in that orde
adc0: 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65  r.  .^(The heade
add0: 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
ade0: 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68  single varint wh
adf0: 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
ae00: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a  he total number.
ae10: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
ae20: 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72  header.  The var
ae30: 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65  int value is the
ae40: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
ae50: 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63  der in.bytes inc
ae60: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
ae70: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e  varint itself.)^
ae80: 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65    ^Following the
ae90: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
aea0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64  .one or more add
aeb0: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
aec0: 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
aed0: 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e    These addition
aee0: 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63  al varints.are c
aef0: 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79  alled "serial ty
af00: 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a  pe" numbers and.
af10: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61  determine the da
af20: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
af30: 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67  olumn, according
af40: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
af50: 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63  g chart:</p>..<c
af60: 65 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c  enter>.<i>Serial
af70: 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54   Type Codes Of T
af80: 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  he Record Format
af90: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
afa0: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
afb0: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65  er=1>.<tr><th>Se
afc0: 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e  rial Type<th>Con
afd0: 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61  tent Size<th>Mea
afe0: 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ning.<tr><td val
aff0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b000: 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
b010: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b020: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
b030: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 4e  t>.^Value is a N
b040: 55 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ULL..<tr><td val
b050: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b060: 6e 74 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e  nter>1<td valign
b070: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b080: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
b090: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 6e 20  t>.^Value is an 
b0a0: 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  8-bit twos-compl
b0b0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c  ement integer..<
b0c0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b0d0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
b0e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b0f0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64  lign=center>2<td
b100: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b110: 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64  lue is a big-end
b120: 69 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d  ian 16-bit twos-
b130: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
b140: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
b150: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
b160: 74 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>3<td valign=
b170: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b180: 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >3<td align=left
b190: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
b1a0: 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20  g-endian 24-bit 
b1b0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
b1c0: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
b1d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b1e0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
b1f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b200: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
b210: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b220: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32   a big-endian 32
b230: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
b240: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
b250: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b260: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c   align=center>5<
b270: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b280: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20  ign=center>6<td 
b290: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b2a0: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
b2b0: 61 6e 20 34 38 2d 62 69 74 20 74 77 6f 73 2d 63  an 48-bit twos-c
b2c0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
b2d0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b2e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b2f0: 65 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>6<td valign=t
b300: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b310: 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  8<td align=left>
b320: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b330: 2d 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74  -endian 64-bit t
b340: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b350: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b360: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b370: 3d 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c  =center>7<td val
b380: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b390: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
b3a0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b3b0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 49 45 45  a big-endian IEE
b3c0: 45 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69  E 754-2008 64-bi
b3d0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
b3e0: 20 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c 74 64   number..<tr><td
b3f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b400: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
b410: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b420: 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e  enter>0<td align
b430: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b440: 20 74 68 65 20 69 6e 74 65 67 65 72 20 30 2e 20   the integer 0. 
b450: 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20  (Only available 
b460: 66 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d  for [schema form
b470: 61 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72  at] 4 and higher
b480: 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  .).<tr><td valig
b490: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b4a0: 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>9<td valign=t
b4b0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b4c0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
b4d0: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
b4e0: 6e 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c 79 20  nteger 1. (Only 
b4f0: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
b500: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
b510: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
b520: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b530: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c  align=center>10,
b540: 31 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  11.    <td valig
b550: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b560: 65 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69  er>&nbsp;<td ali
b570: 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20  gn=left>.<i>Not 
b580: 75 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20  used.  Reserved 
b590: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f  for expansion.</
b5a0: 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  i>.<tr><td valig
b5b0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b5c0: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61  er>N&#x2265;12 a
b5d0: 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20  nd even.    <td 
b5e0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b5f0: 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32  =center>(N-12)/2
b600: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b610: 5e 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42  ^Value is a BLOB
b620: 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f   that is (N-12)/
b630: 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  2 bytes in lengt
b640: 68 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  h..<tr><td valig
b650: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b660: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61  er>N&#x2265;13 a
b670: 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76  nd odd.    <td v
b680: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b690: 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c  center>(N-13)/2<
b6a0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b6b0: 56 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  Value is a strin
b6c0: 67 20 69 6e 20 74 68 65 20 5b 74 65 78 74 20 65  g in the [text e
b6d0: 6e 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28 4e 2d  ncoding] and (N-
b6e0: 31 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c  13)/2 bytes in l
b6f0: 65 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75 6c 20  ength..^The nul 
b700: 74 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6e 6f  terminator is no
b710: 74 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c  t stored..</tabl
b720: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
b730: 54 68 65 20 68 65 61 64 65 72 20 73 69 7a 65 20  The header size 
b740: 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72 69 61  varint.and seria
b750: 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20 77  l type varints w
b760: 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f 6e 73  ill usually cons
b770: 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c 65 20  ist of a single 
b780: 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72 69 61  byte.  The.seria
b790: 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20 66  l type varints f
b7a0: 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e 67 73  or large strings
b7b0: 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67 68 74   and BLOBs might
b7c0: 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f 20 6f   extend to two o
b7d0: 72 20 74 68 72 65 65 0a 62 79 74 65 20 76 61 72  r three.byte var
b7e0: 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74 20 69  ints, but that i
b7f0: 73 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20  s the exception 
b800: 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
b810: 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72 69 6e  rule. .The varin
b820: 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65 72 79  t format is very
b830: 20 65 66 66 69 63 69 65 6e 74 20 61 74 20 63 6f   efficient at co
b840: 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ding the record 
b850: 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  header.</p>..<p>
b860: 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ^The values for 
b870: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
b880: 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
b890: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65  ately follow the
b8a0: 20 68 65 61 64 65 72 2e 0a 5e 28 46 6f 72 20 73   header..^(For s
b8b0: 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38  erial types 0, 8
b8c0: 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c  , 9, 12, and 13,
b8d0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65   the value is ze
b8e0: 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67  ro bytes in.leng
b8f0: 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75  th.  If all colu
b900: 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73 65  mns are of these
b910: 20 74 79 70 65 73 20 74 68 65 6e 20 74 68 65 20   types then the 
b920: 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20  body section of 
b930: 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d  the.record is em
b940: 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pty.)^</p>..<p>^
b950: 41 20 72 65 63 6f 72 64 20 6d 69 67 68 74 20 68  A record might h
b960: 61 76 65 20 66 65 77 65 72 20 76 61 6c 75 65 73  ave fewer values
b970: 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
b980: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
b990: 68 65 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he.corresponding
b9a0: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 63 61   table.  This ca
b9b0: 6e 20 68 61 70 70 65 6e 2c 20 66 6f 72 20 65 78  n happen, for ex
b9c0: 61 6d 70 6c 65 2c 20 61 66 74 65 72 20 61 6e 0a  ample, after an.
b9d0: 5b 41 4c 54 45 52 20 54 41 42 4c 45 7c 41 4c 54  [ALTER TABLE|ALT
b9e0: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
b9f0: 20 43 4f 4c 55 4d 4e 5d 20 53 51 4c 20 73 74 61   COLUMN] SQL sta
ba00: 74 65 6d 65 6e 74 20 68 61 73 20 69 6e 63 72 65  tement has incre
ba10: 61 73 65 64 0a 74 68 65 20 6e 75 6d 62 65 72 20  ased.the number 
ba20: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
ba30: 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61 20 77  e table schema w
ba40: 69 74 68 6f 75 74 20 6d 6f 64 69 66 79 69 6e 67  ithout modifying
ba50: 20 70 72 65 65 78 69 73 74 69 6e 67 20 72 6f 77   preexisting row
ba60: 73 0a 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s.in the table..
ba70: 5e 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 73 20  ^Missing values 
ba80: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
ba90: 65 20 72 65 63 6f 72 64 20 61 72 65 20 66 69 6c  e record are fil
baa0: 6c 65 64 20 69 6e 20 75 73 69 6e 67 20 74 68 65  led in using the
bab0: 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d  .[default value]
bac0: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
bad0: 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 64  onding columns d
bae0: 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61  efined in the ta
baf0: 62 6c 65 20 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e  ble schema..</p>
bb00: 0a 0a 0a 3c 68 32 3e 52 65 63 6f 72 64 20 53 6f  ...<h2>Record So
bb10: 72 74 20 4f 72 64 65 72 3c 2f 68 32 3e 0a 0a 3c  rt Order</h2>..<
bb20: 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b  p>The order of k
bb30: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
bb40: 62 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d  b-tree is determ
bb50: 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74  ined by the sort
bb60: 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65   order of.the re
bb70: 63 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b  cords that the k
bb80: 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20  eys represent.  
bb90: 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f  Record compariso
bba0: 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c  n progresses col
bbb0: 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20  umn.by column.  
bbc0: 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63  Columns of a rec
bbd0: 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64  ord are examined
bbe0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
bbf0: 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20  ght.  The.first 
bc00: 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
bc10: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75  that are not equ
bc20: 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  al determines th
bc30: 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72  e relative order
bc40: 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f  .of the two reco
bc50: 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f  rds.  The sort o
bc60: 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75  rder of individu
bc70: 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73  al columns is as
bc80: 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c  .follows:</p>..<
bc90: 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76  ol>.<li>^(NULL v
bca0: 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79  alues (serial ty
bcb0: 70 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74  pe 0) sort first
bcc0: 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69  .)^.<li>^(Numeri
bcd0: 63 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c  c values (serial
bce0: 20 74 79 70 65 73 20 31 20 74 68 72 6f 75 67 68   types 1 through
bcf0: 20 39 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e   9) sort after N
bd00: 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69  ULLs.      and i
bd10: 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e  n numeric order.
bd20: 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61  )^.<li>^(Text va
bd30: 6c 75 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c  lues (odd serial
bd40: 20 74 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61   types 13 and la
bd50: 72 67 65 72 29 20 73 6f 72 74 20 61 66 74 65 72  rger) sort after
bd60: 20 6e 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c   numeric.    val
bd70: 75 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ues in the order
bd80: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
bd90: 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c  he columns [coll
bda0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e  ating function].
bdb0: 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61  )^.<li>^(BLOB va
bdc0: 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72 69 61  lues (even seria
bdd0: 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c  l types 12 and l
bde0: 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74  arger) sort last
bdf0: 20 61 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65   and in the orde
be00: 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65  r .    determine
be10: 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e  d by memcmp().)^
be20: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f  .</ol>..<p>A [co
be30: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
be40: 5d 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  ] for each colum
be50: 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69  n is necessary i
be60: 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75  n order to compu
be70: 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20  te.the order of 
be80: 74 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53  text fields..^(S
be90: 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68  QLite defines th
bea0: 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c  ree built-in col
beb0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
bec0: 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  :)^.</p>..<block
bed0: 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72  quote><table bor
bee0: 64 65 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e  der=0 cellspacin
bef0: 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64 20 76 61  g=10>.<tr><td va
bf00: 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a  lign=top>BINARY.
bf10: 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 62      <td> ^(The b
bf20: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
bf30: 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65  ollation compare
bf40: 73 20 73 74 72 69 6e 67 73 20 62 79 74 65 20 62  s strings byte b
bf50: 79 20 62 79 74 65 0a 20 20 20 20 20 20 20 20 75  y byte.        u
bf60: 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d 70 28  sing the memcmp(
bf70: 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20  ) function.     
bf80: 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e     from the stan
bf90: 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29  dard C library.)
bfa0: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
bfb0: 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20  =top>NOCASE.    
bfc0: 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f 43 41 53  <td> ^(The NOCAS
bfd0: 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 6c  E collation is l
bfe0: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
bff0: 74 20 74 68 61 74 20 75 70 70 65 72 63 61 73 65  t that uppercase
c000: 0a 20 20 20 20 20 20 20 20 41 53 43 49 49 20 63  .        ASCII c
c010: 68 61 72 61 63 74 65 72 73 20 28 27 41 27 20 74  haracters ('A' t
c020: 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20  hrough 'Z').    
c030: 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69      are folded i
c040: 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63  nto their lowerc
c050: 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20  ase equivalents 
c060: 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67  prior to running
c070: 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d   the.        com
c080: 70 61 72 69 73 6f 6e 2e 20 20 4f 6e 6c 79 20 41  parison.  Only A
c090: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
c0a0: 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e  are case-folded.
c0b0: 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e 4f 43  )^.        ^(NOC
c0c0: 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f 65 73  ASE.        does
c0d0: 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61   not implement a
c0e0: 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
c0f0: 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c 65 73   unicode caseles
c100: 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29 5e 0a  s comparison.)^.
c110: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
c120: 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c 74 64  op>RTRIM.    <td
c130: 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c 69 6b  > ^(RTRIM is lik
c140: 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20  e BINARY except 
c150: 74 68 61 74 20 65 78 74 72 61 20 73 70 61 63 65  that extra space
c160: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
c170: 65 69 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  either.         
c180: 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20 63 68  string do not ch
c190: 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c 74 2e  ange the result.
c1a0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
c1b0: 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c 0a 20  , strings will. 
c1c0: 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72 65 20          compare 
c1d0: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
c1e0: 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20  ther as long as 
c1f0: 74 68 65 79 0a 20 20 20 20 20 20 20 20 20 64 69  they.         di
c200: 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74 68 65  ffer only in the
c210: 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61 63 65   number of space
c220: 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29 5e 0a  s at the end.)^.
c230: 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
c240: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74  uote>..<p>^Addit
c250: 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74 69 6f  ional applicatio
c260: 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c 6c 61  n-specific colla
c270: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 63  ting functions c
c280: 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f 0a 53  an be added to.S
c290: 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68 65 20  QLite using the 
c2a0: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
c2b0: 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74  collation()] int
c2c0: 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erface.</p>..<p>
c2d0: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
c2e0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
c2f0: 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 73 20  for all strings 
c300: 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65  is BINARY..^Alte
c310: 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e  rnative collatin
c320: 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  g functions for 
c330: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61  table columns ca
c340: 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 20 69  n be specified i
c350: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
c360: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  BLE] statement u
c370: 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41 54 45  sing the COLLATE
c380: 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 5b   clause on the [
c390: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
c3a0: 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75  n]..^When a colu
c3b0: 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c 20 74  mn is indexed, t
c3c0: 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e  he same collatin
c3d0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
c3e0: 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45  fied in the.[CRE
c3f0: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
c400: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66 6f 72  ment is used for
c410: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   the column in t
c420: 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64 65 66  he index, by def
c430: 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74 68 69  ault,.though thi
c440: 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64  s can be overrid
c450: 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c  den using a COLL
c460: 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20 74 68  ATE clause in th
c470: 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58  e .[CREATE INDEX
c480: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68  ] statement...<h
c490: 32 3e 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  2>Representation
c4a0: 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c 2f   Of SQL Tables</
c4b0: 68 32 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68 20 6f  h2>..<p> ^Each o
c4c0: 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62 6c  rdinary SQL tabl
c4d0: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
c4e0: 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 70 72  e schema is repr
c4f0: 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73 6b 0a  esented on-disk.
c500: 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  by a table b-tre
c510: 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20  e.  ^Each entry 
c520: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
c530: 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ree corresponds 
c540: 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65 20  to a row.of the 
c550: 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  SQL table.  ^The
c560: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
c570: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74 68 65  SQL table is the
c580: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 0a 69   64-bit signed.i
c590: 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72 20 65  nteger key for e
c5a0: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
c5b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f   table b-tree.</
c5c0: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e  p>..<p> ^The con
c5d0: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51 4c  tent of each SQL
c5e0: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73 74   table row is st
c5f0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
c600: 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69 72  base file by.fir
c610: 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  st combining the
c620: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 76   values in the v
c630: 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20 69  arious columns i
c640: 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61 79  nto a byte array
c650: 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 66  .in the record f
c660: 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f 72  ormat, then stor
c670: 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61 72  ing that byte ar
c680: 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c 6f  ray as the paylo
c690: 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20 69  ad in.an entry i
c6a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
c6b0: 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20  ee.  ^The order 
c6c0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
c6d0: 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20 73   record is.the s
c6e0: 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65 72  ame as the order
c6f0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
c700: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65 66  he SQL table def
c710: 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61  inition..^When a
c720: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 63 6c  n SQL table incl
c730: 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45 52  udes an.[INTEGER
c740: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f   PRIMARY KEY] co
c750: 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69 61  lumn (which alia
c760: 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d 29  ses the [rowid])
c770: 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75 6d   then that.colum
c780: 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65  n appears in the
c790: 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55 4c   record as a NUL
c7a0: 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69 74  L value.  ^SQLit
c7b0: 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75 73  e will always us
c7c0: 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  e.the table b-tr
c7d0: 65 65 20 6b 65 79 20 72 61 74 68 65 72 20 74 68  ee key rather th
c7e0: 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75  an the NULL valu
c7f0: 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63 69  e when referenci
c800: 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52 20  ng the.[INTEGER 
c810: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c  PRIMARY KEY] col
c820: 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  umn.</p>..<p> ^I
c830: 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d  f the [affinity]
c840: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
c850: 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63 6f  REAL and that co
c860: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 0a  lumn contains a.
c870: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
c880: 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  e converted to a
c890: 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
c8a0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
c8b0: 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76 61  ation.(if the va
c8c0: 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  lue contains no 
c8d0: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 20  fractional part 
c8e0: 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20 6c  and is not too l
c8f0: 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72 65  arge to be.repre
c900: 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e 74  sented as an int
c910: 65 67 65 72 29 20 74 68 65 6e 20 74 68 65 20 63  eger) then the c
c920: 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74 6f  olumn may be sto
c930: 72 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f 72  red in the recor
c940: 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  d.as an integer.
c950: 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 63    ^SQLite will c
c960: 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65  onvert the value
c970: 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69 6e   back to floatin
c980: 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78 74  g.point when ext
c990: 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  racting it from 
c9a0: 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a  the record.</p>.
c9b0: 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74 61 74  .<h2>Representat
c9c0: 69 6f 6e 20 6f 66 20 57 49 54 48 4f 55 54 20 52  ion of WITHOUT R
c9d0: 4f 57 49 44 20 54 61 62 6c 65 73 3c 2f 68 32 3e  OWID Tables</h2>
c9e0: 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 53 51 4c 20  ..<p>^If an SQL 
c9f0: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
ca00: 20 75 73 69 6e 67 20 74 68 65 20 22 57 49 54 48   using the "WITH
ca10: 4f 55 54 20 52 4f 57 49 44 22 20 63 6c 61 75 73  OUT ROWID" claus
ca20: 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20  e at the.end of 
ca30: 69 74 73 20 43 52 45 41 54 45 20 54 41 42 4c 45  its CREATE TABLE
ca40: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
ca50: 20 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 61   that table is a
ca60: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
ca70: 0a 74 61 62 6c 65 20 61 6e 64 20 75 73 65 73 20  .table and uses 
ca80: 61 20 64 69 66 66 65 72 65 6e 74 20 6f 6e 2d 64  a different on-d
ca90: 69 73 6b 20 72 65 70 72 65 73 65 6e 74 61 74 69  isk representati
caa0: 6f 6e 2e 20 20 5e 41 20 57 49 54 48 4f 55 54 20  on.  ^A WITHOUT 
cab0: 52 4f 57 49 44 0a 74 61 62 6c 65 20 75 73 65 73  ROWID.table uses
cac0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
cad0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74   rather than a t
cae0: 61 62 6c 65 20 62 2d 74 72 65 65 20 66 6f 72 20  able b-tree for 
caf0: 73 74 6f 72 61 67 65 2e 0a 5e 54 68 65 20 6b 65  storage..^The ke
cb00: 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79  y for each entry
cb10: 20 69 6e 20 74 68 65 20 57 49 54 48 4f 55 54 20   in the WITHOUT 
cb20: 52 4f 57 49 44 20 62 2d 74 72 65 65 20 69 73 20  ROWID b-tree is 
cb30: 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65  a record compose
cb40: 64 0a 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  d.of the columns
cb50: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
cb60: 4b 45 59 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  KEY followed by 
cb70: 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  all remaining co
cb80: 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 74 61 62  lumns of.the tab
cb90: 6c 65 2e 20 20 5e 54 68 65 20 70 72 69 6d 61 72  le.  ^The primar
cba0: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 61 70  y key columns ap
cbb0: 70 65 61 72 20 69 6e 20 74 68 65 20 6f 72 64 65  pear in the orde
cbc0: 72 20 74 68 65 79 20 74 68 65 79 20 77 65 72 65  r they they were
cbd0: 0a 64 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65  .declared in the
cbe0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
cbf0: 75 73 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61  use and the rema
cc00: 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 61 70  ining columns ap
cc10: 70 65 61 72 20 69 6e 0a 74 68 65 20 6f 72 64 65  pear in.the orde
cc20: 72 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20  r they occur in 
cc30: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
cc40: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
cc50: 5e 48 65 6e 63 65 2c 20 74 68 65 20 63 6f 6e 74  ^Hence, the cont
cc60: 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ent encoding for
cc70: 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
cc80: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 73 61   table is the sa
cc90: 6d 65 0a 61 73 20 74 68 65 20 63 6f 6e 74 65 6e  me.as the conten
cca0: 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 61  t encoding for a
ccb0: 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64  n ordinary rowid
ccc0: 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74   table, except t
ccd0: 68 61 74 20 74 68 65 0a 6f 72 64 65 72 20 6f 66  hat the.order of
cce0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 73 20   the columns is 
ccf0: 72 65 61 72 72 61 6e 67 65 64 20 73 6f 20 74 68  rearranged so th
cd00: 61 74 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  at PRIMARY KEY c
cd10: 6f 6c 75 6d 6e 73 20 63 6f 6d 65 0a 66 69 72 73  olumns come.firs
cd20: 74 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  t, and the conte
cd30: 6e 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  nt is used as th
cd40: 65 20 6b 65 79 20 69 6e 20 61 6e 20 69 6e 64 65  e key in an inde
cd50: 78 20 62 2d 74 72 65 65 20 72 61 74 68 65 72 0a  x b-tree rather.
cd60: 74 68 61 6e 20 61 73 20 74 68 65 20 64 61 74 61  than as the data
cd70: 20 69 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72   in a table b-tr
cd80: 65 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c  ee..^The special
cd90: 20 65 6e 63 6f 64 69 6e 67 20 72 75 6c 65 73 20   encoding rules 
cda0: 66 6f 72 20 63 6f 6c 75 6d 6e 73 20 77 69 74 68  for columns with
cdb0: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 0a 61   REAL affinity.a
cdc0: 70 70 6c 79 20 74 6f 20 57 49 54 48 4f 55 54 20  pply to WITHOUT 
cdd0: 52 4f 57 49 44 20 74 61 62 6c 65 73 20 74 68 65  ROWID tables the
cde0: 20 73 61 6d 65 20 61 73 20 74 68 65 79 20 64 6f   same as they do
cdf0: 20 77 69 74 68 20 72 6f 77 69 64 20 74 61 62 6c   with rowid tabl
ce00: 65 73 2e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65  es...<h2>Represe
ce10: 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49  ntation Of SQL I
ce20: 6e 64 69 63 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  ndices</h2>..<p>
ce30: 5e 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c  ^Each SQL index,
ce40: 20 77 68 65 74 68 65 72 20 65 78 70 6c 69 63 69   whether explici
ce50: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 76 69 61  tly declared via
ce60: 20 61 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58   a [CREATE INDEX
ce70: 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69  ] statement.or i
ce80: 6d 70 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51  mplied by a UNIQ
ce90: 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45  UE or PRIMARY KE
cea0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f  Y constraint, co
ceb0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20  rresponds to an 
cec0: 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e  .index b-tree in
ced0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
cee0: 6c 65 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20  le..^Each entry 
cef0: 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74  in the index b-t
cf00: 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ree corresponds 
cf10: 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  to a single row 
cf20: 69 6e 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74  in the .associat
cf30: 65 64 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54  ed SQL table..^T
cf40: 68 65 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64  he key to an ind
cf50: 65 78 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72  ex b-tree is.a r
cf60: 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f  ecord composed o
cf70: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68  f the columns th
cf80: 61 74 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64  at are being ind
cf90: 65 78 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79  exed followed by
cfa0: 20 74 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20   the.key of the 
cfb0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
cfc0: 62 6c 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72  ble row.  For or
cfd0: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74  dinary tables, t
cfe0: 68 65 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68  he row key is.th
cff0: 65 20 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66  e [rowid], and f
d000: 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  or [WITHOUT ROWI
d010: 44 5d 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f  D] tables the ro
d020: 77 20 6b 65 79 20 69 73 20 74 68 65 20 50 52 49  w key is the PRI
d030: 4d 41 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73  MARY KEY..Becaus
d040: 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74  e every row in t
d050: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 20 75  he table has a u
d060: 6e 69 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61  nique row key,.a
d070: 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  ll keys in an in
d080: 64 65 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c  dex are unique.<
d090: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f  /p>..<p>^In a no
d0a0: 72 6d 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72  rmal index, ther
d0b0: 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e  e is a one-to-on
d0c0: 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65  e mapping betwee
d0d0: 6e 20 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62  n rows in a .tab
d0e0: 6c 65 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69  le and entries i
d0f0: 6e 20 65 61 63 68 20 69 6e 64 65 78 20 61 73 73  n each index ass
d100: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
d110: 74 20 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65  t table..^Howeve
d120: 72 2c 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c  r, in a [partial
d130: 20 69 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64   index], the ind
d140: 65 78 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63  ex b-tree only c
d150: 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a  ontains entries.
d160: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
d170: 20 74 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20   table rows for 
d180: 77 68 69 63 68 20 74 68 65 20 57 48 45 52 45 20  which the WHERE 
d190: 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
d1a0: 6e 20 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20  n on the.CREATE 
d1b0: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
d1c0: 69 73 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73  is true..^Corres
d1d0: 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20  ponding rows in 
d1e0: 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61  the index and ta
d1f0: 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68 61 72  ble b-trees shar
d200: 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64  e the same rowid
d210: 0a 6f 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  .or primary key 
d220: 76 61 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61  values and conta
d230: 69 6e 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  in the same valu
d240: 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65  e for all indexe
d250: 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a  d columns.</p>..
d260: 3c 68 33 3e 53 75 70 70 72 65 73 73 69 6f 6e 20  <h3>Suppression 
d270: 6f 66 20 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c  of redundant col
d280: 75 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55 54 20  umns in WITHOUT 
d290: 52 4f 57 49 44 20 73 65 63 6f 6e 64 61 72 79 20  ROWID secondary 
d2a0: 69 6e 64 65 78 65 73 0a 3c 2f 68 33 3e 0a 0a 3c  indexes.</h3>..<
d2b0: 70 3e 20 5e 49 6e 20 61 6e 20 69 6e 64 65 78 20  p> ^In an index 
d2c0: 6f 6e 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57  on a WITHOUT ROW
d2d0: 49 44 20 74 61 62 6c 65 2c 20 69 66 20 6f 6e 65  ID table, if one
d2e0: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20   or more of the 
d2f0: 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 74  columns.of the t
d300: 61 62 6c 65 20 50 52 49 4d 41 52 59 20 4b 45 59  able PRIMARY KEY
d310: 20 61 72 65 20 61 6c 73 6f 20 63 6f 6c 75 6d 6e   are also column
d320: 73 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2c 20  s of the index, 
d330: 74 68 65 6e 20 74 68 65 0a 69 6e 64 65 78 65 64  then the.indexed
d340: 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74 20 72   column is not r
d350: 65 70 65 61 74 65 64 20 69 6e 20 74 68 65 20 74  epeated in the t
d360: 61 62 6c 65 2d 6b 65 79 20 73 75 66 66 69 78 20  able-key suffix 
d370: 6f 6e 20 74 68 65 20 65 6e 64 20 6f 66 0a 74 68  on the end of.th
d380: 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20  e index record. 
d390: 20 5e 28 41 73 20 61 6e 20 65 78 61 6d 70 6c 65   ^(As an example
d3a0: 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65 20 66  , consider the f
d3b0: 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 0a 0a 3c  ollowing SQL:..<
d3c0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
d3d0: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78  .CREATE TABLE ex
d3e0: 32 35 28 61 2c 62 2c 63 2c 64 2c 65 2c 50 52 49  25(a,b,c,d,e,PRI
d3f0: 4d 41 52 59 20 4b 45 59 28 64 2c 63 2c 61 29 29  MARY KEY(d,c,a))
d400: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
d410: 43 52 45 41 54 45 20 49 4e 44 45 58 20 65 78 32  CREATE INDEX ex2
d420: 35 63 65 20 4f 4e 20 65 78 32 35 28 63 2c 65 29  5ce ON ex25(c,e)
d430: 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 65  ;.CREATE INDEX e
d440: 78 32 35 61 63 64 65 20 4f 4e 20 65 78 32 35 28  x25acde ON ex25(
d450: 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f 70 72 65 3e  a,c,d,e);.</pre>
d460: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
d470: 70 3e 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68  p>Each row in th
d480: 65 20 65 78 32 35 63 65 20 69 6e 64 65 78 20 69  e ex25ce index i
d490: 73 20 61 20 72 65 63 6f 72 64 0a 77 69 74 68 20  s a record.with 
d4a0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 73 3a 20 63  these columns: c
d4b0: 2c 20 65 2c 20 64 2c 20 61 2e 20 20 54 68 65 20  , e, d, a.  The 
d4c0: 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e  first two column
d4d0: 73 20 61 72 65 0a 74 68 65 20 63 6f 6c 75 6d 6e  s are.the column
d4e0: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c  s being indexed,
d4f0: 20 63 20 61 6e 64 20 65 2e 20 20 54 68 65 20 72   c and e.  The r
d500: 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73  emaining columns
d510: 20 61 72 65 20 74 68 65 20 70 72 69 6d 61 72 79   are the primary
d520: 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72 72  .key of the corr
d530: 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
d540: 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  row.  Normally, 
d550: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
d560: 77 6f 75 6c 64 20 62 65 0a 63 6f 6c 75 6d 6e 73  would be.columns
d570: 20 64 2c 20 63 2c 20 61 6e 64 20 61 2c 20 62 75   d, c, and a, bu
d580: 74 20 62 65 63 61 75 73 65 20 63 6f 6c 75 6d 6e  t because column
d590: 20 63 20 61 6c 72 65 61 64 79 20 61 70 70 65 61   c already appea
d5a0: 72 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68  rs earlier in th
d5b0: 65 0a 69 6e 64 65 78 2c 20 69 74 20 69 73 20 6f  e.index, it is o
d5c0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
d5d0: 6b 65 79 20 73 75 66 66 69 78 2e 29 5e 3c 2f 70  key suffix.)^</p
d5e0: 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68 65 20 65  >..<p>^(In the e
d5f0: 78 74 72 65 6d 65 20 63 61 73 65 20 77 68 65 72  xtreme case wher
d600: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65  e the columns be
d610: 69 6e 67 20 69 6e 64 65 78 65 64 20 63 6f 76 65  ing indexed cove
d620: 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66  r all columns.of
d630: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
d640: 2c 20 74 68 65 20 69 6e 64 65 78 20 77 69 6c 6c  , the index will
d650: 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e 6c 79   consist of only
d660: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69   the columns bei
d670: 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20 54 68 65  ng.indexed.  The
d680: 20 65 78 32 35 61 63 64 65 20 65 78 61 6d 70 6c   ex25acde exampl
d690: 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73 74 72  e above demonstr
d6a0: 61 74 65 73 20 74 68 69 73 2e 29 5e 20 20 5e 45  ates this.)^  ^E
d6b0: 61 63 68 20 65 6e 74 72 79 20 69 6e 0a 74 68 65  ach entry in.the
d6c0: 20 65 78 32 35 61 63 64 65 20 69 6e 64 65 78 20   ex25acde index 
d6d0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 6c 79  consists of only
d6e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 2c 20   the columns a, 
d6f0: 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69 6e 20  c, d, and e, in 
d700: 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70 3e 0a  that.order.</p>.
d710: 0a 3c 70 3e 20 5e 54 68 65 20 73 75 70 70 72 65  .<p> ^The suppre
d720: 73 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61  ssion of redunda
d730: 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  nt columns in th
d740: 65 20 6b 65 79 20 73 75 66 66 69 78 20 6f 66 20  e key suffix of 
d750: 61 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79 20 6f  an index.entry o
d760: 6e 6c 79 20 6f 63 63 75 72 73 20 69 6e 20 57 49  nly occurs in WI
d770: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
d780: 65 73 2e 20 20 5e 49 6e 20 61 6e 20 6f 72 64 69  es.  ^In an ordi
d790: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
d7a0: 2c 0a 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  ,.the index entr
d7b0: 79 20 61 6c 77 61 79 73 20 65 6e 64 73 20 77 69  y always ends wi
d7c0: 74 68 20 74 68 65 20 72 6f 77 69 64 20 65 76 65  th the rowid eve
d7d0: 6e 20 69 66 20 74 68 65 20 5b 49 4e 54 45 47 45  n if the [INTEGE
d7e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 0a 63  R PRIMARY KEY].c
d7f0: 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65 20 6f 66 20  olumn is one of 
d800: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e  the columns bein
d810: 67 20 69 6e 64 65 78 65 64 2e 3c 2f 70 3e 0a 0a  g indexed.</p>..
d820: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
d830: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b   sqlite_master {
d840: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7b  sqlite_master} {
d850: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
d860: 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 53  ble}</tcl>.<h2>S
d870: 74 6f 72 61 67 65 20 4f 66 20 54 68 65 20 53 51  torage Of The SQ
d880: 4c 20 44 61 74 61 62 61 73 65 20 53 63 68 65 6d  L Database Schem
d890: 61 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 50 61 67 65  a</h2>..<p>^Page
d8a0: 20 31 20 6f 66 20 61 20 64 61 74 61 62 61 73 65   1 of a database
d8b0: 20 66 69 6c 65 20 69 73 20 74 68 65 20 72 6f 6f   file is the roo
d8c0: 74 20 70 61 67 65 20 6f 66 20 61 20 74 61 62 6c  t page of a tabl
d8d0: 65 20 62 2d 74 72 65 65 20 74 68 61 74 0a 68 6f  e b-tree that.ho
d8e0: 6c 64 73 20 61 20 73 70 65 63 69 61 6c 20 74 61  lds a special ta
d8f0: 62 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c 69 74  ble named "sqlit
d900: 65 5f 6d 61 73 74 65 72 22 20 28 6f 72 20 22 73  e_master" (or "s
d910: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
d920: 72 22 20 69 6e 0a 74 68 65 20 63 61 73 65 20 6f  r" in.the case o
d930: 66 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73  f a TEMP databas
d940: 65 29 20 77 68 69 63 68 20 73 74 6f 72 65 73 20  e) which stores 
d950: 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64 61 74  the complete.dat
d960: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e  abase schema.  ^
d970: 28 54 68 65 20 73 74 72 75 63 74 75 72 65 20 6f  (The structure o
d980: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
d990: 74 65 72 20 74 61 62 6c 65 20 69 73 20 61 73 0a  ter table is as.
d9a0: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 63  if it had been c
d9b0: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
d9c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c   following SQL:<
d9d0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
d9e0: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
d9f0: 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  BLE sqlite_maste
da00: 72 28 0a 20 20 74 79 70 65 20 74 65 78 74 2c 0a  r(.  type text,.
da10: 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20 74    name text,.  t
da20: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20  bl_name text,.  
da30: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
da40: 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a 29 3b 0a  ,.  sql text.);.
da50: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
da60: 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73  te>)^..<p>^The s
da70: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
da80: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  le contains one 
da90: 72 6f 77 20 66 6f 72 20 65 61 63 68 20 74 61 62  row for each tab
daa0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c  le, index, view,
dab0: 0a 61 6e 64 20 74 72 69 67 67 65 72 20 28 63 6f  .and trigger (co
dac0: 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f 62 6a 65  llectively "obje
dad0: 63 74 73 22 29 20 69 6e 20 74 68 65 20 64 61 74  cts") in the dat
dae0: 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 65 78  abase schema, ex
daf0: 63 65 70 74 20 74 68 65 72 65 0a 69 73 20 6e 6f  cept there.is no
db00: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 20 73   entry for the s
db10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
db20: 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e 54 68 65  le itself.  ^The
db30: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
db40: 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73 20 65 6e  able.contains en
db50: 74 72 69 65 73 20 66 6f 72 20 5b 69 6e 74 65 72  tries for [inter
db60: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
db70: 74 73 5d 20 69 6e 20 61 64 64 69 74 69 6f 6e 20  ts] in addition 
db80: 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 0a  to application-.
db90: 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65 72 2d 64  and programmer-d
dba0: 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 73 2e 0a  efined objects..
dbb0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  ..<p>^(The sqlit
dbc0: 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20 63 6f  e_master.type co
dbd0: 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f 6e 65  lumn will be one
dbe0: 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .of the followin
dbf0: 67 20 74 65 78 74 20 73 74 72 69 6e 67 73 3a 20  g text strings: 
dc00: 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64 65 78   'table', 'index
dc10: 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20 27 74  ', 'view', or 't
dc20: 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64 69 6e  rigger'.accordin
dc30: 67 20 74 6f 20 74 68 65 20 74 79 70 65 20 6f 66  g to the type of
dc40: 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64 2e   object defined.
dc50: 20 20 54 68 65 20 27 74 61 62 6c 65 27 20 73 74    The 'table' st
dc60: 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66 6f 72  ring is used.for
dc70: 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79 20 61   both ordinary a
dc80: 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  nd [virtual tabl
dc90: 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  es].)^</p>..<p>^
dca0: 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  (The sqlite_mast
dcb0: 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 77  er.name column w
dcc0: 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d  ill hold the nam
dcd0: 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e  e of the object.
dce0: 29 5e 0a 5e 28 5b 55 4e 49 51 55 45 5d 20 61 6e  )^.^([UNIQUE] an
dcf0: 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  d [PRIMARY KEY] 
dd00: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74  constraints on t
dd10: 61 62 6c 65 73 20 63 61 75 73 65 20 53 51 4c 69  ables cause SQLi
dd20: 74 65 20 74 6f 20 63 72 65 61 74 65 0a 5b 69 6e  te to create.[in
dd30: 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20  ternal indexes] 
dd40: 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68  with names of th
dd50: 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61  e form "sqlite_a
dd60: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
dd70: 22 0a 77 68 65 72 65 20 54 41 42 4c 45 20 69 73  ".where TABLE is
dd80: 20 72 65 70 6c 61 63 65 64 20 62 79 20 74 68 65   replaced by the
dd90: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
dda0: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
ddb0: 20 74 68 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20   the.constraint 
ddc0: 61 6e 64 20 4e 20 69 73 20 61 6e 20 69 6e 74 65  and N is an inte
ddd0: 67 65 72 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ger beginning wi
dde0: 74 68 20 31 20 61 6e 64 20 69 6e 63 72 65 61 73  th 1 and increas
ddf0: 69 6e 67 20 62 79 20 6f 6e 65 0a 77 69 74 68 20  ing by one.with 
de00: 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 20  each constraint 
de10: 73 65 65 6e 20 69 6e 20 74 68 65 20 74 61 62 6c  seen in the tabl
de20: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 29 5e 0a  e definition.)^.
de30: 5e 28 49 6e 20 61 20 5b 57 49 54 48 4f 55 54 20  ^(In a [WITHOUT 
de40: 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68  ROWID] table, th
de50: 65 72 65 20 69 73 20 6e 6f 20 73 71 6c 69 74 65  ere is no sqlite
de60: 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 66 6f  _master entry fo
de70: 72 20 74 68 65 0a 50 52 49 4d 41 52 59 20 4b 45  r the.PRIMARY KE
de80: 59 2c 20 62 75 74 20 74 68 65 20 22 73 71 6c 69  Y, but the "sqli
de90: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
dea0: 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20 73 65  LE_N" name is se
deb0: 74 20 61 73 69 64 65 0a 66 6f 72 20 74 68 65 20  t aside.for the 
dec0: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 73 20 69  PRIMARY KEY as i
ded0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
dee0: 74 65 72 20 65 6e 74 72 79 20 64 69 64 20 65 78  ter entry did ex
def0: 69 73 74 2e 20 20 54 68 69 73 0a 77 69 6c 6c 20  ist.  This.will 
df00: 61 66 66 65 63 74 20 74 68 65 20 6e 75 6d 62 65  affect the numbe
df10: 72 69 6e 67 20 6f 66 20 73 75 62 73 65 71 75 65  ring of subseque
df20: 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  nt UNIQUE constr
df30: 61 69 6e 74 73 2e 29 5e 0a 5e 54 68 65 20 22 73  aints.)^.^The "s
df40: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
df50: 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73  TABLE_N" name is
df60: 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74 65 64   never allocated
df70: 20 66 6f 72 20 61 6e 0a 5b 49 4e 54 45 47 45 52   for an.[INTEGER
df80: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2c 20 65   PRIMARY KEY], e
df90: 69 74 68 65 72 20 69 6e 20 72 6f 77 69 64 20 74  ither in rowid t
dfa0: 61 62 6c 65 73 20 6f 72 20 57 49 54 48 4f 55 54  ables or WITHOUT
dfb0: 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e 0a 3c   ROWID tables..<
dfc0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  /p>..<p>The sqli
dfd0: 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e 61  te_master.tbl_na
dfe0: 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  me column holds 
dff0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61  the name of a ta
e000: 62 6c 65 20 6f 72 20 76 69 65 77 0a 74 68 61 74  ble or view.that
e010: 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61   the object is a
e020: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20  ssociated with. 
e030: 20 5e 46 6f 72 20 61 20 74 61 62 6c 65 20 6f 72   ^For a table or
e040: 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f 6e   view, the.tbl_n
e050: 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  ame column is a 
e060: 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61 6d 65  copy of the name
e070: 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20 61   column.  ^For a
e080: 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74 62 6c  n index, the tbl
e090: 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e 61 6d  _name.is the nam
e0a0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
e0b0: 68 61 74 20 69 73 20 69 6e 64 65 78 65 64 2e 20  hat is indexed. 
e0c0: 20 5e 46 6f 72 20 61 20 74 72 69 67 67 65 72 2c   ^For a trigger,
e0d0: 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f   the tbl_name.co
e0e0: 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20  lumn stores the 
e0f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
e100: 65 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 63  e or view that c
e110: 61 75 73 65 73 20 74 68 65 20 74 72 69 67 67 65  auses the trigge
e120: 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  r .to fire.</p>.
e130: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
e140: 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61 67 65  _master.rootpage
e150: 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74   column stores t
e160: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
e170: 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72 65  f the root.b-tre
e180: 65 20 70 61 67 65 20 66 6f 72 20 74 61 62 6c 65  e page for table
e190: 73 20 61 6e 64 20 69 6e 64 65 78 65 73 2e 29 5e  s and indexes.)^
e1a0: 20 20 5e 46 6f 72 20 72 6f 77 73 20 74 68 61 74    ^For rows that
e1b0: 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c 20 74   define views, t
e1c0: 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76 69 72  riggers,.and vir
e1d0: 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74 68 65  tual tables, the
e1e0: 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e   rootpage column
e1f0: 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f   is 0 or NULL.</
e200: 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  p>..<p>^(The sql
e210: 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63  ite_master.sql c
e220: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53 51 4c  olumn stores SQL
e230: 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72   text that descr
e240: 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63 74 2e  ibes the.object.
e250: 20 20 54 68 69 73 20 53 51 4c 20 74 65 78 74 20    This SQL text 
e260: 69 73 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  is a [CREATE TAB
e270: 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56 49 52  LE], [CREATE VIR
e280: 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43 52  TUAL TABLE],.[CR
e290: 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43 52  EATE INDEX],.[CR
e2a0: 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72 20 5b  EATE VIEW], or [
e2b0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
e2c0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
e2d0: 66 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  f evaluated agai
e2e0: 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61 73 65  nst.the database
e2f0: 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20 69 73   file when it is
e300: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
e310: 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62 61 73  se of a [databas
e320: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f  e connection].wo
e330: 75 6c 64 20 72 65 63 72 65 61 74 65 20 74 68 65  uld recreate the
e340: 20 6f 62 6a 65 63 74 2e 29 5e 20 20 54 68 65 20   object.)^  The 
e350: 74 65 78 74 20 69 73 20 75 73 75 61 6c 6c 79 20  text is usually 
e360: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72  a copy of the or
e370: 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74  iginal.statement
e380: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
e390: 74 68 65 20 6f 62 6a 65 63 74 20 62 75 74 20 77  the object but w
e3a0: 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f  ith normalizatio
e3b0: 6e 73 20 61 70 70 6c 69 65 64 20 73 6f 0a 74 68  ns applied so.th
e3c0: 61 74 20 74 68 65 20 74 65 78 74 20 63 6f 6e 66  at the text conf
e3d0: 6f 72 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c  orms to the foll
e3e0: 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75  owing rules:..<u
e3f0: 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52 45 41  l>.<li>^The CREA
e400: 54 45 2c 20 54 41 42 4c 45 2c 20 56 49 45 57 2c  TE, TABLE, VIEW,
e410: 20 54 52 49 47 47 45 52 2c 20 61 6e 64 20 49 4e   TRIGGER, and IN
e420: 44 45 58 20 6b 65 79 77 6f 72 64 73 20 61 74 20  DEX keywords at 
e430: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66  the beginning.of
e440: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61   the statement a
e450: 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  re converted to 
e460: 61 6c 6c 20 75 70 70 65 72 20 63 61 73 65 20 6c  all upper case l
e470: 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65  etters..<li>^The
e480: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
e490: 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20 72 65  RY keyword is re
e4a0: 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63 63 75  moved if it occu
e4b0: 72 73 20 61 66 74 65 72 20 74 68 65 20 0a 69 6e  rs after the .in
e4c0: 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b 65 79  itial CREATE key
e4d0: 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64  word..<li>^Any d
e4e0: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71 75 61  atabase name qua
e4f0: 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63 63 75  lifier that occu
e500: 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  rs prior to the 
e510: 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a 65  name of the.obje
e520: 63 74 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  ct being created
e530: 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69   is removed..<li
e540: 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61 63 65 73  >^Leading spaces
e550: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c   are removed..<l
e560: 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20 66 6f  i>^All spaces fo
e570: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69 72 73  llowing the firs
e580: 74 20 74 77 6f 20 6b 65 79 77 6f 72 64 73 20 61  t two keywords a
e590: 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  re converted int
e5a0: 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70 61 63 65  o a single.space
e5b0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68  ..</ul>..<p>^(Th
e5c0: 65 20 74 65 78 74 20 69 6e 20 74 68 65 20 73 71  e text in the sq
e5d0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
e5e0: 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79  column is a copy
e5f0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
e600: 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e  .CREATE statemen
e610: 74 20 74 65 78 74 20 74 68 61 74 20 63 72 65 61  t text that crea
e620: 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2c 20  ted the object, 
e630: 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65  except normalize
e640: 64 20 61 73 0a 64 65 73 63 72 69 62 65 64 20 61  d as.described a
e650: 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f 64 69  bove and as modi
e660: 66 69 65 64 20 62 79 20 73 75 62 73 65 71 75 65  fied by subseque
e670: 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  nt [ALTER TABLE]
e680: 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e 0a 5e   statements.)^.^
e690: 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  (The sqlite_mast
e6a0: 65 72 2e 73 71 6c 20 69 73 20 4e 55 4c 4c 20 66  er.sql is NULL f
e6b0: 6f 72 20 74 68 65 20 5b 69 6e 74 65 72 6e 61 6c  or the [internal
e6c0: 20 69 6e 64 65 78 65 73 5d 20 74 68 61 74 20 61   indexes] that a
e6d0: 72 65 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re.automatically
e6e0: 20 63 72 65 61 74 65 64 20 62 79 20 5b 55 4e 49   created by [UNI
e6f0: 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59  QUE] or [PRIMARY
e700: 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
e710: 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s.)^</p>...<tcl>
e720: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 74 73  hd_fragment ints
e730: 63 68 65 6d 61 20 7b 69 6e 74 65 72 6e 61 6c 20  chema {internal 
e740: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 7d 20  schema objects} 
e750: 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  \.{internal sche
e760: 6d 61 20 6f 62 6a 65 63 74 7d 20 7b 69 6e 74 65  ma object} {inte
e770: 72 6e 61 6c 20 69 6e 64 65 78 7d 20 7b 69 6e 74  rnal index} {int
e780: 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 7d 20 5c  ernal indexes} \
e790: 0a 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65  .{internal table
e7a0: 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c  } {internal tabl
e7b0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 6e  es}</tcl>.<h3>In
e7c0: 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62  ternal Schema Ob
e7d0: 6a 65 63 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  jects</h3>..<p>^
e7e0: 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74  In addition to t
e7f0: 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65 78  he tables, index
e800: 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20 74  es, views, and t
e810: 72 69 67 67 65 72 73 20 63 72 65 61 74 65 64 20  riggers created 
e820: 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74 69  by.the applicati
e830: 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64 65  on and/or the de
e840: 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43 52  veloper using CR
e850: 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  EATE statements 
e860: 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f  SQL, the.sqlite_
e870: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61 79  master table may
e880: 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72   contain zero or
e890: 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66 6f   more entries fo
e8a0: 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73  r .<i>internal s
e8b0: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69  chema objects</i
e8c0: 3e 20 74 68 61 74 20 61 72 65 20 63 72 65 61 74  > that are creat
e8d0: 65 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f 72  ed by SQLite for
e8e0: 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e   its .own intern
e8f0: 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e 61  al use.  ^The na
e900: 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20  mes of internal 
e910: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61  schema objects.a
e920: 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69 74 68  lways begin with
e930: 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20 61   "sqlite_" and a
e940: 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  ny table, index,
e950: 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67 65   view, or trigge
e960: 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65 67  r.whose name beg
e970: 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74 65  ins with "sqlite
e980: 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  _" is an interna
e990: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e  l schema object.
e9a0: 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62 69  .^SQLite prohibi
e9b0: 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ts applications 
e9c0: 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f 62  from creating ob
e9d0: 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d 65  jects whose name
e9e0: 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73 71  s begin.with "sq
e9f0: 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e  lite_".  ..<p>In
ea00: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
ea10: 6a 65 63 74 73 20 75 73 65 64 20 62 79 20 53 51  jects used by SQ
ea20: 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64 65  Lite may include
ea30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
ea40: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64  .<ul>.<li><p>Ind
ea50: 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  ices with names 
ea60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
ea70: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
ea80: 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20 20  BLE_N" that.    
ea90: 20 20 20 61 72 65 20 75 73 65 64 20 74 6f 20 69     are used to i
eaa0: 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45  mplement [UNIQUE
eab0: 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  ] and [PRIMARY K
eac0: 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  EY] constraints 
ead0: 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e 61  on.       ordina
eae0: 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e  ry tables...<li>
eaf0: 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68 20  <p>A table with 
eb00: 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74 65  the name "sqlite
eb10: 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61 74 20  _sequence" that 
eb20: 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20  is used to keep 
eb30: 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66 20  track.       of 
eb40: 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73 74  the maximum hist
eb50: 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52 20  orical [INTEGER 
eb60: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72  PRIMARY KEY] for
eb70: 20 61 20 74 61 62 6c 65 0a 20 20 20 20 20 20 20   a table.       
eb80: 75 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45  using [AUTOINCRE
eb90: 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54  MENT]...<li><p>T
eba0: 61 62 6c 65 73 20 77 69 74 68 20 6e 61 6d 65 73  ables with names
ebb0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71   of the form "sq
ebc0: 6c 69 74 65 5f 73 74 61 74 4e 22 20 77 68 65 72  lite_statN" wher
ebd0: 65 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65  e N is an intege
ebe0: 72 2e 0a 20 20 20 20 20 20 20 53 75 63 68 20 74  r..       Such t
ebf0: 61 62 6c 65 73 20 73 74 6f 72 65 20 64 61 74 61  ables store data
ec00: 62 61 73 65 20 73 74 61 74 69 73 74 69 63 73 20  base statistics 
ec10: 67 61 74 68 65 72 65 64 20 62 79 20 74 68 65 20  gathered by the 
ec20: 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20  [ANALYZE].      
ec30: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65   command and use
ec40: 64 20 62 79 20 74 68 65 20 71 75 65 72 79 20 70  d by the query p
ec50: 6c 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70 20 64  lanner to help d
ec60: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73  etermine the bes
ec70: 74 0a 20 20 20 20 20 20 20 61 6c 67 6f 72 69 74  t.       algorit
ec80: 68 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61  hm to use for ea
ec90: 63 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a  ch query..</ul>.
eca0: 0a 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c  .<p>New internal
ecb0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   schema objects 
ecc0: 6e 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65  names, always be
ecd0: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71  ginning with "sq
ece0: 6c 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61  lite_",.may be a
ecf0: 64 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69  dded to the SQLi
ed00: 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69  te file format i
ed10: 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  n future release
ed20: 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  s...<tcl>hd_frag
ed30: 6d 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c  ment seqtab {sql
ed40: 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74  ite_sequence}</t
ed50: 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
ed60: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ed70: 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e</h3>..<p>^The 
ed80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ed90: 74 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65  table is an inte
eda0: 72 6e 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  rnal table used 
edb0: 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
edc0: 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  t.[AUTOINCREMENT
edd0: 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  ].  ^The sqlite_
ede0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69  sequence table i
edf0: 73 20 63 72 65 61 74 65 64 20 61 75 74 6f 6d 61  s created automa
ee00: 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65 76 65 72  tically.whenever
ee10: 20 61 6e 79 20 6f 72 64 69 6e 61 72 79 20 74 61   any ordinary ta
ee20: 62 6c 65 20 77 69 74 68 20 61 6e 20 41 55 54 4f  ble with an AUTO
ee30: 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74 65 67 65  INCREMENT intege
ee40: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 69 73  r primary.key is
ee50: 20 63 72 65 61 74 65 64 2e 20 20 5e 4f 6e 63 65   created.  ^Once
ee60: 20 63 72 65 61 74 65 64 2c 20 74 68 65 20 73 71   created, the sq
ee70: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ee80: 62 6c 65 20 65 78 69 73 74 73 20 69 6e 20 74 68  ble exists in th
ee90: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
eea0: 74 61 62 6c 65 20 66 6f 72 65 76 65 72 3b 20 69  table forever; i
eeb0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 72 6f 70  t cannot be drop
eec0: 70 65 64 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  ped..^(The schem
eed0: 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  a for the sqlite
eee0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
eef0: 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
ef00: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
ef10: 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65  BLE sqlite_seque
ef20: 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a 3c  nce(name,seq);.<
ef30: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
ef40: 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  e>)^..<p>^There 
ef50: 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  is a single row 
ef60: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
ef70: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72  quence table for
ef80: 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74   each ordinary.t
ef90: 61 62 6c 65 20 74 68 61 74 20 75 73 65 73 20 41  able that uses A
efa0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 5e  UTOINCREMENT.  ^
efb0: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
efc0: 20 74 61 62 6c 65 20 28 61 73 20 69 74 20 61 70   table (as it ap
efd0: 70 65 61 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f  pears in.sqlite_
efe0: 6d 61 73 74 65 72 2e 6e 61 6d 65 29 20 69 73 20  master.name) is 
eff0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
f000: 71 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c  quence.main fiel
f010: 64 20 61 6e 64 20 74 68 65 20 6c 61 72 67 65 73  d and the larges
f020: 74 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t.[INTEGER PRIMA
f030: 52 59 20 4b 45 59 5d 20 65 76 65 72 20 69 6e 73  RY KEY] ever ins
f040: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 61 74 20  erted into that 
f050: 74 61 62 6c 65 20 69 73 20 0a 69 6e 20 74 68 65  table is .in the
f060: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f070: 2e 73 65 71 20 66 69 65 6c 64 2e 29 5e 20 20 0a  .seq field.)^  .
f080: 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69 63 61 6c  ^New automatical
f090: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74  ly generated int
f0a0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
f0b0: 73 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d  s for AUTOINCREM
f0c0: 45 4e 54 0a 74 61 62 6c 65 73 20 61 72 65 20 67  ENT.tables are g
f0d0: 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65 20  uaranteed to be 
f0e0: 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
f0f0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
f100: 73 65 71 20 66 69 65 6c 64 20 66 6f 72 0a 74 68  seq field for.th
f110: 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74  at table..^(If t
f120: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f130: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 6f 66 20  ce.seq field of 
f140: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
f150: 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64   table is alread
f160: 79 20 61 74 0a 74 68 65 20 6c 61 72 67 65 73 74  y at.the largest
f170: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 28   integer value (
f180: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
f190: 38 30 37 29 20 74 68 65 6e 20 61 74 74 65 6d 70  807) then attemp
f1a0: 74 73 20 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f  ts to add new.ro
f1b0: 77 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ws to that table
f1c0: 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
f1d0: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64  ically generated
f1e0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
f1f0: 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20   will fail.with 
f200: 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  an [SQLITE_FULL]
f210: 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73   error.)^.^The s
f220: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
f230: 65 71 20 66 69 65 6c 64 20 69 73 20 61 75 74 6f  eq field is auto
f240: 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65  matically update
f250: 64 20 69 66 20 72 65 71 75 69 72 65 64 20 77 68  d if required wh
f260: 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73 20 61  en.new entries a
f270: 72 65 20 69 6e 73 65 72 74 65 64 20 74 6f 20 61  re inserted to a
f280: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
f290: 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71  table.  .^The sq
f2a0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
f2b0: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
f2c0: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
f2d0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
f2e0: 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74  leted.when the t
f2f0: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
f300: 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  .^If the sqlite_
f310: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72  sequence row for
f320: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
f330: 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  T table does not
f340: 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20   exist when.the 
f350: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f360: 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20  ble is updated, 
f370: 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74  then a new sqlit
f380: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69  e_sequence row i
f390: 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20  s created..^(If 
f3a0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
f3b0: 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f  nce.seq value fo
f3c0: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
f3d0: 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75  NT table is manu
f3e0: 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d  ally .set to som
f3f0: 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ething other tha
f400: 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  n an integer and
f410: 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73   there is a subs
f420: 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74  equent attempt t
f430: 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20  o.insert the or 
f440: 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49  update the AUTOI
f450: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20  NCREMENT table, 
f460: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
f470: 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29  r is undefined.)
f480: 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69  ^..<p>^Applicati
f490: 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77  on code is allow
f4a0: 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ed to modify the
f4b0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f4c0: 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e   table, to add.n
f4d0: 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65  ew rows, to dele
f4e0: 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d  te rows, or to m
f4f0: 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72  odify existing r
f500: 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ows.  ^However, 
f510: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65  application.code
f520: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74   cannot create t
f530: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f540: 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64  ce table if it d
f550: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
f560: 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74  exist..^Applicat
f570: 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c  ion code can del
f580: 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  ete all entries 
f590: 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
f5a0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a  sequence table,.
f5b0: 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  but application 
f5c0: 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70  code cannot drop
f5d0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f5e0: 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63  ence table...<tc
f5f0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
f600: 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at1tab {sqlite_s
f610: 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat1} SQLITE_STA
f620: 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  T1 </tcl>.<h3>Th
f630: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
f640: 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  able</h3>..<p>^T
f650: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
f660: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74  is an internal t
f670: 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
f680: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  the [ANALYZE] co
f690: 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65 64 20 74  mmand.and used t
f6a0: 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65 6d 65 6e  o hold supplemen
f6b0: 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tal information 
f6c0: 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64  about tables and
f6d0: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 74 68   indexes that th
f6e0: 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
f6f0: 63 61 6e 20 75 73 65 20 74 6f 20 68 65 6c 70 20  can use to help 
f700: 69 74 20 66 69 6e 64 20 62 65 74 74 65 72 20 77  it find better w
f710: 61 79 73 20 6f 66 20 70 65 72 66 6f 72 6d 69 6e  ays of performin
f720: 67 20 71 75 65 72 69 65 73 2e 0a 5e 41 70 70 6c  g queries..^Appl
f730: 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 75 70 64  ications can upd
f740: 61 74 65 2c 20 64 65 6c 65 74 65 20 66 72 6f 6d  ate, delete from
f750: 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 6f 72  , insert into or
f760: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f770: 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c 20 62 75  _stat1.table, bu
f780: 74 20 6d 61 79 20 6e 6f 74 20 63 72 65 61 74 65  t may not create
f790: 20 6f 72 20 61 6c 74 65 72 20 74 68 65 20 73 71   or alter the sq
f7a0: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f7b0: 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f  ..^(The schema o
f7c0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
f7d0: 74 31 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t1 table is as f
f7e0: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
f7f0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
f800: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
f810: 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61  tat1(tbl,idx,sta
f820: 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  t);.</pre></bloc
f830: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e  kquote>)^..<p> ^
f840: 28 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c  (There is normal
f850: 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69  ly one row per i
f860: 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65 20 69  ndex, with the i
f870: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
f880: 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74  by the.name in t
f890: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f8a0: 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e  idx column.)^  ^
f8b0: 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
f8c0: 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a  1.tbl column is.
f8d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
f8e0: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
f8f0: 68 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73  he index belongs
f900: 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63 68 20 73  .)^  ^(In each s
f910: 75 63 68 20 72 6f 77 2c 20 0a 74 68 65 20 73 71  uch row, .the sq
f920: 6c 69 74 65 5f 73 74 61 74 2e 73 74 61 74 20 63  lite_stat.stat c
f930: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a 61 20  olumn will be.a 
f940: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
f950: 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 69  g of a list of i
f960: 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f 77 65 64  ntegers followed
f970: 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
f980: 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29 5e 20 20   .arguments.)^  
f990: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
f9a0: 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73 74 20  er in this.list 
f9b0: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
f9c0: 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  te number of row
f9d0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20  s in the index. 
f9e0: 20 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a   (The number of.
f9f0: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
fa00: 78 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  x is the same as
fa10: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
fa20: 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
fa30: 2c 0a 65 78 63 65 70 74 20 66 6f 72 20 5b 70 61  ,.except for [pa
fa40: 72 74 69 61 6c 20 69 6e 64 65 78 65 73 5d 2e 29  rtial indexes].)
fa50: 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  .^The second int
fa60: 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
fa70: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
fa80: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
fa90: 64 65 78 0a 74 68 61 74 20 68 61 76 65 20 74 68  dex.that have th
faa0: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 69 6e 20  e same value in 
fab0: 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
fac0: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 20 20   of the index.  
fad0: 5e 54 68 65 20 74 68 69 72 64 20 0a 69 6e 74 65  ^The third .inte
fae0: 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65  ger is the numbe
faf0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  r number of rows
fb00: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
fb10: 61 74 20 68 61 76 65 20 0a 74 68 65 20 73 61 6d  at have .the sam
fb20: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
fb30: 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e  first two column
fb40: 73 2e 20 20 5e 54 68 65 20 4e 2d 74 68 20 69 6e  s.  ^The N-th in
fb50: 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20  teger (for N>1) 
fb60: 0a 69 73 20 74 68 65 20 65 73 74 69 6d 61 74 65  .is the estimate
fb70: 64 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72  d average number
fb80: 20 6f 66 20 72 6f 77 73 20 69 6e 20 0a 74 68 65   of rows in .the
fb90: 20 69 6e 64 65 78 20 77 68 69 63 68 20 68 61 76   index which hav
fba0: 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
fbb0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 4e   for the first N
fbc0: 2d 31 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f  -1 columns.  ^Fo
fbd0: 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64  r.a K-column ind
fbe0: 65 78 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 62  ex, there will b
fbf0: 65 20 4b 2b 31 20 69 6e 74 65 67 65 72 73 20 69  e K+1 integers i
fc00: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
fc10: 6e 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 64 65  n.  ^If.the inde
fc20: 78 20 69 73 20 75 6e 69 71 75 65 2c 20 74 68 65  x is unique, the
fc30: 6e 20 74 68 65 20 6c 61 73 74 20 69 6e 74 65 67  n the last integ
fc40: 65 72 20 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c  er will be 1...<
fc50: 70 3e 5e 54 68 65 20 6c 69 73 74 20 6f 66 20 69  p>^The list of i
fc60: 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20 73  ntegers in the s
fc70: 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f  tat column can o
fc80: 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c  ptionally be fol
fc90: 6c 6f 77 65 64 0a 62 79 20 61 72 67 75 6d 65 6e  lowed.by argumen
fca0: 74 73 2c 20 65 61 63 68 20 6f 66 20 77 68 69 63  ts, each of whic
fcb0: 68 20 69 73 20 61 20 73 65 71 75 65 6e 63 65 20  h is a sequence 
fcc0: 6f 66 20 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61  of non-space cha
fcd0: 72 61 63 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72  racters..^All ar
fce0: 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72 65 63  guments are prec
fcf0: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
fd00: 20 73 70 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67   space..^Unrecog
fd10: 6e 69 7a 65 64 20 61 72 67 75 6d 65 6e 74 73 20  nized arguments 
fd20: 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e  are silently ign
fd30: 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ored...<p>^If th
fd40: 65 20 22 75 6e 6f 72 64 65 72 65 64 22 20 61 72  e "unordered" ar
fd50: 67 75 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  gument is presen
fd60: 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  t, then the quer
fd70: 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65  y planner assume
fd80: 73 0a 74 68 61 74 20 74 68 65 20 69 6e 64 65 78  s.that the index
fd90: 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e   is unordered an
fda0: 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  d will not use t
fdb0: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72  he index for a r
fdc0: 61 6e 67 65 20 71 75 65 72 79 0a 6f 72 20 66 6f  ange query.or fo
fdd0: 72 20 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e  r sorting...<p>^
fde0: 54 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67  The "sz=NNN" arg
fdf0: 75 6d 65 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e  ument (where NNN
fe00: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
fe10: 71 75 65 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d  quence of 1 or m
fe20: 6f 72 65 20 64 69 67 69 74 73 29 0a 6d 65 61 6e  ore digits).mean
fe30: 73 20 74 68 61 74 20 74 68 65 20 61 76 65 72 61  s that the avera
fe40: 67 65 20 72 6f 77 20 73 69 7a 65 20 6f 76 65 72  ge row size over
fe50: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 6f 66 20   all records of 
fe60: 74 68 65 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64  the table or.ind
fe70: 65 78 20 69 73 20 4e 4e 4e 20 62 79 74 65 73 20  ex is NNN bytes 
fe80: 70 65 72 20 72 6f 77 2e 20 20 5e 54 68 65 20 53  per row.  ^The S
fe90: 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e  QLite query plan
fea0: 6e 65 72 20 6d 69 67 68 74 20 75 73 65 20 74 68  ner might use th
feb0: 65 0a 65 73 74 69 6d 61 74 65 64 20 72 6f 77 20  e.estimated row 
fec0: 73 69 7a 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  size information
fed0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
fee0: 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a   "sz=NNN" token.
fef0: 74 6f 20 68 65 6c 70 20 69 74 20 63 68 6f 6f 73  to help it choos
ff00: 65 20 73 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73  e smaller tables
ff10: 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61   and indexes tha
ff20: 74 20 72 65 71 75 69 72 65 20 6c 65 73 73 20 64  t require less d
ff30: 69 73 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54  isk I/O...<p>^(T
ff40: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
ff50: 68 65 20 22 6e 6f 73 6b 69 70 73 63 61 6e 22 20  he "noskipscan" 
ff60: 74 6f 6b 65 6e 20 6f 6e 20 74 68 65 20 73 71 6c  token on the sql
ff70: 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 20 66  ite_stat1.stat f
ff80: 69 65 6c 64 0a 6f 66 20 61 6e 20 69 6e 64 65 78  ield.of an index
ff90: 20 70 72 65 76 65 6e 74 73 20 74 68 61 74 20 69   prevents that i
ffa0: 6e 64 65 78 20 66 72 6f 6d 20 62 65 69 6e 67 20  ndex from being 
ffb0: 75 73 65 64 20 77 69 74 68 20 74 68 65 0a 5b 73  used with the.[s
ffc0: 6b 69 70 2d 73 63 61 6e 20 6f 70 74 69 6d 69 7a  kip-scan optimiz
ffd0: 61 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65  ation].)^..<p>Ne
ffe0: 77 20 74 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61  w text tokens ma
fff0: 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
10000 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61  e end of the sta
10010 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75  t column in futu
10020 72 65 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  re.enhancements 
10030 74 6f 20 53 51 4c 69 74 65 2e 20 20 46 6f 72 20  to SQLite.  For 
10040 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 75  compatibility, u
10050 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65  nrecognized toke
10060 6e 73 20 61 74 20 74 68 65 20 65 6e 64 0a 6f 66  ns at the end.of
10070 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e   the stat column
10080 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67   are silently ig
10090 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20  nored...<p>^(If 
100a0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
100b0 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  .idx column is N
100c0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 73 71  ULL, then the sq
100d0 6c 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a  lite_stat1.stat.
100e0 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
100f0 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
10100 20 77 68 69 63 68 20 69 73 20 74 68 65 20 61 70   which is the ap
10110 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
10120 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68 65 20   of.rows in the 
10130 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
10140 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 31   by sqlite_stat1
10150 2e 74 62 6c 2e 29 5e 0a 5e 28 49 66 20 74 68 65  .tbl.)^.^(If the
10160 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64   sqlite_stat1.id
10170 78 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  x column is the 
10180 73 61 6d 65 20 61 73 20 74 68 65 20 73 71 6c 69  same as the sqli
10190 74 65 5f 73 74 61 74 31 2e 74 62 6c 0a 63 6f 6c  te_stat1.tbl.col
101a0 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 74 61  umn, then the ta
101b0 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
101c0 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 20 61  T ROWID] table a
101d0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  nd the sqlite_st
101e0 61 74 31 2e 73 74 61 74 0a 66 69 65 6c 64 20 63  at1.stat.field c
101f0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
10200 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 69 6e  ion about the in
10210 64 65 78 20 62 74 72 65 65 20 74 68 61 74 20 69  dex btree that i
10220 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 57 49  mplements the.WI
10230 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
10240 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  e.)^..<tcl>hd_fr
10250 61 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20  agment stat2tab 
10260 7b 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f  {sqlite_stat2}</
10270 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c  tcl>.<h3>The sql
10280 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 3c  ite_stat2 table<
10290 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h3>..<p>The sql
102a0 69 74 65 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c  ite_stat2 is onl
102b0 79 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73  y created and is
102c0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51   only used if SQ
102d0 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
102e0 0a 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41  .with SQLITE_ENA
102f0 42 4c 45 5f 53 54 41 54 32 20 61 6e 64 20 69 66  BLE_STAT2 and if
10300 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
10310 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 62 65  ion number is be
10320 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20 28 5b 64  tween.3.6.18 ([d
10330 61 74 65 6f 66 3a 33 2e 36 2e 31 38 5d 29 20 61  ateof:3.6.18]) a
10340 6e 64 20 33 2e 37 2e 38 20 28 5b 64 61 74 65 6f  nd 3.7.8 ([dateo
10350 66 3a 33 2e 37 2e 38 5d 29 2e 0a 54 68 65 20 73  f:3.7.8])..The s
10360 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
10370 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61  e is neither rea
10380 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79  d nor written by
10390 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20   any.version of 
103a0 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e  SQLite before 3.
103b0 36 2e 31 38 20 6e 6f 72 20 61 66 74 65 72 20 33  6.18 nor after 3
103c0 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c 69 74 65  .7.8..The sqlite
103d0 5f 73 74 61 74 32 20 74 61 62 6c 65 20 63 6f 6e  _stat2 table con
103e0 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c  tains additional
103f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f   information.abo
10400 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74  ut the distribut
10410 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
10420 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 54 68 65  in an index..The
10430 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
10440 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
10450 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
10460 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
10470 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
10480 20 73 71 6c 69 74 65 5f 73 74 61 74 32 28 74 62   sqlite_stat2(tb
10490 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73  l,idx,sampleno,s
104a0 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  ample);.</pre></
104b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
104c0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
104d0 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  .idx column and 
104e0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
104f0 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20 65  .tbl column in e
10500 61 63 68 20 0a 72 6f 77 20 6f 66 20 74 68 65 20  ach .row of the 
10510 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
10520 6c 65 20 69 64 65 6e 74 69 66 79 20 61 6e 20 69  le identify an i
10530 6e 64 65 78 20 64 65 73 63 72 69 62 65 64 20 62  ndex described b
10540 79 20 74 68 61 74 20 72 6f 77 2e 0a 54 68 65 72  y that row..Ther
10550 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20 31 30  e are usually 10
10560 20 72 6f 77 73 20 69 6e 20 74 68 65 20 73 71 6c   rows in the sql
10570 69 74 65 5f 73 74 61 74 32 0a 74 61 62 6c 65 20  ite_stat2.table 
10580 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a  for each index..
10590 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
105a0 74 61 74 32 20 65 6e 74 72 69 65 73 20 66 6f 72  tat2 entries for
105b0 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20 68   an index that h
105c0 61 76 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  ave sqlite_stat2
105d0 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74 77 65 65  .sampleno.betwee
105e0 6e 20 30 20 61 6e 64 20 39 20 69 6e 63 6c 75 73  n 0 and 9 inclus
105f0 69 76 65 20 61 72 65 20 73 61 6d 70 6c 65 73 20  ive are samples 
10600 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
10610 20 6b 65 79 20 76 61 6c 75 65 20 69 6e 20 74 68   key value in th
10620 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e 20 61 74  e.index taken at
10630 20 65 76 65 6e 6c 79 20 73 70 61 63 65 64 20 70   evenly spaced p
10640 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65 20  oints along the 
10650 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20 62 65 20  index..Let C be 
10660 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
10670 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ws in the index.
10680 0a 54 68 65 6e 20 74 68 65 20 73 61 6d 70 6c 65  .Then the sample
10690 64 20 72 6f 77 73 20 61 72 65 20 67 69 76 65 6e  d rows are given
106a0 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65   by..<blockquote
106b0 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d 62 65 72  >.     rownumber
106c0 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43 29 2f 32   = (i*C*2 + C)/2
106d0 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  0.</blockquote>.
106e0 0a 3c 70 3e 54 68 65 20 76 61 72 69 61 62 6c 65  .<p>The variable
106f0 20 69 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f   i in the previo
10700 75 73 20 65 78 70 72 65 73 73 69 6f 6e 20 76 61  us expression va
10710 72 69 65 73 20 62 65 74 77 65 65 6e 20 30 20 61  ries between 0 a
10720 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74 75 61 6c  nd 9..Conceptual
10730 6c 79 2c 20 74 68 65 20 69 6e 64 65 78 20 73 70  ly, the index sp
10740 61 63 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ace is divided i
10750 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72 6d 20 62  nto.10 uniform b
10760 75 63 6b 65 74 73 20 61 6e 64 20 74 68 65 20 73  uckets and the s
10770 61 6d 70 6c 65 73 20 61 72 65 20 74 68 65 20 6d  amples are the m
10780 69 64 64 6c 65 20 72 6f 77 20 66 72 6f 6d 20 65  iddle row from e
10790 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e  ach bucket...<p>
107a0 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 73  The format for s
107b0 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20 72  qlite_stat2 is r
107c0 65 63 6f 72 64 65 64 20 68 65 72 65 20 66 6f 72  ecorded here for
107d0 20 6c 65 67 61 63 79 20 72 65 66 65 72 65 6e 63   legacy referenc
107e0 65 2e 20 20 0a 52 65 63 65 6e 74 20 76 65 72 73  e.  .Recent vers
107f0 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6e  ions of SQLite n
10800 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74  o longer support
10810 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 61 6e   sqlite_stat2 an
10820 64 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61  d the.sqlite_sta
10830 74 32 20 74 61 62 6c 65 2c 20 69 66 20 69 73 20  t2 table, if is 
10840 65 78 69 73 74 73 2c 20 69 73 20 73 69 6d 70 6c  exists, is simpl
10850 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c  y ignored...<tcl
10860 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61  >hd_fragment sta
10870 74 33 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74  t3tab {sqlite_st
10880 61 74 33 7d 20 53 51 4c 49 54 45 5f 53 54 41 54  at3} SQLITE_STAT
10890 33 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  3</tcl>.<h3>The 
108a0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
108b0 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  le</h3>..<p>The 
108c0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73 20  sqlite_stat3 is 
108d0 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c  only used if SQL
108e0 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a  ite is compiled.
108f0 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41  with [SQLITE_ENA
10900 42 4c 45 5f 53 54 41 54 33 5d 20 6f 72 20 5b 53  BLE_STAT3] or [S
10910 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
10920 54 34 5d 0a 61 6e 64 20 69 66 20 74 68 65 20 53  T4].and if the S
10930 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
10940 6d 62 65 72 20 69 73 20 33 2e 37 2e 39 20 28 5b  mber is 3.7.9 ([
10950 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 20 6f  dateof:3.7.9]) o
10960 72 20 67 72 65 61 74 65 72 2e 0a 54 68 65 20 73  r greater..The s
10970 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10980 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61  e is neither rea
10990 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79  d nor written by
109a0 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20   any.version of 
109b0 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e  SQLite before 3.
109c0 37 2e 39 2e 0a 49 66 20 74 68 65 20 5b 53 51 4c  7.9..If the [SQL
109d0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
109e0 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
109f0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 61 6e  ption is used an
10a00 64 20 74 68 65 0a 53 51 4c 69 74 65 20 76 65 72  d the.SQLite ver
10a10 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33  sion number is 3
10a20 2e 38 2e 31 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .8.1 ([dateof:3.
10a30 38 2e 31 5d 29 20 6f 72 20 67 72 65 61 74 65 72  8.1]) or greater
10a40 2c 0a 74 68 65 6e 20 73 71 6c 69 74 65 5f 73 74  ,.then sqlite_st
10a50 61 74 33 20 6d 69 67 68 74 20 62 65 20 72 65 61  at3 might be rea
10a60 64 20 62 75 74 20 6e 6f 74 20 77 72 69 74 74 65  d but not writte
10a70 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  n..The sqlite_st
10a80 61 74 33 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  at3 table contai
10a90 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ns additional in
10aa0 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20  formation.about 
10ab0 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
10ac0 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20   of keys within 
10ad0 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66 6f 72 6d  an index, inform
10ae0 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 0a 71  ation that the.q
10af0 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e  uery planner can
10b00 20 75 73 65 20 74 6f 20 64 65 76 69 73 65 20 62   use to devise b
10b10 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65 72  etter and faster
10b20 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d   query algorithm
10b30 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20  s..^(The schema 
10b40 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
10b50 61 74 33 20 74 61 62 6c 65 20 69 73 20 61 73 20  at3 table is as 
10b60 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
10b70 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10b80 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
10b90 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c 6e 45  stat3(tbl,idx,nE
10ba0 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c  q,nLt,nDLt,sampl
10bb0 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
10bc0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68  kquote>)^..<p>Th
10bd0 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20  ere are usually 
10be0 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
10bf0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
10c00 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72 20 65  tat3 table for e
10c10 61 63 68 20 69 6e 64 65 78 2e 0a 5e 28 54 68 65  ach index..^(The
10c20 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 73 61   sqlite_stat3.sa
10c30 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  mple column hold
10c40 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
10c50 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66 69 65  he left-most fie
10c60 6c 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 69  ld of an.index i
10c70 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c  dentified by sql
10c80 69 74 65 5f 73 74 61 74 33 2e 69 64 78 20 61 6e  ite_stat3.idx an
10c90 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 74  d sqlite_stat3.t
10ca0 62 6c 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  bl.)^.^(The sqli
10cb0 74 65 5f 73 74 61 74 33 2e 6e 45 71 20 63 6f 6c  te_stat3.nEq col
10cc0 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70  umn holds the ap
10cd0 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72  proximate.number
10ce0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
10cf0 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65 20 6c  he index whose l
10d00 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
10d10 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73 0a  exactly matches.
10d20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28  the sample.)^.^(
10d30 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10d40 2e 6e 4c 74 20 68 6f 6c 64 73 20 74 68 65 20 61  .nLt holds the a
10d50 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
10d60 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
10d70 74 68 65 0a 69 6e 64 65 78 20 77 68 6f 73 65 20  the.index whose 
10d80 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10d90 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
10da0 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68  e sample.)^.^(Th
10db0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e  e sqlite_stat3.n
10dc0 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  DLt column holds
10dd0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
10de0 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69  .number of disti
10df0 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6e  nct left-most en
10e00 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64  tries in the ind
10e10 65 78 20 74 68 61 74 20 61 72 65 20 6c 65 73 73  ex that are less
10e20 20 74 68 61 6e 0a 74 68 65 20 73 61 6d 70 6c 65   than.the sample
10e30 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63  .)^..<p>^There c
10e40 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72 61  an be an arbitra
10e50 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ry number of sql
10e60 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72 69 65  ite_stat3 entrie
10e70 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65  s per index..The
10e80 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
10e90 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c  nd will typicall
10ea0 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74  y generate sqlit
10eb0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73 0a 74  e_stat3 tables.t
10ec0 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77  hat contain betw
10ed0 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61  een 10 and 40 sa
10ee0 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64  mples that are d
10ef0 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f 73  istributed acros
10f00 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65 20  s.the key space 
10f10 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e  and with large n
10f20 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e  Eq values...<p>^
10f30 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  (In a well-forme
10f40 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  d sqlite_stat3 t
10f50 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65  able, the sample
10f60 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65  s for any single
10f70 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65  .index must appe
10f80 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f  ar in the same o
10f90 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 6f  rder that they o
10fa0 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65  ccur in the inde
10fb0 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f  x.  .In other wo
10fc0 72 64 73 2c 20 69 66 20 74 68 65 20 65 6e 74 72  rds, if the entr
10fd0 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74  y with left-most
10fe0 20 63 6f 6c 75 6d 6e 20 53 31 20 69 73 20 65 61   column S1 is ea
10ff0 72 6c 69 65 72 20 69 6e 0a 74 68 65 20 69 6e 64  rlier in.the ind
11000 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20 74  ex b-tree than t
11010 68 65 0a 65 6e 74 72 79 20 77 69 74 68 20 6c 65  he.entry with le
11020 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53  ft-most column S
11030 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65 20 73  2, then in the s
11040 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
11050 65 2c 20 0a 73 61 6d 70 6c 65 20 53 31 20 6d 75  e, .sample S1 mu
11060 73 74 20 68 61 76 65 20 61 20 73 6d 61 6c 6c 65  st have a smalle
11070 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61 6d  r rowid than sam
11080 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e  ple S2.)^..<tcl>
11090 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
110a0 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  4tab {sqlite_sta
110b0 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 34  t4} SQLITE_STAT4
110c0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73  </tcl>.<h3>The s
110d0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
110e0 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73  e</h3>..<p>The s
110f0 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 6f  qlite_stat4 is o
11100 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20  nly created and 
11110 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  is only used if 
11120 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
11130 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed.with [SQLITE_
11140 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 61 6e  ENABLE_STAT4] an
11150 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
11160 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
11170 73 0a 33 2e 38 2e 31 20 28 5b 64 61 74 65 6f 66  s.3.8.1 ([dateof
11180 3a 33 2e 38 2e 31 5d 29 20 6f 72 20 67 72 65 61  :3.8.1]) or grea
11190 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  ter..The sqlite_
111a0 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 6e  stat4 table is n
111b0 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
111c0 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
111d0 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
111e0 20 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e 0a 54   before 3.8.1..T
111f0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
11200 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
11210 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
11220 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20  ation.about the 
11230 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20  distribution of 
11240 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69  keys within an i
11250 6e 64 65 78 20 6f 72 20 74 68 65 20 64 69 73 74  ndex or the dist
11260 72 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65 79 73  ribution of.keys
11270 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20   in the primary 
11280 6b 65 79 20 6f 66 20 61 20 5b 57 49 54 48 4f 55  key of a [WITHOU
11290 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
112a0 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  The query planne
112b0 72 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  r can sometimes 
112c0 75 73 65 20 74 68 65 20 61 64 64 69 74 69 6f 6e  use the addition
112d0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  al information i
112e0 6e 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n.the sqlite_sta
112f0 74 34 20 74 61 62 6c 65 20 74 6f 20 64 65 76 69  t4 table to devi
11300 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61  se better and fa
11310 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72  ster query algor
11320 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68  ithms..^(The sch
11330 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
11340 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73  e_stat4 table is
11350 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
11360 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
11370 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
11380 69 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69 64  ite_stat4(tbl,id
11390 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73  x,nEq,nLt,nDLt,s
113a0 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  ample);.</pre></
113b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
113c0 70 3e 54 68 65 72 65 20 61 72 65 20 74 79 70 69  p>There are typi
113d0 63 61 6c 6c 79 20 62 65 74 77 65 65 6e 20 31 30  cally between 10
113e0 20 74 6f 20 34 30 20 65 6e 74 72 69 65 73 20 69   to 40 entries i
113f0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
11400 74 34 20 74 61 62 6c 65 20 66 6f 72 0a 65 61 63  t4 table for.eac
11410 68 20 69 6e 64 65 78 20 66 6f 72 20 77 68 69 63  h index for whic
11420 68 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  h statistics are
11430 20 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f 77 65   available, howe
11440 76 65 72 20 74 68 65 73 65 20 6c 69 6d 69 74 73  ver these limits
11450 20 61 72 65 0a 6e 6f 74 20 68 61 72 64 20 62 6f   are.not hard bo
11460 75 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e 69 6e  unds..The meanin
11470 67 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  gs of the column
11480 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
11490 73 74 61 74 34 20 74 61 62 6c 65 20 61 72 65 20  stat4 table are 
114a0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65  as follows:..<ce
114b0 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  nter>.<table bor
114c0 64 65 72 3d 22 30 22 20 77 69 64 74 68 3d 22 31  der="0" width="1
114d0 30 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  00%" cellpadding
114e0 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76  ="10">.<tr><td v
114f0 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
11500 6e 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a 3c 2f  n="right">tbl:</
11510 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11520 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 74  e sqlite_stat4.t
11530 62 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  bl column holds 
11540 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
11550 65 20 74 68 61 74 20 6f 77 6e 73 0a 20 20 20 20  e that owns.    
11560 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 74  the index that t
11570 68 65 20 72 6f 77 20 64 65 73 63 72 69 62 65 73  he row describes
11580 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  )^..<tr><td vali
11590 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
115a0 72 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74 64 3e  right">idx:</td>
115b0 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
115c0 71 6c 69 74 65 5f 73 74 61 74 34 2e 69 64 78 20  qlite_stat4.idx 
115d0 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d  column holds nam
115e0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 74  e of the index t
115f0 68 61 74 20 74 68 65 0a 20 20 20 20 72 6f 77 20  hat the.    row 
11600 64 65 73 63 72 69 62 65 73 2c 20 6f 72 20 69 6e  describes, or in
11610 20 74 68 65 20 63 61 73 65 20 6f 66 0a 20 20 20   the case of.   
11620 20 61 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 34   an sqlite_stat4
11630 20 65 6e 74 72 79 20 66 6f 72 20 61 20 5b 57 49   entry for a [WI
11640 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
11650 6c 65 2c 20 74 68 65 0a 20 20 20 20 6e 61 6d 65  le, the.    name
11660 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 74   of the table it
11670 73 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64  self.)^..<tr><td
11680 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
11690 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 61 6d 70  ign="right">samp
116a0 6c 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  le:</td>.    <td
116b0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
116c0 61 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at4.sample colum
116d0 6e 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42 0a 20  n holds a BLOB. 
116e0 20 20 20 69 6e 20 74 68 65 20 5b 72 65 63 6f 72     in the [recor
116f0 64 20 66 6f 72 6d 61 74 5d 20 74 68 61 74 20 65  d format] that e
11700 6e 63 6f 64 65 73 20 74 68 65 20 69 6e 64 65 78  ncodes the index
11710 65 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f  ed columns follo
11720 77 65 64 20 62 79 0a 20 20 20 20 74 68 65 20 72  wed by.    the r
11730 6f 77 69 64 20 66 6f 72 20 61 20 72 6f 77 69 64  owid for a rowid
11740 20 74 61 62 6c 65 20 6f 72 20 62 79 20 74 68 65   table or by the
11750 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11760 70 72 69 6d 61 72 79 20 6b 65 79 20 0a 20 20 20  primary key .   
11770 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52   for a WITHOUT R
11780 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 20 20  OWID table.)^.  
11790 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73    ^(The sqlite_s
117a0 74 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c 4f 42  tat4.sample BLOB
117b0 20 66 6f 72 20 74 68 65 20 57 49 54 48 4f 55 54   for the WITHOUT
117c0 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69 74 73   ROWID table its
117d0 65 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61 69 6e  elf .    contain
117e0 73 20 6a 75 73 74 20 74 68 65 20 63 6f 6c 75 6d  s just the colum
117f0 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  ns of the primar
11800 79 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c 65 74  y key.)^.    Let
11810 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
11820 6f 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64 20 62  olumns encoded b
11830 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  y the sqlite_sta
11840 74 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62 20 62  t4.sample blob b
11850 65 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e  e N..    ^For in
11860 64 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72 64 69  dexes on an ordi
11870 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
11880 2c 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20  , N will be one 
11890 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75  more than the nu
118a0 6d 62 65 72 20 0a 20 20 20 20 6f 66 20 63 6f 6c  mber .    of col
118b0 75 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a 20 20  umns indexed..  
118c0 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f    ^For indexes o
118d0 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
118e0 74 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c 20 62  tables, N will b
118f0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11900 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e 64 65  columns.    inde
11910 78 65 64 20 70 6c 75 73 20 74 68 65 20 6e 75 6d  xed plus the num
11920 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11930 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
11940 79 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20 57 49  y..    ^For a WI
11950 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
11960 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65  e, N will be the
11970 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11980 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 70 72  ns in the.    pr
11990 69 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e  imary key...<tr>
119a0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
119b0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e   align="right">n
119c0 45 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  Eq:</td>.    <td
119d0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
119e0 61 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at4.nEq column h
119f0 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e  olds a list of N
11a00 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 20   integers where 
11a10 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e  .    the K-th in
11a20 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70  teger is the app
11a30 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20  roximate number 
11a40 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
11a50 65 20 69 6e 64 65 78 0a 20 20 20 20 77 68 6f 73  e index.    whos
11a60 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f  e left-most K co
11a70 6c 75 6d 6e 73 20 65 78 61 63 74 6c 79 20 6d 61  lumns exactly ma
11a80 74 63 68 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d  tch the K left-m
11a90 6f 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20  ost columns.    
11aa0 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  of the sample.)^
11ab0 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
11ac0 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11ad0 67 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20  ght">nLt:</td>. 
11ae0 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11af0 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 63 6f  ite_stat4.nLt co
11b00 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73  lumn holds a lis
11b10 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20  t of N integers 
11b20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d  where.    the K-
11b30 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  th integer is th
11b40 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75  e approximate nu
11b50 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
11b60 69 6e 20 74 68 65 0a 20 20 20 20 69 6e 64 65 78  in the.    index
11b70 20 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f   whose K left-mo
11b80 73 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63  st columns are c
11b90 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
11ba0 20 74 68 61 6e 20 74 68 65 20 0a 20 20 20 20 4b   than the .    K
11bb0 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11bc0 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65  ns of the sample
11bd0 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  .)^..<tr><td val
11be0 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
11bf0 22 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74  "right">nDLt:</t
11c00 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
11c10 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44   sqlite_stat4.nD
11c20 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Lt column holds 
11c30 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65  a list of N inte
11c40 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20 74  gers where.    t
11c50 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20  he K-th integer 
11c60 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
11c70 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f 66  te.    number of
11c80 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
11c90 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 64  index that are d
11ca0 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20 66  istinct in the f
11cb0 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61  irst K columns a
11cc0 6e 64 0a 20 20 20 20 77 68 65 72 65 20 74 68 65  nd.    where the
11cd0 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c   left-most K col
11ce0 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74  umns are collect
11cf0 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20  ively less than 
11d00 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 20 20  the left-most.  
11d10 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74    K columns of t
11d20 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c 2f 74  he sample.)^.</t
11d30 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
11d40 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
11d50 74 61 74 34 20 69 73 20 61 20 67 65 6e 65 72 61  tat4 is a genera
11d60 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lization of the 
11d70 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
11d80 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74 65 5f  le.  The.sqlite_
11d90 73 74 61 74 33 20 74 61 62 6c 65 20 70 72 6f 76  stat3 table prov
11da0 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ides information
11db0 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66 74 2d   about the left-
11dc0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  most column of a
11dd0 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61 73 20  n.index whereas 
11de0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
11df0 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73 20   table provides 
11e00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11e10 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66  t all columns.of
11e20 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e   the index...<p>
11e30 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e  ^There can be an
11e40 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65   arbitrary numbe
11e50 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74  r of sqlite_stat
11e60 34 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e  4 entries per in
11e70 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a  dex..The [ANALYZ
11e80 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  E] command will 
11e90 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  typically genera
11ea0 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  te sqlite_stat4 
11eb0 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74  tables.that cont
11ec0 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61  ain between 10 a
11ed0 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68  nd 40 samples th
11ee0 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74  at are distribut
11ef0 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65  ed across.the ke
11f00 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68  y space and with
11f10 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65   large nEq value
11f20 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65  s...<p>^(In a we
11f30 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65  ll-formed sqlite
11f40 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 74 68  _stat4 table, th
11f50 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e  e samples for an
11f60 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d  y single.index m
11f70 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  ust appear in th
11f80 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61  e same order tha
11f90 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20  t they occur in 
11fa0 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20  the index.  .In 
11fb0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
11fc0 65 6e 74 72 79 20 53 31 20 69 73 20 65 61 72 6c  entry S1 is earl
11fd0 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ier in the index
11fe0 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a 65 6e   b-tree than .en
11ff0 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69 6e 20  try S2, then in 
12000 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
12010 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65 20 53   table, sample S
12020 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a 73 6d  1 must have a.sm
12030 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e  aller rowid than
12040 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c   sample S2.)^..<
12050 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
12060 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c 20  rollbackjournal 
12070 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61  {rollback journa
12080 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a  l format}</tcl>.
12090 3c 68 31 3e 54 68 65 20 52 6f 6c 6c 62 61 63 6b  <h1>The Rollback
120a0 20 4a 6f 75 72 6e 61 6c 3c 2f 68 31 3e 0a 0a 3c   Journal</h1>..<
120b0 70 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  p>The rollback j
120c0 6f 75 72 6e 61 6c 20 69 73 20 61 20 66 69 6c 65  ournal is a file
120d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
120e0 20 65 61 63 68 20 53 51 4c 69 74 65 20 64 61 74   each SQLite dat
120f0 61 62 61 73 65 0a 66 69 6c 65 20 74 68 61 74 20  abase.file that 
12100 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
12110 6e 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72  n used to restor
12120 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
12130 69 6c 65 20 74 6f 20 69 74 73 20 69 6e 69 74 69  ile to its initi
12140 61 6c 0a 73 74 61 74 65 20 64 75 72 69 6e 67 20  al.state during 
12150 74 68 65 20 63 6f 75 72 73 65 20 6f 66 20 61 20  the course of a 
12160 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68  transaction..^Th
12170 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12180 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77 61 79  al file is alway
12190 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  s located in the
121a0 20 73 61 6d 65 20 0a 64 69 72 65 63 74 6f 72 79   same .directory
121b0 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
121c0 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68  .file and has th
121d0 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74  e same name as t
121e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
121f0 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73 74   but with the st
12200 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e  ring."<tt>-journ
12210 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65  al</tt>" appende
12220 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f 6e  d.  There can on
12230 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20 72  ly be a single r
12240 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
12250 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12260 61 20 67 69 76 65 20 64 61 74 61 62 61 73 65 20  a give database 
12270 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20  and hence there 
12280 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20  can only be one 
12290 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69 6f  write.transactio
122a0 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20 61  n open against a
122b0 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
122c0 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70   at one time.</p
122d0 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e 73  >..<p>If a trans
122e0 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74 65  action is aborte
122f0 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70 6c  d due to an appl
12300 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20 61  ication crash, a
12310 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73 74  n operating.syst
12320 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20 68  em crash, or a h
12330 61 72 64 77 61 72 65 20 70 6f 77 65 72 20 66 61  ardware power fa
12340 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c 20  ilure or crash, 
12350 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
12360 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69 6e  e may.be left in
12370 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74   an inconsistent
12380 20 73 74 61 74 65 2e 20 20 5e 54 68 65 20 6e 65   state.  ^The ne
12390 78 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20 61  xt time SQLite a
123a0 74 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a  ttempts to open.
123b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
123c0 65 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65 20  e, the presence 
123d0 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  of the rollback 
123e0 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c  journal file wil
123f0 6c 20 62 65 20 0a 64 65 74 65 63 74 65 64 20 61  l be .detected a
12400 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77  nd the journal w
12410 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69 63  ill be automatic
12420 61 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63 6b  ally played back
12430 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a   to restore the.
12440 64 61 74 61 62 61 73 65 20 74 6f 20 69 74 73 20  database to its 
12450 73 74 61 74 65 20 61 74 20 74 68 65 20 73 74 61  state at the sta
12460 72 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70  rt of the incomp
12470 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  lete transaction
12480 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c  .</p>..<p>^A rol
12490 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73  lback journal is
124a0 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64   only considered
124b0 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 20   to be valid if 
124c0 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a 63 6f  it exists and.co
124d0 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 68  ntains a valid h
124e0 65 61 64 65 72 2e 20 20 48 65 6e 63 65 20 61 20  eader.  Hence a 
124f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20  transaction can 
12500 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20  be committed in 
12510 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20 77 61 79  one.of three way
12520 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68  s:.<ol>.<li>^(Th
12530 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12540 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 64  al file can be d
12550 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28  eleted)^,.<li>^(
12560 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
12570 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65  rnal file can be
12580 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 7a 65   truncated to ze
12590 72 6f 20 6c 65 6e 67 74 68 29 5e 2c 20 6f 72 0a  ro length)^, or.
125a0 3c 6c 69 3e 5e 28 54 68 65 20 68 65 61 64 65 72  <li>^(The header
125b0 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   of the rollback
125c0 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65 20   journal can be 
125d0 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68  overwritten with
125e0 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72 20  .invalid header 
125f0 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70 6c  text (for exampl
12600 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e  e, all zeros).)^
12610 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a 5e 54 68 65 73  .</ol>.<p>.^Thes
12620 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
12630 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
12640 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73 70  nsaction corresp
12650 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45 54  ond to the DELET
12660 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e 64  E,.TRUNCATE, and
12670 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e 67   PERSIST setting
12680 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  s, respectively,
12690 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c   of the [journal
126a0 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c  _mode pragma]..<
126b0 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64  /p>...<p>A valid
126c0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
126d0 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  l begins with a 
126e0 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66 6f  header in the fo
126f0 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c  llowing format:<
12700 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
12710 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
12720 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  l Header Format<
12730 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
12740 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
12750 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
12760 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
12770 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
12780 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12790 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20  ign=center>0.   
127a0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
127b0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
127c0 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74     <td>Header st
127d0 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64  ring:  0xd9, 0xd
127e0 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30  5, 0x05, 0xf9, 0
127f0 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c  x20, 0xa1, 0x63,
12800 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76 61   0xd7.<tr><td va
12810 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12820 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 20  enter>8.    <td 
12830 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12840 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
12850 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75 6e  d>The "Page Coun
12860 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72 20  t" - The number 
12870 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
12880 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66 20  next segment of 
12890 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f 75  the .        jou
128a0 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20  rnal, or -1 to. 
128b0 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20         mean all 
128c0 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 65  content to the e
128d0 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 3c  nd of the file.<
128e0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
128f0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
12900 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  2.    <td valign
12910 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12920 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61  r>4.    <td>A ra
12930 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74  ndom nonce for t
12940 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72 3e  he checksum.<tr>
12950 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12960 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20  lign=center>16. 
12970 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12980 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12990 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c  .    <td>Initial
129a0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
129b0 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a 3c  abase in pages.<
129c0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
129d0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
129e0 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
129f0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12a00 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12a10 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f   of a disk secto
12a20 72 20 61 73 73 75 6d 65 64 20 62 79 20 74 68 65  r assumed by the
12a30 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 77 72   process that wr
12a40 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20 20 20  ote this.       
12a50 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74   journal..<tr><t
12a60 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12a70 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20 20  gn=center>24.   
12a80 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12a90 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12aa0 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70     <td>Size of p
12ab0 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f 75  ages in this jou
12ac0 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  rnal..</table>.<
12ad0 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20  /center>..<p>^A 
12ae0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12af0 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65   header is padde
12b00 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74  d with zeros out
12b10 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
12b20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72  a .single sector
12b30 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20   (as defined by 
12b40 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
12b50 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12b60 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65  t 20)..The heade
12b70 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72  r is in a sector
12b80 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68   by itself so th
12b90 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f  at if a power lo
12ba0 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a  ss occurs while.
12bb0 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74  writing the sect
12bc0 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  or, information 
12bd0 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
12be0 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a   header will be.
12bf0 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61  (hopefully) unda
12c00 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  maged.</p>..<p>^
12c10 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  After the header
12c20 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e   and zero paddin
12c30 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f  g are zero or mo
12c40 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e  re page records.
12c50 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63    ^Each.page rec
12c60 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70  ord stores a cop
12c70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  y of the content
12c80 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20   of a page from 
12c90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12ca0 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20  e.before it was 
12cb0 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73  changed.  ^The s
12cc0 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74  ame page may not
12cd0 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61   appear more tha
12ce0 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20  n once.within a 
12cf0 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20  single rollback 
12d00 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c  journal..To roll
12d10 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65  back an incomple
12d20 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
12d30 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65  a process.has me
12d40 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65  rely to read the
12d50 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12d60 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  l from beginning
12d70 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74   to end and.writ
12d80 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e  e pages found in
12d90 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63   the journal bac
12da0 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
12db0 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a  ase file at the.
12dc0 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61  appropriate loca
12dd0 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  tion.</p>..<p>Le
12de0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  t the database p
12df0 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61  age size (the va
12e00 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
12e10 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20  er at offset 24 
12e20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  .in the journal 
12e30 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68  header) be N..Th
12e40 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  en the format of
12e50 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69   a page record i
12e60 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  s as follows:</p
12e70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52  >..<center>.<i>R
12e80 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20  ollback Journal 
12e90 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d  Page Record Form
12ea0 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
12eb0 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
12ec0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
12ed0 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
12ee0 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
12ef0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12f00 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a   align=center>0.
12f10 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
12f20 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12f30 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61  4.    <td>The pa
12f40 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ge number in the
12f50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 3c   database file.<
12f60 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12f70 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12f80 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12f90 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12fa0 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69  >N.    <td>Origi
12fb0 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
12fc0 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f  he page prior to
12fd0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
12fe0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c 74  e transaction.<t
12ff0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13000 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b   align=center>N+
13010 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
13020 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13030 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
13040 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ksum.</table>.</
13050 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54  center>...<p>^(T
13060 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61  he checksum is a
13070 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  n unsigned 32-bi
13080 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74  t integer comput
13090 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
130a0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69  p>..<ol>.<li>Ini
130b0 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63  tialize the chec
130c0 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63  ksum to the chec
130d0 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65  ksum nonce value
130e0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f   found in the.jo
130f0 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20  urnal header at 
13100 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49  offset 12..<li>I
13110 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20  nitialize index 
13120 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77  X to be N-200 (w
13130 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73 69  here N is the si
13140 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze of a database
13150 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a   page.in bytes..
13160 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68  <li>Interpret th
13170 65 20 62 79 74 65 20 61 74 20 6f 66 66 73 65 74  e byte at offset
13180 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65   X into the page
13190 20 61 73 20 61 6e 20 38 2d 62 69 74 20 75 6e 73   as an 8-bit uns
131a0 69 67 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 61  igned integer. a
131b0 6e 64 20 61 64 64 20 74 68 65 20 76 61 6c 75 65  nd add the value
131c0 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65 72   of that integer
131d0 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d   to the checksum
131e0 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 74 20 32  ..<li>Subtract 2
131f0 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49  00 from X..<li>I
13200 66 20 58 20 69 73 20 67 72 65 61 74 65 72 20 74  f X is greater t
13210 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
13220 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f  zero, go back to
13230 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e   step 3..</ol>)^
13240 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
13250 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  m value is used 
13260 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74  to guard against
13270 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74   incomplete writ
13280 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20  es of.a journal 
13290 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c  page record foll
132a0 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61  owing a power fa
132b0 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72  ilure.  A differ
132c0 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65  ent random nonce
132d0 0a 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69  .is used each ti
132e0 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  me a transaction
132f0 20 69 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f   is started in o
13300 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65  rder to minimize
13310 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75   the risk.that u
13320 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73  nwritten sectors
13330 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63 65   might by chance
13340 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72   contain data fr
13350 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  om the same page
13360 0a 74 68 61 74 20 77 61 73 20 61 20 70 61 72 74  .that was a part
13370 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61   of prior journa
13380 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67  ls.  By changing
13390 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65   the nonce for e
133a0 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ach.transaction,
133b0 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64   stale data on d
133c0 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67  isk will still g
133d0 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72  enerate an incor
133e0 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e  rect checksum.an
133f0 64 20 62 65 20 64 65 74 65 63 74 65 64 20 77 69  d be detected wi
13400 74 68 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c  th high probabil
13410 69 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73  ity.  The checks
13420 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73  um only uses a s
13430 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20  parse sample.of 
13440 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f  32-bit words fro
13450 6d 20 74 68 65 20 64 61 74 61 20 72 65 63 6f 72  m the data recor
13460 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  d for performanc
13470 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69  e reasons - desi
13480 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72 69  gn studies .duri
13490 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20  ng the planning 
134a0 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65  phases of SQLite
134b0 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20   3.0.0 showed.a 
134c0 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
134d0 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63  ormance hit in c
134e0 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20  hecksumming the 
134f0 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e  entire page.</p>
13500 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67  ..<p>Let the pag
13510 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74  e count value at
13520 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68 65   offset 8 in the
13530 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
13540 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67  be M..^If M is g
13550 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
13560 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61   then after M pa
13570 67 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a  ge records the j
13580 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20  ournal file.may 
13590 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f  be zero padded o
135a0 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d  ut to the next m
135b0 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73  ultiple of the s
135c0 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61  ector size and a
135d0 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68  nother.journal h
135e0 65 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73  eader may be ins
135f0 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75  erted.  ^All jou
13600 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74  rnal headers wit
13610 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75  hin the same.jou
13620 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69  rnal must contai
13630 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
13640 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  ase page size an
13650 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f  d sector size.</
13660 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20  p>..<p>^If M is 
13670 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61  -1 in the initia
13680 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
13690 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
136a0 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64  r of page record
136b0 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73  s.that follow is
136c0 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d   computed by com
136d0 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20  puting how many 
136e0 70 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c  page records wil
136f0 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61  l fit in.the ava
13700 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20  ilable space of 
13710 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
13720 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
13730 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
13740 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d  fragment walform
13750 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c  at {WAL format}<
13760 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 57 72  /tcl>.<h1>The Wr
13770 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68  ite-Ahead Log</h
13780 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67  1>..<p>Beginning
13790 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e 20 33   with [version 3
137a0 2e 37 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  .7.0] ([dateof:3
137b0 2e 37 2e 30 5d 29 2c 20 0a 53 51 4c 69 74 65 20  .7.0]), .SQLite 
137c0 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20 74  supports a new t
137d0 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72  ransaction.contr
137e0 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c  ol mechanism cal
137f0 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69 74  led "[WAL | writ
13800 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72  e-ahead log]" or
13810 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20   "[WAL]"..^When 
13820 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  a database is in
13830 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63   WAL mode, all c
13840 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68  onnections to th
13850 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  at database must
13860 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20 5e  .use the WAL.  ^
13870 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  A particular dat
13880 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20 65  abase will use e
13890 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b  ither a rollback
138a0 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41   journal.or a WA
138b0 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 20  L, but not both 
138c0 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
138d0 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61 6c  ..^The WAL is al
138e0 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20  ways located in 
138f0 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
13900 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
13910 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20  se.file and has 
13920 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
13930 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13940 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20  le but with the 
13950 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c  string."<tt>-wal
13960 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e  </tt>" appended.
13970 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20 46 69  </p>..<h2>WAL Fi
13980 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a  le Format</h2>..
13990 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63 6f  <p>A WAL file co
139a0 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65 61 64  nsists of a head
139b0 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  er followed by z
139c0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72 61  ero or more "fra
139d0 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d 65  mes"..Each frame
139e0 20 72 65 63 6f 72 64 73 20 74 68 65 20 72 65 76   records the rev
139f0 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  ised content of 
13a00 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66 72  a single page fr
13a10 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  om the.database 
13a20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67  file.  All chang
13a30 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
13a40 73 65 20 61 72 65 20 72 65 63 6f 72 64 65 64 20  se are recorded 
13a50 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d 65  by writing.frame
13a60 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20  s into the WAL. 
13a70 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f   Transactions co
13a80 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61 6d  mmit when a fram
13a90 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 61  e is written tha
13aa0 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d  t.contains a com
13ab0 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20  mit marker.  ^A 
13ac0 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20 61  single WAL can a
13ad0 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73 20  nd usually does 
13ae0 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65  record .multiple
13af0 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20   transactions.  
13b00 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68  Periodically, th
13b10 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
13b20 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65 72   WAL is.transfer
13b30 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  red back into th
13b40 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
13b50 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20  in an operation 
13b60 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b 70  called a."checkp
13b70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oint".</p>..<p>^
13b80 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c  A single WAL fil
13b90 65 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20  e can be reused 
13ba0 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20  multiple times. 
13bb0 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73   ^In other words
13bc0 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66 69  , the.WAL can fi
13bd0 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d 65  ll up with frame
13be0 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63 68  s and then be ch
13bf0 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20 74  eckpointed and t
13c00 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20 63  hen new.frames c
13c10 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  an overwrite the
13c20 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57   old ones.  ^A W
13c30 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73 20  AL always grows 
13c40 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74  from beginning.t
13c50 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
13c60 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f  Checksums and co
13c70 75 6e 74 65 72 73 20 61 74 74 61 63 68 65 64 20  unters attached 
13c80 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61 72  to each frame ar
13c90 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  e.used to determ
13ca0 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65 73  ine which frames
13cb0 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 20   within the WAL 
13cc0 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68  are valid and wh
13cd0 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65 72  ich.are leftover
13ce0 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68 65  s from prior che
13cf0 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  ckpoints.</p>..<
13d00 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61 64  p>^(The WAL head
13d10 65 72 20 69 73 20 33 32 20 62 79 74 65 73 20 69  er is 32 bytes i
13d20 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69  n size and consi
13d30 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  sts of the follo
13d40 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d 65  wing eight.big-e
13d50 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73  ndian 32-bit uns
13d60 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76 61  igned integer va
13d70 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  lues:</p>..<cent
13d80 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65  er>.<i>WAL Heade
13d90 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
13da0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
13db0 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
13dc0 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
13dd0 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
13de0 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
13df0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13e00 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
13e10 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13e20 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69 63  >4.    <td>Magic
13e30 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37 66   number.  0x377f
13e40 30 36 38 32 20 6f 72 20 30 78 33 37 37 66 30 36  0682 or 0x377f06
13e50 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  83.<tr><td valig
13e60 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13e70 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
13e80 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13e90 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20 66  4.    <td>File f
13ea0 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20 20  ormat version.  
13eb0 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30 30  Currently 300700
13ec0 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0..<tr><td valig
13ed0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13ee0 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
13ef0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13f00 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62 61  4.    <td>Databa
13f10 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20 45  se page size.  E
13f20 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72  xample: 1024.<tr
13f30 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13f40 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c  align=center>12<
13f50 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13f60 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13f70 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20   <td>Checkpoint 
13f80 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a  sequence number.
13f90 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13fa0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13fb0 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  16<td valign=top
13fc0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13fd0 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20      <td>Salt-1: 
13fe0 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 69  random integer i
13ff0 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
14000 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a  each checkpoint.
14010 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
14020 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14030 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  20<td valign=top
14040 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
14050 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20      <td>Salt-2: 
14060 61 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64  a different rand
14070 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 61  om number for ea
14080 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74  ch checkpoint.<t
14090 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
140a0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34   align=center>24
140b0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
140c0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
140d0 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31    <td>Checksum-1
140e0 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20  : First part of 
140f0 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68  a checksum on th
14100 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73  e first 24 bytes
14110 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c   of header.<tr><
14120 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14130 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64  ign=center>28<td
14140 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14150 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
14160 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53  td>Checksum-2: S
14170 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74 68  econd part of th
14180 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68  e checksum on th
14190 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73  e first 24 bytes
141a0 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61 62   of header.</tab
141b0 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
141c0 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79  .<p>^Immediately
141d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77   following the w
141e0 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a 65  al-header are ze
141f0 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65  ro or more frame
14200 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20 63  s. ^Each.frame c
14210 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34 2d  onsists of a 24-
14220 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64 65  byte frame-heade
14230 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
14240 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e  <i>page-size</i>
14250 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20 64   bytes.of page d
14260 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d 65  ata. ^(The frame
14270 2d 68 65 61 64 65 72 20 69 73 20 73 69 78 20 62  -header is six b
14280 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
14290 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65 67   unsigned .integ
142a0 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66 6f  er values, as fo
142b0 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e  llows:..<center>
142c0 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48 65  .<i>WAL Frame He
142d0 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
142e0 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
142f0 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
14300 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
14310 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
14320 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
14330 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14340 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
14350 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14360 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61  ter>4.    <td>Pa
14370 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74  ge number.<tr><t
14380 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14390 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76  gn=center>4<td v
143a0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
143b0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
143c0 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f  >For commit reco
143d0 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f 66  rds, the size of
143e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
143f0 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20 20  le in pages.    
14400 20 20 20 20 61 66 74 65 72 20 74 68 65 20 63 6f      after the co
14410 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f  mmit.  For all o
14420 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a 65  ther records, ze
14430 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ro..<tr><td vali
14440 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14450 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
14460 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14470 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
14480 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  1 copied from th
14490 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72  e WAL header.<tr
144a0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
144b0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c  align=center>12<
144c0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
144d0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
144e0 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69   <td>Salt-2 copi
144f0 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20  ed from the WAL 
14500 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
14510 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14520 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c  center>16<td val
14530 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14540 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
14550 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75  hecksum-1:  Cumu
14560 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 20  lative checksum 
14570 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20 69  up through and i
14580 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70 61  ncluding this pa
14590 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ge.<tr><td valig
145a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
145b0 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>20<td valign=
145c0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
145d0 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
145e0 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68  sum-2:  Second h
145f0 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75 6c  alf of the cumul
14600 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a  ative checksum..
14610 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
14620 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61  r>)^..^(<p>A fra
14630 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  me is considered
14640 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e   valid if and on
14650 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ly if the follow
14660 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61  ing conditions a
14670 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f  re.true:</p>..<o
14680 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61  l>.<li><p>The sa
14690 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32 20  lt-1 and salt-2 
146a0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 72  values in the fr
146b0 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63 68  ame-header match
146c0 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76 61 6c  .       salt val
146d0 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d 68  ues in the wal-h
146e0 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  eader</p></li>..
146f0 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b  <li><p>The check
14700 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74 68  sum values in th
14710 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73 20  e final 8 bytes 
14720 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61  of the frame-hea
14730 64 65 72 0a 20 20 20 20 20 20 20 65 78 61 63 74  der.       exact
14740 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63 68 65  ly match the che
14750 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20 63  cksum computed c
14760 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e 20  onsecutively on 
14770 74 68 65 0a 20 20 20 20 20 20 20 66 69 72 73 74  the.       first
14780 20 32 34 20 62 79 74 65 73 20 6f 66 20 74 68 65   24 bytes of the
14790 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20   WAL header and 
147a0 74 68 65 20 66 69 72 73 74 20 38 20 62 79 74 65  the first 8 byte
147b0 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68 65  s and.       the
147c0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20   content of all 
147d0 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70  frames.       up
147e0 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
147f0 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  g the current fr
14800 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c  ame.</p></li></l
14810 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c  i>.</ol>)^..<tcl
14820 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
14830 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73  cksm {WAL checks
14840 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74  um algorithm}</t
14850 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73 75 6d  cl>.<h2>Checksum
14860 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a   Algorithm</h2>.
14870 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
14880 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
14890 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65  interpreting the
148a0 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65   input as.an eve
148b0 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69  n number of unsi
148c0 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65  gned 32-bit inte
148d0 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75  gers: x(0) throu
148e0 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32  gh x(N)..^The 32
148f0 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61 72  -bit integers ar
14900 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20  e big-endian if 
14910 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72  the.magic number
14920 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34 20   in the first 4 
14930 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c  bytes of the WAL
14940 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37 37   header is 0x377
14950 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e  f0683 and.the in
14960 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c  tegers are littl
14970 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 20  e-endian if the 
14980 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20  magic number is 
14990 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65  0x377f0682..^The
149a0 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
149b0 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72   are always stor
149c0 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20  ed in the frame 
149d0 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d  header in a.big-
149e0 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65  endian format re
149f0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63  gardless of whic
14a00 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20  h byte order is 
14a10 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a  used to compute.
14a20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70  the checksum.</p
14a30 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  >..<p>The checks
14a40 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c  um algorithm onl
14a50 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74  y works for cont
14a60 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d  ent which is a m
14a70 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74  ultiple of.8 byt
14a80 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49  es in length.  I
14a90 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
14aa0 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65  f the inputs are
14ab0 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28   x(0) through x(
14ac0 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62  N).then N must b
14ad0 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65  e odd..^(The che
14ae0 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
14af0 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
14b00 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
14b10 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66  > .s0 = s1 = 0.f
14b20 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e  or i from 0 to n
14b30 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30  -1 step 2:.   s0
14b40 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20   += x(i) + s1;. 
14b50 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b    s1 += x(i+1) +
14b60 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65   s0;.endfor.# re
14b70 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73  sult in s0 and s
14b80 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  1.</pre></blockq
14b90 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
14ba0 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20   outputs s0 and 
14bb0 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67  s1 are both weig
14bc0 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75  hted checksums u
14bd0 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77  sing Fibonacci w
14be0 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73  eights.in revers
14bf0 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20  e order.  (^The 
14c00 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63  largest Fibonacc
14c10 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20  i weight occurs 
14c20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  on the first ele
14c30 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75  ment.of the sequ
14c40 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65  ence being summe
14c50 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c  d.)  ^The s1 val
14c60 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d  ue spans all 32-
14c70 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d  bit integer.term
14c80 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  s of the sequenc
14c90 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69  e whereas s0 omi
14ca0 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72  ts the final ter
14cb0 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68 65 63  m.</p>..<h2>Chec
14cc0 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d  kpoint Algorithm
14cd0 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20  </h2>..<p>^On a 
14ce0 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68  [checkpoint], th
14cf0 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20 66  e WAL is first f
14d00 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
14d10 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
14d20 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65 74  ng.the xSync met
14d30 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c 69  hod of the [sqli
14d40 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c  te3_io_methods |
14d50 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61   VFS]. .^Then va
14d60 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  lid content of t
14d70 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73 66  he WAL is transf
14d80 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20 64  erred into the d
14d90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46  atabase file..^F
14da0 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61  inally, the data
14db0 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64 20  base is flushed 
14dc0 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73 74  to persistent st
14dd0 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f 74  orage using anot
14de0 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64  her.xSync method
14df0 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63   call..The xSync
14e00 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72 76   operations serv
14e10 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72 69  e as write barri
14e20 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65 73  ers - all writes
14e30 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72 65   launched.before
14e40 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74 20   the xSync must 
14e50 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65 20  complete before 
14e60 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20 6c  any write that l
14e70 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74 68  aunches after th
14e80 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c  e.xSync begins.<
14e90 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 61  /p>..<p>^After a
14ea0 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65 77   checkpoint, new
14eb0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
14ec0 6f 6e 73 20 6f 76 65 72 77 72 69 74 65 0a 74 68  ons overwrite.th
14ed0 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d 20  e WAL file from 
14ee0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
14ef0 5e 41 74 20 74 68 65 20 73 74 61 72 74 20 6f 66  ^At the start of
14f00 20 74 68 65 20 66 69 72 73 74 20 6e 65 77 0a 77   the first new.w
14f10 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
14f20 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  , the WAL header
14f30 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73   salt-1 value is
14f40 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e 64   incremented.and
14f50 20 74 68 65 20 73 61 6c 74 2d 32 20 76 61 6c 75   the salt-2 valu
14f60 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e  e is randomized.
14f70 20 20 54 68 65 73 65 20 63 68 61 6e 67 65 73 20    These changes 
14f80 74 6f 20 74 68 65 20 73 61 6c 74 73 20 69 6e 76  to the salts inv
14f90 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66 72 61 6d  alidate.old fram
14fa0 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  es in the WAL th
14fb0 61 74 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  at have already 
14fc0 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
14fd0 64 20 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f 76  d but not yet.ov
14fe0 65 72 77 72 69 74 74 65 6e 2c 20 61 6e 64 20 70  erwritten, and p
14ff0 72 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d  revent them from
15000 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e   being checkpoin
15010 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a  ted again.</p>..
15020 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
15030 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65   walread {WAL re
15040 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74  ad algorithm}</t
15050 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65 72 20 41  cl>.<h2>Reader A
15060 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c  lgorithm</h2>..<
15070 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70 61  p>^(To read a pa
15080 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ge from the data
15090 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70 61  base (call it pa
150a0 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61 20  ge number P), a 
150b0 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68 65  reader.first che
150c0 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20 73  cks the WAL to s
150d0 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e  ee if it contain
150e0 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73 6f  s page P.  If so
150f0 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74 20  , then the.last 
15100 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20 6f  valid instance o
15110 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69 73  f page P that is
15120 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
15130 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20 69  ommit frame.or i
15140 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  s a commit frame
15150 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73 20   itself becomes 
15160 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e 29  the value read.)
15170 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a 63  ^  ^If the WAL.c
15180 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65  ontains no copie
15190 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74  s of page P that
151a0 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
151b0 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d 69  hich are a commi
151c0 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20 66  t.frame or are f
151d0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
151e0 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e 20  mit frame, then 
151f0 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20 66  page P is read f
15200 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73 65  rom.the database
15210 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   file.</p>..<p>T
15220 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20 74  o start a read t
15230 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20  ransaction, the 
15240 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20 74  reader records t
15250 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
15260 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d 65  last.valid frame
15270 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54 68   in the WAL.  Th
15280 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74 68  e reader uses th
15290 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78 46  is recorded "mxF
152a0 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72 20  rame" value.for 
152b0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72  all subsequent r
152c0 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20  ead operations. 
152d0 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   New transaction
152e0 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65  s can be appende
152f0 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75  d.to the WAL, bu
15300 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  t as long as the
15310 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74 73   reader uses its
15320 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d   original mxFram
15330 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f  e value.and igno
15340 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79  res subsequently
15350 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e   appended conten
15360 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77 69  t, the reader wi
15370 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73  ll see a .consis
15380 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66  tent snapshot of
15390 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
153a0 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e  om a single poin
153b0 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68  t in time.  .^Th
153c0 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c  is technique all
153d0 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e  ows multiple con
153e0 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73 20  current readers 
153f0 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65 6e  to view differen
15400 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  t .versions of t
15410 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
15420 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73  ent simultaneous
15430 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
15440 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d  reader algorithm
15450 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
15460 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b   paragraphs work
15470 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74  s correctly, but
15480 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65 73   .because frames
15490 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20   for page P can 
154a0 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
154b0 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20  within the WAL, 
154c0 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20 74  the.reader has t
154d0 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72  o scan the entir
154e0 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f  e WAL looking fo
154f0 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e  r page P frames.
15500 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20    If the.WAL is 
15510 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20  large (multiple 
15520 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79 70  megabytes is typ
15530 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20  ical) that scan 
15540 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64  can be slow,.and
15550 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63   read performanc
15560 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20  e suffers.  ^To 
15570 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72  overcome this pr
15580 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74  oblem, a separat
15590 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e.data structure
155a0 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d   called the wal-
155b0 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69  index is maintai
155c0 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65 20  ned to expedite 
155d0 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66  the.search for f
155e0 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69  rames of a parti
155f0 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a  cular page.</p>.
15600 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15610 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74  t walindexformat
15620 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57 41   {wal-index} {WA
15630 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d 3c  L-index format}<
15640 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49 6e  /tcl>.<h2>WAL-In
15650 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a  dex Format</h2>.
15660 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79  .<p>Conceptually
15670 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
15680 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
15690 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72  , though the cur
156a0 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65  rent.VFS impleme
156b0 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d  ntations use a m
156c0 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20  mapped file for 
156d0 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20  the wal-index.  
156e0 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c  ^The mmapped.fil
156f0 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65  e is in the same
15700 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
15710 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
15720 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
15730 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65  .as the database
15740 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68   with a "<tt>-sh
15750 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61  m</tt>" suffix a
15760 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73  ppended.  Becaus
15770 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e.the wal-index 
15780 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
15790 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
157a0 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47  t support .[PRAG
157b0 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  MA journal_mode 
157c0 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  | journal_mode=W
157d0 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72  AL] .on a networ
157e0 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65  k filesystem whe
157f0 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e  n clients are on
15800 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69   different machi
15810 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f  nes..All users o
15820 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  f the database m
15830 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73  ust be able to s
15840 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65  hare the same me
15850 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mory.</p>..<p>Th
15860 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
15870 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f   wal-index is to
15880 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65   answer this que
15890 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f  stion quickly:</
158a0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
158b0 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65  <i>.Given a page
158c0 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20   number P and a 
158d0 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d  maximum WAL fram
158e0 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72  e index M,.retur
158f0 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41  n the largest WA
15900 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f  L frame index fo
15910 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
15920 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c  es not exceed M,
15930 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c   .or return NULL
15940 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
15950 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
15960 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65   P that do not e
15970 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62  xceed M..</i></b
15980 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
15990 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75  he <i>M</i> valu
159a0 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  e in the previou
159b0 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74  s paragraph is t
159c0 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  he "mxFrame" val
159d0 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57  ue.defined in [W
159e0 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68  AL read algorith
159f0 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d  m | section 4.4]
15a00 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74   that is read at
15a10 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61   the start .of a
15a20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
15a30 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74   which defines t
15a40 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65  he maximum frame
15a50 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68   from the WAL th
15a60 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77  at .the reader w
15a70 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  ill use.</p>..<p
15a80 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  >The wal-index i
15a90 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66  s transient.  Af
15aa0 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65  ter a crash, the
15ab0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65   wal-index is.re
15ac0 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
15ad0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41   the original WA
15ae0 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46  L file.  ^The VF
15af0 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f  S is required.to
15b00 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65   either truncate
15b10 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61   or zero the hea
15b20 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  der of the wal-i
15b30 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61  ndex when the la
15b40 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  st.connection to
15b50 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63   it closes.  Bec
15b60 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64  ause the wal-ind
15b70 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c  ex is transient,
15b80 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61   it can.use an a
15b90 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63  rchitecture-spec
15ba0 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20  ific format; it 
15bb0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
15bc0 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f   be cross-platfo
15bd0 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b  rm..Hence, unlik
15be0 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
15bf0 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d  nd WAL file form
15c00 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20  ats which store 
15c10 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69  all values.as bi
15c20 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61  g endian, the wa
15c30 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d  l-index stores m
15c40 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73  ulti-byte values
15c50 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62   in the native.b
15c60 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  yte order of the
15c70 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c   host computer.<
15c80 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  /p>..<p>This doc
15c90 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e  ument is concern
15ca0 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73  ed with the pers
15cb0 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20  istent state of 
15cc0 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
15cd0 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65  e, and since the
15ce0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20   wal-index is a 
15cf0 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74  transient struct
15d00 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20  ure, no further 
15d10 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f  .information abo
15d20 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
15d30 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77   the wal-index w
15d40 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20  ill be provided 
15d50 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64  here..Complete d
15d60 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f  etails on the fo
15d70 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d  rmat of the wal-
15d80 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69  index are contai
15d90 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65  ned within.comme
15da0 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f  nts in SQLite so
15db0 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a     urce code.</p>.